СКД
August 20, 2021

Полное программное создание отчета на 1C СКД

&НаСервере
Функция СформироватьНаСервере()
    //1. создаем схему компоновки данных 
    СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
    
    //1.1 определяем источник данных для схемы 
    //для наших целей - текущая ИБ 
    Источник = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
    Источник.Имя = "ЛокальнаяБаза";
    Источник.СтрокаСоединения = "";
    Источник.ТипИсточникаДанных = "Local";
    
    //1.2 определяем набор данных 
    НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
    НаборДанных.Имя = "Продажи";
    НаборДанных.ИсточникДанных = "ЛокальнаяБаза";
    НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
    НаборДанных.Запрос = (
        "ВЫБРАТЬ
        |    РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
        |    РеализацияТоваровУслугТовары.Сумма КАК СтоимостьОборот
        |ИЗ
        |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары"
    );
    
    //1.2.1 добавляем поля 
    ПолеНоменклатуры = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеНоменклатуры.Заголовок = "Номенклатура";
    ПолеНоменклатуры.ПутьКДанным = "Номенклатура";
    ПолеНоменклатуры.Поле = "Номенклатура";
    ПолеСтоимости = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
    ПолеСтоимости.Заголовок = "Стоимость";
    ПолеСтоимости.ПутьКДанным = "СтоимостьОборот";
    ПолеСтоимости.Поле = "СтоимостьОборот";
                       
    //1.3 определяем ресурсы 
    ПолеРесурса = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
    ПолеРесурса.Выражение = "Сумма(СтоимостьОборот)";
    ПолеРесурса.ПутьКДанным = "СтоимостьОборот";
    
    
   //2. создаем настройки для схемы 
    НастройкиКомпоновкиДанных = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    
    
   //2.1 определяем структуру 
   //2.1.1 добавляем группировку "Номенклатура" 
    ГруппировкаНоменклатуры = НастройкиКомпоновкиДанных.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    ПолеГруппировки = ГруппировкаНоменклатуры.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));    
    ПолеГруппировки.Использование = Истина;
    ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
    АвтоПоле = ГруппировкаНоменклатуры.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
    АвтоПоле.Использование = Истина;
    ПолеСтоимости = ГруппировкаНоменклатуры.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    ПолеСтоимости.Заголовок = "Стоимость";
    ПолеСтоимости.Использование = Истина;
    ПолеСтоимости.Поле = Новый ПолеКомпоновкиДанных("СтоимостьОборот");

    
   //2.2 определим выбранные поля 
    ВыбранноеПоле = НастройкиКомпоновкиДанных.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    ВыбранноеПоле.Заголовок = "Стоимость";
    ВыбранноеПоле.Использование = Истина;
    ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("СтоимостьОборот");
            
   //3. готовим макет 
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных);
    
    
   //4. исполняем макет 
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(Макет);
    ПроцессорКомпоновки.Сбросить();
    
   //5. выводим результат 
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ТабДок = Новый ТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ТабДок);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
    возврат ТабДок;
    
КонецФункции

&НаКлиенте
Процедура Сформировать(Команда)
     ТабДок=СформироватьНаСервере();
     ТабДок.Показать();
КонецПроцедуры

https://wiki.programstore.ru/polnoe-programmnoe-sozdanie-otcheta-na-skd/