CftClub.ru
Клуб специалистов ЦФТ-Банк

Обновление справочников БИК автоматом
На страницу Пред.  1, 2, 3
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
prog
Эксперт


Вступление в Клуб: 03.03.2008
СообщениеЧт Авг 30, 2012 13:30    Ответить с цитатой
Полезность: Нет оценки
о чем и речь. Когда операция запускается навигатором, то файлик переносится механизмом специальным. Когда операция дергается джобом, то нужно перетащить файлы на сервер используя другие способы. Например, приемопередатчиком.
Pauls
Участник со стажем


Вступление в Клуб: 16.11.2011
СообщениеЧт Авг 30, 2012 13:37    Ответить с цитатой
Полезность: Нет оценки
Я думал, что для начала достаточно будет:
1. Переместить файлы себе на рабочую станцию.
2. Изменить процедуру загрузки
3. Настроить работу процедуры в режиме job'а
4. Протестировать работу
Далее, после по итогам результатов тестирования, настроить приемо-передатчик для работы с файлами и изменить в коде пусть до ресурса откуда в дальнейшем будут браться файлы для загрузки?
Может я что то не так понимаю? Поправьте меня, пожалуйста, если я где то заблуждаюсь.
prog
Эксперт


Вступление в Клуб: 03.03.2008
СообщениеЧт Авг 30, 2012 13:58    Ответить с цитатой
Полезность: Нет оценки
вроде все верно
Pauls
Участник со стажем


Вступление в Клуб: 16.11.2011
СообщениеЧт Авг 30, 2012 14:06    Ответить с цитатой
Полезность: Нет оценки
Да, я читал о типе file$load. Дело в том, что у нас в ИБСО данный механизм реализован, т.е. загрузка БИКов в режиме job, а вот в РБО - это моя инициатива. Делаю по аналогии с ИБСО-шным вариантом, т.е. код практически копирую, но возникает ошибка, но вот где...

ServerDir varchar2(100):=[SYSTEM_PARAMS]::[GET]('PATH',null);
ImpExp [FILE$LOAD];
F_MESS [FILE$LOAD];

Далее, в теле идет инициализация

ImpExp.[SRC_TYPE]:=null;
ImpExp.[DST_TYPE]:=true;
ImpExp.[DST_PATH]:=ServerDir || '/BANKS/SPR_BASE';
ImpExp.[DST_DELETE]:=True;

F_MESS.[DST_TYPE]:=Null;
F_MESS.[SRC_TYPE]:=true;
F_MESS.[SRC_PATH]:=ServerDir || '\BANKS\';
F_MESS.[SRC_NAME]:='LOG_LOAD_BANK.PRT';
F_MESS.[SRC_DELETE]:=False;

и далее вызов другой процедуры импорта

ImpExp.[DST_NAME]:='PZN.DBF';
[BANK_TYPES]::[IMPORT] (ImpExp, F_MESS, true);


Работает
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеЧт Авг 30, 2012 14:53    Ответить с цитатой
Полезность: Нет оценки
Pauls пишет:
Да, сделать так, что процедура запускалась джобом. А что значит "перемещать файлики на сервер..." ? Физически брать набор файлов из одной директории, например, одной рабочей станции и перемещать их в каталог на сервер на котором крутиться БД или что то иное? Опыта работы с ЦФТ не так много, по этому и трудности.
Когда запускаю вручную дистрибутивную операцию FULL_REFRESHING, то подымается форма в которой все файлы *.DBF и их место нахождения корректное. Стоит только перенести код инициализации параметров из "Проверка" в "Тело" - сразу возникает описанная проблема.

Вся фишка в том, что файлы, при работе ручной операции, копируются при отработки секции валидации. Как вариант, на сервер можно доставлять файлы приемопередатчиком, а джобу указать путь к файлам на сервере и поручить только обработку этих файлов. По другому просто не получится.
_________________
всегда есть как минимум 2 выхода
Pauls
Участник со стажем


Вступление в Клуб: 16.11.2011
СообщениеЧт Авг 30, 2012 16:03    Ответить с цитатой
Полезность: Нет оценки
т.е. если мы все контролы данного типа (file$load) с формы переносим в тело, то файты не копируются на сервер т.к. не отрабатывает секция "Проверка"? Для этого и нужен приемо-передатчик?
Мне сам смысл не понятен - для чего надо файлы копировать на сервер? Я не могу тупо указать процедуре что бы брала DBF у меня с диска C:\DAT\ и открывала их с помощью dbf.oper(....)?
В итоге, друзья, подскажите, какой ряд действий я должен выполнить для успешной реализации моей задумки?
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеЧт Авг 30, 2012 16:15    Ответить с цитатой
Полезность: Нет оценки
Pauls пишет:
т.е. если мы все контролы данного типа (file$load) с формы переносим в тело, то файты не копируются на сервер т.к. не отрабатывает секция "Проверка"? Для этого и нужен приемо-передатчик?
Мне сам смысл не понятен - для чего надо файлы копировать на сервер? Я не могу тупо указать процедуре что бы брала DBF у меня с диска C:\DAT\ и открывала их с помощью dbf.oper(....)?
В итоге, друзья, подскажите, какой ряд действий я должен выполнить для успешной реализации моей задумки?

Потому что джоб работает не у вас на компьютера, а на сервере и работает ТОЛЬКО с дистками сервера. Он понятия не имеет, что есть Ваш локальный диск "C". При условии, что Вы его не примапили к себверу БД.
_________________
всегда есть как минимум 2 выхода


Последний раз редактировалось: Alexsey (Чт Авг 30, 2012 16:16), всего редактировалось 2 раз(а)
prog
Эксперт


Вступление в Клуб: 03.03.2008
СообщениеЧт Авг 30, 2012 16:16    Ответить с цитатой
Полезность: Нет оценки
Pauls пишет:

Мне сам смысл не понятен - для чего надо файлы копировать на сервер?


Увы, нет. Так как работать с файлами (разбирать их создавать) можно лишь предварительно скопировав их на сервер).
Хотя, в принципе, можно и на клиенте но только через VBScript.
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеЧт Авг 30, 2012 16:17    Ответить с цитатой
Полезность: Нет оценки
prog пишет:
Увы, нет. Так как работать с файлами (разбирать их создавать) можно лишь предварительно скопировав их на сервер).
Хотя, в принципе, можно и на клиенте но только через VBScript.

Вся беда в том, что джобы не работают с VBScript Very Happy
_________________
всегда есть как минимум 2 выхода
devor
Профи


Вступление в Клуб: 13.02.2012
СообщениеПт Авг 31, 2012 06:12    Ответить с цитатой
Полезность: 1
Alexsey пишет:
prog пишет:
Увы, нет. Так как работать с файлами (разбирать их создавать) можно лишь предварительно скопировав их на сервер).
Хотя, в принципе, можно и на клиенте но только через VBScript.

Вся беда в том, что джобы не работают с VBScript Very Happy

Работают. Им в этом помогают операции типа "Отчёт Visual Basic Script", работающие через Сервер Отчетов (он выступает в роли клиента).
Кстати, такого типа операции можно использовать не только для формирования отчетов. В качестве примера можно посмотреть операцию ::[MAIL_JOB].[SEND_MAIL]

Системные требования есть в доке:
Цитата:

Работа с отчётами Visual Basic Script поддерживается, начиная с 330 версии АРМа "Администратор словаря данных", 112 версии АРМа "ЦФТ – Навигатор" и ТЯ версии не ниже 7.1.0.3. Выполнение отчётов Visual Basic Script возможно только через Сервер Отчётов, начиная с Сервера Отчётов версии 1.3.6.0.
Pauls
Участник со стажем


Вступление в Клуб: 16.11.2011
СообщениеПт Авг 31, 2012 07:30    Ответить с цитатой
Полезность: Нет оценки
Коллеги, подскажите, пожалуйста, как все таки реализовать данный механизм? Может у кого есть пример кода или хотя бы обьяснит мне алгоритм работы что бы я понял суть.
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеПт Авг 31, 2012 08:16    Ответить с цитатой
Полезность: Нет оценки
Для решения этого вопроса, мы примапили обычную виндовую сетевую папку к серверу БД.

В настройках путей справочника (PATH_BIC) у нас сейчас прописано: sprav/BIC/

А операция загрузки выгледит след. образом (перенёс все из блока проверки в тело) и запускается ночью по джобу:
Код:

   pragma include ([RUNTIME]::[MACRO_LIB]);
   
Begin
-->>
ServerDir :=[SYSTEM_PARAMS]::[GET]('PATH',null);
ClientDir :=nvl([SYSTEM_PARAMS]::[GET]('PATH_BIC',null),'C:');
P_DIR:=[SYSTEM_PARAMS]::[GET]('PATH_BIC',null); -- 'sprav/BIC/';

   P_OURBRANCH = P_OURBANK := false;
   P_CORR_REL := ::[TRC].[GET_FLAG]('CORR_REL_CONTROL');
   If substr(P_DIR,-1,1)!='/' then
      P_DIR:=P_DIR||'/';
   End if;
/*
   if ::[FP_TUNE].[LIB].get_bool_value('MCI_MOSCOW', null, '0') then
      subdir:='SPR_BASE\';
   end if;*/

--   debug_pipe ('ДИР2='||ClientDir,0);

   F_MESS.[DST_PATH]:=ClientDir;
--   ClientDir:=ClientDir||subdir;

--   debug_pipe ('ДИР3='||ClientDir,0);

   F_PZN.[SRC_TYPE]:=false;
--   F_PZN.[SRC_PATH]:=ClientDir;
   F_PZN.[SRC_NAME]:=P_DIR||'PZN.DBF';

   F_PZN.[DST_TYPE]:=true;
   F_PZN.[DST_PATH]:=ServerDir;
   F_PZN.[DST_NAME]:=F_PZN.[SRC_NAME];
   F_PZN.[DST_DELETE]:=true;
----------------------------
   F_REAL.[SRC_TYPE]:=false;
--   F_REAL.[SRC_PATH]:=ClientDir;
   F_REAL.[SRC_NAME]:=P_DIR||'REAL.DBF';

   F_REAL.[DST_TYPE]:=true;
   F_REAL.[DST_PATH]:=ServerDir;
   F_REAL.[DST_NAME]:=F_REAL.[SRC_NAME];
   F_REAL.[DST_DELETE]:=true;
----------------------------
   F_SEEK.[SRC_TYPE]:=false;
--   F_SEEK.[SRC_PATH]:=ClientDir;
   F_SEEK.[SRC_NAME]:=P_DIR||'BNKSEEK.DBF';

   F_SEEK.[DST_TYPE]:=true;
   F_SEEK.[DST_PATH]:=ServerDir;
   F_SEEK.[DST_NAME]:=F_SEEK.[SRC_NAME];
   F_SEEK.[DST_DELETE]:=true;
----------------------------
   F_DEL.[SRC_TYPE]:=false;
--   F_DEL.[SRC_PATH]:=ClientDir;
   F_DEL.[SRC_NAME]:=P_DIR||'BNKDEL.DBF';

   F_DEL.[DST_TYPE]:=true;
   F_DEL.[DST_PATH]:=ServerDir;
   F_DEL.[DST_NAME]:=F_DEL.[SRC_NAME];
   F_DEL.[DST_DELETE]:=true;
----------------------------
   F_RAYON.[SRC_TYPE]:=false;
--   F_RAYON.[SRC_PATH]:=ClientDir;
   F_RAYON.[SRC_NAME]:=P_DIR||'RAYON.DBF';

   F_RAYON.[DST_TYPE]:=true;
   F_RAYON.[DST_PATH]:=ServerDir;
   F_RAYON.[DST_NAME]:=F_RAYON.[SRC_NAME];
   F_RAYON.[DST_DELETE]:=true;
----------------------------
   F_MESS.[SRC_TYPE]:=true;
   F_MESS.[SRC_PATH]:=ServerDir;
   F_MESS.[SRC_NAME]:=P_DIR||'LOG/'||to_char(sysdate,'YYYYMMDD')||'.PRT';
   F_MESS.[SRC_DELETE]:=true;

--   debug_pipe ('ДИР4='||ClientDir,0);

   F_MESS.[DST_TYPE]:=false;
-- см. выше!   F_MESS.[DST_PATH]:=ClientDir;
   F_MESS.[DST_NAME]:=F_MESS.[SRC_NAME];

   if ::[FP_TUNE].[LIB].get_bool_value('KEYBASEX', null, 0) then
      P_KEYBASEB.[SRC_TYPE]:=false;
--      P_KEYBASEB.[SRC_PATH]:=ClientDir;
      P_KEYBASEB.[SRC_NAME]:=P_DIR||'KEYBASEB.DBF';
         
      P_KEYBASEB.[DST_TYPE]:=true;
      P_KEYBASEB.[DST_PATH]:=ServerDir;
      P_KEYBASEB.[DST_NAME]:=P_KEYBASEB.[SRC_NAME];
      P_KEYBASEB.[DST_DELETE]:=true;
   end if;
--   debug_pipe ('ДИР5='||ClientDir,0);   
   if ::[FP_TUNE].[LIB].get_bool_value('KEYBASEF', null, 0) then
      P_KEYBASEF.[SRC_TYPE]:=false;
--      P_KEYBASEF.[SRC_PATH]:=ClientDir;
      P_KEYBASEF.[SRC_NAME]:=P_DIR||'KEYBASEF.DBF';
         
      P_KEYBASEF.[DST_TYPE]:=true;
      P_KEYBASEF.[DST_PATH]:=ServerDir;
      P_KEYBASEF.[DST_NAME]:=P_KEYBASEF.[SRC_NAME];
      P_KEYBASEF.[DST_DELETE]:=true;
   end if;
--<<

   Debug_pipe('     Полное обновление справочника банков России',0);
   debug_pipe ('P_DIR3='||P_DIR,0);
--   Debug_pipe('ClientDir='||ClientDir,0);

--   Debug_pipe('DST_TYPE='||F_SEEK.[DST_TYPE],0);
   [CL_BANK_N] ::[IMPORT_RUS_BANKS].cities.delete;
   [BANK_TYPES]::[IMPORT]          (F_PZN,   F_MESS, true);
   [STATE_BANK]::[IMPORT]          (F_REAL,  F_MESS, false);
   [CL_BANK_N] ::[IMPORT_RUS_BANKS](F_SEEK,  F_MESS, false, true, P_OURBANK, P_OURBRANCH);
   [CL_BANK_N] ::[IMPORT_RUS_BANKS](F_DEL,   F_MESS, false, true, P_OURBANK, P_OURBRANCH);
   [CL_BANK_N] ::[IMP_RAYONS]      (F_RAYON, F_MESS, false);
   
   if ::[FP_TUNE].[LIB].get_bool_value('KEYBASEX', null, 0) then
      ::[CL_BANK_N].[IMP_KEYBASEX](P_KEYBASEB,F_MESS, false);
   end if;
   if ::[FP_TUNE].[LIB].get_bool_value('KEYBASEF', null, 0) then
      ::[CL_BANK_N].[IMP_KEYBASEX](P_KEYBASEF,F_MESS, false);
   end if;
   if P_CORR_REL then
      ::[CL_PART].[SET_ROUTES].For_All(P_FILIAL == null, P_ALLFILIALS==true);
   end if;
   -- Расширение для корректировки импорта
   &hook.[UYA_IMP_RUS_BANK](null, null, 'FINAL');
End;
arkazar
Участник со стажем


Вступление в Клуб: 27.09.2010
СообщениеВт Июл 11, 2017 10:10    Ответить с цитатой
Полезность: Нет оценки
Коллеги, всем доброе утро или дня! Подскажите, пожалуйста. А как логи и ошибки которые заполняются в мониторе дистрибутивной операции, можно складировать в логи на сервере? Тоесть если джоб свалился, то знать почему.



yaffil пишет:
Для решения этого вопроса, мы примапили обычную виндовую сетевую папку к серверу БД.

В настройках путей справочника (PATH_BIC) у нас сейчас прописано: sprav/BIC/

А операция загрузки выгледит след. образом (перенёс все из блока проверки в тело) и запускается ночью по джобу:
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3
Страница 3 из 3

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru