В данной статье показаны примеры того, каким образом можно добавлять некоторые элементы настроек компоновки данных при помощи встроенного языка.
Добавление выбранного поля
Пример добавления выбранного поля:
// Добавим выбранное поле для вывода в отчет.
ВыбранноеПоле = Настройки . Выбор . Элементы . Добавить ( Тип ( "ВыбранноеПолеКомпоновкиДанных" ) ) ;
ВыбранноеПоле . Поле = Новый ПолеКомпоновкиДанных ( "КоличествоОстаток" ) ;
В данном примере в список выбранных полей было добавлено поле КоличествоОстаток .
Для указания взаимного расположения полей в список выбранных полей можно добавить группу выбранных полей и поместить выбранные поля в нее.
В данном примере создана группа выбранных полей, в нее помещено два поля. Группе указано, каким образом располагать поля, вложенные в нее. Для поля Склад.Код установлен заголовок.
Добавление отбора
Пример добавления элемента отбора:
В данном примере в отчет добавлен элемент отбора с видом сравнения "В Группе".
В отбор можно добавлять сложные условия. Делается это при помощи групп элементов отбора.
Пример добавления группового условия:
В данном примере добавлено условие КоличествоОстаток >= 100 И КоличествоОстаток
Добавление упорядочивания
Пример добавления упорядочивания:
В данном примере показано добавление упорядочивания по полю КоличествоОстаток в убывающем порядке.
Установка параметров вывода
Пример установки параметров вывода:
В данном примере отчету установлен макет оформления и указано, что выводить отбор в результат отчета не нужно.
Добавление условного оформления
Пример добавления условного оформления:
В данном примере добавлено оформление на поле КоличествоОстаток . Поле будет отображаться красным цветом, в случае если его значение больше или равно 100 и меньше или равно 200.
Добавление группировки
Пример добавление группировки:
// Добавим новую группировку в структуру отчета.
Группировка = Настройки . Структура . Добавить ( Тип ( "ГруппировкаКомпоновкиДанных" ) ) ;
// Укажем, по каким полям нужно группировать.
ПолеГруппировки = Группировка . ПоляГруппировки . Элементы . Добавить ( Тип ( "ПолеГруппировкиКомпоновкиДанных" ) ) ;
ПолеГруппировки . Поле = Новый ПолеКомпоновкиДанных ( "Номенклатура" ) ;
// Укажем тип иерархии.
ПолеГруппировки . ТипГруппировки = ТипГруппировкиКомпоновкиДанных . Иерархия ;
В данном примере добавлена группировка по полю Номенклатура с иерархией.
Заметим, что группировке нужно указать, какие поля в ней нужно выводить, как упорядочивать группировку. Если нужно, чтобы состав выводимых полей и полей упорядочивания определялся системой самостоятельно на основании полей группировки и вышестоящих группировок и отчета, то нужно добавить в выбранные поля и поля упорядочивания авто поля.
Пример добавления автополей в порядок и выбранные поля.
// Укажем, что поля, которые нужно выводить в группировке, система должна определять самостоятельно.
Группировка . Выбор . Элементы . Добавить ( Тип ( "АвтоВыбранноеПолеКомпоновкиДанных" ) ) ;
// Укажем, что системе необходимо самостоятельно определять порядок, в котором выводить группировку.
Группировка . Порядок . Элементы . Добавить ( Тип ( "АвтоЭлементПорядкаКомпоновкиДанных" ) ) ;
Добавление детальных записей
Детальные записи являются группировкой, в которой отсутствуют поля группировки.
Пример добавления детальных записей, вложенных в группировку:
// Добавим в отчет детальные записи, вложенные в группировку.
ДетальныеЗаписи = Группировка . Структура . Добавить ( Тип ( "ГруппировкаКомпоновкиДанных" ) ) ;
// Укажем, что поля, которые нужно выводить в детальных записях, система должна определять самостоятельно.
ДетальныеЗаписи . Выбор . Элементы . Добавить ( Тип ( "АвтоВыбранноеПолеКомпоновкиДанных" ) ) ;
// Укажем, что системе необходимо самостоятельно определять порядок, в котором выводить детальные записи.
ДетальныеЗаписи . Порядок . Элементы . Добавить ( Тип ( "АвтоЭлементПорядкаКомпоновкиДанных" ) ) ;
// Добавим детальным записям оформление.
ЭлементУсловногоОформления = ДетальныеЗаписи . УсловноеОформление . Элементы . Добавить ( ) ;
// Укажем наклонный шрифт.
ЭлеменОформления = ЭлементУсловногоОформления . Оформление . НайтиЗначениеПараметра ( Новый ПараметрКомпоновкиДанных ( "Шрифт" ) ) ;
ЭлеменОформления . Использование = Истина ;
ЭлеменОформления . Значение = Новый Шрифт ( , , , Истина ) ;
В данном примере детальные записи добавлены в группировку, в детальные записи добавлены автополя выбора и порядка, указано условное оформление, которое будет действовать в этих детальных записях.
Добавление диаграммы
Пример добавления диаграммы:
В данном примере в отчет добавлена диаграмма, в диаграмму добавлена серия, в серии указано, каким образом ее нужно упорядочивать.
Добавление таблицы
Пример добавления таблицы:
В данном примере в отчет добавлена таблица, в таблице в строках выводится группировка по полю Номенклатура , а в колонках выводится группировка по полю Склад .
Пример
Приведенный в данной статье пример можно посмотреть во внешнем отчете ПримерПрограммнойРаботыСНастройкамиКомпоновкиДанных, который можно найти в каталоге C:ItsEXEExtRepsSamples8
Вы можете установить их на компьютер прямо сейчас
Данный внешний отчет работает на конфигурации "Примеры 8.1".
Очень часто встречаю что программистов заводит в тупик такой момент как программная установка параметров системы компоновки данных (далее СКД). Сделать это можно через ‘КомпоновщикНастроек’ нашей СКД.
Допустим у нас есть отчет ‘ЗадачиКлиента’ и в СКД в наборе данных есть параметр ‘&Владелец’. Сразу уточню что это отчет реализован через 1C Enterprise Development Tools, но решения здесь будут точно такие же, как если бы мы это делали через классический конфигуратор:
Если мы хотим этот параметр устанавливать программно, то важно убедиться что он доступен, иначе мы получим ошибку что параметр не найден (флаг стоять не должен):
И так что бы программно установить параметру СКД определенное значение, мы можем использовать процедуру модуля отчета ‘ПриКомпоновкеРезультата’ и компоновщиком настроек:
Вопрос-ответ Отзывов (4) В закладки
Стандартный отчёт основанный на СКД с стандартной формой сформированной конструктором.
Нужно при нажатии на Сформировать сформировать обычный отчет в соответствии с настройками пользователя и получить данные этого отчета в виде коллекции значений.
ВАЖНО! Форму менять нельзя.
Используем процедуру ПриКомпоновкеРезультата
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка=Истина;
СхемаКД=ЭтотОбъект.СхемаКомпоновкиДанных; //Можно без ЭтотОбъект т.к. процедура в модуле объекта.
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Настройки=ЭтотОбъект.КомпоновщикНастроек.Настройки; //
ПользовательскиеНастройки = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки;
//МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки,, Тип(“ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений”) );
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ТЗ=ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
//т.к. стандартный обработчик включен и мы не меняли схему КД то отчет сформируется стандартным алгоритмом а в ТЗ будет коллекция в соответствии с настройками пользователя.
На данном этапе в “ЭтотОбъект.КомпоновщикНастроек.Настройки” еще не заполнены значения параметров указанные пользователем на форме, не указаны значения и состояние отборов указанные пользователем.
Но они есть в ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки, но КомпоновщикМакета.Выполнить требует на вход именно Настройки.
И я не как не могу понять как заставить СКД перенести настройки пользователя в настройки или иным способом передать их КомпоновщикуМакета.
Понятно что можно в цикле обойти элементы и соответственно программно внести изменения в “Настройке” но мне кажется должен быть другой способ.