В процессе работы с товарной номенклатурой часто возникает ситуация, когда артикулы имеют разную длину (например, "1", "25", "300"). Это приводит к серьезным неудобствам при сортировке: в списках 1С артикул "10" окажется выше, чем артикул "2", так как программа сортирует строковые значения посимвольно. Чтобы исправить это, необходимо привести все артикулы к единому стандарту, добавив ведущие нули (например, сделать все артикулы четырехзначными: "0001", "0025", "0300").
В данной статье мы разберем, как реализовать эту задачу с помощью типовой обработки «Групповое изменение реквизитов», проанализируем правильный синтаксис формул и рассмотрим нюансы, которые помогут избежать порчи данных.
Прежде чем приступать к написанию формул, нам необходимо убедиться, что инструмент позволяет выполнять произвольные алгоритмы. В современных версиях 1С (на базе БСП) возможность написания кода в групповой обработке по умолчанию может быть скрыта.
Рассмотрим, как ее активировать:
После этого в списке доступных реквизитов появится возможность вводить формулы, что нам и требуется для модификации артикула.
Проанализируем самый простой способ, к которому пришли участники обсуждения. Суть метода заключается в том, что мы «приклеиваем» к текущему артикулу строку из нулей, а затем отсекаем справа нужное количество символов.
Например, если нам нужно получить артикул длиной 4 символа, мы можем использовать следующую конструкцию:
Прав("0000" + [Артикул], 4)
Разберем по шагам, как это работает:
"0000".[Артикул] (например, "12"). Получается "000012".Прав(..., 4) берет 4 символа с правого края строки. В итоге мы получаем "0012".Важное замечание: в поле ввода формулы не нужно писать [Артикул] = .... Система сама понимает, что результат вычисления формулы должен быть записан в текущий реквизит. Если написать знак равенства, как это сделал автор темы, программа может вернуть логическое значение "Да" или "Нет" вместо строки, что испортит данные.
Хотя метод с функцией Прав() работает, более гибким и надежным способом считается использование функции Формат(). Выясним, в чем ее преимущество. Если ваш артикул состоит только из цифр, мы можем сначала преобразовать его в число, а затем задать формат вывода.
Рассмотрим пример формулы:
Формат(Число([Артикул]), "ЧЦ=4; ЧВН=")
Разберем параметры этой функции:
Число([Артикул]) — преобразует строковый артикул в числовой тип для корректной работы форматной строки.ЧЦ=4 — указывает общее количество знаков (длину артикула).ЧВН= — расшифровывается как «Числа с ведущими нулями». Этот параметр приказывает системе заполнить все пустые разряды слева нулями.Этот метод исключает ошибки ручного сложения строк и выглядит более лаконично в коде 1С.
Проанализируем ситуацию, когда формула может сработать некорректно. Если в базе данных артикулы были записаны с пробелами (например, " 12 "), то обычное сложение строк выдаст ошибку или неверный результат. Функция Прав("000" + " 12 ", 4) может вернуть " 12 " или "0 12".
Чтобы этого избежать, всегда рекомендуем использовать функцию СокрЛП() (сокращение лишних пробелов слева и справа). Правильный вариант написания формулы будет таким:
Прав("0000" + СокрЛП([Артикул]), 4)
Или для варианта с форматом:
Формат(Число(СокрЛП([Артикул])), "ЧЦ=4; ЧВН=")
Поскольку мы работаем сразу с сотнями или тысячами позиций, любая ошибка в формуле может привести к повреждению справочника «Номенклатура». Выясним, как обезопасить себя:
Если работа с кодом 1С кажется вам сложной, рассмотрим альтернативный вариант — использование загрузки данных из файла. Этот способ часто оказывается нагляднее:
=ТЕКСТ(A1; "0000"), где "0000" — желаемая маска артикула.Этот метод позволяет визуально проверить каждый артикул до того, как изменения попадут в базу 1С, что значительно снижает риски для рядового пользователя.