При работе с печатными документами часто возникает ситуация, когда типовой макет не полностью соответствует текущим потребностям. Особенно остро этот вопрос встает при печати на готовых типографских бланках (например, дипломах, сертификатах, строгих бланках отчетности), где от партии к партии смещаются поля, границы или межстрочные интервалы. Вносить изменения через конфигуратор и перезапускать систему ради небольшого смещения текста неэффективно. Рассмотрим, как предоставить пользователям возможность корректировать макеты непосредственно в режиме 1С:Предприятие, а также разберем альтернативные и более безопасные подходы к юстировке печати.
В конфигурациях, использующих Библиотеку стандартных подсистем (включая «1С:Бухгалтерию», «1С:ERP», «1С:Университет ПРОФ» и другие современные решения), встроен типовой механизм переопределения макетов без правки метаданных в конфигураторе.
Разберем по шагам, как добраться до редактирования нужного макета в пользовательском режиме:
Проанализируем техническую сторону работы этого механизма. Измененный макет сохраняется в виде двоичных данных в регистре сведений ПользовательскиеМакетыПечати (в реквизите с типом ХранилищеЗначения). При вызове команды печати модуль УправлениеПечатью сначала проверяет, существует ли пользовательская запись в регистре для данного объекта. Если запись найдена, алгоритм подставляет пользовательский макет вместо предопределенного из метаданных. При необходимости всегда можно вернуться к исходному варианту макета с помощью команды Использовать стандартный макет.
Если правка требуется разово для конкретного экземпляра документа, менять структуру общего макета не требуется. В окне предварительного просмотра сформированного табличного документа пользователю достаточно включить режим редактирования (нажать на панели кнопку с пиктограммой карандаша и таблицы или воспользоваться сочетанием клавиш Ctrl + Shift + W). После этого текст, числа и отступы в выведенном документе становятся доступными для ручной правки.
Когда редактирование макета запрашивается исключительно из-за того, что типографские бланки имеют смещения, предоставление прямого доступа к ячейкам макета несет в себе риски. Пользователи могут случайно стереть системные параметры или нарушить имена областей. В таких случаях гораздо безопаснее реализовать механизм индивидуальной калибровки отступов.
В объекте ТабличныйДокумент предусмотрены штатные свойства для управления полями страницы, измеряемые в миллиметрах:
ПолеСлева — отступ от левого края листа;ПолеСправа — отступ от правого края листа;ПолеСверху — отступ от верхнего края;ПолеСнизу — отступ от нижнего края;МасштабПечати и АвтоМасштаб — масштабирование документа.Посмотрим на пример кода, который считывает сохраненные смещения (например, из регистра настроек или констант) и применяет их к сформированному табличному документу перед отправкой на печать:
// Применяем индивидуальные параметры юстировки бланка
ТабДокумент.ПолеСлева = ТабДокумент.ПолеСлева + СмещениеПоГоризонтали;
ТабДокумент.ПолеСверху = ТабДокумент.ПолеСверху + СмещениеПоВертикали;
ТабДокумент.АвтоМасштаб = Ложь;
ТабДокумент.МасштабПечати = 100;
Такой подход позволяет настраивать смещение под конкретный принтер или партию бланков без риска повреждения самого шаблона печати.
Если конфигурация сильно доработана или в ней отсутствует БСП, аналогичный механизм можно написать самостоятельно. Создадим форму с элементом управления ПолеТабличногоДокумента, у которого свойство Редактирование установлено в значение Истина.
Посмотрим на пример логики сохранения и загрузки макета в базу данных:
// Загрузка макета для редактирования
ИсходныйМакет = ОбработкаОбъект.ПолучитьМакет("ПФ_MXL_Бланк");
Элементы.ПолеРедактора.Вывести(ИсходныйМакет);
// Сохранение отредактированного макета в регистр сведений
МенеджерЗаписи = РегистрыСведений.МоиПользовательскиеМакеты.СоздатьМенеджерЗаписи();
МенеджерЗаписи.ИмяМакета = "ПФ_MXL_Бланк";
МенеджерЗаписи.ДвоичныеДанныеМакета = Новый ХранилищеЗначения(Элементы.ПолеРедактора.ПолучитьТабличныйДокумент());
МенеджерЗаписи.Записать();
Предоставляя пользователям право редактировать системные макеты, важно учитывать следующие особенности:
[Ссылка.Номер]) либо сотрет границу именованной области (Шапка, Строка), алгоритм печати завершится аварийно с ошибкой отсутствия параметра или области.