Как скрыть заголовок характеристики в ценнике 1С, если значение пустое?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При настройке шаблонов этикеток и ценников в современных конфигурациях на платформе 1С:Предприятие 8.3, таких как «Управление торговлей 11» или «Розница 2», пользователи часто сталкиваются с проблемой «лишнего» текста. Типичный пример: в макете задан шаблон вывода характеристик вида "Размер: [Размер], Цвет: [Цвет]". Если у товара не указан цвет, на ценнике остается висеть некрасивая надпись "Размер: 42, Цвет: ". Стандартный редактор макета не позволяет прописать условие прямо в ячейке, как это делается в Excel.

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

Метод 1: Использование вычисляемых полей в СКД

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

Разберем этот процесс по шагам:

  1. Откроем обработку ПечатьЭтикетокИЦенников в конфигураторе или через механизм редактирования схем компоновки в режиме «1С:Предприятие» (если это предусмотрено версией конфигурации).
  2. Перейдем на закладку «Вычисляемые поля».
  3. Добавим новое поле, назовем его, например, ПредставлениеЦвета.
  4. В колонке «Выражение» пропишем логическое условие на языке выражений СКД:

ВЫБОР 
    КОГДА ЗначениеЗаполнено(Характеристика.Цвет) 
    ТОГДА "Цвет: " + Строка(Характеристика.Цвет) 
    ИНАЧЕ "" 
КОНЕЦ

Теперь проанализируем, что произойдет: если поле Цвет в характеристике заполнено, СКД вернет строку с префиксом. Если нет — вернется пустая строка, которая не займет места на ценнике. Аналогично создаем поле ПредставлениеРазмера.

В самом макете этикетки теперь нужно использовать не два элемента, а один — наше новое вычисляемое поле [ПредставлениеЦвета]. Это полностью решает проблему «висячих» заголовков.

Метод 2: Применение функции «СтрокаСоединить» в СКД

Если нам нужно вывести целый список характеристик через запятую (например: Цвет, Размер, Материал), и при этом мы не хотим видеть лишние запятые и пустые места, удобнее всего воспользоваться функцией СКД СтрокаСоединить. Эта функция автоматически игнорирует пустые значения, что делает её идеальным инструментом для формирования динамических строк.

Рассмотрим пример выражения для вычисляемого поля ПолноеОписаниеХарактеристик:


СтрокаСоединить(", ", 
    ВЫБОР КОГДА ЗначениеЗаполнено(Характеристика.Размер) ТОГДА "Размер: " + Строка(Характеристика.Размер) ИНАЧЕ "" КОНЕЦ,
    ВЫБОР КОГДА ЗначениеЗаполнено(Характеристика.Цвет) ТОГДА "Цвет: " + Строка(Характеристика.Цвет) ИНАЧЕ "" КОНЕЦ
)

В данном случае функция СтрокаСоединить возьмет все непустые результаты условий ВЫБОР и объединит их, вставив между ними запятую и пробел. Если ни одна характеристика не заполнена, поле останется абсолютно пустым.

Метод 3: Настройка через пользовательские поля

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

  1. В окне настройки печати этикеток перейдем в расширенный режим настройки компоновки.
  2. Найдем вкладку «Пользовательские поля».
  3. Создадим новое Поле-выражение.
  4. В детальных записях укажем то же самое условие ВЫБОР КОГДА..., которое мы обсуждали в первом методе.

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

Метод 4: Программное управление текстом макета (через расширение)

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

Проанализируем ситуацию: в момент формирования ценника система заполняет параметры макета данными из выборки. Мы можем использовать процедуру-обработчик ПриПечати в общем модуле УправлениеПечатьюПереопределяемый или вмешаться в модуль менеджера обработки печати этикеток.

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


// Пример в коде формирования этикетки
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
Если Не ЗначениеЗаполнено(ДанныеПечати.Цвет) Тогда
    // Находим ячейку, где должен быть цвет, и очищаем её или меняем текст
    ОбластьМакета.Параметры.ЦветТекст = ""; 
Иначе
    ОбластьМакета.Параметры.ЦветТекст = "Цвет: " + ДанныеПечати.Цвет;
КонецЕсли;
ТабличныйДокумент.Вывести(ОбластьМакета);

Этот метод является наиболее трудоемким, так как требует навыков программирования и понимания того, как работает объект ТабличныйДокумент и его параметры. Однако он дает абсолютную гибкость: вы можете менять шрифты, цвета или даже скрывать целые строки макета в зависимости от любых условий.

Метод 5: Использование внешних печатных форм

Если типовой механизм печати ценников в вашей конфигурации слишком ограничен (как, например, это было в старых версиях УТ 10.3), самым эффективным решением будет создание внешней обработки печати. В ней вы полностью контролируете процесс формирования каждой строки.

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

Итоги и рекомендации

Мы рассмотрели несколько способов решения задачи по динамическому скрытию заголовков характеристик. Подведем итог:

Используя эти подходы, вы сможете создавать профессиональные, аккуратные ценники, которые не будут содержать пустой и бесполезной информации, что повышает доверие покупателей и удобство работы персонала.

← На главную