Проведение документов при загрузке документов по Enterprise Data из Мой склад
Клиент пожаловался, что при загрузке документы не проводятся. В поддержке «Мой склад» сказали, что вопрос надо решать на стороне 1С.
Я попробовал добавить тег «Проведен» в документ, но не помогло. В итоге попробовал разобраться в хитросплетениях КД3, который используется при загрузке, но сдался. Слишком уж запутано. Даже обсуждение на Мисте не помогло.
Работал в демо-базе БП3, т.к. у клиента база на облаке, отладка не возможна.
Просто поставил точку останова в процедуре «Перед записью» документа. Таким образом нашел процедуру КД3, где записывается документ:
Сначала мне показалось что это процедура ОбменДаннымиXDTOСервер.ЗаписатьОбъектВИБ:
Но всё оказалось сложнее:
Поэтому можно было бы вмешиваться в той ветке, где документ не проведен, т.е. в процедуры ЗаписатьОбъектВИБ и ОтменитьПроведениеОбъектаВИБ, но увы, в процедуре отмены проведения нет доступа к структуре КомпонентыОбмена, поэтому вмешиваться придется на уровне после вызова процедуры ОбменДаннымиXDTOСервер.СтруктураОбъектаXDTOВДанныеИБ:
&Вместо(«СтруктураОбъектаXDTOВДанныеИБ»)
Функция ппзED_СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, ДанныеXDTO, Знач ПравилоКонвертации, Действие)
//Осипов 2021-06-28
Результат = ПродолжитьВызов(КомпонентыОбмена, ДанныеXDTO, ПравилоКонвертации, Действие);
Если Найти(КомпонентыОбмена.XMLСхема, «edi_stnd/EnterpriseData») <> 0 И Результат <> Неопределено Тогда
//С Неопределено сравниваю на всякий случай, не знаю точной спецификации процедуры
МД = Метаданные.НайтиПоТипу(ТипЗнч(Результат));
Если Метаданные.Документы.Содержит(МД)
И МД.Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить
Тогда
//Добавляем в документы для отложенного проведения
СтрокаТаблицы = КомпонентыОбмена.ДокументыДляОтложенногоПроведения.Найти(Результат, «ДокументСсылка»);
Если СтрокаТаблицы = Неопределено Тогда
СтрокаТаблицы = КомпонентыОбмена.ДокументыДляОтложенногоПроведения.Добавить();
СтрокаТаблицы.ДокументСсылка = Результат.Ссылка;
СтрокаТаблицы.ДатаДокумента = Результат.Дата;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Как видно, я проверяю, чтобы вмешиваться только в обменах через Enterprise Data.
Сначала я хотел вмешаться внутри процедуры, но решил, что расширение, написанное, через контроль изменений будет неудобно и проживет не долго. Способ пост-обработки мне больше нравится.
Беру тестовый файл и ставлю его на загрузку в БП3:
Загрузка ведется в фоновом режиме, поэтому нужно или автоматически подключаться к фоновым заданиями или использовать параметр запуска «РежимОтладки«.
Процесс загрузки можно повторять многократно, документ перезаписывается и перепроводится.
Но т.к. я делал на тестовой базе, документы не провелись по причине:
Решил загрузить расширение в рабочую базу и дать проверить уже пользователям. Главное не забыть снять галочку «Безопасный режим»:
Объем план: 1.5 час. Среда: БП3 3.0.90.59 (демо).
В КД3 вообще не было предусмотрено проведение документов?
не понял вопрос
Спасибо за наводку на функцию СтруктураОбъектаXDTOВДанныеИБ!
Всегда пожалуйста!