Проведение документов при загрузке документов по 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 (демо).

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментария 4

  1. В КД3 вообще не было предусмотрено проведение документов?

  2. Михаил:

    Спасибо за наводку на функцию СтруктураОбъектаXDTOВДанныеИБ!

Добавить комментарий для fixin Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *