Queue look — различия между версиями
Материал из wiki.standart-n.ru
								
												
				| Aleksnick  (обсуждение | вклад)  (→Нет поля status в таблице g$profiles) | Agk  (обсуждение | вклад)   (→Нет поля status в таблице g$profiles) | ||
| (не показано 28 промежуточных версии 3 участников) | |||
| Строка 1: | Строка 1: | ||
| Инструкция о том, как настроить страницу, которая будет показывать проблемные точки с синхронизацией.<br> | Инструкция о том, как настроить страницу, которая будет показывать проблемные точки с синхронизацией.<br> | ||
| − | Скрипты, которые написаны ниже, нужно выполнять на '''серверной базе'''. | + | Скрипты, которые написаны ниже, нужно выполнять на '''серверной базе'''.   | 
| − | + |  Инструкция по настройке службы очереди '''[[Синхронизация:Очередь загрузки|тут]]'''  | |
| =Создаем процедуру UTPR_EXTRACT_DT_VER= | =Создаем процедуру UTPR_EXTRACT_DT_VER= | ||
| Строка 14: | Строка 14: | ||
| declare variable I integer; | declare variable I integer; | ||
| begin | begin | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
|    ver=null; |    ver=null; | ||
|    i=position('exever=',params); |    i=position('exever=',params); | ||
| Строка 38: | Строка 28: | ||
| GRANT EXECUTE ON PROCEDURE UTPR_EXTRACT_DT_VER TO SYSDBA; | GRANT EXECUTE ON PROCEDURE UTPR_EXTRACT_DT_VER TO SYSDBA; | ||
| </pre> | </pre> | ||
| − | |||
| =Создаем процедуру UTPR_QUEUE_LOOK= | =Создаем процедуру UTPR_QUEUE_LOOK= | ||
| Строка 55: | Строка 44: | ||
|      MSECS integer, |      MSECS integer, | ||
|      ENDFLAG integer, |      ENDFLAG integer, | ||
| − |      ENDTEXT DM_BLOBTEXT) | + |      ENDTEXT DM_BLOBTEXT, | 
| + |     VIP DM_ID_NULL) | ||
| as | as | ||
| + | declare variable SUBKONTO1 varchar(250); | ||
| begin | begin | ||
| − |    for select id, caption||' ('||DBSECUREKEY||')' from g$profiles where status=0 and caption is not null and id not in (0,1) into :profile_id,:sprofile do | + |    for | 
| + |   --select id, caption||' ('||DBSECUREKEY||')', subkonto1 from g$profiles where id = 98 or | ||
| + |   --(status=0 and caption is not null and id not in (0,1)) | ||
| + |   select id, caption, subkonto1, coalesce(vip, 0)  from | ||
| + |      ( select g.id, g.caption||' ('||g.description||')' caption, g.vip, g.subkonto1, | ||
| + |       (select first 1 q.insertdt | ||
| + |       from g$queue q where q.profile_id=g.id  and q.ENDFLAG is not null order by q.id desc ) insertdt | ||
| + |        from g$profiles g where g.id = 98 or | ||
| + |   (g.status=0 and g.caption is not null and g.id not in (0,1))  )   order by insertdt | ||
| + |   into :profile_id,:sprofile, :subkonto1, :vip do | ||
|    begin |    begin | ||
|      cmnt='-'; EXEVER=0;INSERTDT='01.01.2000'; ENDFLAG=0;ENDTEXT=''; |      cmnt='-'; EXEVER=0;INSERTDT='01.01.2000'; ENDFLAG=0;ENDTEXT=''; | ||
|      select first 1 q.insertdt, datediff(millisecond,q.startdt,q.commitdt), endflag, endtext, |      select first 1 q.insertdt, datediff(millisecond,q.startdt,q.commitdt), endflag, endtext, | ||
|        (select ver from utpr_extract_dt_ver(q.params)) |        (select ver from utpr_extract_dt_ver(q.params)) | ||
| − |        from g$queue q where q.profile_id=:profile_id order by id desc | + |        from g$queue q where q.profile_id=:profile_id  and ENDFLAG is not null order by id desc | 
|        into :INSERTDT,:MSECS,:ENDFLAG,:ENDTEXT,:exever; |        into :INSERTDT,:MSECS,:ENDFLAG,:ENDTEXT,:exever; | ||
|      cmnt=''; |      cmnt=''; | ||
| − |      if (: | + |      if ((coalesce(:EXEVER,0) > 0) and (:EXEVER < 1.552)) then | 
|        cmnt=cmnt || 'Версия! '; |        cmnt=cmnt || 'Версия! '; | ||
| Строка 75: | Строка 75: | ||
| --      cmnt=cmnt || 'Сейчас в обработке... Проверь позже. '; | --      cmnt=cmnt || 'Сейчас в обработке... Проверь позже. '; | ||
|      if (endflag=-1) then |      if (endflag=-1) then | ||
| − |        cmnt=cmnt || 'Ошибка загрузки пакета! '; | + |        --begin | 
| + |           cmnt=cmnt || 'Ошибка загрузки пакета! '; | ||
| + |           --select first 1 q.insertdt | ||
| + |           --  from g$queue q where q.profile_id=:profile_id and q.endflag<>-1 order by id desc | ||
| + |           --  into :INSERTDT; | ||
| + |       --end | ||
| + | |||
|      if (endflag=1 and (datediff(hour,insertdt,current_timestamp)>1)) then |      if (endflag=1 and (datediff(hour,insertdt,current_timestamp)>1)) then | ||
|      begin |      begin | ||
| − |        if (datediff( | + |        if (datediff(hour,insertdt,current_timestamp)>24) then | 
| − |          cmnt=cmnt || ' | + |          cmnt=cmnt || 'Не на связи больше суток: ' ||  cast((datediff(hour,insertdt,current_timestamp) / 24) as integer) || ' дн ' || | 
| + |         mod(datediff(hour,insertdt,current_timestamp), 24) || ' ч'; | ||
|        else |        else | ||
| − |          cmnt=cmnt || 'Не на связи больше часа | + |          cmnt=cmnt || 'Не на связи больше часа: ' || datediff(hour,insertdt,current_timestamp) || ' ч'; | 
| + |       cmnt= cmnt || coalesce(' (' || :subkonto1 || ')','') ; | ||
|      end   |      end   | ||
| Строка 99: | Строка 107: | ||
| /* Following GRANT statetements are generated automatically */ | /* Following GRANT statetements are generated automatically */ | ||
| + | GRANT SELECT ON G$QUEUE TO PROCEDURE UTPR_QUEUE_LOOK; | ||
| GRANT SELECT ON G$PROFILES TO PROCEDURE UTPR_QUEUE_LOOK; | GRANT SELECT ON G$PROFILES TO PROCEDURE UTPR_QUEUE_LOOK; | ||
| GRANT EXECUTE ON PROCEDURE UTPR_EXTRACT_DT_VER TO PROCEDURE UTPR_QUEUE_LOOK; | GRANT EXECUTE ON PROCEDURE UTPR_EXTRACT_DT_VER TO PROCEDURE UTPR_QUEUE_LOOK; | ||
| − | |||
| GRANT SELECT ON WAREBASE TO PROCEDURE UTPR_QUEUE_LOOK; | GRANT SELECT ON WAREBASE TO PROCEDURE UTPR_QUEUE_LOOK; | ||
| Строка 108: | Строка 116: | ||
| GRANT EXECUTE ON PROCEDURE UTPR_QUEUE_LOOK TO SYSDBA; | GRANT EXECUTE ON PROCEDURE UTPR_QUEUE_LOOK TO SYSDBA; | ||
| </pre> | </pre> | ||
| − | |||
| =Создаем файл queue_look.php в папке с синхронизацией= | =Создаем файл queue_look.php в папке с синхронизацией= | ||
| Строка 128: | Строка 135: | ||
|    echo "Время сервера: ".$row[0]."<br>"; |    echo "Время сервера: ".$row[0]."<br>"; | ||
| − |    $sqltext="select CMNT,PROFILE_ID,SPROFILE,EXEVER,INSERTDT,MSECS,ENDFLAG,ENDTEXT from UTPR_QUEUE_LOOK"; | + |    $sqltext="select CMNT,PROFILE_ID,SPROFILE,EXEVER,INSERTDT,MSECS,ENDFLAG,ENDTEXT,VIP from UTPR_QUEUE_LOOK"; | 
|    $qList = ibase_query($it, $sqltext); |    $qList = ibase_query($it, $sqltext); | ||
|    if (!$qList) {die(" error ".ibase_errmsg()."(".$sqltext.")");} |    if (!$qList) {die(" error ".ibase_errmsg()."(".$sqltext.")");} | ||
| Строка 134: | Строка 141: | ||
|    echo "<table class=\"table table-bordered table-hover table-striped\"><tr><td>##</td><td>Комментарий</td><td>Профиль</td><td>Версия</td><td>Дата</td><td>Время обработки</td><td>Флаг завершения</td></tr>"; |    echo "<table class=\"table table-bordered table-hover table-striped\"><tr><td>##</td><td>Комментарий</td><td>Профиль</td><td>Версия</td><td>Дата</td><td>Время обработки</td><td>Флаг завершения</td></tr>"; | ||
|    $i=0; |    $i=0; | ||
| − | + |     while ($row = ibase_fetch_row($qList)) | |
|    { |    { | ||
|      $i++; |      $i++; | ||
| − | + |      if ($row[8]==1) { | |
| + |       $class="danger"; | ||
| + |     } else { | ||
| + |       $class=""; | ||
| + |     } | ||
| + |     echo '<tr class="'.$class.'">'; | ||
| 	echo "<td>".$i."</td>"; | 	echo "<td>".$i."</td>"; | ||
| 	echo "<td>".$row[0]."</td>"; | 	echo "<td>".$row[0]."</td>"; | ||
| Строка 152: | Строка 164: | ||
| </pre> | </pre> | ||
| + | =Добавляем данного клиента в настройки= | ||
| + | Дописываем в файл: | ||
| + | <pre> | ||
| + | \\192.168.67.30\web\sinhro\configs\ | ||
| + | </pre> | ||
| + | |||
| + | =Дополнительно= | ||
| + | |||
| + | ==Отображение расхождений в базе== | ||
| + | |||
| + | ===Создаем процедуры в базе=== | ||
| + | Устанавливаем процедуру для сводной базы из статьи [[Дублирование_чека]]. | ||
| + | |||
| + | ===Делаем назначенное задание=== | ||
| + | Каждую ночь запускаем процедуру PR_GET_DIFFERENCE_BY_DOCS. | ||
| + | |||
| + | ===Создаем файл difference_look.php=== | ||
| + |  <nowiki> | ||
| + | <h1>Имя клиента Расхождения</h1> | ||
| + | <?php | ||
| + | //<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> | ||
| + | //проверка кодировки | ||
| + | //http://apur.standart-n.ru/sinhro/engine/queue_look.php | ||
| + | include("declare.php"); | ||
| + |   $g_db = ibase_connect($GLOBALS["DB_DATABASENAME"], $GLOBALS["DB_USER"], $GLOBALS["DB_PASSWD"]) or die(" error fbdb connect ".ibase_errmsg()); | ||
| + |   $it = ibase_trans(IBASE_WRITE + IBASE_COMMITTED + IBASE_REC_VERSION + IBASE_NOWAIT, $g_db) or die(" error start transaction".ibase_errmsg()); | ||
| + | |||
| + |   $sqltext="select first 1 d.dt from difference_by_docs d"; | ||
| + |   $qList = ibase_query($it, $sqltext); | ||
| + |   if (!$qList) {die(" error ".ibase_errmsg()."(".$sqltext.")");} | ||
| + |   $row = ibase_fetch_row($qList); | ||
| + |   echo "Актуальность данных: ".$row[0]."<br>"; | ||
| + | |||
| + |   $sqltext="select d.profile_id, d.sprofile, d.zdate, d.zid, d.rash_nal, d.rash_beznal, d.doc_id, d.status, d.cmt from DIFFERENCE_BY_DOCS d order by d.zdate desc"; | ||
| + |   $qList = ibase_query($it, $sqltext); | ||
| + |   if (!$qList) {die(" error ".ibase_errmsg()."(".$sqltext.")");} | ||
| + |   echo "<table class=\"table table-bordered table-hover table-striped\"><tr><td>#</td><td>№</td><td>Профиль</td><td>Дата Z</td><td>№ Z</td><td>Расх. нал.</td><td>Расх. б/нал.</td><td>DOC_ID</td><td>Статус</td><td>Комментарий</td></tr>"; | ||
| + |   $i=0; | ||
| + |   while ($row = ibase_fetch_row($qList)) | ||
| + |   { | ||
| + |     $i++; | ||
| + |     echo "<tr>"; | ||
| + | 	echo "<td>".$i."</td>"; | ||
| + | 	echo "<td>".$row[0]."</td>"; | ||
| + | 	echo "<td>".$row[1]."</td>"; | ||
| + | 	echo "<td>".$row[2]."</td>"; | ||
| + | 	echo "<td>".$row[3]."</td>"; | ||
| + | 	echo "<td>".$row[4]."</td>"; | ||
| + | 	echo "<td>".$row[5]."</td>"; | ||
| + | 	echo "<td>".$row[6]."</td>"; | ||
| + | 	echo "<td>".$row[7]."</td>"; | ||
| + | 	echo "<td>".$row[8]."</td>"; | ||
| + | 	echo "</tr>"; | ||
| + |   } | ||
| + |   echo "</table>"; | ||
| + | ?> | ||
| + | |||
| + | </nowiki> | ||
| + | |||
| + | =Правим configs на нашем сервере= | ||
| + | <pre> | ||
| + |  файл \\192.168.67.30\web\sinhro\configs\clients.ini по аналогии | ||
| + |  ждем 3 минуты, чтобы кэш обновился, и проверяем | ||
| + | </pre> | ||
| =Возможные проблемы= | =Возможные проблемы= | ||
| − | ==Нет  | + | ==Нет полей в таблице g$profiles== | 
| − | Тогда нужно добавить  | + | Тогда нужно добавить эти поля в этой базе и отправить всем по g$tasks | 
| <pre> | <pre> | ||
| − | ALTER TABLE G$PROFILES | + | ALTER TABLE G$PROFILES ADD STATUS DM_STATUS; | 
| − | ADD STATUS DM_STATUS | + | ALTER TABLE G$PROFILES ADD SUBKONTO1 DM_TEXT; | 
| + | ALTER TABLE G$PROFILES ADD VIP DM_ID_NULL; | ||
| + | |||
| </pre> | </pre> | ||
| <pre> | <pre> | ||
| − | update g$profiles set status=0 | + | --update g$profiles set status=0 | 
| + | </pre> | ||
| + | |||
| + | ==Нет таблицы warebase== | ||
| + | |||
| + | Либо меняем в процедуре '''UTPR_QUEUE_LOOK''' warebase на аналог данной таблицы, либо убираем упоминания о ней. | ||
| + | |||
| + | |||
| + | ==Таблица g$queue пустая или отсутствует== | ||
| + | |||
| + | В процедуре '''UTPR_QUEUE_LOOK''' меняем | ||
| + | |||
| + | <pre> | ||
| + | select first 1 q.insertdt, datediff(millisecond,q.startdt,q.commitdt), endflag, endtext, | ||
| + |       (select ver from utpr_extract_dt_ver(q.params)) | ||
| + |       from g$queue q where q.profile_id=:profile_id order by id desc | ||
| + |       into :INSERTDT,:MSECS,:ENDFLAG,:ENDTEXT,:exever; | ||
| + | </pre> | ||
| + | |||
| + | на  | ||
| + | |||
| + | <pre> | ||
| + | select first 1 d.insertdt, 1000, 1, '', 100 | ||
| + |       from docs d where d.g$profile_id=:profile_id order by d.insertdt desc | ||
| + |       into :INSERTDT,:MSECS,:ENDFLAG,:ENDTEXT,:exever; | ||
| </pre> | </pre> | ||
Текущая версия на 17:15, 1 сентября 2017
Инструкция о том, как настроить страницу, которая будет показывать проблемные точки с синхронизацией.
Скрипты, которые написаны ниже, нужно выполнять на серверной базе. 
Инструкция по настройке службы очереди тут
Содержание
Создаем процедуру UTPR_EXTRACT_DT_VER
SET TERM ^ ;
create or alter procedure UTPR_EXTRACT_DT_VER (
    PARAMS DM_TEXT1024)
returns (
    VER DM_TEXT)
as
declare variable I integer;
begin
  ver=null;
  i=position('exever=',params);
  if (i=0) then exit;
  ver=substring(params from i+7 for position(ascii_char(13)||ascii_char(10),params,i+8)-i-7);
  suspend;
end^
SET TERM ; ^
/* Existing privileges on this procedure */
GRANT EXECUTE ON PROCEDURE UTPR_EXTRACT_DT_VER TO SYSDBA;
Создаем процедуру UTPR_QUEUE_LOOK
SET TERM ^ ;
create or alter procedure UTPR_QUEUE_LOOK (
    VERB_ALL integer = 0)
returns (
    CMNT DM_TEXT,
    PROFILE_ID DM_ID,
    SPROFILE DM_TEXT,
    EXEVER DM_DOUBLE,
    INSERTDT DM_DATETIME,
    MSECS integer,
    ENDFLAG integer,
    ENDTEXT DM_BLOBTEXT,
    VIP DM_ID_NULL)
as
declare variable SUBKONTO1 varchar(250);
begin
  for
  --select id, caption||' ('||DBSECUREKEY||')', subkonto1 from g$profiles where id = 98 or
  --(status=0 and caption is not null and id not in (0,1))
  select id, caption, subkonto1, coalesce(vip, 0)  from
     ( select g.id, g.caption||' ('||g.description||')' caption, g.vip, g.subkonto1,
      (select first 1 q.insertdt
      from g$queue q where q.profile_id=g.id  and q.ENDFLAG is not null order by q.id desc ) insertdt
       from g$profiles g where g.id = 98 or
  (g.status=0 and g.caption is not null and g.id not in (0,1))  )   order by insertdt
  into :profile_id,:sprofile, :subkonto1, :vip do
  begin
    cmnt='-'; EXEVER=0;INSERTDT='01.01.2000'; ENDFLAG=0;ENDTEXT='';
    select first 1 q.insertdt, datediff(millisecond,q.startdt,q.commitdt), endflag, endtext,
      (select ver from utpr_extract_dt_ver(q.params))
      from g$queue q where q.profile_id=:profile_id  and ENDFLAG is not null order by id desc
      into :INSERTDT,:MSECS,:ENDFLAG,:ENDTEXT,:exever;
    cmnt='';
    if ((coalesce(:EXEVER,0) > 0) and (:EXEVER < 1.552)) then
      cmnt=cmnt || 'Версия! ';
    if (insertdt is null) then
      cmnt=cmnt || 'Нет входящих пакетов!! ';
--    if ((endflag is null) and (insertdt is not null)) then
--      cmnt=cmnt || 'Сейчас в обработке... Проверь позже. ';
    if (endflag=-1) then
      --begin
          cmnt=cmnt || 'Ошибка загрузки пакета! ';
          --select first 1 q.insertdt
          --  from g$queue q where q.profile_id=:profile_id and q.endflag<>-1 order by id desc
          --  into :INSERTDT;
      --end
    if (endflag=1 and (datediff(hour,insertdt,current_timestamp)>1)) then
    begin
      if (datediff(hour,insertdt,current_timestamp)>24) then
        cmnt=cmnt || 'Не на связи больше суток: ' ||  cast((datediff(hour,insertdt,current_timestamp) / 24) as integer) || ' дн ' ||
        mod(datediff(hour,insertdt,current_timestamp), 24) || ' ч';
      else
        cmnt=cmnt || 'Не на связи больше часа: ' || datediff(hour,insertdt,current_timestamp) || ' ч';
      cmnt= cmnt || coalesce(' (' || :subkonto1 || ')','') ;
    end 
--cf    if ((select count(1) from warebase where sname='' and g$profile_id=:profile_id)>=1) then
    if (exists(select first 1 part_id from warebase where sname='' and g$profile_id=:profile_id)) then
      cmnt=cmnt || 'Есть пустые наименования ';
    if ((VERB_ALL=1) or (cmnt<>'')) then
      suspend;
  end 
end^
SET TERM ; ^
COMMENT ON PARAMETER UTPR_QUEUE_LOOK.VERB_ALL IS
'1: выводить все, а не только проблемные';
/* Following GRANT statetements are generated automatically */
GRANT SELECT ON G$QUEUE TO PROCEDURE UTPR_QUEUE_LOOK;
GRANT SELECT ON G$PROFILES TO PROCEDURE UTPR_QUEUE_LOOK;
GRANT EXECUTE ON PROCEDURE UTPR_EXTRACT_DT_VER TO PROCEDURE UTPR_QUEUE_LOOK;
GRANT SELECT ON WAREBASE TO PROCEDURE UTPR_QUEUE_LOOK;
/* Existing privileges on this procedure */
GRANT EXECUTE ON PROCEDURE UTPR_QUEUE_LOOK TO SYSDBA;
Создаем файл queue_look.php в папке с синхронизацией
<h1>Имя клиента</h1>
<?php
//<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
//проверка кодировки
//http://apur.standart-n.ru/sinhro/engine/queue_look.php
include("declare.php");
  $g_db = ibase_connect($GLOBALS["DB_DATABASENAME"], $GLOBALS["DB_USER"], $GLOBALS["DB_PASSWD"]) or die(" error fbdb connect ".ibase_errmsg());
  $it = ibase_trans(IBASE_WRITE + IBASE_COMMITTED + IBASE_REC_VERSION + IBASE_NOWAIT, $g_db) or die(" error start transaction".ibase_errmsg());
  $sqltext="select current_timestamp from rdb\$database";
  $qList = ibase_query($it, $sqltext);
  if (!$qList) {die(" error ".ibase_errmsg()."(".$sqltext.")");}
  $row = ibase_fetch_row($qList);
  echo "Время сервера: ".$row[0]."<br>";
  
  $sqltext="select CMNT,PROFILE_ID,SPROFILE,EXEVER,INSERTDT,MSECS,ENDFLAG,ENDTEXT,VIP from UTPR_QUEUE_LOOK";
  $qList = ibase_query($it, $sqltext);
  if (!$qList) {die(" error ".ibase_errmsg()."(".$sqltext.")");}
//  echo "<table><tr><td>##</td><td>Комментарий</td><td>Профиль</td><td>Версия</td><td>Дата</td><td>Время обработки</td><td>Флаг завершения</td><td>Техт ответа</td></tr>";
  echo "<table class=\"table table-bordered table-hover table-striped\"><tr><td>##</td><td>Комментарий</td><td>Профиль</td><td>Версия</td><td>Дата</td><td>Время обработки</td><td>Флаг завершения</td></tr>";
  $i=0;
    while ($row = ibase_fetch_row($qList))
  {
    $i++;
    if ($row[8]==1) {
      $class="danger";
    } else {
      $class="";
    }
    echo '<tr class="'.$class.'">';
	echo "<td>".$i."</td>";
	echo "<td>".$row[0]."</td>";
	echo "<td>".$row[2]." /".$row[1]."</td>";
	echo "<td>".$row[3]."</td>";
	echo "<td>".$row[4]."</td>";
	echo "<td>".$row[5]."</td>";
	echo "<td>".$row[6]."</td>";
//	echo "<td>".$row[7]."</td>";
	echo "</tr>";
  }
  echo "</table>";
?>
Добавляем данного клиента в настройки
Дописываем в файл:
\\192.168.67.30\web\sinhro\configs\
Дополнительно
Отображение расхождений в базе
Создаем процедуры в базе
Устанавливаем процедуру для сводной базы из статьи Дублирование_чека.
Делаем назначенное задание
Каждую ночь запускаем процедуру PR_GET_DIFFERENCE_BY_DOCS.
Создаем файл difference_look.php
<h1>Имя клиента Расхождения</h1>
<?php
//<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
//проверка кодировки
//http://apur.standart-n.ru/sinhro/engine/queue_look.php
include("declare.php");
  $g_db = ibase_connect($GLOBALS["DB_DATABASENAME"], $GLOBALS["DB_USER"], $GLOBALS["DB_PASSWD"]) or die(" error fbdb connect ".ibase_errmsg());
  $it = ibase_trans(IBASE_WRITE + IBASE_COMMITTED + IBASE_REC_VERSION + IBASE_NOWAIT, $g_db) or die(" error start transaction".ibase_errmsg());
  $sqltext="select first 1 d.dt from difference_by_docs d";
  $qList = ibase_query($it, $sqltext);
  if (!$qList) {die(" error ".ibase_errmsg()."(".$sqltext.")");}
  $row = ibase_fetch_row($qList);
  echo "Актуальность данных: ".$row[0]."<br>";
  
  $sqltext="select d.profile_id, d.sprofile, d.zdate, d.zid, d.rash_nal, d.rash_beznal, d.doc_id, d.status, d.cmt from DIFFERENCE_BY_DOCS d order by d.zdate desc";
  $qList = ibase_query($it, $sqltext);
  if (!$qList) {die(" error ".ibase_errmsg()."(".$sqltext.")");}
  echo "<table class=\"table table-bordered table-hover table-striped\"><tr><td>#</td><td>№</td><td>Профиль</td><td>Дата Z</td><td>№ Z</td><td>Расх. нал.</td><td>Расх. б/нал.</td><td>DOC_ID</td><td>Статус</td><td>Комментарий</td></tr>";
  $i=0;
  while ($row = ibase_fetch_row($qList))
  {
    $i++;
    echo "<tr>";
	echo "<td>".$i."</td>";
	echo "<td>".$row[0]."</td>";
	echo "<td>".$row[1]."</td>";
	echo "<td>".$row[2]."</td>";
	echo "<td>".$row[3]."</td>";
	echo "<td>".$row[4]."</td>";
	echo "<td>".$row[5]."</td>";
	echo "<td>".$row[6]."</td>";
	echo "<td>".$row[7]."</td>";
	echo "<td>".$row[8]."</td>";
	echo "</tr>";
  }
  echo "</table>";
?>
Правим configs на нашем сервере
файл \\192.168.67.30\web\sinhro\configs\clients.ini по аналогии ждем 3 минуты, чтобы кэш обновился, и проверяем
Возможные проблемы
Нет полей в таблице g$profiles
Тогда нужно добавить эти поля в этой базе и отправить всем по g$tasks
ALTER TABLE G$PROFILES ADD STATUS DM_STATUS; ALTER TABLE G$PROFILES ADD SUBKONTO1 DM_TEXT; ALTER TABLE G$PROFILES ADD VIP DM_ID_NULL;
--update g$profiles set status=0
Нет таблицы warebase
Либо меняем в процедуре UTPR_QUEUE_LOOK warebase на аналог данной таблицы, либо убираем упоминания о ней.
Таблица g$queue пустая или отсутствует
В процедуре UTPR_QUEUE_LOOK меняем
select first 1 q.insertdt, datediff(millisecond,q.startdt,q.commitdt), endflag, endtext,
      (select ver from utpr_extract_dt_ver(q.params))
      from g$queue q where q.profile_id=:profile_id order by id desc
      into :INSERTDT,:MSECS,:ENDFLAG,:ENDTEXT,:exever;
на
select first 1 d.insertdt, 1000, 1, '', 100
      from docs d where d.g$profile_id=:profile_id order by d.insertdt desc
      into :INSERTDT,:MSECS,:ENDFLAG,:ENDTEXT,:exever;
