Часто в работе с типовыми конфигурациями, такими как ЗУП 3.1, возникает задача: нужно доработать печатную форму, которая технически является отчетом СКД. Снимать конфигурацию с поддержки ради изменения одного параметра сортировки — не лучшее решение. Разберем, как сделать это грамотно, используя механизм внешних печатных форм (ВПФ) и программное управление настройками КомпоновщикНастроек.
Если вам нужно динамически менять группировки или сортировки при печати, вы можете использовать код для управления настройками компоновки. Суть метода заключается в создании внешней обработки, которая вызывает типовой отчет, программно очищает текущие настройки и задает новые.
Рассмотрим пример реализации:
// Получаем настройки из компоновщика отчета
Настройки = ОтчетТ7.КомпоновщикНастроек.Настройки;
Настройки.Порядок.Элементы.Очистить;
// Добавляем новую сортировку
НовыйПорядок = Настройки.Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных"));
НовыйПорядок.Поле = Новый ПолеКомпоновкиДанных("ДатаНачала");
// Пересобираем структуру группировок
Настройки.Структура.Очистить;
ГруппировкаОрганизация = Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
// ... дальнейшее добавление элементов группировки ...
При таком подходе важно помнить, что вы фактически подменяете настройки отчета перед его выводом в ТабличныйДокумент. Однако этот метод требует тщательной отладки структуры СКД.
Более надежным и рекомендуемым способом является создание собственного варианта отчета в режиме «1С:Предприятие». Вместо того чтобы собирать дерево группировок кодом, вы настраиваете внешний вид отчета стандартными средствами программы, сохраняете его под своим именем и просто загружаете этот вариант в коде внешней печатной формы.
ЗагрузитьНастройки.Пример программной загрузки варианта:
// Загрузка заранее созданного варианта
Настройки = СхемаКомпоновкиДанных.ВариантыНастроек.Найти("Т7_СортировкаПоДате").Настройки;
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
Чтобы отчет заполнялся данными именно того документа, из которого вы вызываете печать, необходимо передать ссылку на объект в параметры данных СКД. В процедуре Печать(МассивОбъектов, ПараметрыПечати), которую использует БСП (Библиотека стандартных подсистем), необходимо:
ИнициализироватьОтчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПараметрыДанных.СкомпоноватьРезультат(ДокументРезультат).Используйте отладчик: при работе с СКД всегда полезно посмотреть содержимое КомпоновщикНастроек.Настройки во время исполнения. Это позволит увидеть, какие именно поля и группировки доступны для модификации.
Разделяйте задачи: если вы создаете внешнюю печатную форму, она должна подключаться через справочник Дополнительные отчеты и обработки. Не пытайтесь сделать из отчета полноценную ВПФ без соблюдения структуры БСП — это усложнит поддержку решения в будущем.
Особенности ЗУП 2.5: помните, что в устаревших конфигурациях на обычных формах (ЗУП 2.5) механизмы СКД и БСП работают иначе. Там часто эффективнее просто скопировать типовой код печати в модуль внешней обработки и внести правки напрямую в запрос, нежели пытаться адаптировать сложные механизмы компоновки.