Общие оборот по дебету и кредиту
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 |
Ну я вот тоже жду, что будет являться базовым запросом и чего ещё к нему захочется прикрутить. Может, тоже чего посоветую  |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|