Печатная форма на СКД в 1С: практическая польза или неоправданное усложнение?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Разработчики в экосистеме 1С часто сталкиваются с дилеммой при выборе архитектурного решения для создания печатных форм. Традиционный подход с использованием классического макета табличного документа и ручным обходом областей в коде знаком каждому. Однако все чаще на профессиональных ресурсах и в типовых конфигурациях от самой фирмы «1С» прослеживается альтернативный тренд — формирование печатных форм с помощью Системы компоновки данных (СКД).

В этой статье мы подробно разберем, является ли использование СКД для вывода печатных форм лишь «модными понтами» или же это мощный инструмент повышения эффективности разработки. Мы проанализируем практический опыт практикующих специалистов, рассмотрим плюсы и минусы данного подхода, изучим конкретные примеры его применения и выделим смежные области, в которых СКД способна существенно облегчить жизнь программисту.

Императивный vs Декларативный подход: в чем ключевое отличие?

Чтобы понять суть дискуссии, давайте сопоставим два кардинально разных подхода к формированию печатных документов.

Классический (императивный) подход. Разработчик полностью контролирует процесс в коде программного модуля. Мы пишем запрос, получаем выборку данных, затем последовательно обращаемся к каждой секции макета, заполняем параметры и выводим области в итоговый табличный документ. Пример стандартной схемы выглядит следующим образом:


ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапка.Параметры.Заполнить(ДанныеШапки);
ТабДок.Вывести(ОбластьШапка);

ВыборкаСтрок = ДанныеТабличнойЧасти.Выбрать();
Пока ВыборкаСтрок.Следующий() Цикл
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    ОбластьСтрока.Параметры.Заполнить(ВыборкаСтрок);
    ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;

Подход на основе СКД (декларативный). Вместо явного описания шагов «как выводить», разработчик описывает структуру данных и правила их компоновки в специальной схеме (с использованием XML-описания или визуального конструктора), а всю рутинную работу по обходу выборки, выводу группировок, подсчету итогов и оформлению платформа берет на себя. Код вывода печатной формы при этом сокращается до универсального шаблона:


СхемаКомпоновкиДанных = ПолучитьМакет("СхемаПечатнойФормы");
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);

ТабДок = Новый ТабличныйДокумент;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

Теперь выясним, в каких реальных ситуациях декларативный подход СКД выигрывает у классического.

Практические преимущества использования СКД для печатных форм

Опыт практикующих разработчиков показывает, что использование СКД для вывода документов дает колоссальные преимущества в следующих сценариях:

  1. Частые изменения требований заказчика («хотелки, свистелки и дуделки»). Как справедливо отмечено в обсуждении (Сообщение 6), бывают ситуации, когда у клиента нет четкого понимания конечного вида документа. Разработчик делает классический вариант, а затем начинается бесконечный цикл правок: «добавьте эту колонку», «сдвиньте группировку», «выделите цветом просрочку». Если форма построена на СКД, подобные доработки занимают считанные минуты. Нам достаточно изменить настройки структуры или условного оформления в компоновщике, не переписывая ни одной строчки программного кода. Трудозатраты на сопровождение снижаются в разы (Сообщение 7).
  2. Оперативные документы со сложной логикой сортировки и группировки. Рассмотрим пример из практики автоматизации адресного склада (Сообщение 9). Для создания «бумажных» отборочных листов потребовалось выводить товары с сортировкой по зонам приоритета, классам ABC, ячейкам и уровням. Реализация такого алгоритма в ручном режиме потребовала бы написания громоздких многоуровневых запросов и сложной логики вывода областей. На СКД эта задача решилась простым перетаскиванием полей в панели настроек группировки и сортировки компоновщика данных.
  3. Унификация программного кода. Если в конфигурации используется множество разнородных печатных форм, перевод их на технологию СКД позволяет создать один общий универсальный модуль печати (Сообщение 4, Сообщение 22). Программа просто берет схему компоновки, применяет настройки и выводит результат единой процедурой, что существенно повышает чистоту кода и упрощает глобальный рефакторинг системы.
  4. Интеграция с механизмами БСП (Библиотеки стандартных подсистем). В современных конфигурациях 1С (таких как ЗУП 3.1 КОРП, ERP, БП 3) на базе СКД реализована подсистема «Настраиваемые печатные формы». Пользователи могут самостоятельно, прямо в пользовательском режиме (1С:Предприятие), редактировать состав колонок, добавлять новые реквизиты (включая дополнительные сведения) и настраивать условное оформление без привлечения программистов.

Обратная сторона медали: существенные недостатки и ограничения

Несмотря на очевидные плюсы, СКД — это не «серебряная пуля». Существуют веские технологические причины, по которым разработчики отказываются от этой схемы в определенных задачах (Сообщение 22):

Где еще применима СКД помимо отчетов и печатных форм?

Система компоновки данных давно переросла рамки обычного генератора отчетов. Проанализируем другие эффективные сферы ее применения, упомянутые экспертами на форуме:

Резюме: как сделать правильный выбор?

Проанализировав все «за» и «против», мы можем сформулировать четкие рекомендации по выбору технологии создания печатных форм в 1С:

Выбирайте классический способ (вывод областей макета вручную), если перед вами стоит задача реализовать жестко регламентированную государством форму отчетности (например, УПД, ТОРГ-12, Счета-фактуры, ТТН). Здесь важна точность до миллиметра, высокая скорость массовой печати и абсолютная предсказуемость поведения макета на любых принтерах.

Отдавайте предпочтение СКД, если вы создаете внутренние рабочие документы предприятия (ведомости, спецификации, отборочные листы, технологические карты, реестры), требования к внешнему виду которых постоянно меняются. Возможность быстрой перестройки структуры документа силами пользователя или легкой кастомизации силами программиста с лихвой перекроет все трудности настройки макетов схемы компоновки данных.

← На главную