Как исправить ошибку Значение поля Аналитика учета номенклатуры не может быть пустым при переносе данных в УТ 11?

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

При разработке правил конвертации данных и миграции документов из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11 (а также в 1С:ERP или 1С:Комплексная автоматизация) разработчики часто сталкиваются с ошибкой записи регистров накопления. Во время загрузки документа (например, ПеремещениеТоваров) платформа выдает исключение: Ошибка при вызове метода контекста (Записать): Запись не верна! Значение поля "Аналитика учета номенклатуры" не может быть пустым! (Регистр накопления: ТоварыОрганизаций).

Разберем архитектурные причины возникновения этой проблемы и рассмотрим пошаговые методы её решения в правилах обмена и базе-приемнике.

Архитектурные особенности механизма аналитики учета номенклатуры

В конфигурациях нового поколения (УТ 11, КА 2, ERP) учет запасов устроен иначе, чем в УТ 10.3. Вместо прямого хранения номенклатуры, склада, характеристик и серий во всех регистрах накопления используется единый разделитель — справочник КлючиАналитикиУчетаНоменклатуры.

Проанализируем ключевые особенности работы этого механизма:

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

Способ 1. Включение проведения документа в правилах конвертации

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

Разберем, как настроить правило конвертации объекта (ПКО) в конфигурации «Конвертация данных 2.1»:

  1. Откроем ПКО нужного документа (например, ПеремещениеТоваров).
  2. Перейдем в обработчик ПередЗагрузкой и укажем режим записи объекта:

РежимЗаписи = "Проведение";

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

Способ 2. Отключение режима загрузки и безопасное проведение в обработчике ПослеЗагрузки

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

Посмотрим на пример кода:


Объект.ОбменДанными.Загрузка = Ложь;
Попытка
    Объект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
    // В случае ошибок проведения записываем документ как непроведенный
    Объект.Записать(РежимЗаписиДокумента.Запись);
КонецПопытки;

Выключение свойства ОбменДанными.Загрузка заставляет конфигурацию выполнять все стандартные проверки, расчет видов запасов и генерацию элементов справочника КлючиАналитикиУчетаНоменклатуры.

Способ 3. Исключение движений регистров из выгрузки

Частая ошибка при настройке переноса — выгрузка наборов записей регистров накопления напрямую из УТ 10.3 в УТ 11. Поскольку в исходной базе измерение АналитикаУчетаНоменклатуры отсутствует физически, в файл обмена попадает пустое значение. При записи набора платформа наталкивается на установленный в метаданных запрет незаполненных значений.

Проверим правила выгрузки данных (ПВД):

  1. Убедимся, что выгружаются только документы и их табличные части.
  2. Отключим прямую выгрузку регистров накопления (ТоварыОрганизаций, СебестоимостьТоваров, СвободныеОстатки).
  3. Движения должны формироваться исключительно проведением самих документов в базе-приемнике.

Способ 4. Программное создание ключа аналитики через API конфигурации

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

Для этого в конфигурациях на базе УТ 11 / ERP можно использовать экспортные функции менеджера справочника:


ПараметрыКлюча = Новый Структура;
ПараметрыКлюча.Вставить("Номенклатура", СтрокаТЧ.Номенклатура);
ПараметрыКлюча.Вставить("Характеристика", СтрокаТЧ.Характеристика);
ПараметрыКлюча.Вставить("Склад", Объект.СкладПолучатель);

КлючАналитики = Справочники.КлючиАналитикиУчетаНоменклатуры.ПолучитьСоздатьКлючАналитики(ПараметрыКлюча);
СтрокаТЧ.АналитикаУчетаНоменклатуры = КлючАналитики;

Сервисные действия при повреждении аналитики в базе

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

  1. Откроем справочник КлючиАналитикиУчетаНоменклатуры (через «Все функции» / «Функции для технического специалиста»).
  2. В меню «Еще» воспользуемся сервисной процедурой Заменить дубли ключей аналитики.
  3. Проверим соответствие записей в справочнике и связанном регистре сведений АналитикаУчетаНоменклатуры.
← На главную