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

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


Вступление в Клуб: 06.09.2007
СообщениеПн Сен 10, 2012 11:41    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
Код:

   if nvl(th.[DO_PROC_FLAG], true) then
   if th.[IS_IN] then
      -- Обработка транспортного документа
      &sp(DO_PROCESS_IN)


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


Вступление в Клуб: 18.08.2011
СообщениеПн Сен 10, 2012 11:56    Ответить с цитатой
Полезность: Нет оценки
Так и есть, данный реквизит затирается вместе с экземпляром после обработки, но, думаю, не лучший способ, т.к. данная операция опять таки вызывается из нескольких мест. Опять таки нужна какая то аналитика.

Возможно ли, как то, определить внутри хука BC_PROC_CHECK, что он был вызван операцией PROCESS из ТБП BCD_PAYMENT ?
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеПн Сен 10, 2012 12:27    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
Так и есть, данный реквизит затирается вместе с экземпляром после обработки, но, думаю, не лучший способ, т.к. данная операция опять таки вызывается из нескольких мест. Опять таки нужна какая то аналитика.

Возможно ли, как то, определить внутри хука BC_PROC_CHECK, что он был вызван операцией PROCESS из ТБП BCD_PAYMENT ?

наверное каким-то образом и можно определить по стеку. Но как я не подскажу - не знаю. Возможно подскажут более знающие коллеги.
На моем уровне я бы, как писал выше, объявил пакетную переменную и из Хука ее включал
_________________
всегда есть как минимум 2 выхода
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеПн Сен 10, 2012 12:46    Ответить с цитатой
Полезность: Нет оценки
Алексей, я тоже хотел подобный вариант использовать, но не понимаю каким образом мы определим что хук вызвало именно создание документа, а не другая операция?
Ведь этот хук вызывают очень много операций в ДБО: Транспортные документы, а нас интересует только одна ДБО: платёжные поручения.
Ибо только при запуске этой операции нам надо открывать счёт и пополнять его.
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеПн Сен 10, 2012 14:03    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
Алексей, я тоже хотел подобный вариант использовать, но не понимаю каким образом мы определим что хук вызвало именно создание документа, а не другая операция?
Ведь этот хук вызывают очень много операций в ДБО: Транспортные документы, а нас интересует только одна ДБО: платёжные поручения.
Ибо только при запуске этой операции нам надо открывать счёт и пополнять его.

Все гениальное просто. При вызове BC_PROC_CHECK первым параметром передается This. Проанализируй у операции BC_PROC_CHECK параметр P_BC_DOC_REF на принадлежность к классу, т.к. это ссылка на верхний уровень, если это BCD_PAYMENT то делай свои действия, иначе ни чего не делаешьSmile
_________________
всегда есть как минимум 2 выхода
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеПн Сен 10, 2012 14:44    Ответить с цитатой
Полезность: Нет оценки
Ооо, спасибо, собственно ничего, наверное больше и не надо будет проверять, ну кроме наличия счёта. Very Happy
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеВт Сен 11, 2012 10:39    Ответить с цитатой
Полезность: Нет оценки
Alexsey пишет:

Все гениальное просто. При вызове BC_PROC_CHECK первым параметром передается This. Проанализируй у операции BC_PROC_CHECK параметр P_BC_DOC_REF на принадлежность к классу, т.к. это ссылка на верхний уровень, если это BCD_PAYMENT то делай свои действия, иначе ни чего не делаешьSmile


А как выйти на имя ТБП ведь this%class выдаёт class=HOOK_BANK, а мне надо получить BCD_PAYMENT ?
devor
Профи


Вступление в Клуб: 13.02.2012
СообщениеВт Сен 11, 2012 10:48    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
Alexsey пишет:

Все гениальное просто. При вызове BC_PROC_CHECK первым параметром передается This. Проанализируй у операции BC_PROC_CHECK параметр P_BC_DOC_REF на принадлежность к классу, т.к. это ссылка на верхний уровень, если это BCD_PAYMENT то делай свои действия, иначе ни чего не делаешьSmile


А как выйти на имя ТБП ведь this%class выдаёт class=HOOK_BANK, а мне надо получить BCD_PAYMENT ?

Очевидно, модификатор %class надо применить к параметру P_BC_DOC_REF
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеВт Сен 11, 2012 16:17    Ответить с цитатой
Полезность: Нет оценки
Не могу понять почему он дёргает его много раз, вот лог первый прогон всё как надо, но во второй он пихает тоже самое и отбраковывает, где поковырять ещё?

Код:

17:07:49 [HOOK_BANK]::[BC_PROC_CHECK]счет плательщика=40817810810110005555
         [HOOK_BANK]::[BC_PROC_CHECK]остаток по карте=55.55
         [HOOK_BANK]::[BC_PROC_CHECK]сумма документа=1
         [HOOK_BANK]::[BC_PROC_CHECK]счёт карточный=1
         [HOOK_BANK]::[BC_PROC_CHECK]открываем счёт
17:07:50 [HOOK_BANK]::[BC_PROC_CHECK]открыт счёт=506946245
17:07:50 [HOOK_BANK]::[BC_PROC_CHECK]P_BC_DOC_REF=BCD_PAYMENT
17:07:53 [HOOK_BANK]::[BC_PROC_CHECK]счет плательщика=40817810810110005555
         [HOOK_BANK]::[BC_PROC_CHECK]остаток по карте=55.55
         [HOOK_BANK]::[BC_PROC_CHECK]сумма документа=1
         [HOOK_BANK]::[BC_PROC_CHECK]счёт карточный=1
         [HOOK_BANK]::[BC_PROC_CHECK]открываем счёт


Код:

Возвращен
Номер счета '30233810001918105555' уже занят. Введите другой номер счета!
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеСр Сен 12, 2012 08:57    Ответить с цитатой
Полезность: Нет оценки
Ещё одна проблема, после того как вылетел, счёт не открывается ЦФТ его где то зарезервировали, в фин.счетах и планах счётов по лицевому счёту данного номера нет, но при попытке завести счёт руками через фин.счета -> открыть счёт выпадает в ошибку (отрабатывает функция hash_value_3):
Может кто знает как убрать блокировку?
Код:

ORA-20300: APP-PL_USV.USV_NAME_S: Номер счета '30233810001918105555' уже занят. Введите другой номер счета!

ORA-06512: на  "IBS.MESSAGE", line 58

ORA-06512: на  "IBS.Z$PL_USV_USV_NAME_S", line 436


function hash_value_3(p_name varchar2) return pls_integer is
begin
     return -utils.hash_value(p_name,1073741824,2147483647-1073741824+1);
end;
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеПт Сен 14, 2012 09:33    Ответить с цитатой
Полезность: Нет оценки
Усё сделал, всем спасибо. Осталась только проблема с невозможностью открытия такого же счёта после его удаления. Проблема передана на саппорт ЦФТ. Хотя кто знает какой кэш почистить - буду благодарен за ответ Very Happy
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеПт Сен 14, 2012 13:41    Ответить с цитатой
Полезность: Нет оценки
Попробуй "Система -> Выполнение заданий по расписанию-> обновить список блокировок пользователей". Возможно поможет
_________________
всегда есть как минимум 2 выхода
yaffil
Профи


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

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