Имя: Пароль:
1C
 
как наиболее оптимально можно программно вывести отчет на скд с группировками?
0 gabd_marat
 
08.07.17
14:43
Народ, подскажите, как можно наиболее оптимально вывести отчет с группировками программно, группировки находятся в реквизите отчета в виде таблицы значений. Простая группировка и вывод отчета есть:
&НаСервере
Процедура СформироватьОтчетНаСервере()
    
    СхемаКомпоновкиДанных = Отчеты.МТ_ОстаткиТоваровНаСкладах.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

    Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Организация"));
    мОбъект = РеквизитФормыВзначение("Отчет");
    Параметр.Значение = мОбъект.Организация;
    Параметр.Использование = Истина;

    Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Склад"));

    Если Параметр <> Неопределено Тогда
        Параметр.Значение = мОбъект.Склад;
        Параметр.Использование = Истина;
    КонецЕсли;

    Параметр = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецДата"));

    Если Параметр <> Неопределено Тогда
        Параметр.Значение = Новый Граница(КонецДня(мОбъект.КонецПериода),ВидГраницы.Включая);
        Параметр.Использование = Истина;
    КонецЕсли;

    ТекНастройкиКомпоновщика = Отчет.КомпоновщикНастроек.Настройки;
    ТекНастройкиКомпоновщика.Структура.Очистить();

    //добавить группировку


        ГруппировкаПоСкладу = ТекНастройкиКомпоновщика.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
        ГруппировкаПоСкладу.Имя = "Номенклатура.ВидНоменклатуры";
        ГруппировкаПоСкладу.Использование = Истина;

        //созданная группировка по полю "Склад"

        ПолеГруппировкиСклад = ГруппировкаПоСкладу.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));      
        ПолеГруппировкиСклад.Использование      = Истина;
        ПолеГруппировкиСклад.Поле               = Новый ПолеКомпоновкиДанных("Номенклатура.ВидНоменклатуры");
        ПолеГруппировкиСклад.ТипГруппировки = ТипГруппировкиКомпоновкиДанных.Иерархия;
        ПолеГруппировкиСклад.ТипДополнения      = ТипДополненияПериодаКомпоновкиДанных.БезДополнения;

    //добавить выводимые поля в группировке: склад и количество остаток для данной группировки

    ВыбранноеПоле = ГруппировкаПоСкладу.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));    
    ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Номенклатура.ВидНоменклатуры");
    //ВыбранноеПоле = ГруппировкаПоСкладу.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));    
    //ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("КоличествоОстаток");

    //добавим детальные записи как подгруппу в "Склад". Все отличие только в том, что нет группировки

    ДетальныеЗаписи = ГруппировкаПоСкладу.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
    ДетальныеЗаписи.Имя = "Детальные";
    ДетальныеЗаписи.Использование = Истина;
    //добавить выводимые поля в детальных записях: Номенклатуру и количество остаток

    ВыбранноеПоле = ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));  
    ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
    ВыбранноеПоле = ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));  
    ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("КоличествоОстаток");

    ДанныеРасшифровкиОтчета = Новый ДанныеРасшифровкиКомпоновкиДанных;

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Отчет.КомпоновщикНастроек.Настройки, ДанныеРасшифровкиОтчета);

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ,ДанныеРасшифровкиОтчета);

    ТаблицаРезультата = Новый ТабличныйДокумент;

    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ТаблицаРезультата);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

    ЭтаФорма.Результат.Очистить();
    ЭтаФорма.Результат.Вывести(ТаблицаРезультата);
    ЭтаФорма.Результат.ТолькоПросмотр = Истина;
    ЭтаФорма.Результат.ПоказатьУровеньГруппировокСтрок(2);

    ЭтаФорма.Результат.ФиксацияСлева = 1;
    ЭтаФорма.Результат.ФиксацияСверху = 6;

    ТаблицаРезультата.Очистить();

КонецПроцедуры
1 gabd_marat
 
08.07.17
14:44
Коментарии не подправил группировка по виду номенклатуры и детальные записи(номенклатура, количество остаток)
2 gabd_marat
 
08.07.17
14:45
Перебирать таблицу значений и добавлять элементы группировки или можно сразу через структуру создать группировки?
3 craxx
 
08.07.17
14:45
(0) Вся проблема в том, как ты хочешь это вывести. У СКД древообразная структура вывода, в группировке может быть не одно поле, плюс может быть несколько различных группировок на одном уровне. А так, создавай Дерево значений и оттуда уже грузи, но ИМХО, извращение.
4 gabd_marat
 
08.07.17
14:56
(3) Задача состоит в том, что пользователь может выбрать любое количество реквизитов номенклатуры в качестве группировки, в детальных записях будет номенклатура и количествоостаток. Выбор группировки осуществляется через форму и сохраняется в реквизите отчета в виде таблицы значений(здесь походу надо исправить в дерево значений?)
5 craxx
 
08.07.17
14:59
(4) чем не устраивает поле типовой настройки структуры?
6 gabd_marat
 
08.07.17
15:02
(5)задание сказали сделать так
7 Cyberhawk
 
08.07.17
15:09
(6) Кто дал задание (в какой он должности)? А ты?
8 gabd_marat
 
08.07.17
15:26
(6) тестовое задание) устраиваюсь на работу)
Создать отчет по остаткам товара на складах со следующими возможностями:
1)    Выбор пользователем любых реквизитов справочника Номенклатура
2)    Формирование отчета с группировкой по выбранным реквизитам в следующем виде:
Реквизит 1
|– Реквизит 2
   |– Реквизит 3
      |– ...
Для реализации данных возможностей пользоваться настройкой структуры, которую предоставляет СКД, нельзя. Необходимо реализовать одним из двух вариантов:
1)    Программно предоставить возможность выбора реквизитов, программно сформировать отчет с использованием макета.
2)    (предпочтительный) Использовать для вывода отчета СКД, но при этом программно предоставить возможность выбора реквизитов, программно произвести настройку структуры СКД. Допускается использование процедур и функций типового механизма печати для программной работы со структурой компоновки данных.

Для реализации первой возможности необходимо через Метаданные получить список реквизитов и дать возможность выбора
Независимо от того, куда вы едете — это в гору и против ветра!