Можно ли использовать произвольные формулы и функции обработки текста в редакторе шаблонов ценников?

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

При работе в типовых конфигурациях, таких как 1С:Управление торговлей 11, 1С:ERP или 1С:Комплексная автоматизация, пользователи и разработчики часто сталкиваются с необходимостью кастомизации внешнего вида ценников. Одной из типичных задач является манипуляция с текстовыми данными: например, вывод только первых нескольких символов наименования, перевод строки в верхний регистр или обрезка лишних пробелов. Однако при попытке вставить стандартную функцию 1С, например Сред(Номенклатура.Наименование, 3, 5), в ячейку макета со свойством «Шаблон», система выводит пустую строку или ошибку.

Рассмотрим подробнее, почему так происходит, и разберем по шагам доступные способы реализации этой задачи.

Выясним причину: почему формулы не работают напрямую в шаблоне

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

Важные ограничения штатного парсера:

  1. Он понимает прямые ссылки на реквизиты через точку, например: [Номенклатура.Артикул].
  2. Он поддерживает стандартные форматные строки платформы для чисел и дат.
  3. Он не умеет вычислять выражения встроенного языка (функции Лев(), Прав(), Врег() и др.) непосредственно в момент заполнения макета.

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

Решение 1: Использование вычисляемых полей в СКД (Для разработчиков)

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

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

Например, для получения подстроки используем следующую конструкцию:

ПОДСТРОКА(Номенклатура.Наименование, 1, 10)

Если нам нужно программно обработать строку с использованием сложных алгоритмов, мы можем вызвать экспортную функцию общего модуля прямо из выражения СКД:

МойОбщийМодульСервер.ОбработатьНаименованиеДляЦенника(Номенклатура.Наименование)

После этого в режиме «Предприятие» при редактировании шаблона новое поле НаименованиеСокращенное появится в списке доступных полей, и его можно будет просто вставить в макет как [НаименованиеСокращенное].

Решение 2: Использование дополнительных реквизитов (Для пользователей)

Если у вас нет возможности привлекать программиста или вносить изменения в код конфигурации, разберем альтернативный метод. В типовых решениях 1С реализован механизм Дополнительных реквизитов и сведений.

Проанализируем этот путь:

  1. В разделе «Администрирование» создадим новый дополнительный реквизит для объекта «Номенклатура», назовем его, например, «Краткое название».
  2. Заполним этот реквизит у нужных товаров. Это можно сделать вручную или воспользоваться групповой обработкой справочников.
  3. В редакторе шаблона ценника механизм 1С автоматически подтянет дополнительные реквизиты в список доступных полей. Вам останется только выбрать [ДополнительныйРеквизит.КраткоеНазвание].

Этот способ надежен тем, что не требует изменения программного кода и сохраняет типовую поддержку программы в первозданном виде.

Решение 3: Форматные строки (Для чисел и дат)

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

Посмотрим на пример оформления ячейки:

[Цена #ЧЦ=15; ЧДЦ=2; ЧГ=3]

Здесь:

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

Выясним, какой метод выбрать?

Подведем итог нашему анализу. Если задача разовая и касается небольшого количества товаров — используйте Дополнительные реквизиты. Это быстро и безопасно.

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

Рассмотренные инструменты позволяют решить практически любую задачу по кастомизации ценников, обеспечивая гибкость отображения данных без нарушения логики работы типового решения.

← На главную