Как массово изменить тип штрихкодов для номенклатуры в 1С:Розница?

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

При работе в 1С:Розница часто возникают ситуации, когда требуется привести данные к единому стандарту. Одной из таких задач является массовое изменение типа штрихкодов для номенклатуры. Поскольку штрихкоды хранятся в Регистре сведений, простого группового изменения реквизитов бывает недостаточно из-за особенностей структуры метаданных. Давайте разберем, как решить эту задачу с помощью программной обработки.

Анализ структуры хранения данных

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

  1. Штрихкод является ключевым измерением. Это означает, что вы не можете просто изменить тип записи напрямую, так как система воспримет это как создание новой уникальной записи.
  2. Для выполнения изменений необходимо использовать МенеджерЗаписи или НаборЗаписей.
  3. Владельцем штрихкода может выступать не только Номенклатура, но и другие объекты системы, поэтому при фильтрации данных нужно быть внимательными.

Подготовка к разработке обработки

Для реализации задачи мы будем создавать внешнюю обработку. Это наиболее безопасный и правильный способ внесения изменений, который не требует снятия конфигурации с поддержки. Рассмотрим пошаговый алгоритм действий:

Шаг 1: Получение списка записей

Первым делом нам нужно отобрать все записи, которые подлежат изменению. Лучше всего это сделать с помощью Запроса. Это позволит нам не только быстро найти нужные строки, но и сразу отфильтровать их по владельцу или текущему типу штрихкода.


ВЫБРАТЬ
    Штрихкоды.Штрихкод КАК Штрихкод,
    Штрихкоды.Владелец КАК Владелец,
    Штрихкоды.ТипШтрихкода КАК ТипШтрихкода,
    Штрихкоды.ЕдиницаИзмерения КАК ЕдиницаИзмерения
ИЗ
    РегистрСведений.Штрихкоды КАК Штрихкоды
ГДЕ
    Штрихкоды.ТипШтрихкода <> &НужныйТип

Шаг 2: Реализация логики перезаписи

После того как мы получили результат запроса, нам необходимо обойти полученную выборку и для каждой записи произвести замещение. Так как изменить измерение регистра напрямую нельзя, мы удаляем старую запись и создаем новую. Рассмотрим пример кода для обработки записи:


// Предположим, РезультатЗапроса - это выборка из нашего запроса
Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл
    // Используем менеджер записи для управления данными
    Запись = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
    
    // Заполняем ключи для поиска существующей записи
    Запись.Штрихкод = Выборка.Штрихкод;
    Запись.Владелец = Выборка.Владелец;
    
    // Удаляем старую запись
    Запись.Удалить();
    
    // Создаем новую запись с нужным типом
    Запись.ТипШтрихкода = НовыйТипШтрихкода; // Переменная с нужным значением
    Запись.Записать();
КонецЦикла;

Важные рекомендации при выполнении задачи

При написании обработки обязательно обратите внимание на следующие нюансы, чтобы избежать ошибок и потери данных:

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

← На главную