Поиск виновника проблемы со стороны получателя.
Документ.ПроизводствоБезЗаказа должен уходить в односторонний обмен из КА в БП и конвертироваться в Документ.ВыпускПродукции на строне приемнике, он же БП. Но почему-то не перелетает, проблема возникла после обновления на релиз (2.5.17.74).
В базе отправителе документ прекрасно регистрируется и даже показывает в журнале регистрации статус, что ушло в базу приемник.

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