Как исправить ошибку «у нового вида другая особенность учета» при смене вида номенклатуры в 1С:УТ 11?

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

При попытке сменить вид номенклатуры в программе «1С:Управление торговлей 11» (а также в «1С:ERP» или «1С:Комплексная автоматизация») пользователи и администраторы нередко сталкиваются с системной ошибкой: «Проблема при изменении вида номенклатуры: у нового вида другая особенность учета». В интерактивном режиме карточки товара система иногда позволяет проигнорировать предупреждение повторной записью, однако при пакетной обработке через «Групповое изменение реквизитов» эта ошибка намертво блокирует операцию. Разберем по шагам, почему возникает эта коллизия, как устроен механизм проверки и какими методами ее можно устранить.

Анализ механизма проверки: почему система выдает отказ

Проанализируем логику работы конфигурации. При записи элемента справочника Номенклатура в процедуре ПередЗаписью вызывается обработчик модуля менеджера ПроверитьКорректностьСменыВидаНоменклатурыЗаполнитьПоНовомуВиду(). Внутри этой процедуры выполняется запрос, сравнивающий ключевые параметры текущего и назначаемого вида номенклатуры. Проверяются следующие реквизиты:

  1. ТипНоменклатуры (Товар, Услуга, Работа, Тара, Набор).
  2. Настройки ведения характеристик (ИспользованиеХарактеристик, ВладелецХарактеристик).
  3. Политика ведения серий (ИспользоватьСерии, ВладелецСерий).
  4. Значение перечисления ОсобенностиУчетаНоменклатуры в реквизите ОсобенностьУчета.

Фрагмент запроса проверки выглядит следующим образом:


ВЫБОР
    КОГДА &Ссылка = НовыйВидНоменклатуры.Ссылка
        ТОГДА ЛОЖЬ
    КОГДА &ОсобенностьУчета <> НовыйВидНоменклатуры.ОсобенностьУчета
        ТОГДА ИСТИНА
    ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ЕстьПроблемаОсобенностьУчета

Выясним причину ошибки: если база данных обновлялась с ранних релизов конфигурации (когда реквизита ОсобенностьУчета еще не существовало либо он не заполнялся по умолчанию), у старых видов номенклатуры этот реквизит остается пустым (имеет значение ПустаяСсылка). У вновь создаваемых видов номенклатуры по умолчанию устанавливается значение Перечисления.ОсобенностиУчетаНоменклатуры.БезОсобенностейУчета. В результате условие &ОсобенностьУчета <> НовыйВидНоменклатуры.ОсобенностьУчета возвращает ИСТИНА, и процедура выставляет признак Отказ = Истина.

Сложность заключается в том, что на форме элемента справочника ВидыНоменклатуры поле ОсобенностьУчета скрыто, если выбрано значение «Без особенностей учета», и становится доступным только при выборе специальных типов продукции (алкоголь, маркируемые товары, драгметаллы и др.). Вручную перезаписать значение в пользовательском интерфейсе вида номенклатуры не удается.

Способ 1. Штатное исправление видов номенклатуры через групповую обработку

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

  1. Откроем раздел НСИ и администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов (или воспользуемся встроенной функцией «Изменить выделенные» прямо из списка видов номенклатуры).
  2. В поле «Изменять» выберем справочник Виды номенклатуры.
  3. По умолчанию служебные реквизиты могут быть скрыты. Откроем «Дополнительные параметры» внизу формы обработки и установим флаг «Показывать служебные реквизиты».
  4. Найдем в списке реквизит Особенность учета, установим напротив него флаг и выберем значение Без особенностей учета.
  5. Нажмем кнопку «Изменить реквизиты».

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

Способ 2. Программное заполнение реквизита внешней обработкой

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


&НаСервере
Процедура ИсправитьОсобенностиУчетаВидовНоменклатуры()
    Счетчик = 0; 
    Исправлено = 0;
    
    Выборка = Справочники.ВидыНоменклатуры.Выбрать();
    Пока Выборка.Следующий() Цикл 
        Если Выборка.ПометкаУдаления Тогда
            Продолжить;
        КонецЕсли;
        
        Счетчик = Счетчик + 1;
        
        // Проверяем, заполнена ли особенность учета
        Если ЗначениеЗаполнено(Выборка.ОсобенностьУчета) Тогда
            Сообщить("Вид номенклатуры: '" + СокрЛП(Выборка.Ссылка) + "' уже имеет особенность: '" + СокрЛП(Выборка.ОсобенностьУчета) + "'", СтатусСообщения.Информация);
            Продолжить;
        КонецЕсли;
        
        ОбъектВид = Выборка.ПолучитьОбъект();
        ОбъектВид.ОсобенностьУчета = Перечисления.ОсобенностиУчетаНоменклатуры.БезОсобенностейУчета;
        
        Попытка
            ОбъектВид.Записать();
            Исправлено = Исправлено + 1;
            Сообщить("Успешно исправлен: '" + СокрЛП(ОбъектВид) + "'", СтатусСообщения.Информация);
        Исключение
            Сообщить("Не удалось записать: '" + СокрЛП(ОбъектВид) + "'. Ошибка: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
        КонецПопытки;
    КонецЦикла;
    
    Сообщить("Обработка завершена. Всего исправлено: " + Исправлено + " из " + Счетчик, СтатусСообщения.Важное);
КонецПроцедуры

Способ 3. Изменение вида номенклатуры в режиме загрузки данных

Если требуется разово изменить вид номенклатуры у выделенного пула товаров, минуя строгие алгоритмы проверки в процедуре ПередЗаписью, воспользуемся сервисными возможностями стандартной подсистемы группового изменения объектов.

  1. Выделим необходимые товары в списке справочника Номенклатура, нажмем правую кнопку мыши и выберем «Изменить выделенные...».
  2. В открывшемся окне перейдем по ссылке «Дополнительные параметры».
  3. Включим опцию «Режим разработчика» или активируем флаг «Загрузка данных (отключение проверок)». В этом режиме объект записывается с установленным свойством ОбменДанными.Загрузка = Истина.
  4. Выберем новый вид номенклатуры и выполним запись. Процедура ПроверитьКорректностьСменыВидаНоменклатурыЗаполнитьПоНовомуВиду() будет пропущена, и данные запишутся без системных ошибок.

Важные риски и методологические ограничения

Обратим особое внимание на последствия принудительной смены вида номенклатуры. Если позиция уже участвовала в товародвижении (по ней есть остатки, партии, оформленные продажи или закупки), прямое изменение вида номенклатуры через отключение проверок может привести к серьезным сбоям в учете:

  1. Разрыв связи с сериями: в справочнике СерииНоменклатуры реквизит ВидНоменклатуры жестко связан с карточкой товара. Если вид у номенклатуры изменится, а у существующих серий останется старым, документы списания и реализации перестанут видеть остатки серий при автоматическом подборе.
  2. Несовместимость характеристик: если у прежнего вида характеристики были общими для вида (владелец — вид номенклатуры), а у нового настроены как индивидуальные (владелец — конкретная номенклатура), проведенные документы прошлых периодов при перепроведении потеряют аналитику.
  3. Ошибки партионного учета и закрытия месяца: смена типа номенклатуры или перевод товара в категорию маркируемой/подконтрольной продукции задним числом приводит к расхождениям в регистрах накопления ТоварыНаСкладах и СебестоимостьТоваров.

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

← На главную