В процессе эксплуатации системы «1С:Комплексная автоматизация 2» часто возникает ситуация, когда типовых печатных форм недостаточно, а существующие шаблоны этикеток и ценников не удовлетворяют требованиям бизнеса. При этом крайне важно сохранить конфигурацию на поддержке (без возможности изменения), чтобы не усложнять процесс последующих обновлений. Рассмотрим детально, как реализовать механизм редактирования пользовательского макета, используя возможности встроенной Библиотеки стандартных подсистем (БСП) и расширений.
Прежде всего, разберем ситуацию, когда нам необходимо добавить совершенно новую печатную форму или этикетку так, чтобы она появилась в штатном списке переопределяемых макетов. В конфигурациях на базе БСП (к которым относится и КА 2) существует специальный регистр или справочник «Макеты печатных форм». Найти его можно в разделе Администрирование — Печатные формы, отчеты и обработки.
Проанализируем алгоритм работы этого механизма:
Для этикеток, которые требуют частой настройки «под принтер» (то шире, то уже), оптимальным решением будет создание Внешней печатной формы (ВПФ). Рассмотрим, как это сделать по шагам:
Во внешней обработке в модуле объекта мы прописываем функцию СведенияОВнешнейОбработке(). Чтобы макет стал доступен для редактирования пользователем, мы должны включить его в состав печатных форм обработки. Проанализируем пример кода для регистрации:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'Печать пользовательской этикетки'");
НоваяКоманда.Идентификатор = "ПользовательскаяЭтикетка";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыПечать();
Возврат ПараметрыРегистрации;
КонецФункции
Когда такая форма загружена в справочник «Дополнительные отчеты и обработки», макет ТабличныйДокумент, находящийся внутри нее, становится доступен в общем списке макетов печати. Это позволяет пользователю самостоятельно подгонять размеры колонок под свои нужды без привлечения программиста.
Выясним причину, по которой штатный редактор этикеток в КА 2 часто не устраивает пользователей. Обычно это связано с ограничениями визуального конструктора. Однако мало кто знает, что в справочнике «Шаблоны этикеток и ценников» предусмотрена возможность импорта внешних файлов.
Разберем, как это реализовать:
.mxl в толстом клиенте или в любой другой базе. Настраиваем там все сложные элементы, включая штрихкоды и специфическое форматирование..mxl, сохраняя структуру табличного документа.Если нам нужно реализовать нестандартный интерфейс, где кнопка «Настроить макет» находится прямо в форме обработки, разберем техническую сторону хранения такого макета. Мы можем создать в расширении объект (например, регистр сведений), где будем хранить пользовательские настройки.
Для этого используется тип данных ХранилищеЗначений. Посмотрим на пример кода, который позволяет открыть макет для редактирования и сохранить его обратно:
// Процедура открытия макета для редактирования
&НаКлиенте
Процедура РедактироватьМакет(Команда)
ТабДок = ПолучитьМакетССервера();
ТабДок.ТолькоПросмотр = Ложь;
ТабДок.ОтображатьСетку = Истина;
ТабДок.Показать("Настройте макет этикетки");
КонецПроцедуры
// Сохранение отредактированного документа
&НаСервере
Процедура СохранитьМакет(ТабличныйДокумент)
Хранилище = Новый ХранилищеЗначений(ТабличныйДокумент, Новый СжатиеДанных(9));
// Запись в ресурс регистра или реквизит справочника
МенеджерЗаписи = РегистрыСведений.ПользовательскиеМакеты.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Макет = Хранилище;
МенеджерЗаписи.Записать();
КонецПроцедуры
В этом случае при формировании печатной формы программа должна сначала проверить наличие записи в этом регистре, и если она есть — извлечь макет методом Хранилище.Получить(). Если записи нет — использовать макет по умолчанию из конфигурации.
Проанализируем ситуацию, когда «всё разъезжается». Это критическая проблема для этикеток. При редактировании макета пользователем важно соблюдать следующие правила:
ТабДок.ПоляСверху = 0; ТабДок.ПоляСнизу = 0; и так далее.1С:Печать штрихкодов (ActiveX или встроенный объект в новых версиях платформы). Он ведет себя как картинка, которую можно растягивать, при этом алгоритм генерации кода остается корректным.Самый правильный и «чистый» путь для «1С:Комплексная автоматизация 2» — это использование внешней печатной формы в сочетании со штатным механизмом БСП «Переопределяемые макеты». Это дает пользователю знакомый интерфейс (Администрирование — Макеты печатных форм), а разработчику — возможность не вносить изменения в основную конфигурацию. Если же требуется максимально гибкая настройка этикеток, стоит смотреть в сторону загрузки готовых .mxl файлов в справочник шаблонов этикеток, что полностью решает проблему «неудобного встроенного редактора».