Доброго времени суток! Делаю обработку по начислению пени за прошедший месяц.
Формирую вот такую таблицу значений:
Дата Задолженность на эту дату Начислено пени
01 апреля 8000 5,42
02 апреля 8000 5,42
03 апреля 3000 2,03
04 апреля 3000 2,03
05 апреля 3000 2,03
06 апреля 3000 2,03
07 апреля 3000 2,03
08 апреля 3000 2,03
09 апреля 3000 2,03
10 апреля 3000 2,03
Как с этой таблицы сформировать вот такой печатный документ:
Сумма задолженности |Период задолженности| Дней просрочки| Начисленно пени
С | ПО
8000 01 апреля 02 апреля 2 10,84
3000 3 апреля 10 апреля 8 16,24
Как?
Может я не правильно формирую изначальную(с которой хочу вывести на печать) таблицу значений.....
А проблема-то в чем?
1.Рисуем макет, заполняем, выводим.
2.Отдаем тз в СКД, настраиваем.
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ОбластьМакета.Параметры.Заголовок = "Підсумкова таблиця за "+ПредставлениеПериода(НачалоДня(НачПериода),КонецДня(КонПериода),"Л=uk_UA; ФП=Истина");
ТабДок.Вывести(ОбластьМакета);
//
Для каждого сс Из тз Цикл
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ОбластьМакета.Параметры.Заполнить(сс);
ТабДок.Вывести(ОбластьМакета);
КонецЦикла;
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ОбластьМакета.Параметры.Заголовок = "Підсумкова таблиця за "+ПредставлениеПериода(НачалоДня(НачПериода),КонецДня(КонПериода),"Л=uk_UA; ФП=Истина");
ТабДок.Вывести(ОбластьМакета);
//
Для каждого сс Из тз Цикл
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ОбластьМакета.Параметры.Заполнить(сс);
ТабДок.Вывести(ОбластьМакета);
КонецЦикла;
Перед перебором тз запоминаем предыдущее значение переменных.
Перебираем строки тз:
если текущее значение не равно предыдущему - выводим в строку
долг=0;
Для каждого сс Из тз Цикл
Если сс.долг<>долг тогда
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ОбластьМакета.Параметры.Заполнить(сс);
ТабДок.Вывести(ОбластьМакета);
долг = сс.долг;
КонецЕсли;
КонецЦикла
долг=0;
Для каждого сс Из тз Цикл
Если сс.долг<>долг тогда
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ОбластьМакета.Параметры.Заполнить(сс);
ТабДок.Вывести(ОбластьМакета);
долг = сс.долг;
КонецЕсли;
КонецЦикла
типа так, но надо отшлифовать:
долг=0;
долгсумма=0;
период1 =НачПериода;
Для каждого сс Из тз Цикл
Если сс.долг<>долг тогда
Если сс.период>период1 Тогда
нс = тз1.добавить();
нс.долг = сс.долг;
нс.периодС = период1;
нс.периодПо = сс.период;
нс.начислено = долгсумма;
долг = сс.долг;
период1 = сс.период;
долгсумма=0;
КонецЕсли
иначе
долгсумма=долгсумма+сс.начислено;
КонецЕсли;
КонецЦикла
Решил вот так:
//Скормим ТЗ в запрос
Запрос = Новый Запрос;
Запрос.Текст = "
| ВЫБРАТЬ
| ДеньНачисления,
| ЗадолженностьНаДату,
| НачисленоПени
| ПОМЕСТИТЬ
| ВременнаяТаблица
| ИЗ
| &Таблица Как Таблица
|;
| ВЫБРАТЬ
| ЗадолженностьНаДату КАК Долг,
| МИНИМУМ(ДеньНачисления) КАК ПериодС,
| МАКСИМУМ(ДеньНачисления) КАК ПериодПо,
| СУММА(НачисленоПени) КАК НачисленоПени
| ИЗ
| ВременнаяТаблица
|СГРУППИРОВАТЬ ПО
|ВременнаяТаблица.ЗадолженностьНаДату
|";
Запрос.УстановитьПараметр("Таблица",Таблица);
ТаблицаДляПечати = Запрос.Выполнить().Выгрузить();
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua