С помощью Системы Компоновки Данных (СКД) 1С можно быстро создавать гибкие и функциональные отчёты любой сложности. Но, возможно, иногда возникают такие случаи, когда к отчёту предъявляются требования, которые не могут быть учитаны в рамках визуального конструктора СКД. Такие случаи могут быть решены программным методом. Отчёт СКД можно построить не только визуально, но и написав соответствующий код. Какой код нужно написать, чтобы отчёт СКД корректно работал? Об этом эта статья.
Зачем программировать СКД?
Какие случаи требуют программного формирования отчёта СКД? Это такие случаи как:
- Специфические свойства табличного документа при формировании или выводе на печать;
- Необходимость формирования отчёта на основе внешних данных;
- Особое управление входными параметрами данных отчёта;
- Необходимость по-особому развёртывать/свёртывать группы строк/столбцов отчёта;
- Динамическое изменение параметров формирования отчёта и/или структуры вывода группировок по отчёту в зависимости от входных параметров.
Как создать программируемый отчёт СКД?
Для того, чтобы создать программируемый отчёт СКД необходимо:
1. Создать сам отчёт (внешний или внутренний) в системе 1С.
2. В отчёте создать Схему Компоновки Данных.
3. Создать форму отчёта с использованием Системы Компоновки Данных.
4. Назначить свой обработчик для кнопки «Сформировать».
5. В модуле формы отчёта прописать необходимый код.
Какой нужно написать код 1С?
В модуле формы отчёта я рекомендую написать следующий код:
Процедура ДействияФормыДействие(Кнопка)
ЭлементыФормы.Результат.Очистить();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);
КонецПроцедуры
Если отчёт использует входные параметры, что почти наверняка, то рекомендую добавить в код инициализацию параметров для использования в запросе СКД значений по умолчанию:
Процедура ДействияФормыДействие(Кнопка)
ЭлементыФормы.Результат.Очистить();
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки);
ДополнитьПараметрыКомпоновки(МакетКомпоновки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);
КонецПроцедуры
Процедура ДополнитьПараметрыКомпоновки(МакетКомпоновки)
ДобавитьПараметрКомпоновки(МакетКомпоновки, «НачалоПериода», Дата(‘00010101’));
ДобавитьПараметрКомпоновки(МакетКомпоновки, «КонецПериода», Дата(‘00010101’));
КонецПроцедуры
Процедура ДобавитьПараметрКомпоновки(МакетКомпоновки, Имя, Значение)
Если МакетКомпоновки.ЗначенияПараметров.Найти(Имя) = Неопределено Тогда
ПараметрКомпоновки = МакетКомпоновки.ЗначенияПараметров.Добавить();
ПараметрКомпоновки.Имя = Имя;
ПараметрКомпоновки.Значение = Значение;
КонецЕсли;
КонецПроцедуры
Теперь в код можно дописывать необходимые действия для видоизменения первоначальных настроек и табличного документа с результатом. Так можно, к примеру, сделать у отчёта фиксированную шапку или зафиксировать колонку, что бывает полезно, когда выводится сразу много данных.
Свежие комментарии