Есть банальная задача выгрузки из одной конфигурации в другую. Делаю на основе типового обмена MES-УПП. Нужно выгружать документы. Справочники должны выгружаться по ссылкам за документами. В плане обмена для документов делаем авторегистрацию.
Многочисленные обсуждения в сети сводятся к двум рецептам
1. В ПКО справочников установить флаг "Выгружать объект полностью, только при наличии на него ссылки"
2. В ПКО справочника в событии Перед выгрузкой установить ТолькоПолучитьУзелСсылки = Ложь
Оба метода не дают результата:
1. просто не отрабатывает, не переносит элемент справочника за документом
2. Возникает ошибка или переполнения стека или, создается второе COM соединение, которое конфликтует с первым "ЗаписьСообщения.НачатьЗапись(ЗаписьXML, УзелДляОбмена); причине: удалось заблокировать запись."
Думаю, что тут тоже причина в рекурсивном переполнении.
ТЖ не анализировал.
Коллеги, поделитесь, у кого какой метод работает? Какие условия еще обязательны, чтобы метод работал? В каких именно типовых обменах это работает?
В типовом обмене в коде замечена конструкция:
ОбработкаОбменаДанными.НеВыгружатьОбъектыПоСсылкам = Истина;
Потом эта переменная используется в функции ВыгрузитьПоПравилу...
Т.е. то, что зарегистрировано в узле, то и выгружается.
пишу решение, может кому будет полезно
нужно использовать реквизиты плана обмена типа Перечисление.РежимыВыгрузкиОбъектовОбмена, которые нужно указывать в правилах регистрации обмена в "Переключателе режима"
все это есть в демо базе БСП
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший