Обновление справочников БИК автоматом
На страницу Пред. 1, 2, 3
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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  _________________ всегда есть как минимум 2 выхода |
|
 |
devor Профи
Вступление в Клуб: 13.02.2012
|
Пт Авг 31, 2012 06:12   |
|
Полезность: 1
|
Alexsey пишет: | prog пишет: | Увы, нет. Так как работать с файлами (разбирать их создавать) можно лишь предварительно скопировав их на сервер).
Хотя, в принципе, можно и на клиенте но только через VBScript. |
Вся беда в том, что джобы не работают с VBScript  |
Работают. Им в этом помогают операции типа "Отчёт 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/
А операция загрузки выгледит след. образом (перенёс все из блока проверки в тело) и запускается ночью по джобу: |
|
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|