Конвертация данных 3. Передача пометки удаления

30.08.23

Интеграция - Перенос данных 1C

Два способа, как передать признак объекта ПометкаУдаления средствами КД 3.

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

1. В правилах регистрации объекта не должно быть отбора по ПометкаУдаления = Ложь. Для документов необходимо убрать условие Проведен = Истина, при его наличие.

 

Способ первый

 

1. В КД3 для ПОД необходимо установить признак "Выгружать очистку данных по неиспользуемым ПКО". Для того, чтобы появилась возможность его установить, тумблер "Количество правил конвертации" должен находиться в положении "Несколько". При этом сколько реально ПКО, значения не имеет.

 

 

В модуле менеджера обмена добавится строка ПравилоОбработки.ОчисткаДанных = Истина; и процедура будет выглядеть так:

Процедура ДобавитьПОД_Документ_ЗаписьКнигиПродаж_Отправка(ПравилаОбработкиДанных)
	
	ПравилоОбработки                         = ПравилаОбработкиДанных.Добавить();
	ПравилоОбработки.Имя                     = "Документ_ЗаписьКнигиПродаж_Отправка";
	ПравилоОбработки.ОбъектВыборкиМетаданные = Метаданные.Документы.ЗаписьКнигиПродаж;
	ПравилоОбработки.ПриОбработке            = "ПОД_Документ_ЗаписьКнигиПродаж_Отправка_ПриОбработке";
	ПравилоОбработки.ОчисткаДанных           = Истина;

	ПравилоОбработки.ИспользуемыеПКО.Добавить("Документ_ЗаписьКнигиПродаж_Отправка");
	
КонецПроцедуры

2. В обработчике "При обработке" добавляем следующие условие:

Если ДанныеИБ.ПометкаУдаления Тогда
	ИспользованиеПКО.Документ_ЗаписьКнигиПродаж_Отправка = Ложь;
	ИспользованиеПКО.Вставить("ФиктивноеПКО", Ложь); // имитируем несколько ПКО для отправки команды удаления
КонецЕсли;

Добавлять строку, отмеченную комментарием, необходимо только в том случае, когда в данном ПОД только одно реальное ПКО. Если ПКО несколько добавлять данную строку не надо.

Результатом описанных манипуляций станет добавление в файл обмена команды на удаление объекта по ссылке.

Плюсами указанного способа можно считать простоту реализации и отсутствие необходимости вносить правки в модуль менеджера приемника. К минусам можно отнести невозможность передать другие изменения в объекте, а также тот факт, что команда на удаление не будет воспринята приемником, если поиск на стороне приемника производится не по УИД.

 

Способ второй

 
Доработка на стороне источника

1. В обработчик "При отправке" ПКО источника добавляем выгрузку признака ПометкаУдаления через AdditionalInfo:

	Если Не ДанныеXDTO.Свойство("AdditionalInfo") Или ТипЗнч(ДанныеXDTO.AdditionalInfo) <> Тип("Структура") Тогда
		ДанныеXDTO.Вставить("AdditionalInfo", Новый Структура);
	КонецЕсли;

	ДанныеXDTO.AdditionalInfo.Вставить("ПометкаУдаления", ДанныеИБ.ПометкаУдаления);
 
Доработка на стороне приемника

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

1. В обработчике "При конвертации данных XDTO" помещаем в дополнительные свойства "ПометкаУдаления", если переданный признак равно истина:

Если ДанныеXDTO.Свойство("AdditionalInfo") И ТипЗнч(ДанныеXDTO.AdditionalInfo) = Тип("Структура") Тогда
	ПометкаУдаления = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДанныеXDTO.AdditionalInfo, "ПометкаУдаления", Ложь);
	Если ПометкаУдаления Тогда
		ПолученныеДанные.ДополнительныеСвойства.Вставить("ПометкаУдаления");
		Возврат; // Если цель передать только признак "ПометкаУдаления"
	КонецЕсли;
КонецЕсли;

2. В обработчике "Перед записью полученных данных" переносим свойство "ПометкаУдаления" из дополнительных свойств ПолученныеДанные в дополнительные свойства ДанныеИБ:

Если ПолученныеДанные.ДополнительныеСвойства.Свойство("ПометкаУдаления") И ДанныеИБ <> Неопределено Тогда
	ДанныеИБ.ДополнительныеСвойства.Вставить("ПометкаУдаления");
	ПолученныеДанные = Неопределено; // Если цель передать только признак "ПометкаУдаления"
	Возврат; // Если цель передать только признак "ПометкаУдаления"
КонецЕсли;

3. Вносим изменение или добавляем алгоритм для обработчика "После загрузки всех данных":

Если Объект.ДополнительныеСвойства.Свойство("ПометкаУдаления") Тогда
	Объект.ПометкаУдаления = Истина;
	Возврат; // Если цель передать только признак "ПометкаУдаления"
КонецЕсли;

Данные способ лишён недостатков предыдущего способа. К его недостаткам можно отнести лишь необходимость вносить изменения в правила как источника, так и приемника.

Вступайте в нашу телеграмм-группу Инфостарт

ПометкаУдаления КД3

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Перенос данных 1C Бухгалтер 1С:Предприятие 8 1С:Бухгалтерия 2.0 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бухгалтерский учет Абонемент ($m)

При внедрении связки УТ и БП часто приходится слышать вопрос пользователей УТ: "Где можно посмотреть бухгалтерские проводки?". Выслушав объяснения, что теперь проводки только в БП, пользователи делают простой вывод: "В УТ нет проводок! Нам недодали! В ТиС77 проводки были!". В этом свете крутизна УТ несколько меркнет. Однако в случае обмена УТ и БП через прямое подключение существует простой выход: получить проводки из БП через COM-соединение. При автоматическом обмене это выглядит особенно эффектно. Пользователи просто видят проводки там, где хотели! Прилагаемая внешняя печатная форма реализует предложенный подход.

1 стартмани

03.10.2009    35935    279    ildarovich    14    

33
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. thedarkness 06.02.25 14:58 Сейчас в теме
А если необходимо совершить обратное действие?
Т.е. он выгружает УдалениеОбъекта и как это убрать - не ясно. Нужно целиком постоянно выгружать документ.
2. victorree 27 17.02.25 18:26 Сейчас в теме
(1) Не понял что Вы имеете в виду.
Для отправки сообщения требуется регистрация/авторизация