Порядок загрузки объектов при обмене через универсальном формат

1. viki_glebova 18.03.22 11:52 Сейчас в теме
Добрый день.

У меня есть документ, в нем есть реквизит ссылочного типа.

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

Если сначала выгрузить этот реквизит, он создастся в приемнике. И при загрузке документа, этот реквизит будет уже в базе и будет найден и проставиться.

Но много случаев, когда документ выгружается, а этот реквизит еще не был ранее прогружен. Как сделать так, чтобы этот реквизит был выгружен и главное загружен раньше чем чам документ?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Airlord 18.03.22 12:18 Сейчас в теме
Добрый день! Сначала грузить справочники и другие объекты метаданных ссылочного типа, потом регистраторы. Других вариантов не вижу.
4. viki_glebova 18.03.22 13:13 Сейчас в теме
(2)Спасибо. Может у вас найдется пример как это сделать в одном пакете обмена?
3. Airlord 18.03.22 12:22 Сейчас в теме
Данные правила можно самому регулировать - в какой последовательности грузить, ток одно но - это для измененных или созданных объектов. А загружать регулярно одни и те же справочники и другие данные не имеет смысла. обычно в указывают, что с этим регистратором грузить то-то и то-то "по необходимости".
5. ids79 8358 18.03.22 15:45 Сейчас в теме
В рамках одного пакета обмена последовательность не имеет значение. Если документ выгрузиться первым и проставит в реквизите битую ссылку, она потом заменится на нормальную когда будет загружен сам элемент справочника.
Другое дело, если у Вас доработка, что если реквизит не найден, подставляется пустая ссылка. В этом случае пустая ссылка так и останется.
В этом случае могу посоветовать обрабатывать загруженные объекты и менять битую ссылку на пустую в отложенном заполнении например. В этот момент все справочники в рамках пакета будут уже гарантировано загружены.
6. viki_glebova 18.03.22 16:48 Сейчас в теме
(5)Вот как раз таки так и есть. Именно пустая ссылка там. Т.е. типовых никаких средств нет, чтобы как то загрузить какой то объект первее?

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

ОбменДаннымиXDTOСервер.ВыгрузкаОбъектаВыборки(КомпонентыОбмена, ПартнерОбъект);


В AdditionalInfo записываются значения, по которым нужно произвести поиск этого реквизита в приемнике.

В приемнике этот справочник загружается первее. Но может это просто совпадение))) Вот убедиться бы как то точно))
Затем уже беру значения из AdditionalInfo и выполняю поиск справочника по этому значению. Т.к. он загрузится чуть раньше, он находится. Решение работает, но не уверены, что всегда будет выполняться так как надо.

Что скажете?
7. MaxS 2856 18.03.22 20:10 Сейчас в теме
Можно на примере типовой ERP глянуть как загрузить реквизит
Процедура ПКО_Справочник_ШтрихкодыНоменклатуры_Получение_ПередЗаписьюП­олученныхДанных

Справочник_Номенклатура_Получение = ОбменДаннымиXDTOСервер.ПКОПоИмени(КомпонентыОбмена,"Справочник_Номенклатура_Получение");

Номенклатура = ОбменДаннымиXDTOСервер.СтруктураОбъектаXDTOВДанныеИБ(КомпонентыОбмена, 
	Строка.Номенклатура, 
	Справочник_Номенклатура_Получение, 
	"ПолучитьСсылку").Ссылка;


// Если выгружать уид через AdditionalInfo 
УИДСтр = Строка(ЗначениеРеквизита.УникальныйИдентификатор());
// тогда принимать можно так:
НайденноеЗначение = ОбменДаннымиXDTOСервер.СсылкаОбъектаПоУИДОбъектаXDTO(УИДСтр, 
Тип("СправочникСсылка.Номенклатура"), КомпонентыОбмена);
тут последовательность загрузки не важна. Если нет объекта, будет битая ссылка.
8. viki_glebova 19.03.22 09:03 Сейчас в теме
(7)Давайте по-другому объясню.

Задача. Справочник Партнеры в источнике преобразовать в справочник физические лица в приемнике. Поиск в приемнике осуществить по номеру телефона находящейся в табличной части контактная информация. Если такой справочник найден не будет, то создать и заполнить.

Следовательно есть документ где используется это правило. Но по ссылке передаются только ключевые свойства. Объект не создается, а только выполняется его поиск и возвращается ссылка (либо реальная ссылка, либо объект не найден). И в приемнике чтобы определить этот реквизит (в источнике партнеры в приемнике физ лица) мне нужно взять его номер телефона (возможно не один) и по нему найти в базе такое физ лицо. Следовательно никаких битых ссылок тут быть не может, потому что УИДЫ могут и не совпадать.

Проблема заключается в том, что когда загрузки справочника еще не было, то при загрузке документа мы априори не сможем найти этот справочник, его просто не существует.

Я этот справочник выгружаю принудительно при выгрузке этого документа. Но как сделать так, чтобы он гарантированно был загружен раньше самого документа? В КД2 есть приоритеты загрузки, а тут есть что то подобное?
9. MaxS 2856 19.03.22 19:54 Сейчас в теме
(8) Вы усложнили способ поиска и пытаетесь решить вопрос другим способом, не устранив исходную причину.
У типового объекта формата Справочник.ФизическиеЛица 9 ключевых полей. Может быть пересмотреть способ поиска по этим полям? В исходной базе перед записью элемента извлекать телефон и записывать в одно из полей КодВПрограмме, Фамилия, Имя, Отчество.
В конечной базе включить в поля поиска это поле с телефоном.
И тогда заработают типовые механизмы и не нужно будет обеспечивать очередность загрузки.
10. viki_glebova 19.03.22 21:17 Сейчас в теме
(9)К сожалению не я ставлю ставлю задачи.)) Заказчик требует именно такой поиск, учитывая свои особенности учета и заполненность базы.

Т.е. подобного в типовом варианте не предусмотрено вообще? Неужели нет механизма приоритета загрузки?
11. MaxS 2856 20.03.22 04:52 Сейчас в теме
(10)
Неужели нет механизма приоритета загрузки?
Типового нет. Т.к. xml файл читается последовательно.
Есть механизм отложенного проведения. Когда всё загружено, можно обработать результаты.
В ПКС физлица если новый элемент, записать его ссылку в КомпонентыОбмена.ПараметрыКонвертации.МойМассивФизЛиц
В ПКС документа после загрузки всех данных проверить наличие физлица из этого массива и если есть, проверить на дубли и поменять ссылки.
avmironov; viki_glebova; pyrkin_vanya; +3 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот