При ведении учета в 1С:Управление торговлей 11 нередко возникает необходимость массово изменить вид номенклатуры у ранее созданных позиций. Однако стандартная обработка Групповое изменение реквизитов при попытке перезаписать элементы часто выдает ошибку: программа сообщает о невозможности записи, ссылаясь на различия в особенностях учета или наличие движений по регистрам.
Проанализируем причины такого поведения системы, рассмотрим по шагам способы обхода блокировок и оценим последствия принудительной смены параметров учета.
В конфигурациях на платформе 1С:Предприятие 8.3 вид номенклатуры определяет фундаментальные параметры учета позиции справочника. Система выполняет строгие проверки при записи элемента по следующим причинам:
Товар, Услуга, Работа, Тара, Набор), особенности учета (маркируемая продукция, алкоголь, ВетИС) или настройки ведения характеристик и серий, типовая конфигурация запрещает прямую перезапись.Самый простой и быстрый способ изменить вид номенклатуры без доработки конфигурации — воспользоваться встроенными возможностями типовой обработки Групповое изменение реквизитов.
Разберем по шагам порядок действий:
Вид номенклатуры, отмечаем его галочкой и выбираем целевое значение.При включении Режима разработчика обработка устанавливает свойство ОбменДанными.Загрузка = Истина для каждого модифицируемого объекта. Это отключает выполнение проверок в модуле объекта и позволяет записать новое значение реквизита.
Если требуется изменить вид номенклатуры по сложному алгоритму или через внешнюю обработку, следует использовать программную установку режима загрузки данных. Посмотрим на пример кода, позволяющего безопасно обойти блокировки проверок без изменения текста типовой конфигурации:
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
// Проверяем условие отбора
Если Выборка.ВидНоменклатуры = СтарыйВидНоменклатуры Тогда
НоменклатураОбъект = Выборка.ПолучитьОбъект();
// Отключаем проверки бизнес-логики модулей
НоменклатураОбъект.ОбменДанными.Загрузка = Истина;
НоменклатураОбъект.ВидНоменклатуры = НовыйВидНоменклатуры;
Попытка
НоменклатураОбъект.Записать();
Исключение
Сообщить("Ошибка при записи позиции: " + НоменклатураОбъект.Наименование + " - " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
Использование свойства ОбменДанными.Загрузка является стандартным механизмом платформы и исключает необходимость комментировать код процедур ПередЗаписью или ПриЗаписи в конфигураторе.
Если типы номенклатуры совпадают и требуется корректно сопоставить дополнительные реквизиты, можно воспользоваться штатным механизмом переноса:
Применение режима ОбменДанными.Загрузка = Истина обходит прикладные механизмы контроля, что требует обязательной предварительной проверки на копии информационной базы. Обратим внимание на следующие риски:
ДополнительныеРеквизиты объекта, но перестанут отображаться в интерфейсе пользователя.Если характеристики учета кардинально отличаются (например, перевод из Товара в Услугу или смена политики учета серий), правильнее создать новые карточки номенклатуры, оприходовать остатки на новые позиции и списать их со старых карточек.