Друзья , коллеги , подскажите пожалуста как можно реализовать,
Есть такой вывод , см. скрин.
Штатно формируется отчет, но при этом колонку Срок хранения нужно заполнить для каждого месяца нужными данныеми.
Внутри процедуры ПриКомпоновкеРезультата для каждого месяца строю столько запросов сколько в периоде получается полных месяцев и укладываю в ТЗ1 . А в сформированном отчете нужно заполонить результатами запросов по месяцам колонку "срок хранения дней" для каждого месяца.
Как можно добраться до выделенных яцеек и уложить туда данные от запросов по месяцам ?
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ИтоговыеНастройки = КомпоновщикНастроек.ПолучитьНастройки();
//Можем редактировать настройки компоновки (ИтоговыеНастройки)
BEGDate = ИтоговыеНастройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период")).Значение.ДатаНачала;
ENDDate = ИтоговыеНастройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период")).Значение.ДатаОкончания;
pDate = КонецМесяца(BEGDate);
// Считаем месяцы внутри периода
КоличествоМесяцевВПериоде=0;
Пока pDate <= КонецМесяца(ENDDate) Цикл
КоличествоМесяцевВПериоде = КоличествоМесяцевВПериоде+1;
pDate=pDate+1;
pDate = КонецМесяца(pDate);
КонецЦикла;
pDateBEG= НачалоМесяца(BEGDate);
pDateEND= КонецМесяца(BEGDate);
Пока pDateEND <= КонецМесяца(ENDDate) Цикл
ТЗ1 = ВыбратьПоМесяцу(pDateBEG,pDateEND); // Укладываем результат запроса по месяцу
pDateEND = pDateEND + 1;
pDateBEG = НачалоМесяца(pDateEND);
pDateEND = КонецМесяца (pDateEND); // двигаем на следующий месяц в периоде
КонецЦикла;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, ИтоговыеНастройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
// Сделать разбивку на периоды ?
//Можем редактировать табличный документ (ДокументРезультат)
КонецПроцедуры
(2) Там суть в том, что в 1-м запросе набораДанных "СписокМесяцев" определяется количество месяцев в указанных параметрах отчета, по методу Ильдаровича.
А во второй таблице сами данные.
В обоих таблицах Месяц , это, на самом деле, первый день месяца (НАЧАЛОПЕРИОДА(ВТ_ИсходныеДанные.Дата, МЕСЯЦ)) по нему и делается "Связь набора данных"
Запрос правильно выбирает срок хранения в днях за весь период
А когда в настройках ставлю группировку по месяцам - то "срок хранения в днях" просто дублируется в каждый месяц числами посчитанными за весь период.
Если в отчете выбираю месяц - то считает корректно
(5)Можете погуглить, как передать внешний источник данных в СКД программно, статей достаточно много) Я так понимаю, вам это и нужно? Если вкратце, в самой СКД создаёте ещё один набор данных где источником будет внешняя таблица. Связываете 2 этих набора. Выводите в колонку данные из нужного набора. А вот когда программно уже строите, то можете в СП глянуть, что передаётся вторым параметров в процедуре ПроцессорКомпоновкиДанных.Инициализировать - как раз внешние наборы данных. Но ещё учтите, что если вы не напишите Истина в параметре "ВозможностьИспользованияВнешнихФункций" этой процедуры, то ничего не заработает) То есть в сумме получится ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных, ВнешниеНаборы, ДанныеРасшифровки, Истина)