При разработке правил конвертации данных и миграции документов из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11 (а также в 1С:ERP или 1С:Комплексная автоматизация) разработчики часто сталкиваются с ошибкой записи регистров накопления. Во время загрузки документа (например, ПеремещениеТоваров) платформа выдает исключение: Ошибка при вызове метода контекста (Записать): Запись не верна! Значение поля "Аналитика учета номенклатуры" не может быть пустым! (Регистр накопления: ТоварыОрганизаций).
Разберем архитектурные причины возникновения этой проблемы и рассмотрим пошаговые методы её решения в правилах обмена и базе-приемнике.
В конфигурациях нового поколения (УТ 11, КА 2, ERP) учет запасов устроен иначе, чем в УТ 10.3. Вместо прямого хранения номенклатуры, склада, характеристик и серий во всех регистрах накопления используется единый разделитель — справочник КлючиАналитикиУчетаНоменклатуры.
Проанализируем ключевые особенности работы этого механизма:
КлючиАналитикиУчетаНоменклатуры функционирует в жесткой связке с независимым непериодическим регистром сведений АналитикаУчетаНоменклатуры. При обращении к аналитике система ищет соответствие сразу в двух объектах. Если соответствие нарушено или запись отсутствует, типовой алгоритм возвращает пустую ссылку.Номенклатура, Характеристика, Склад (или партнер), Серия, Назначение (при обособленном обеспечении) и СтатьяКалькуляции.ОбменДанными.Загрузка = Истина. В этом режиме типовые события модулей объектов (ПередЗаписью, ПриЗаписи, ОбработкаПроведения) по умолчанию отключаются, поэтому автоматическое формирование ключей аналитики и заполнение служебных таблиц не выполняется.Самое простое и надежное решение при переносе учетных документов — обеспечить их полноценное проведение в базе-приемнике, чтобы отработали встроенные механизмы формирования ключей аналитики и движений.
Разберем, как настроить правило конвертации объекта (ПКО) в конфигурации «Конвертация данных 2.1»:
ПеремещениеТоваров).РежимЗаписи = "Проведение";
При таком подходе после создания объекта платформа вызовет процедуру проведения, которая автоматически рассчитает и заполнит все ключи аналитики перед формированием движений по регистру ТоварыОрганизаций.
Если требуется гарантированно инициализировать все модули проведения с перехватом возможных ошибок проведения, настроим обработчик ПослеЗагрузки для объекта приемника.
Посмотрим на пример кода:
Объект.ОбменДанными.Загрузка = Ложь;
Попытка
Объект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
// В случае ошибок проведения записываем документ как непроведенный
Объект.Записать(РежимЗаписиДокумента.Запись);
КонецПопытки;
Выключение свойства ОбменДанными.Загрузка заставляет конфигурацию выполнять все стандартные проверки, расчет видов запасов и генерацию элементов справочника КлючиАналитикиУчетаНоменклатуры.
Частая ошибка при настройке переноса — выгрузка наборов записей регистров накопления напрямую из УТ 10.3 в УТ 11. Поскольку в исходной базе измерение АналитикаУчетаНоменклатуры отсутствует физически, в файл обмена попадает пустое значение. При записи набора платформа наталкивается на установленный в метаданных запрет незаполненных значений.
Проверим правила выгрузки данных (ПВД):
ТоварыОрганизаций, СебестоимостьТоваров, СвободныеОстатки).Если документ необходимо перенести исключительно в записанном (непроведенном) виде, но с заполненными служебными реквизитами, сформируем ключ аналитики программно в обработчике загрузки табличной части.
Для этого в конфигурациях на базе УТ 11 / ERP можно использовать экспортные функции менеджера справочника:
ПараметрыКлюча = Новый Структура;
ПараметрыКлюча.Вставить("Номенклатура", СтрокаТЧ.Номенклатура);
ПараметрыКлюча.Вставить("Характеристика", СтрокаТЧ.Характеристика);
ПараметрыКлюча.Вставить("Склад", Объект.СкладПолучатель);
КлючАналитики = Справочники.КлючиАналитикиУчетаНоменклатуры.ПолучитьСоздатьКлючАналитики(ПараметрыКлюча);
СтрокаТЧ.АналитикаУчетаНоменклатуры = КлючАналитики;
Если ошибка возникает уже после загрузки при попытке ручного перепроведения документов, выясним состояние служебных данных:
КлючиАналитикиУчетаНоменклатуры (через «Все функции» / «Функции для технического специалиста»).АналитикаУчетаНоменклатуры.