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

Общие оборот по дебету и кредиту

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих
Предыдущая тема :: Следующая тема  
Автор Сообщение
Bionorick
Участник


Вступление в Клуб: 12.01.2023
СообщениеПн Фев 27, 2023 07:45   Общие оборот по дебету и кредиту Ответить с цитатой
Полезность: Нет оценки
Доброго времени суток коллеги!
С ЦФТ работаю недавно (да и в принципе новичок), подскажите как мне посчитать общий дебетовый и кредитовый оборот за месяц?

Функция ::[RUNTIME].[F].A_TURN не подходит, она считает оборот только по лицевым счетам, а мне необходимо по всем.
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеПн Фев 27, 2023 12:06   Re: Общие оборот по дебету и кредиту Ответить с цитатой
Полезность: Нет оценки
Bionorick пишет:
Доброго времени суток коллеги!
С ЦФТ работаю недавно (да и в принципе новичок), подскажите как мне посчитать общий дебетовый и кредитовый оборот за месяц?

Функция ::[RUNTIME].[F].A_TURN не подходит, она считает оборот только по лицевым счетам, а мне необходимо по всем.


Что значит "по всем"?
По материальным/аналитическим? По балансовым?
Bionorick
Участник


Вступление в Клуб: 12.01.2023
СообщениеВт Фев 28, 2023 00:56   Re: Общие оборот по дебету и кредиту Ответить с цитатой
Полезность: Нет оценки
Что значит "по всем"?
По материальным/аналитическим? По балансовым?

- Общий кредитовый оборот по всем счетам клиента в кредитной организации за месяц;
- Общий дебетовый оборот по всем счетам клиента в кредитной организации за месяц;

По балансовым и лицевым.
Есть представление платежные документы, там клиент Иванов Иван Иванович, у него допустим 12 приход/расход ордеров мне необходимо их все просуммировать и вывести в Excel.
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеВт Фев 28, 2023 11:37    Ответить с цитатой
Полезность: Нет оценки
А что мешает в цикле по счетам клиента вызвать функцию расчета оборотов для каждого счета и просуммировать?
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеВт Фев 28, 2023 17:54   Re: Общие оборот по дебету и кредиту Ответить с цитатой
Полезность: Нет оценки
Bionorick пишет:
Что значит "по всем"?
По материальным/аналитическим? По балансовым?

- Общий кредитовый оборот по всем счетам клиента в кредитной организации за месяц;
- Общий дебетовый оборот по всем счетам клиента в кредитной организации за месяц;

По балансовым и лицевым.
Есть представление платежные документы, там клиент Иванов Иван Иванович, у него допустим 12 приход/расход ордеров мне необходимо их все просуммировать и вывести в Excel.


pragma include(RUNTIME.R);
select x(&mAccTurn(x, trunc(sysdate, 'mm'), sysdate)) in ::[AC_FIN] all where x.CLIENT_V = 1233454;

Как разделить суммы и просуммировать в итог - сами разберётесь.
Bionorick
Участник


Вступление в Клуб: 12.01.2023
СообщениеСр Мар 01, 2023 03:00   Re: Общие оборот по дебету и кредиту Ответить с цитатой
Полезность: Нет оценки
Эмиралька пишет:
Bionorick пишет:
Что значит "по всем"?
По материальным/аналитическим? По балансовым?

- Общий кредитовый оборот по всем счетам клиента в кредитной организации за месяц;
- Общий дебетовый оборот по всем счетам клиента в кредитной организации за месяц;

По балансовым и лицевым.
Есть представление платежные документы, там клиент Иванов Иван Иванович, у него допустим 12 приход/расход ордеров мне необходимо их все просуммировать и вывести в Excel.


pragma include(RUNTIME.R);
select x(&mAccTurn(x, trunc(sysdate, 'mm'), sysdate)) in ::[AC_FIN] all where x.CLIENT_V = 1233454;

Как разделить суммы и просуммировать в итог - сами разберётесь.


Добрый день. У меня довольно мало опыта в работе с ЦФТ, да и в принципе мало опыта работы программистом, не совсем понимаю, как это внедрить в мой код:

ReportType STRING := 'XLSX';
ReportBlob BLOB := empty_blob();
ReportTitle VARCHAR2;
i NUMBER := 9;

P_DATE_STR VARCHAR2;

BEGIN

/* Извлекаем из P_DATE месяц,год и по умолчанию присваиваем первое число месяца. */
SELECT tmp('01/'||{EXTRACT(MONTH FROM P_DATE)}||'/'||{EXTRACT(YEAR FROM P_DATE)}) IN dual%ROWTYPE INTO P_DATE_STR;

P_DATE:= TRIM(TO_DATE(P_DATE_STR));
-- debug_pipe('P_DATE = '|| P_DATE);
ReportTitle := 'Лист №1';

&xl.Init_XLS(ReportTitle);
&xl.open_file(ReportBlob);

/* Header документа */
&xl.merge(i-7, 1, i-7, 12);
&xl.cell_v_data(i-7, 1, 'Сведения о клиентах, получавших наличные денежные средства в анализируемом периоде (расшифровка символов)');
&xl.merge(i-5, 1, i-5, 3);
&xl.cell_v_data(i-5, 1, 'Анализируемый период');
&xl.cell_v_data(i-5, 4, TO_CHAR(P_DATE, 'YYYY.MM.'));
&xl.merge(i-4, 1, i-4, 3);
&xl.cell_v_data(i-4, 1, 'Наименование Банка');
&xl.merge(i-4, 4, i-4, 5);
&xl.cell_v_data(i-4, 4, '');
&xl.merge(i-3, 1, i-3, 3);
&xl.cell_v_data(i-3, 1, 'Регистрационный номер Банка');
&xl.cell_v_data(i-3, 4, );

/* Заголовки таблицы */
&xl.merge(i-1, 1, i, 1);
&xl.cell_v_data(i-1, 1, '№ п/п'); xl_border(i,1,NULL,'Main');xl_border(i-1,1,NULL,'Main');
&xl.merge(i-1, 2, i, 2);
&xl.cell_v_data(i-1, 2, 'Символ отчетности по форме 0409202'); xl_border(i,2,NULL,'Main');xl_border(i-1,2,NULL,'Main');
&xl.merge(i-1, 3, i, 3);
&xl.cell_v_data(i-1, 3, 'ИНН клиента'); xl_border(i,3,NULL,'Main');xl_border(i-1,3,NULL,'Main');
&xl.merge(i-1, 4, i, 4);
&xl.cell_v_data(i-1, 4, 'ФИО клиента'); xl_border(i,4,NULL,'Main');xl_border(i-1,4,NULL,'Main');
&xl.merge(i-1, 5, i, 5);
&xl.cell_v_data(i-1, 5, 'Тип клиента'); xl_border(i,5,NULL,'Main');xl_border(i-1,5,NULL,'Main');
&xl.merge(i-1, 6, i-1, 9);
&xl.cell_v_data(i-1, 6, 'Операции в анализируемом периоде по всем счетам клиента в кредитной организации, тыс. руб.'); xl_border(i-1,6,NULL,'Main');xl_border(i-1,7,NULL,'Main');xl_border(i-1,8,NULL,'Main');xl_border(i-1,9,NULL,'Main');
&xl.cell_v_data(i, 6, 'Сумма полученных наличных денежных средств по символу'); xl_border(i,6,NULL,'Main');
&xl.cell_v_data(i, 7, 'Сумма полученных наличных денежных средств всего'); xl_border(i,7,NULL,'Main');
&xl.cell_v_data(i, 8, 'Общий кредитовый оборот'); xl_border(i,8,NULL,'Main');
&xl.cell_v_data(i, 9, 'Общий дебетовый оборот'); xl_border(i,9,NULL,'Main');
&xl.merge(i-1, 10, i-1, 11);
&xl.cell_v_data(i-1, 10, 'Справочно: сумма полученных наличных денежных средств по символу в предшествующие периоды, тыс. руб.'); xl_border(i-1,10,NULL,'Main');xl_border(i-1,11,NULL,'Main');
&xl.cell_v_data(i, 10, 'Период (месяц), непосредственно предшествующий анализируемому'); xl_border(i,10,NULL,'Main');
&xl.cell_v_data(i, 11, 'Второй период (месяц), предшествующий анализируемому'); xl_border(i,11,NULL,'Main');
&xl.merge(i-1, 12, i, 12);
&xl.cell_v_data(i-1, 12, 'Мнение Банка об операциях клиента по получению наличных денежных средств по символу'); xl_border(i,12,NULL,'Main');xl_border(i-1,12,NULL,'Main');
&xl.merge(i-1, 13, i, 13);
&xl.cell_v_data(i-1, 13, 'Комментарии'); xl_border(i,13,NULL,'Main');xl_border(i-1,13,NULL,'Main');

i:= i + 1;


FOR
(
SELECT AFF(
AFF.[C_SPL] :C_SPL,
AFF.[C_INN] :C_INN,
AFF.[C_NAME] :C_NAME,
AFF.[C_AF_KT] :C_AF_KT,
AFF.[C_AF_DT] :C_AF_DT,
AFF.[C_SUM_KSPL] :C_SUM_KSPL,
AFF.[C_SUM_KSPL_1] :C_SUM_KSPL_1,
AFF.[C_SUM_KSPL_2] :C_SUM_KSPL_2
)
IN
(SELECT AF
(
x.[1].[1] : C_SPL,
AF.[CLIENT_V].[INN] : C_INN,
INITCAP(AF.[CLIENT_V].[NAME]) : C_NAME,
SUM(MD.[SUM_PO])/*SUM(::[RUNTIME].[F].A_TURN(P_DATE, LAST_DAY(P_DATE), AF%ID, AF.[ARC_MOVE], AF.[ACC_SUMMARY], AF.[COM_STATUS], TRUE, TRUE))*/ : C_AF_KT,
SUM(MD.[SUM])/*SUM(::[RUNTIME].fd.ft_a(AF%ID ,'Д','RUB',P_DATE, LAST_DAY(P_DATE)))/*P_DATE, LAST_DAY(P_DATE), AF%ID, AF.[ARC_MOVE], AF.[ACC_SUMMARY], AF.[COM_STATUS], FALSE, TRUE)*/ : C_AF_DT,
SUM(MD.[SUM_NT]) : C_SUM_KSPL,
NVL(SUM(MD1.[C_SUM_KSPL_1]),0) : C_SUM_KSPL_1,
NVL(SUM(MD2.[C_SUM_KSPL_2]),0) : C_SUM_KSPL_2
)

IN ::[AC_FIN],(::[MAIN_DOCUM] : MD),(::[SUM_SYMKS] ALL : x), (SELECT MD1
(
MD1.[SUM_NT] : C_SUM_KSPL_1,
MD1.[ACC_DT] : C_ACC_DT_1
)
IN ::[MAIN_DOCUM], (::[SUM_SYMKS] ALL :x1)
WHERE x1%COLLECTION(TRUE) = MD1.[SUM_KSPL]
AND x1.[1].[1] = '55'
AND (TRUNC(MD1.[DATE_PROV]) >= ADD_MONTHS(TRUNC(P_DATE),-1) AND TRUNC(MD1.[DATE_PROV]) < (TRUNC(P_DATE)))),

(SELECT MD2
(
MD2.[SUM_NT] : C_SUM_KSPL_2,
MD2.[ACC_DT] : C_ACC_DT_2
)
IN ::[MAIN_DOCUM],(::[SUM_SYMKS] ALL :x2)
WHERE x2%COLLECTION(TRUE) = MD2.[SUM_KSPL]
AND x2.[1].[1] = '55'
AND (TRUNC(MD2.[DATE_PROV]) >= ADD_MONTHS(TRUNC(P_DATE), - 2) AND TRUNC(MD2.[DATE_PROV]) < ADD_MONTHS(TRUNC(P_DATE), -1)))

WHERE AF%ID = MD.[ACC_DT] AND x%COLLECTION(TRUE) = MD.[SUM_KSPL] AND AF%ID = MD1.[C_ACC_DT_1](TRUE) AND AF%ID = MD2.[C_ACC_DT_2](TRUE)
-- AND (AF.[MAIN_V_ID] LIKE '40817%' OR AF.[MAIN_V_ID] LIKE '4230%')
AND x.[1].[1]=55
AND (trunc(MD.[DATE_PROV]) <= ADD_MONTHS(trunc(P_DATE),1) AND trunc(MD.[DATE_PROV]) >= trunc(P_DATE))

GROUP BY AF.[CLIENT_V].[NAME], AF.[CLIENT_V].[INN],MD.[SUM_NT],MD.[SUM],MD.[SUM_PO],x.[1].[1]
)

WHERE AFF.[C_SUM_KSPL] >= 500000

)
LOOP

/* Заполняем данные */
&xl.cell(i, 1, i-9 /*'Номер п/п'*/); xl_border(i,1,NULL,'Value');
&xl.cell(i, 2, AFF.[C_SPL] /*'Символ отчетности по форме 0409202'*/); xl_border(i,2,NULL,'Value');
&xl.cell(i, 3, AFF.[C_INN] /*'ИНН клиента'*/); xl_border(i,3,NULL,'Value');
&xl.cell_v_data(i, 4, AFF.[C_NAME] /*'ФИО клиента'*/); xl_border(i,4,NULL,'Value');
&xl.cell_v_data(i, 5, 'ФЛ' /*'Тип клиента'*/); xl_border(i,5,NULL,'Value');
&xl.cell(i, 6, AFF.[C_SUM_KSPL] /*'Сумма полученных наличных денежных средств по символу'*/); xl_border(i,6,NULL,'Value');
&xl.cell(i, 7, '' /*'Сумма полученных наличных денежных средств всего'*/); xl_border(i,7,NULL,'Value');
&xl.cell(i, 8, AFF.[C_AF_KT] /*'Общий кредитовый оборот'*/); xl_border(i,8,NULL,'Value');
&xl.cell(i, 9, AFF.[C_AF_DT] /*'Общий дебетовый оборот'*/); xl_border(i,9,NULL,'Value');
&xl.cell(i, 10, AFF.[C_SUM_KSPL_1] /*'Период (месяц), непосредственно предшествующий анализируемому'*/); xl_border(i,10,NULL,'Value');
&xl.cell(i, 11, AFF.[C_SUM_KSPL_2] /*'Второй период (месяц), предшествующий анализируемому'*/); xl_border(i,11,NULL,'Value');
&xl.cell_v_data(i, 12, '' /*'Мнение Банка об операциях клиента по получению наличных денежных средств по символу'*/); xl_border(i,12,NULL,'Value');
&xl.cell_v_data(i, 13, '' /*'Комментарии'*/); xl_border(i,13,NULL,'Value');

i:= i + 1;

END LOOP;


&xl.finish(ReportBlob);
&x1.putReport2RunInProc(ReportBlob, ReportType, ReportTitle);

END;
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеСр Мар 01, 2023 06:29   Re: Общие оборот по дебету и кредиту Ответить с цитатой
Полезность: Нет оценки
Bionorick пишет:
Добрый день. У меня довольно мало опыта в работе с ЦФТ, да и в принципе мало опыта работы программистом, не совсем понимаю, как это внедрить в мой код

Попробуйте сначала привести код в порядок:
Код:

begin
    InitReport(P_DATE);
    WriteHeader;
    for (уж не знаю, что вы хотите тут вывести в отчёт) loop
        EnrichData;
        WriteRow;
    end loop;
    WhiteFooter;
    SendReport;
end;


Потом наполните функции смыслом.
Двигайтесь небольшими шажками. Сначала выведите заголовок отчёта, научитесь его отправлять на вывод.
Затем в цикле выведите названия строк данных, которые хотите видеть в отчёте. Потом напишите функции, получающие цифры для строк.
Не нужно стараться запихнуть всё в один большой запрос, это не производительно и очень громоздко.
Каждый раз перед вами будут вставать новые и новые задачи, но они будут небольшими и вы с ними сможете справиться.

Слона нужно кушать по частям.
Bionorick
Участник


Вступление в Клуб: 12.01.2023
СообщениеСр Мар 01, 2023 06:38   Re: Общие оборот по дебету и кредиту Ответить с цитатой
Полезность: Нет оценки
Эмиралька пишет:
Bionorick пишет:
Добрый день. У меня довольно мало опыта в работе с ЦФТ, да и в принципе мало опыта работы программистом, не совсем понимаю, как это внедрить в мой код

Попробуйте сначала привести код в порядок:
Код:

begin
    InitReport(P_DATE);
    WriteHeader;
    for (уж не знаю, что вы хотите тут вывести в отчёт) loop
        EnrichData;
        WriteRow;
    end loop;
    WhiteFooter;
    SendReport;
end;


Потом наполните функции смыслом.
Двигайтесь небольшими шажками. Сначала выведите заголовок отчёта, научитесь его отправлять на вывод.
Затем в цикле выведите названия строк данных, которые хотите видеть в отчёте. Потом напишите функции, получающие цифры для строк.
Не нужно стараться запихнуть всё в один большой запрос, это не производительно и очень громоздко.
Каждый раз перед вами будут вставать новые и новые задачи, но они будут небольшими и вы с ними сможете справиться.

Слона нужно кушать по частям.


Спасибо, буду дальше страдать/писать...
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСр Мар 01, 2023 09:51    Ответить с цитатой
Полезность: Нет оценки
Не пихайте функции в селект, это и непроизводительно, и затрудняет отладку и нарушает требования к DBI(если применимо). В селекте вычисляйте параметры для функций.
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСр Мар 01, 2023 10:27    Ответить с цитатой
Полезность: Нет оценки
первое число месяца
P_DATE := trunc(P_DATE, 'MM');
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСр Мар 01, 2023 10:50    Ответить с цитатой
Полезность: Нет оценки
TRUNC(MD1.[DATE_PROV] - trunc лишний - отключаете индекс по DATE_PROV
выборка по MAIN_DOCUM за месяц - не лучшая идея - лучше документы подбирать по выписке RECORDS
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеСр Мар 01, 2023 16:40    Ответить с цитатой
Полезность: Нет оценки
Volod пишет:
TRUNC(MD1.[DATE_PROV] - trunc лишний - отключаете индекс по DATE_PROV
выборка по MAIN_DOCUM за месяц - не лучшая идея - лучше документы подбирать по выписке RECORDS


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

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