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