Содержание:
1. Программное добавление источника данных в СКД
2. Программное добавление поля источника данных в СКД
3. Программное добавление выбранных полей отчета в схеме компоновки данных
4. Программное добавление группировки данных в СКД
5. Программное добавление полей автогруппировки в СКД
6. Программное добавление сортировки полей в СКД
7. Программное добавление ресурса в СКД
8. Программное добавление параметра запроса в СКД
9. Программное добавление условного оформления в СКД
10. Программное формирование отчета в СКД
Схема компоновки данных (далее СКД) – универсальный конструктор набора данных, макетов и вариаций настроек, вычисляемый полей и прочее. Схему компоновки данных удобно и довольно быстро можно создать в конфигураторе при помощи конструктора схемы компоновки данных.
Сейчас практически ни один проект не обходится без программного создания СКД при адаптации программных продуктов нового поколения на платформе 1С:Предприятие.
Данная статья представляет собой шпаргалку действий для самых распространенных потребностей на средних и крупных проектах (создание программным кодом с нуля или доработка уже существующей схемы действий):
- Программное добавление источника данных в СКД
- Программное добавление поля источника данных в СКД
- Программное добавление выбранных полей отчета в схеме компоновки данных
- Программное добавление группировки данных в СКД
- Программное добавление полей автогруппировки в СКД
- Программное добавление сортировки полей в СКД
- Программное добавление ресурса в СКД
- Программное добавление параметра запроса в СКД
- Программное добавление условного оформления в СКД
- Программное формирование отчета в СКД
Все действия производим в процедуре «ПриКомпоновкеРезультата» модуля отчета с флагом СтандартнаяОбработка равным Ложь.
1. Программное добавление источника данных в СКД
// Создаем схему компоновки данных
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
// Создаем источник данных для схемы компоновки данных
ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
// Назначаем имя источника данных
ИсточникДанных.Имя = "ОсновнаяСхемаКомпоновки";
// Указываем тип источника данных. Для текущей информационной базы - "Local"
ИсточникДанных.ТипИсточникаДанных = "Local";
// Создаем набор данных для схемы компоновки данных.
НаборДанныхОбъектСхемыКомпоновкиДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НаборДанныхОбъектСхемыКомпоновкиДанных.Имя = "НаборДанных1";
НаборДанныхОбъектСхемыКомпоновкиДанных.ИмяОбъекта = "ТаблицаВходныхДанных";
НаборДанныхОбъектСхемыКомпоновкиДанных.ИсточникДанных = " ОсновнаяСхемаКомпоновки ";
Результатом выполнения будет программно-сформирована схема компоновки данных «ОсновнаяСхемаКомпоновки» и сформирован набор данных СКД «НаборДанных1» типа объект с именем объекта, содержащего данные - «ТаблицаВходныхДанных»
2. Программное добавление поля источника данных в СКД
// Создаем новое поле набор данных для схемы компоновки данных
ПолеНабораДанныхСхемыКомпоновкиДанных = НаборДанныхОбъектСхемыКомпоновкиДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
// Инициализируем созданное поле
ПолеНабораДанныхСхемыКомпоновкиДанных.Поле = "Номенклатура";
ПолеНабораДанныхСхемыКомпоновкиДанных.ПутьКДанным = " Номенклатура ";
ПолеНабораДанныхСхемыКомпоновкиДанных.Заголовок = " Номенклатура ";
Результатом выполнения будет добавление поля «Номенклатура» набора данных СКД.
3. Программное добавление выбранных полей отчета в Схеме компоновки данных
// Создаем новое поле
ВыбранноеПолеКомпоновкиДанных = НастройкиКомпоновки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
// Инициализируем созданное поле
ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
Результатом выполнения будет добавление поля «Номенклатура» компоновщика настроек схемы компоновки данных.
4. Программное добавление группировки данных в Схеме компоновки данных
// Создаем новую группировку компоновщика настроек
ГруппировкаКомпоновкиДанных1 = НастройкиКомпоновки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
// Инициализируем созданную группировку
ГруппировкаКомпоновкиДанных1.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных = ГруппировкаКомпоновкиДанных1.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировкиКомпоновкиДанных.Использование = Истина;
ПолеГруппировкиКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Номенклатура ");
Результатом выполнения будет добавление группировки «Номенклатура» компоновщика настроек схемы компоновки данных.
5. Программное добавление полей автогруппировки в Схеме компоновки данных
// Создаем новую группировку компоновщика настроек
АвтоВыбранноеПолеКомпоновкиДанных = ГруппировкаКомпоновкиДанных1.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
// Инициализация созданной группировки компоновщика настроек
АвтоВыбранноеПолеКомпоновкиДанных.Использование = Истина;
Результатом выполнения будет добавление авто группировки для поля «Номенклатура» компоновщика настроек СКД.
6. Программное добавление сортировки полей в СКД
// Создаем новую сортировку
ЭлементПорядкаКомпоновкиДанных = НастройкиКомпоновки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
// Инициализируем созданную сортировку
ЭлементПорядкаКомпоновкиДанных.Использование = Истина;
ЭлементПорядкаКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Номенклатура ");
ЭлементПорядкаКомпоновкиДанных.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв;
Результатом выполнения будет создание сортировки по полю «Номенклатура» компоновщика настроек схемы компоновки данных.
7. Программное добавление ресурса в СКД
// Создаем новый ресурс
РесурсСКД = СхемаКомпоновкиДанных.ПоляИтога.Добавить();
РесурсСКД.ПутьКДанным = "Стоимость";
РесурсСКД.Выражение = "Сумма(Стоимость)";
Результатом выполнения будет создание ресурса по полю «Стоимость» компоновщика настроек схемы компоновки данных.
8. Программное добавление параметра запроса в СКД
// Создаем новый параметр
ПараметрСКД = СхемаКомпоновкиДанных.Параметры.Добавить();
// Инициализируем созданный параметр
ПараметрСКД.Использование = ИспользованиеПараметраКомпоновкиДанных.Авто;
ПараметрСКД.Имя = "ТипЦен";
ПараметрСКД.Заголовок = "Тип цен";
ПараметрСКД.Значение = Справочники.ТипыЦенНоменклатуры.Прайс;
Результатом выполнения будет создание параметра запроса «ТипЦен» компоновщика настроек СКД.
9. Программное добавление условного оформления в СКД
// Инициализируем компоновщик настроек
НастройкиКомпоновки = КомпоновщикНастроек.Настройки;
// Создаем условное оформление
УсловноеОформление = НастройкиКомпоновки.УсловноеОформление.Элементы.Добавить();
УсловноеОформление.Использование = Истина;
// Устанавливаем поле условного оформления
ВыбранноеПолеКомпоновкиДанных = УсловноеОформление.Поля.Элементы.Добавить();
ВыбранноеПолеКомпоновкиДанных.Использование = Истина;
ВыбранноеПолеКомпоновкиДанных.Поле = Новый ПолеКомпоновкиДанных("Номенклатура");
// Устанавливаем область применения условного оформления
УсловноеОформление.ИспользоватьВЗаголовке = ИспользованиеУсловногоОформленияКомпоновкиДанных. Использовать;
УсловноеОформление.ИспользоватьВЗаголовкеПолей = ИспользованиеУсловногоОформленияКомпоновкиДанных. Использовать;
УсловноеОформление.ИспользоватьВОбщемИтоге = ИспользованиеУсловногоОформленияКомпоновкиДанных. Использовать;
// Устанавливаем отбор по полям условного оформления
ЭлементОтбораКомпоновкиДанных = УсловноеОформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораКомпоновкиДанных.Использование = Истина;
ЭлементОтбораКомпоновкиДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Цена");
ЭлементОтбораКомпоновкиДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбораКомпоновкиДанных.ПравоеЗначение = 10;
// Устанавливаем графическое формление полей
УсловноеОформление.Оформление.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ЦветФона"), WebЦвета. ПесочноКоричневый);
Результатом выполнения будет создание параметра запроса «ТипЦен» компоновщика настроек схемы компоновки данных.
10. Программное формирование отчета с СКД
// Создаем компоновщик макета компоновки данных
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
// Инициализируем компоновщик макета компоновки данных ранее созданной схемой компоновки данных и настройками схемы
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки);
// Формируем таблицу набора данных СКД
Запрос = Новый Запрос;
Запрос.Текст =
"...";
ТаблицаВходныхДанных = Запрос.Выполнить().Выгрузить();
ВнешниеНаборы = Новый Структура("ТаблицаВходныхДанных ", ТаблицаВходныхДанных);
// Формируем отчет
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Результатом выполнения будет сформированный отчет СКД.
Итоговый отчет СКД
Заключение программное создание СКД как оказывается не такая и сложная задача .
Спасибо за внимание уважаемые коллеги.
Таким образом, данный опыт помогает решать на проектах внедрения и адаптации типовых программных продуктов на платформе 1С:Предприятие нового поколения огромное количество задач под индивидуальные и уникальные требования Заказчика (отчеты, динамические списки, задание произвольных отборов и прочее).
Специалист компании «Кодерлайн»
Дмитрий Гречушкин