При самостоятельной разработке правил обмена в конфигурации «1С:Конвертация данных» (ред. 2.1) для переноса документов поступления (приходных накладных) из сторонних или отраслевых систем (например, «ДАЛИОН: АвтоМаркет») в «1С:Розница 2.2» разработчики часто сталкиваются с ситуацией: документ создается, суммы и номенклатура переносятся корректно, в выгруженном файле обмена XML количество присутствует, однако в самом документе колонка количества остается пустой.
Разберем причины такого поведения платформы и конфигурации-приемника, а также рассмотрим пошаговые способы устранения этой ошибки в правилах обмена.
Проанализируем структуру табличной части Товары типового документа ПоступлениеТоваров в конфигурации «1С:Розница 2.2»:
Количество, а с реквизитом КоличествоУпаковок. Если в правилах конвертации свойств (ПКС) выгружается только реквизит Количество, на форме документа соответствующая колонка будет отображаться пустой.Количество = КоличествоУпаковок * Коэффициент. Если реквизит Коэффициент не заполнен, при инициализации строки или первом пересчете он принимает значение 0, что приводит к обнулению результирующего количества.ОбменДанными.Загрузка = Истина. В этом режиме стандартные события модуля объекта по пересчету зависимых реквизитов строки не отрабатывают автоматически. Если в базе сохранен неполный набор реквизитов (нет упаковки, коэффициента или количества упаковок), при открытии формы происходит сброс или скрытие значений.Рассмотрим правильную настройку правил конвертации свойств (ПКС) для табличной части Товары в конфигурации «Конвертация данных»:
ПриходнаяНакладная → ПоступлениеТоваров).Товары.КоличествоУпаковок в качестве источника укажем реквизит Количество из исходного документа.Количество также укажем источник Количество.Коэффициент зададим значение по умолчанию, равное 1 (если учет ведется в базовых единицах измерения без упаковок).Если в исходной конфигурации нет информации об упаковках, либо структура данных не позволяет настроить прямое соответствие в ПКС, заполним недостающие реквизиты кодом. Разберем реализацию с помощью обработчика событий ПослеЗагрузки в правиле конвертации объекта (ПКО) документа.
Посмотрим на пример кода, который необходимо добавить в обработчик:
Для Каждого Стр Из Объект.Товары Цикл
// Проверяем и устанавливаем базовый коэффициент
Если Не ЗначениеЗаполнено(Стр.Коэффициент) Или Стр.Коэффициент = 0 Тогда
Стр.Коэффициент = 1;
КонецЕсли;
// Если количество упаковок не заполнено, приравниваем его к количеству
Если Не ЗначениеЗаполнено(Стр.КоличествоУпаковок) Или Стр.КоличествоУпаковок = 0 Тогда
Стр.КоличествоУпаковок = Стр.Количество;
КонецЕсли;
КонецЦикла;
Выясним еще один важный нюанс: при переносе номенклатуры обязательно должно быть настроено ПКО для справочника Номенклатура с корректным заполнением реквизита ЕдиницаИзмерения (или БазоваяЕдиницаИзмерения). Если у загруженной номенклатуры единица измерения не заполнена, алгоритмы формы документа ПоступлениеТоваров не смогут корректно рассчитать и отобразить строки табличной части.