Как в шаблоне наименования номенклатуры перевести метры в дециметры и дополнить число ведущими нулями до 4 знаков?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При настройке генерации рабочего наименования номенклатуры в конфигурациях 1С часто возникает задача привести числовое значение к строго фиксированному строковому формату. Рассмотрим распространенный кейс: в карточке товара длина реквизита вводится в метрах, но в наименовании её необходимо отражать в дециметрах (умножением на 10) и всегда приводить к длине в 4 символа с лидирующими нулями (например, 5 м = 50 дм -> 0050, а 152 м = 1520 дм -> 1520).

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

Решение в типовом редакторе шаблонов наименования (без программирования)

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

Проанализируем составление нужного выражения по шагам:

  1. Перевод в дециметры: Берем значение реквизита длины и умножаем его на 10.
  2. Задание фиксированной длины и лидирующих нулей: Используем функцию Формат() со специальными управляющими параметрами format-строки:
    • ЧЦ=4 — задает общее число отображаемых цифр (целой части);
    • ЧВН= — включает вывод ведущих (лидирующих) нулей;
    • ЧГ=0 — отключает группировку разрядов (чтобы не появлялись пробелы-разделители тысяч).

Итоговая формула для редактора шаблонов наименования будет выглядеть следующим образом:

Формат([{ДР.Длина}] * 10, "ЧЦ=4; ЧВН=; ЧГ=0")

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

Обработка пустых значений и дробной части

Если в процессе работы возможен ввод незаполненной длины или дробных чисел, рассмотрим дополнительные нюансы форматирования:

  1. Защита от незаполненных значений: Чтобы не выводить 0000 для товаров без указанной длины, в шаблоне можно применить условие:
    
    ?(ЗначениеЗаполнено([{ДР.Длина}]), Формат([{ДР.Длина}] * 10, "ЧЦ=4; ЧВН=; ЧГ=0"), "")
    
  2. Округление дробных значений: Если длина вводится с десятыми долями (например, 15.2 м = 152 дм), то при выполнении 15.2 * 10 получается ровно 152, что в формате выведет 0152. Если же числа могут содержать больше знаков после запятой, рекомендуется использовать явную функцию Окр().

Решение программным кодом (для процедур и модулей)

Если задача решается в коде модуля формы, обработчике проведения или в доработке на встроенном языке 1С, вызов функции Формат() выполняется аналогично:


ИсходнаяДлинаМетры = 15.2;
ДлинаДециметры = ИсходнаяДлинаМетры * 10;
СформированнаяСтрока = Формат(ДлинаДециметры, "ЧЦ=4; ЧВН=; ЧГ=0");
// Результат: "0152"

Также в качестве альтернативного (алгоритмического) варианта формирования строки с лидирующими нулями можно написать собственную универсальную функцию с применением конкатенации и расчета недостающих символов:


Функция ДобавитьНули(Значение, НужнаяДлинаЗначения)
    
    ЗначениеСтр = СтрЗаменить(Формат(Значение, "ЧГ=0"), " ", "");
    НадоНулей = НужнаяДлинаЗначения - СтрДлина(ЗначениеСтр);
    Если НадоНулей > 0 Тогда
        ВедущиеНули = Формат(0, "ЧЦ=" + НадоНулей + "; ЧН=; ЧВН=; ЧГ=0");
        Возврат ВедущиеНули + ЗначениеСтр;
    Иначе
        Возврат ЗначениеСтр;
    КонецЕсли;
    
КонецФункции

Альтернативные архитектурные решения

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

  1. Тип «Дополнительное значение»: Если список допустимых длин строго регламентирован стандартом предприятия, доп. реквизиту «Длина» выгодно задать тип «Дополнительное значение». В этом случае значения изначально хранятся в строковом формате (0050, 0100, 0152), и в шаблоне не требуется делать вычисления.
  2. Ввод значения сразу в дециметрах: Можно завести доп. реквизит «Длина, дм» с типом Число. Тогда в шаблоне отпадает необходимость умножать число на 10, достаточно оставить только форматирование строки.
← На главную