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

Форма 0409118
На страницу Пред.  1, 2, 3
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Банковская отчетность (оперативная, обязательная, Oracle Reports)
Предыдущая тема :: Следующая тема  
Автор Сообщение
Anna80
Участник со стажем


Вступление в Клуб: 09.02.2010
СообщениеСр Дек 22, 2010 11:48    Ответить с цитатой
Полезность: Нет оценки
timochev, молодец! За заплатку спасибо, передам своим айтишникам, может чего придумают)
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеЧт Дек 23, 2010 15:45    Ответить с цитатой
Полезность: Нет оценки
timochev пишет:
Анна, спасибо!
Заработало! Завтра еще на тестовых ситуациях посчитаю.
Резерв действительно надо вычитать и из рублей, и из валюты. Просто наш специалист хотел мне жизнь облегчить и сократил формулу...
Умножение на всякие коэффициенты тоже заработало.

Насчет минимальных остатков - сделал заплатку в дистрибутивную I_110_DATA.SLIB. В процедуре Calc_af_org вставил между вычислением остатка по счету и расчетом суммы резерва обращение к справочнику "ОП. Показатели", в котором отчетник будет вести минимальные остатки. В принципе можно этот кусок кода распространить и на Calc_af_bank_f, и на Calc_af_bank_n - необходимость этого зависит от категории, с которой настроены маски счетов.
Код:
            v   := abs(f.a('В'||t.[ARC_MOVE]||'СН', tdate));

            -- 21.12.10 КОБ Тимошевский Д.С. BS00157025
            if y.MAIN_V_ID like '30110%' or y.MAIN_V_ID like '30114%' then
               var xcode ::[REPS_MEASURES].CODE%type;
               begin
                  xcode := ::[REPS_MEASURES]([NAME] = 'MIN_SALDO_'||y.MAIN_V_ID).CODE;
               exception when No_Data_Found then xcode := null;
               end;
               if xcode is not null then
                  v := ::[REPS_MEASURES].[SLIB].GET_VALUE(xcode,tdate,null,null,null,false,false,false) * ::[DOCUMENT].[LIB_CUR].Get_Rate(t.ac.[FINTOOL],tdate);
               else
                  v := 0;
               end if;
            end if;
            -- end 21.12.10 КОБ Тимошевский Д.С.
            
            -- считаем сформированый резерв если доп категория указана
            if  instr(ID_For_Rezerv_calc, '#'||cast_to([string], y.EXT)||'#') > 0 then

В справочнике "ОП. Показатели" записи завожу таким образом:
Код: произвольный, но уникальный
Наименование: MIN_SALDO_<номер счета>
К сожалению, код в этом справочнике всего 10 символов, поэтому не получается затолкать в него номер лицевого счета. Пришлось делать дополнительный запрос по наименованию. Sad
А так все работает!


Чуток поправил дату определения курса (минус 1 день) при пересчете неснижаемого остатка. Курс беру на предыдущую дату, т.к. отчет формируется НА дату. Надо так:
Код:
::[DOCUMENT].[LIB_CUR].Get_Rate(t.ac.[FINTOOL],tdate - 1)
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеПт Янв 14, 2011 18:57    Ответить с цитатой
Полезность: Нет оценки
Нашел ошибку в заплатке по минимальным остаткам. Calc_af_org используется не только при расчете КРЗ, но и в других кодах. Поэтому описанная выше модификация кода повлекла к искажению остатков по 30110 и 30114 в других показателях.
Поправил так:
Код:
            var prz_min_saldo ref [ACC_PATTERN];
            begin
               locate prz_min_saldo in y.C_ANALYTIC.[ACC_PATTERN]
                  where prz_min_saldo.[PRODUCT] = ::[ANALYTIC_CODE].[L].ch_r('KOB_MIN_SALDO','КОБ. Минимальный остаток')
                     and prz_min_saldo.[OR_DOWN];
            exception when others then
               prz_min_saldo := null;
            end;

            if prz_min_saldo is not null and y.MAIN_V_ID like '30110%' or y.MAIN_V_ID like '30114%' then
               var xcode ::[REPS_MEASURES].CODE%type;
               begin
                  xcode := ::[REPS_MEASURES]([NAME] = 'MIN_SALDO_'||y.MAIN_V_ID).CODE;
               exception when No_Data_Found then xcode := null;
               end;
               if xcode is not null then
                  v := ::[REPS_MEASURES].[SLIB].GET_VALUE(xcode,tdate,null,null,null,false,false,false) * ::[DOCUMENT].[LIB_CUR].Get_Rate(t.ac.[FINTOOL],tdate - 1);
               else
                  v := 0;
               end if;
            end if;

Теперь в настройки аналитических признаков можно прописывать категорию с кодом KOB_MIN_SALDO, что является признаком необходимости вычисления минимальных остатков вместо реальных.
Соответственно, данную категорию надо добавить в КРЗ (шаблон любой).

Дальше можно доработать, чтобы у категории анализировался шаблон - маски счетов, по которым необходимо брать мин.остатки. Тогда явный анализ масок счетов из кода пропадет. Будет красивее.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Банковская отчетность (оперативная, обязательная, Oracle Reports) Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3
Страница 3 из 3

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