Faktura. Проблемы при автоматической проводке документов
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
prog Эксперт
Вступление в Клуб: 03.03.2008
|
Пт Мар 15, 2013 09:26  Faktura. Проблемы при автоматической проводке документов |
|
Полезность: Нет оценки
|
У нас обработка транспортных документов из faktura осуществляется в 4 потока java-шлюзом. Проблема в том что время от времени при проводке документа получается вот такая ошибка.
Цитата: | ORA-20300: APP-HOOK_BANK.BC_NEED_PROV: Экземпляр [1075839092] блокирован, тип [AC_FIN]
ORA-06512: на "IBS.Z$BCD_PAYMENT_PROCESS", line 564
ORA-06512: на "IBS.Z$BC_DOC_PROCESS", line 181
ORA-06512: на "IBS.Z$BC_DOC_DO_PROCESS", line 109
|
где экземпляр [1075839092] - это фин счет, который чаще других встречается в проводке. Например транзитный счет для расчетов с системой Город.
Проводка документов у нас осуществляется в хуке BC_NEED_PROV. Дистрибутивный механизм не используем так как он не предполагает выборочной проводки документов. Проводить документ или нет решает функция [BC_NEED_PROCESS].GetProvFlag.
Есть ли идеи как избавиться от вышеназванной ошибки
Код HOOK_BANK.BC_NEED_PROV
Код: | begin
P_NEED_PROV := false;
if P_BC_DOC.[AGR_REF]%class in (::[BC_FAKTURA_LITE]%class, ::[BC_FAKTURA_PRIV]%class, ::[BC_SMS_PRIV]%class) then
if P_MDOC is not null then
--Подменяем пользователя создателя
var user_create ref [USER] := P_MDOC.[ACC_DT].[OTV];
if user_create is not null then
if P_MDOC.[IN_FOLDER] is not null then
for md in P_MDOC.[IN_FOLDER].[DOCS_IN_FOLD] where md.[DOCUMENT]%class = ::[MAIN_DOCUM]%class loop
md.[DOCUMENT]->(::[MAIN_DOCUM])[DOCUMENT_USER] := user_create;
end loop;
else
P_MDOC.[DOCUMENT_USER] := user_create;
end if;
end if;
if ::[HOOK_BANK].[BC_NEED_PROCESS].GetProvFlag(P_BC_DOC%id) then
declare
op_date [DATE] default ::[SYSTEM].[VARIABLES].OpDate;
begin
if P_MDOC.[IN_FOLDER] is not null then
&sp(MDOC_PROV)
&proxy.prov_folder(P_MDOC.[IN_FOLDER]);
else
&sp(MDOC_PROV)
&proxy.prov_mdoc(P_MDOC);
end if;
exception
when others all then
&rb(MDOC_PROV)
P_MDOC.[TEXT_VOZV] := ::[RUNTIME].[PRINTFUN].SQLERRM_INF;
pragma error(::[RUNTIME].[PRINTFUN].SQLERRM_INF);
end;
if P_BC_DOC%class = ::[BCD_PAYMENT]%class then
&proxy.add_history_state(P_MDOC, 'TO_RKO', null);
end if;
end if;
end if;
end if;
end;
|
&proxy - это библиотека где перевызываются дистрибутивные функции
Код: |
-- проводка документа (вместе с папкой)
procedure prov_mdoc(mdoc ref [MAIN_DOCUM])
is
begin
::[BANK_CLIENT].[LIB_FIN].prov_mdoc(mdoc);
end;
-- проводка папки
procedure prov_folder(fold ref [FOLDER_PAY])
is
begin
::[BANK_CLIENT].[LIB_FIN].prov_folder(fold);
end;
-- добавление записи в историю состояний
procedure add_history_state(p_doc ref [MAIN_DOCUM]
, p_state string
, p_info [MEMO]
, p_date date := sysdate
, p_bo ref [PATTERN_DOC] := NULL)
is
begin
::[BANK_CLIENT].[LIB_FIN].add_history_state(p_doc,p_state,p_info,p_date,p_bo);
end;
|
|
|
 |
IBSO Профи
Вступление в Клуб: 20.08.2009
|
Пт Мар 15, 2013 09:41   |
|
Полезность: 3
|
Глава_1-02-4_(Основы_Учетного_Ядра_Хранение_информации_по_счетам).chm
Раздел Неблокируемы счета.
Может кто использует предлагаемый ЦФТ вариант? |
|
 |
svn Профи
Вступление в Клуб: 04.02.2008
|
Пт Мар 15, 2013 11:03   |
|
Полезность: Нет оценки
|
Блокировщик внутренний или внешний? на внешнем таких ситуаций должно быть существенно меньше |
|
 |
prog Эксперт
Вступление в Клуб: 03.03.2008
|
Пт Мар 15, 2013 11:20   |
|
Полезность: Нет оценки
|
внутренний |
|
 |
yaffil Профи
Вступление в Клуб: 18.08.2011
|
Пт Мар 15, 2013 11:31   |
|
Полезность: 2
|
Может обработку Эксепшина вставить, если локвэйт, тогда подождать пару сек и попробовать провести снова? |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|