wiki:1c:ckd:skd_kak_zapolnit_nabor_v_ruchmon_rejime

Заполнение набора данных вручную

Пример отчета
Метод нужен когда набор необходимо предварительно обработать программно перед выводом пользователю, схема компоновки помогает пользователю наложить отборы в привычном режиме.

  • Готовим набор данных, параметры по которым будет отбор должны иметь правильный тип
Выбрать
     "" КАК Месяц,
     "" КАК АмортПермия,
     Значение(Справочник.ОсновныеСредства) КАК ОС,
     0 Как СуммаБУ,
     0 КАК СуммаНУ
  • Дорабатываем модуль отчета
СтандартнаяОбработка = Ложь;
        Менеджер = Новый МенеджерВременныхТаблиц; // здесь будет наша вр с именем набора данных, по которой система будет строить отчет
         
	НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
	 
	Параметры.Вставить("НачалоПериода", Неопределено);
	Параметры.Вставить("КонецПериода", Неопределено);
        Для Каждого Эл Из НастройкиОтчета.ПараметрыДанных.Элементы Цикл
		Если Строка(Эл.Параметр) = "Период" Тогда
			Параметры.НачалоПериода = Эл.Значение.ДатаНачала;
			Параметры.КонецПериода = Эл.Значение.ДатаОкончания;
		КонецЕсли;
	КонецЦикла;
       // реализация отбора, пример кода отбора по номенклатуре как в списке так и одиночное значение
       Для Каждого Эл Из НастройкиОтчета.Отбор.Элементы Цикл
		Если Строка(Эл.ЛевоеЗначение) = "Номенклатура" Тогда
                    Если Эл.Использование Тогда
				Если ТипЗнч(Эл.ПравоеЗначение) = Тип("СписокЗначений") Тогда 
					Параметры.ОтборНоменклатураМассив = ?(Эл.ПравоеЗначение.Количество() >0,Эл.ПравоеЗначение,Неопределено);	
				ИначеЕсли ТипЗнч(Эл.ПравоеЗначение) = Тип("СправочникСсылка.Номенклатура") Тогда
					МассивОтбор = Новый Массив;  
					МассивОтбор.Добавить(Эл.ПравоеЗначение);
					Параметры.ОтборНоменклатураМассив = ?(Эл.ПравоеЗначение <> Справочники.Номенклатура.ПустаяСсылка(),МассивОтбор,Неопределено);
				КонецЕсли;
			КонецЕсли;
                КонецЕсли;
       КонецЦикла;
       //
       // Установим тексты запросов наборов данных:
	//
	НаборыДанных = СхемаКомпоновкиДанных.НаборыДанных; // НаборДанныхОбъединениеСхемыКомпоновкиДанных 
	// Основной набор
	НаборыДанных.ОсновнойНабор.Запрос = ВернутьТекстЗапросаОсновногоНабора();
	// Склады
	НаборыДанных.Склады.Запрос = ВернутьТекстЗапросаНаборСклады(); // переопределим запрос набора данных с указанием временной таблицы 
	//
    
	//
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки,, Тип("ГенераторМакетаКомпоновкиДанных"));
	
	// Здесь его используем
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,, ДанныеРасшифровки, Истина,, Менеджер);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
  • wiki/1c/ckd/skd_kak_zapolnit_nabor_v_ruchmon_rejime.txt
  • Последнее изменение: 2026/04/19 05:25
  • anton