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