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