Почему не передавалась приходная накладная из УНФ 3.0 в БП 3.0?

Настроен обмен с отбором по организации и видам документов. Все накладные поступления приходят, а эта нет.

Причина оказалась банальна — в правилах регистрации указаны строго определенные виды операций для синхронизации документа «Приходная накладная»:

А документ был с видом операции «Прием на ответственное хранение».

Ларчик просто открывался, но пришлось отлаживать.

Точку останова делал условную, по условию:

Метаданные.НайтиПоТипу(ТипЗнч(Объект)) = Метаданные.Документы.ПриходнаяНакладная

Нашел причину здесь:

Попал сюда по длинному стеку событий:

Поправил аналогично решению для контрагентов и договоров, расширение на модуль ОбменДаннымиСобытия:

&Вместо("ПриОтправкеДанныхКорреспонденту")
Процедура дор_ПриОтправкеДанныхКорреспонденту(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза, Знач Получатель, Знач Анализ)
	
	НачальнаяОтправкаЭлемента = ОтправкаЭлемента;
	
	ПродолжитьВызов(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Получатель, Анализ);
	
	МД = Метаданные.НайтиПоТипу(ТипЗнч(ЭлементДанных));
	
	Если 
		НачальнаяОтправкаЭлемента = ОтправкаЭлементаДанных.Авто И
		ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить И
		(МД = Метаданные.Документы.ПриходнаяНакладная) И
		дор_Кэш.УзлыПолучателиСОтборомПоОрганизациям().Найти(Получатель.Ссылка) <> Неопределено
		Тогда                                   
			Если ПроверитьПриходнуюНакладную(ЭлементДанных.Ссылка, Получатель.Ссылка) Тогда
				ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто;
			КонецЕсли;
	КонецЕсли;

КонецПроцедуры        

&После("ВыполнитьПравилаРегистрацииОбъектовДляПланаОбмена")
Процедура дор_ВыполнитьПравилаРегистрацииОбъектовДляПланаОбмена(МассивУзловРезультат, Объект, ИмяПланаОбмена, ДополнительныеПараметры)
	МД = Метаданные.НайтиПоТипу(ТипЗнч(Объект));
	
	МассивУзловДляПроверки = дор_Кэш.УзлыПолучателиСОтборомПоОрганизациям();
	
	Для Каждого Получатель ИЗ МассивУзловДляПроверки Цикл
		
		//Если в этот узел уже отправляем, ок
		Если МассивУзловРезультат.Найти(Получатель) <> Неопределено Тогда
			Продолжить;
		КонецЕсли;
		
		Если МД = Метаданные.Документы.ПриходнаяНакладная Тогда
			Если ПроверитьПриходнуюНакладную(Объект.Ссылка, Получатель) Тогда
				МассивУзловРезультат.Добавить(Получатель);	
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

Функция ПроверитьПриходнуюНакладную(Документ, Получатель)
	З = Новый Запрос(
	"ВЫБРАТЬ
	|	Т.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.ПриходнаяНакладная КАК Т
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.Организации КАК ТО
	|		ПО Т.Организация = ТО.Организация
	|ГДЕ
	|	Т.Ссылка = &Документ
	|	И ТО.Ссылка = &Получатель
	|	И НЕ Т.ПометкаУдаления");                               
	З.УстановитьПараметр("Документ", Документ);
	З.УстановитьПараметр("Получатель", Получатель);
	Выборка = З.Выполнить().Выбрать();
	Возврат Выборка.Следующий(); 
КонецФункции

ВАЖНО! Обратите внимание в исходной статье на UPD 2023-04-05: было замечено, что новые договора не передаются, этот же нюанс касается и приходных накладных.

Но этого оказалось мало. Накладная в файл обмена не выгружалась из-за ПОД:

Пришлось написать еще небольшое расширение на модуль МенеджерОбменаЧерезУниверсальныйФормат:

&После("ПОД_Документ_ПриходнаяНакладная_Отправка_ПриОбработке")
Процедура дор_ПОД_Документ_ПриходнаяНакладная_Отправка_ПриОбработке(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена)
	//Осипов 2024-01-04 чтобы уходили документы на ответственное хранение
	Если ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийПриходнаяНакладная.ПриемНаОтветХранение Тогда
		ИспользованиеПКО.Документ_ПриходнаяНакладная_Отправка = истина;                                 
	КонецЕсли;
КонецПроцедуры

Правда, приходная накладная прогрузилась с видом операции «Покупка, комиссия», но тут уж ничего не поделаешь. Требуются дополнительные доработки.

Среда: 3.0.4.88 Объем: 1 час.

fixin

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

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

Добавить комментарий

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