Исключение организаций из регистрации к обмену с БП3 в УНФ

У клиента возникла проблема — постоянно в УНФ регистрировались организации к обмену с БП3. Причем в БП3 велся учет только по одной из организаций.

Выяснить, почему регистрируются организации — в 1С это целое приключение духа, сложное и дорогое. Поэтому вместо выяснения причин я решил отменить регистрацию.

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

Значит, где-то есть код, который регистрирует организацию к обмену. Запустим поиск по функции «ЗарегистрироватьИзменения«. Поставил несколько точек останова, но увы не словил ничего.

Тогда запустил монитор производительности (запускал 1С с параметром РежимОтладки для облегчения работы). И там оказалась регистрация изменений, но в неожиданном месте, а именно в модуле «ОбменДаннымиXDTOСервер«:

Регистрация изменений встречается в двух местах:

Не долго думаем, очистим эти два массива от организаций:

Процедура ОчиститьНенужноеКРегистрации(М) Экспорт
	Всего = М.Количество();
	Для Инд = 1 По Всего Цикл
		Поз = Всего - Инд;
		Эл = М[Поз];
		Если ТипЗнч(Эл) = Тип("СправочникСсылка.Организации") Тогда
			ЗаписьЖурналаРегистрации("Отладка.НеРегистрацияОрганизации", ,, Эл, "Организация не будет зарегистрирована");
			М.Удалить(Поз);
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

&После("ВыполнитьВыгрузкуЗарегистрированныхДанных")
Процедура дор_ВыполнитьВыгрузкуЗарегистрированныхДанных(КомпонентыОбмена, НомерСообщения)
	//Очищаем регистрацию организаций
	Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда //как в исходной функции
		ОчиститьНенужноеКРегистрации(КомпонентыОбмена.НеВыгруженныеОбъекты);
		ОчиститьНенужноеКРегистрации(КомпонентыОбмена.ВыгруженныеПоСсылкеОбъекты);
	КонецЕсли;
КонецПроцедуры

Правда, расширение назначим после процедуры ВыполнитьВыгрузкуЗарегистрированныхДанных, которая собственно и заполняет эти массивы. Первоначально я пробовал сделать очистку перед вызовом «ПроизвестиВыгрузкуДанных«, но там эти массивы еще чисты.

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

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

Но увы, это не помогло, организация по-прежнему пытается попасть в БП.

Тогда я сделал выгрузку в файл и обнаружил, что там есть организация. По её guid поискал ее в файле и обнаружил, что когда разносили выписку вручную, выбрали договор другой организации. Это и привело к попытке передачи другой организации и к ошибке.

В итоге решил за отдельное время написать запрос, чтобы найти все такие документы и сделать запрет на запись документа в некорректном состоянии (т.е. например с договором другой организации).

Объем: 2 час. Среда: УНФ 1.6.24.107

fixin

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

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

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

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