EnterpriseData. Как перенести пометку удаления справочника?

1. MariusUrsus 30.03.18 11:38 Сейчас в теме
Если засунуть пометку удаления в AdditionalInfo или в ДополнительныеРеквизиты и на стороне приемника восстановить её в ПолученныеДанные, то ничего не происходит (пометка удаления не встает).

Единственный рабочий способ, который мне удалось найти, следующий:
1. Указать в ПОД несколько ПКО.
К примеру, для справочника Номенклатура элементы выгружаются по одному ПКО, а группы по другому. Т.е. ПКО в данном случае всегда два.
2. Установить флаг "Выгружать очистку данных по неиспользуемым ПКО" .
Если ПКО одно, то данный флаг уже недоступен. Поэтом приходится придумывать еще одно "левое" ПКО для его включения.
3. В обработчике ПОД ПриОтправкеДанных для элементов, помеченных на удаление, принудительно отключать использование ПКО.
Например, для справочника Номенклатура так
Если ДанныеИБ.ПометкаУдаления Тогда
	ИспользованиеПКО.Справочник_Номенклатура_Отправка       = Ложь;
	ИспользованиеПКО.Справочник_НоменклатураГруппа_Отправка = Ложь;
Иначе
	ИспользованиеПКО.Справочник_Номенклатура_Отправка       = Не ДанныеИБ.ЭтоГруппа;
	ИспользованиеПКО.Справочник_НоменклатураГруппа_Отправка = ДанныеИБ.ЭтоГруппа;
КонецЕсли;

В таком случае в файл обмена выгружается УдалениеОбъекта по ссылке и в приемнике данный объект (если будет найден по этой ссылке) помечается на удаление.

Вопрос: существует ли более простой/правильный/элегантный способ переноса пометки удаления?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. PiotrLoginov 30.03.18 15:25 Сейчас в теме
смотреть надо XDTO-пакеты ED разных версий. Подозреваю, что там уже предусмотрена передача пометки удаления без особых плясок и бубнов
3. MaxS 2925 30.03.18 17:26 Сейчас в теме
Реквизит пометка удаления не предусмотрен в ED.
Можно выгружать команду удаления объекта - это штатный функционал. В конечной базе элемент будет помечен на удаление.
Наверное нужно в 2 приёма действовать - передать элемент справочника, потом передать удаление объекта.
4. MariusUrsus 30.03.18 23:06 Сейчас в теме
(3)Команду удаления, без физического удаления объекта в источнике, передать не представляется возможным.
А так пока пользую указанный в шапке способ в два этапа - первая синхронизация без пометок удаления, а потом обмены уже при помощи данного суррогата.
5. MaxS 2925 31.03.18 06:26 Сейчас в теме
(4) Всё можно передать при желании. ;) В общем модуле ОбменДаннымиXDTOСервер
есть Процедура ВыгрузитьУдаление(КомпонентыОбмена, Ссылка, ПравилоКонвертации = Неопределено)
или
Процедура ЗаписатьУдалениеОбъектаXDTO(КомпонентыОбмена, Ссылка, ТипСсылкиXDTO)
она не экспортная, но код можно позаимствовать.
или
если в ПОД справочника несколько ПКО (для элемента и для группы), то делаем ИспользованиеПКО.НашеПКО = Ложь
в этом варианте БСП само генерирует команду удаления.
Эти способы не требует доработки правил на стороне приемника.
pavelzdv; MariusUrsus; +2 Ответить
6. MariusUrsus 06.04.18 12:36 Сейчас в теме
Небольшое дополнение. Переносить пометку удаления любого ссылочного объекта оказывается не имеет смысла. Дело в том, что при загрузке объекта в приемник выполняется метод ОбменДаннымиXDTOСервер.СтруктураОбъектаXDTOВДанныеИБ содержащий интересный код:
Если ПравилоКонвертации.ЭтоСсылочныйТип И ДанныеДляЗаписиВИБ.ПометкаУдаления Тогда
	ДанныеДляЗаписиВИБ.ПометкаУдаления = Ложь;
КонецЕсли;

В принципе этот код объясняет, почему ни в одной версии стандарта EnterpriseData (вплоть до текущей 1.5.2) нет пометки удаления. Осталось выяснить зачем)
pyrkin_vanya; NoRazum; +2 Ответить
7. NoRazum 29 22.12.20 16:02 Сейчас в теме
Уже есть формат 1.8.3.
Там её так и нету.
Есть решение?
8. AlexiyI 13.04.22 14:35 Сейчас в теме
(7) Нужно обратить внимание на подписку СинхронизацияДанныхЧерезУниверсальныйФорматРегистрацияУдален­ия.
Она обрабатывает непосредственное удаление, но там вызывается код, регистрирующий удаление объекта.
Может, стоит его вызвать в подписке записи, проверив объект на пометку удаления?
Тогда есть вероятность, что в ED будет записано УдалениеОбъекта, а в приемнике установится пометка удаления.
9. NoRazum 29 14.04.22 10:23 Сейчас в теме
(8) Может и сработает.
Прошло два года. Надо проверять. В текущий момент не актуально.
10. vechiy 35 14.05.23 13:55 Сейчас в теме
Ну т.е. выглядит всё так, что у автора топика более удобное в итоге решение)
11. gybson 14.05.23 14:20 Сейчас в теме
В пакете XDTO объект так и называется - УдалениеОбъекта, четвертый в списке типов.

ОбменДаннымиXDTOСервер.ЗаписатьУдалениеОбъектаXDTO
Оставьте свое сообщение

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