Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Antineya Участник со стажем
Вступление в Клуб: 24.10.2007
|
Ср Сен 23, 2009 16:22  Вычисляемый реквизит номер договора РКО |
|
Полезность: Нет оценки
|
Условия задачи такие:
Нумерация договоров должна вестись в разрезе балансовый счетов РКО (перечень) по валюте RUR, в разрезе филиалов и т.д.
Пример нумерации:
- для договоров в б/с 40702, вал – RUR, филиала 01 номер договора = 1, след.=2 и т.д.
- для договоров в б/с 40807, вал – RUR, филиала 01 номер договора = 1, след.=2 и т.д.
Я сделала:
1. В справочнике Счетчики для каждого балансового счета завела счетчик.
2. Завела выч параметр в справочнике выч параметры
3. Этот выч пар прописала в поле Шаблон номера договора, в настройке логики продукта для продукта РКО.
4. В HOOK - RKO_CALC_PAR_1, стала прописывать обработку этого выч. параметра.
Вот тут у меня случился стоп, я думала все просто что в хуке напишу
v_rko ref [RKO];
........
--Num_An это как раз мой вычисляемы параметр
elsif P_PAR = 'Num_An' THEN
if v_rko.[ACC_BAL].[NUM] = '40702'
но как оказалось делая
debug_pipe('Жопа='|| v_rko.[ACC_BAL].[NUM],10);
ничего не возвращает, потому пусто
если же
debug_pipe('Жопа='|| v_rko%id,10);
я получаю id договора..
тогда почему балансовый счет возвращает пустой, но ведь эти параметры уже определены в NEW#AUTO_JUR
и там в коде:
....
elsif p_info = 'P_ACC_BAL' then
-- строка целевых назначений
V_STR:=::[AC_FIN].[LIB_NUM].ret_id(P_ACC_BAL);
if V_STR is not null and instr(V_STR,',') = 0 then
begin
P_AIM%id := V_STR;
exception when OTHERS then
null;
end;
end if;
если тут мы вытащим балансовый счет то мы его получим, а процедура
if p_info ='+' then -- Запрос на заполнение номера договора из счетчика
идет после..
Тогда почему в хуке пустое значение балансового счета  |
|
 |
r00st Эксперт
Вступление в Клуб: 14.09.2007
|
Ср Сен 23, 2009 16:49   |
|
Полезность: Нет оценки
|
Дело в том, что балансовый счет, указанный на форме, на момент формирования номера договора является лишь параметром операции, а не значением реквизита.
Запись значения в реквизит происходит в теле операции.
Выход - при смене балансового счета на форме записывать его в переменную/контекст, и считывать значение в хуке.
PS: дебаги шикарные. |
|
 |
IBSO Профи
Вступление в Клуб: 20.08.2009
|
Ср Сен 23, 2009 19:36   |
|
Полезность: Нет оценки
|
r00st пишет: |
PS: дебаги шикарные. |
"как корабль назовете так он и поплывет" |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Чт Сен 24, 2009 06:49   |
|
Полезность: Нет оценки
|
У нас для нумерации договоров РКО сделано просто
Банковские продукты\РКО\05. Настройка логики продукта
вкладка "Общие настройки" поле "Шаблон счета" содержит запись
Цитата: | [СЧЕТРКО18_20]'/'[СЧЕТРКО3_3][СЧЕТРКО5_5] |
и все работает
при нумерации счета клиента используется справочник Подразделений, где 4-е поле "№" проставлено для филиалов
например
Цитата: | голова "0001"
ДО Головы "0101"
и т. д. |
все работает на дистрибутиве... и все счастливы _________________ всегда есть как минимум 2 выхода |
|
 |
Antineya Участник со стажем
Вступление в Клуб: 24.10.2007
|
Чт Сен 24, 2009 07:32   |
|
Полезность: Нет оценки
|
to r00st
О! У эитх дебагов хорошая история, когда у нас была предыдущая абс
там ядро обозначалось g2c (мы его звали жопа2с), вот так она и осталась. |
|
 |
IBSO Профи
Вступление в Клуб: 20.08.2009
|
Чт Сен 24, 2009 08:15   |
|
Полезность: Нет оценки
|
Alexsey пишет: | У нас для нумерации договоров РКО сделано просто
Банковские продукты\РКО\05. Настройка логики продукта
вкладка "Общие настройки" поле "Шаблон счета" содержит запись
Цитата: | [СЧЕТРКО18_20]'/'[СЧЕТРКО3_3][СЧЕТРКО5_5] |
и все работает
при нумерации счета клиента используется справочник Подразделений, где 4-е поле "№" проставлено для филиалов
например
Цитата: | голова "0001"
ДО Головы "0101"
и т. д. |
все работает на дистрибутиве... и все счастливы |
Требования осложняются тем, что нумерация в разрезе балансовых счетов. Так что все равно надо свое писать, т.к. счетчики разные задействовать. |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Чт Сен 24, 2009 08:18   |
|
Полезность: Нет оценки
|
когда у клиента несколько счетов РКО в одном банке это настраивается банально Целевым назначением _________________ всегда есть как минимум 2 выхода |
|
 |
Antineya Участник со стажем
Вступление в Клуб: 24.10.2007
|
Чт Сен 24, 2009 08:22  r00st |
|
Полезность: Нет оценки
|
А можно немного поподробнее объяснить? |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Чт Сен 24, 2009 08:30  Re: r00st |
|
Полезность: Нет оценки
|
Antineya пишет: | А можно немного поподробнее объяснить? |
при настройке целевого используете кодик Цитата: | "Y"-"Следующий счет клиента на балансовом" | который возвращает значение следующего по порядку номера счета, в разрезе заданного балансового и открытого на этого же клиента.
все просто как... _________________ всегда есть как минимум 2 выхода |
|
 |
Antineya Участник со стажем
Вступление в Клуб: 24.10.2007
|
Чт Сен 24, 2009 08:34   |
|
Полезность: Нет оценки
|
Дело в том, что балансовый счет, указанный на форме, на момент формирования номера договора является лишь параметром операции, а не значением реквизита.
Запись значения в реквизит происходит в теле операции.
Выход - при смене балансового счета на форме записывать его в переменную/контекст, и считывать значение в хуке.
Вот это поподробнее |
|
 |
IBSO Профи
Вступление в Клуб: 20.08.2009
|
Чт Сен 24, 2009 08:42   |
|
Полезность: Нет оценки
|
Получается что-то типа так:
[СЧЕТРКО1_5]'/'[СЧЕТРКО10_20]
при этом надо еще сначала галку "Резервирование счета" взвести при открытии договора. Ну а если у них номер формируется в разрезе балансового, а целевое назначение по другим правилам? тогда как? Писать...  |
|
 |
r00st Эксперт
Вступление в Клуб: 14.09.2007
|
Чт Сен 24, 2009 10:21   |
|
Полезность: 2
|
Подробнее:
Установка значения:
Способ первый. Правильный. Создать расширение.
В валидации после системных строк (3 макроса) добавить код
Код: | if P_MESSAGE = 'VALIDATE' and P_INFO = 'P_ACC_BAL' then
executor.set_context ('$RKO$ACC_BAL$', P_ACC_BAL.[NUM]);
end if; |
Способ второй. Добавить строку с контекстом непосредственно в блоке валидации для "P_INFO = 'P_ACC_BAL'".
Первый способ хорош тем, что не слетит при очередном накате. Но обязательно следует проверить наличие зависимых объектов от NEW#AUTO_JUR. Если они есть - могут быть проблемы с инициализацией переменных при вызове из других пакетов. Если зависимых нет - тогда все отлично.
Второй способ очень прост. Однако, код придется восстанавливать после очередного обновления.
---------
Хук:
Код: | elsif P_PAR = '....' then
declare
acc_num varchar2(5);
begin
acc_num := sys_context(user_context, '$RKO$ACC_BAL$');
if acc_num = '40702' then
...
end if;
end; |
Вот как-то так. |
|
 |
Antineya Участник со стажем
Вступление в Клуб: 24.10.2007
|
Чт Сен 24, 2009 10:27   |
|
Полезность: Нет оценки
|
Добила |
|
 |
r00st Эксперт
Вступление в Клуб: 14.09.2007
|
Чт Сен 24, 2009 10:32   |
|
Полезность: Нет оценки
|
Не забудьте подчистить дебаги. |
|
 |
|