При работе в 1С:Розница часто возникают ситуации, когда требуется привести данные к единому стандарту. Одной из таких задач является массовое изменение типа штрихкодов для номенклатуры. Поскольку штрихкоды хранятся в Регистре сведений, простого группового изменения реквизитов бывает недостаточно из-за особенностей структуры метаданных. Давайте разберем, как решить эту задачу с помощью программной обработки.
Прежде чем приступать к написанию кода, необходимо понимать, что штрихкоды в типовых конфигурациях 1С хранятся в Регистре сведений (чаще всего с именем Штрихкоды). Важно учитывать следующие моменты:
МенеджерЗаписи или НаборЗаписей.Номенклатура, но и другие объекты системы, поэтому при фильтрации данных нужно быть внимательными.Для реализации задачи мы будем создавать внешнюю обработку. Это наиболее безопасный и правильный способ внесения изменений, который не требует снятия конфигурации с поддержки. Рассмотрим пошаговый алгоритм действий:
Первым делом нам нужно отобрать все записи, которые подлежат изменению. Лучше всего это сделать с помощью Запроса. Это позволит нам не только быстро найти нужные строки, но и сразу отфильтровать их по владельцу или текущему типу штрихкода.
ВЫБРАТЬ
Штрихкоды.Штрихкод КАК Штрихкод,
Штрихкоды.Владелец КАК Владелец,
Штрихкоды.ТипШтрихкода КАК ТипШтрихкода,
Штрихкоды.ЕдиницаИзмерения КАК ЕдиницаИзмерения
ИЗ
РегистрСведений.Штрихкоды КАК Штрихкоды
ГДЕ
Штрихкоды.ТипШтрихкода <> &НужныйТип
После того как мы получили результат запроса, нам необходимо обойти полученную выборку и для каждой записи произвести замещение. Так как изменить измерение регистра напрямую нельзя, мы удаляем старую запись и создаем новую. Рассмотрим пример кода для обработки записи:
// Предположим, РезультатЗапроса - это выборка из нашего запроса
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Используем менеджер записи для управления данными
Запись = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
// Заполняем ключи для поиска существующей записи
Запись.Штрихкод = Выборка.Штрихкод;
Запись.Владелец = Выборка.Владелец;
// Удаляем старую запись
Запись.Удалить();
// Создаем новую запись с нужным типом
Запись.ТипШтрихкода = НовыйТипШтрихкода; // Переменная с нужным значением
Запись.Записать();
КонецЦикла;
При написании обработки обязательно обратите внимание на следующие нюансы, чтобы избежать ошибок и потери данных:
EAN13 и EAN8, имеют разные требования к длине кода. Если вы просто смените тип, не изменив сам код, сканер может перестать распознавать такой штрихкод.Мы проанализировали структуру регистра и убедились, что использование МенеджераЗаписи является наиболее надежным способом. Создав такую обработку, вы сможете автоматизировать рутинную работу и быстро привести номенклатуру к требуемому стандарту.