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

Вычисляемый реквизит номер договора РКО

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 -- Запрос на заполнение номера договора из счетчика
идет после..

Тогда почему в хуке пустое значение балансового счета Sad
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]

при этом надо еще сначала галку "Резервирование счета" взвести при открытии договора. Ну а если у них номер формируется в разрезе балансового, а целевое назначение по другим правилам? тогда как? Писать... Confused
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    Ответить с цитатой
Полезность: Нет оценки
Antineya пишет:
Добила

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

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