Как массово добавить ведущие нули в артикул товара в 1С?

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

В процессе работы с товарной номенклатурой часто возникает ситуация, когда артикулы имеют разную длину (например, "1", "25", "300"). Это приводит к серьезным неудобствам при сортировке: в списках 1С артикул "10" окажется выше, чем артикул "2", так как программа сортирует строковые значения посимвольно. Чтобы исправить это, необходимо привести все артикулы к единому стандарту, добавив ведущие нули (например, сделать все артикулы четырехзначными: "0001", "0025", "0300").

В данной статье мы разберем, как реализовать эту задачу с помощью типовой обработки «Групповое изменение реквизитов», проанализируем правильный синтаксис формул и рассмотрим нюансы, которые помогут избежать порчи данных.

Подготовительный этап: включение режима разработчика

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

Рассмотрим, как ее активировать:

  1. Откроем обработку «Групповое изменение реквизитов» (обычно находится в разделе «Администрирование» — «Обслуживание» — «Корректировка данных»).
  2. Нажмем на кнопку «Дополнительные параметры».
  3. В появившемся окне установим флажок «Режим разработчика».

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

Вариант 1: Использование функции Прав()

Проанализируем самый простой способ, к которому пришли участники обсуждения. Суть метода заключается в том, что мы «приклеиваем» к текущему артикулу строку из нулей, а затем отсекаем справа нужное количество символов.

Например, если нам нужно получить артикул длиной 4 символа, мы можем использовать следующую конструкцию:

Прав("0000" + [Артикул], 4)

Разберем по шагам, как это работает:

  1. Программа берет строку из четырех нулей "0000".
  2. Добавляет к ней текущее значение реквизита [Артикул] (например, "12"). Получается "000012".
  3. Функция Прав(..., 4) берет 4 символа с правого края строки. В итоге мы получаем "0012".

Важное замечание: в поле ввода формулы не нужно писать [Артикул] = .... Система сама понимает, что результат вычисления формулы должен быть записан в текущий реквизит. Если написать знак равенства, как это сделал автор темы, программа может вернуть логическое значение "Да" или "Нет" вместо строки, что испортит данные.

Вариант 2: Использование функции Формат() — профессиональный подход

Хотя метод с функцией Прав() работает, более гибким и надежным способом считается использование функции Формат(). Выясним, в чем ее преимущество. Если ваш артикул состоит только из цифр, мы можем сначала преобразовать его в число, а затем задать формат вывода.

Рассмотрим пример формулы:

Формат(Число([Артикул]), "ЧЦ=4; ЧВН=")

Разберем параметры этой функции:

Этот метод исключает ошибки ручного сложения строк и выглядит более лаконично в коде 1С.

Обработка невидимых пробелов с помощью СокрЛП()

Проанализируем ситуацию, когда формула может сработать некорректно. Если в базе данных артикулы были записаны с пробелами (например, " 12 "), то обычное сложение строк выдаст ошибку или неверный результат. Функция Прав("000" + " 12 ", 4) может вернуть " 12 " или "0 12".

Чтобы этого избежать, всегда рекомендуем использовать функцию СокрЛП() (сокращение лишних пробелов слева и справа). Правильный вариант написания формулы будет таким:

Прав("0000" + СокрЛП([Артикул]), 4)

Или для варианта с форматом:

Формат(Число(СокрЛП([Артикул])), "ЧЦ=4; ЧВН=")

Меры предосторожности при групповом изменении

Поскольку мы работаем сразу с сотнями или тысячами позиций, любая ошибка в формуле может привести к повреждению справочника «Номенклатура». Выясним, как обезопасить себя:

  1. Резервное копирование: Всегда создавайте копию базы данных перед выполнением групповых операций. Это правило номер один.
  2. Тестирование на одном объекте: Прежде чем запускать обработку для всего списка, перейдите на вкладку «Отбор», выберите один конкретный товар по ссылке и выполните изменение только для него. Проверьте результат в карточке товара.
  3. Проверка на дубли: Помните, что после добавления нулей разные ранее артикулы (например, "1" и "01") превратятся в один и тот же ("0001"). Если в вашей конфигурации настроен контроль уникальности артикулов, обработка может выдать ошибку. Если контроля нет — вы получите дублирующиеся артикулы, что может затруднить поиск и обмен с сайтом.

Альтернативный метод через Excel

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

  1. Выгружаем список товаров с текущими артикулами в таблицу Excel.
  2. В соседнем столбце применяем формулу Excel =ТЕКСТ(A1; "0000"), где "0000" — желаемая маска артикула.
  3. Копируем полученные значения и вставляем их как значения.
  4. Используем стандартную обработку «Загрузка данных из файла» в 1С, чтобы обновить артикулы по ключевому полю (например, по наименованию или старому артикулу).

Этот метод позволяет визуально проверить каждый артикул до того, как изменения попадут в базу 1С, что значительно снижает риски для рядового пользователя.

← На главную