Как разрешить пользователю редактировать макеты печатных форм в 1С:Предприятие

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

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

Штатный механизм редактирования макетов через подсистему БСП

В конфигурациях, использующих Библиотеку стандартных подсистем (включая «1С:Бухгалтерию», «1С:ERP», «1С:Университет ПРОФ» и другие современные решения), встроен типовой механизм переопределения макетов без правки метаданных в конфигураторе.

Разберем по шагам, как добраться до редактирования нужного макета в пользовательском режиме:

  1. Перейдем в раздел программы НСИ и администрирование (или Администрирование).
  2. Откроем пункт Печатные формы, отчеты и обработки.
  3. Перейдем по гиперссылке Макеты печатных форм.
  4. В открывшемся списке найдем требуемый документ и соответствующий ему макет.
  5. Нажмем кнопку Изменить. Программа откроет табличный документ во встроенном редакторе.
  6. Внесем необходимые правки и нажмем Записать и закрыть.

Проанализируем техническую сторону работы этого механизма. Измененный макет сохраняется в виде двоичных данных в регистре сведений ПользовательскиеМакетыПечати (в реквизите с типом ХранилищеЗначения). При вызове команды печати модуль УправлениеПечатью сначала проверяет, существует ли пользовательская запись в регистре для данного объекта. Если запись найдена, алгоритм подставляет пользовательский макет вместо предопределенного из метаданных. При необходимости всегда можно вернуться к исходному варианту макета с помощью команды Использовать стандартный макет.

Редактирование уже сформированного документа перед печатью

Если правка требуется разово для конкретного экземпляра документа, менять структуру общего макета не требуется. В окне предварительного просмотра сформированного табличного документа пользователю достаточно включить режим редактирования (нажать на панели кнопку с пиктограммой карандаша и таблицы или воспользоваться сочетанием клавиш Ctrl + Shift + W). После этого текст, числа и отступы в выведенном документе становятся доступными для ручной правки.

Решение проблемы смещения бланков программной калибровкой полей

Когда редактирование макета запрашивается исключительно из-за того, что типографские бланки имеют смещения, предоставление прямого доступа к ячейкам макета несет в себе риски. Пользователи могут случайно стереть системные параметры или нарушить имена областей. В таких случаях гораздо безопаснее реализовать механизм индивидуальной калибровки отступов.

В объекте ТабличныйДокумент предусмотрены штатные свойства для управления полями страницы, измеряемые в миллиметрах:

  1. ПолеСлева — отступ от левого края листа;
  2. ПолеСправа — отступ от правого края листа;
  3. ПолеСверху — отступ от верхнего края;
  4. ПолеСнизу — отступ от нижнего края;
  5. МасштабПечати и АвтоМасштаб — масштабирование документа.

Посмотрим на пример кода, который считывает сохраненные смещения (например, из регистра настроек или констант) и применяет их к сформированному табличному документу перед отправкой на печать:


// Применяем индивидуальные параметры юстировки бланка
ТабДокумент.ПолеСлева  = ТабДокумент.ПолеСлева + СмещениеПоГоризонтали;
ТабДокумент.ПолеСверху = ТабДокумент.ПолеСверху + СмещениеПоВертикали;
ТабДокумент.АвтоМасштаб = Ложь;
ТабДокумент.МасштабПечати = 100;

Такой подход позволяет настраивать смещение под конкретный принтер или партию бланков без риска повреждения самого шаблона печати.

Собственный механизм хранения и открытия макетов

Если конфигурация сильно доработана или в ней отсутствует БСП, аналогичный механизм можно написать самостоятельно. Создадим форму с элементом управления ПолеТабличногоДокумента, у которого свойство Редактирование установлено в значение Истина.

Посмотрим на пример логики сохранения и загрузки макета в базу данных:


// Загрузка макета для редактирования
ИсходныйМакет = ОбработкаОбъект.ПолучитьМакет("ПФ_MXL_Бланк");
Элементы.ПолеРедактора.Вывести(ИсходныйМакет);

// Сохранение отредактированного макета в регистр сведений
МенеджерЗаписи = РегистрыСведений.МоиПользовательскиеМакеты.СоздатьМенеджерЗаписи();
МенеджерЗаписи.ИмяМакета = "ПФ_MXL_Бланк";
МенеджерЗаписи.ДвоичныеДанныеМакета = Новый ХранилищеЗначения(Элементы.ПолеРедактора.ПолучитьТабличныйДокумент());
МенеджерЗаписи.Записать();

Риски и предостережения при редактировании макетов пользователями

Предоставляя пользователям право редактировать системные макеты, важно учитывать следующие особенности:

  1. Повреждение параметров и областей: Если пользователь случайно переименует или удалит параметр (например, выражение вида [Ссылка.Номер]) либо сотрет границу именованной области (Шапка, Строка), алгоритм печати завершится аварийно с ошибкой отсутствия параметра или области.
  2. Обновление конфигурации: При выходе обновлений типовой конфигурации разработчики могут добавить в оригинальный макет новые обязательные секции или реквизиты. Пользовательский макет останется прежним и будет переопределять стандартный, что приведет к ошибкам при печати новых данных.
  3. Разница в драйверах принтеров: Смещение печати на физическом листе часто связано с аппаратными непечатаемыми полями конкретной модели принтера. Изменение макета под один принтер может испортить печать на другом рабочем месте.
← На главную