СКД как в процедуре ПриКомпоновкеРезультата сформировать свои данные в выбранных колонках

1. yurazyuraz 05.12.22 20:25 Сейчас в теме
Друзья , коллеги , подскажите пожалуста как можно реализовать,
Есть такой вывод , см. скрин.
Штатно формируется отчет, но при этом колонку Срок хранения нужно заполнить для каждого месяца нужными данныеми.
Внутри процедуры ПриКомпоновкеРезультата для каждого месяца строю столько запросов сколько в периоде получается полных месяцев и укладываю в ТЗ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); // двигаем на следующий  месяц в периоде
	КонецЦикла;
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, ИтоговыеНастройки, ДанныеРасшифровки);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных, , ДанныеРасшифровки);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);	
	// Сделать разбивку на периоды ?
	//Можем редактировать табличный документ (ДокументРезультат)	
КонецПроцедуры

Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. lmnlmn 69 06.12.22 12:02 Сейчас в теме
(1) Ваш покорный слуга извращался вот так Но у меня не было задачи знать контекст для подстановки своих значений.
2. Onwardv 64 06.12.22 11:48 Сейчас в теме
Как передать массив ТЗ в Комопновщик - не подскажу.

М.б. получиться заполнить СрокХранения прямо в запросе СКД? А потом заполнить условия соединения.

Или попробуйте добавить в наборданных СКД свою ТЗ сразу по всему периоду, а потом также соединить условиями соединение.

Делал что-то похожее, удалось реализовать разбивку по месяцам набором данных в запросе СКД.
Вот в теме комментировал с примером:
http://forum.infostart.ru/forum9/topic285078/message2854007/#message2854007

М.б. Вам поможет такой вариант.
3. Onwardv 64 06.12.22 11:55 Сейчас в теме
(2) Там суть в том, что в 1-м запросе набораДанных "СписокМесяцев" определяется количество месяцев в указанных параметрах отчета, по методу Ильдаровича.
А во второй таблице сами данные.

В обоих таблицах Месяц , это, на самом деле, первый день месяца (НАЧАЛОПЕРИОДА(ВТ_ИсходныеДанные.Дата, МЕСЯЦ)) по нему и делается "Связь набора данных"
5. yurazyuraz 08.12.22 09:03 Сейчас в теме
(2)
Это был бы идеальный вариант.

Запрос правильно выбирает срок хранения в днях за весь период
А когда в настройках ставлю группировку по месяцам - то "срок хранения в днях" просто дублируется в каждый месяц числами посчитанными за весь период.

Если в отчете выбираю месяц - то считает корректно
6. Kovekh 08.12.22 11:27 Сейчас в теме
(5)Можете погуглить, как передать внешний источник данных в СКД программно, статей достаточно много) Я так понимаю, вам это и нужно? Если вкратце, в самой СКД создаёте ещё один набор данных где источником будет внешняя таблица. Связываете 2 этих набора. Выводите в колонку данные из нужного набора. А вот когда программно уже строите, то можете в СП глянуть, что передаётся вторым параметров в процедуре ПроцессорКомпоновкиДанных.Инициализировать - как раз внешние наборы данных. Но ещё учтите, что если вы не напишите Истина в параметре "ВозможностьИспользованияВнешнихФункций" этой процедуры, то ничего не заработает) То есть в сумме получится ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных, ВнешниеНаборы, ДанныеРасшифровки, Истина)
7. starik-2005 3039 08.12.22 11:51 Сейчас в теме
  //Можем редактировать табличный документ (ДокументРезультат)  
https://infostart.ru/1c/articles/1223500/
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот