При работе в типовых конфигурациях, таких как 1С:Управление торговлей 11, 1С:ERP или 1С:Комплексная автоматизация, пользователи и разработчики часто сталкиваются с необходимостью кастомизации внешнего вида ценников. Одной из типичных задач является манипуляция с текстовыми данными: например, вывод только первых нескольких символов наименования, перевод строки в верхний регистр или обрезка лишних пробелов. Однако при попытке вставить стандартную функцию 1С, например Сред(Номенклатура.Наименование, 3, 5), в ячейку макета со свойством «Шаблон», система выводит пустую строку или ошибку.
Рассмотрим подробнее, почему так происходит, и разберем по шагам доступные способы реализации этой задачи.
Проанализируем ситуацию с технической точки зрения. Редактор шаблонов ценников и этикеток в режиме «1С:Предприятие» не является полноценным интерпретатором встроенного языка 1С. Когда вы указываете в квадратных скобках [...] путь к данным, программный код парсера ищет соответствующее поле в заранее подготовленной схеме компоновки данных (СКД). По сути, механизм печати просто заменяет текст в скобках на значение конкретного поля из набора данных.
Важные ограничения штатного парсера:
[Номенклатура.Артикул].Лев(), Прав(), Врег() и др.) непосредственно в момент заполнения макета.Таким образом, чтобы применить формулу, нам нужно передать в макет уже готовый, вычисленный результат. Рассмотрим три основных метода решения задачи.
Поскольку в основе печати ценников лежит Система компоновки данных (СКД), наиболее правильным методом будет добавление нового поля в саму схему. Посмотрим на алгоритм действий:
ПечатьЭтикетокИЦенников. В современных конфигурациях лучше работать через расширение, чтобы не снимать основную конфигурацию с поддержки.НаименованиеСокращенное.Например, для получения подстроки используем следующую конструкцию:
ПОДСТРОКА(Номенклатура.Наименование, 1, 10)
Если нам нужно программно обработать строку с использованием сложных алгоритмов, мы можем вызвать экспортную функцию общего модуля прямо из выражения СКД:
МойОбщийМодульСервер.ОбработатьНаименованиеДляЦенника(Номенклатура.Наименование)
После этого в режиме «Предприятие» при редактировании шаблона новое поле НаименованиеСокращенное появится в списке доступных полей, и его можно будет просто вставить в макет как [НаименованиеСокращенное].
Если у вас нет возможности привлекать программиста или вносить изменения в код конфигурации, разберем альтернативный метод. В типовых решениях 1С реализован механизм Дополнительных реквизитов и сведений.
Проанализируем этот путь:
[ДополнительныйРеквизит.КраткоеНазвание].Этот способ надежен тем, что не требует изменения программного кода и сохраняет типовую поддержку программы в первозданном виде.
Иногда пользователю кажется, что ему нужна формула, хотя на самом деле достаточно стандартного форматирования. Разберем пример с ценой. Если мы хотим вывести цену с двумя знаками после запятой и разделением триад, нам не нужно писать функции преобразования типов. В шаблоне 1С поддерживает синтаксис функции Формат().
Посмотрим на пример оформления ячейки:
[Цена #ЧЦ=15; ЧДЦ=2; ЧГ=3]
Здесь:
ЧЦ=15 — общее количество знаков;ЧДЦ=2 — два знака после запятой;ЧГ=3 — группировка разрядов (разделение тысяч).Важно помнить, что этот механизм работает только для типов «Число» и «Дата». Для манипуляций со строками (как в случае с наименованием из вопроса автора темы) этот метод, к сожалению, неприменим.
Подведем итог нашему анализу. Если задача разовая и касается небольшого количества товаров — используйте Дополнительные реквизиты. Это быстро и безопасно.
Если же вам требуется массовая автоматическая обработка строк по определенному алгоритму (например, обрезать все наименования до 20 символов для всех 50 000 позиций номенклатуры), то единственным эффективным решением будет использование расширения и модификация СКД через вычисляемые поля. Это позволит динамически формировать нужные данные в момент печати, не дублируя информацию в базе данных.
Рассмотренные инструменты позволяют решить практически любую задачу по кастомизации ценников, обеспечивая гибкость отображения данных без нарушения логики работы типового решения.