Как очищать регистрацию объекта в плане обмена сразу после его передачи по COM-соединению?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При настройке синхронизации данных между конфигурациями 1С (например, Управление торговлей 10.3 и Розница) по правилам обмена через direct COM-соединение нередко возникает специфическая задача. Если сеанс обмена прерывается из-за сбоя сети или ошибки записи на стороне приемника, весь выгружаемый пакет данных отправляется повторно при следующем запуске. Чтобы избежать дублирования передачи уже записанных объектов, разработчики стремятся снимать объекты с регистрации изменений сразу же после их успешной выгрузки в базу-приемник.

Рассмотрим детально, как устроена передача данных через COM-соединение, где именно в типовой обработке ОбменДаннымиXML происходит запись элементов и какими способами можно реализовать очистку регистрации.

Особенности работы типового обмена через COM-соединение

Проанализируем алгоритм работы типовой обработки ОбменДаннымиXML. При обмене через файл данные сначала формируются в единый XML-документ, и только после его полная загрузка в приемнике генерирует файл-ответ (квитанцию), который очищает регистрацию в источнике. Однако при установленном флаге НепосредственноеЧтениеВИБПриемнике = Истина (прямое COM-соединение) передача данных происходит динамически.

Каждый объект сериализуется в XML-строку и передается в информационную базу-приемник через процедуру ПередатьИнформациюОЗаписиВПриемник. При этом результат записи возвращается сразу, что позволяет определить, успешно ли сохранился конкретный объект на стороне получателя.

Способ 1. Доработка процедуры записи в обработке «ОбменДаннымиXML»

Разберем по шагам доработку модуля обработки ОбменДаннымиXML на стороне базы-источника. Основная точка входа для отправки порций данных — процедура ЗаписатьВФайл. В случае использования COM-соединения фактической записи во временный файл на диске не происходит, а данные передаются напрямую в приемник.

Посмотрим на структуру процедур взаимодействия:


Процедура ЗаписатьВФайл(Узел)
	
	Если ТипЗнч(Узел) <> одТипСтрока Тогда
		ИнформацияДляЗаписиВФайл = Узел.Закрыть();
	Иначе
		ИнформацияДляЗаписиВФайл = Узел;
	КонецЕсли;
	
	Если НепосредственноеЧтениеВИБПриемнике Тогда
		СтрокаОшибкиВБазеПриемнике = "";
		ПередатьИнформациюОЗаписиВПриемник(ИнформацияДляЗаписиВФайл, СтрокаОшибкиВБазеПриемнике);
		
		Если Не ПустаяСтрока(СтрокаОшибкиВБазеПриемнике) Тогда
			ВызватьИсключение СтрокаОшибкиВБазеПриемнике;
		Иначе
			// Объект успешно записан в базе-приемнике.
			// Здесь можно вызвать снятие с регистрации текущего объекта
		КонецЕсли;
	Иначе
		ФайлОбмена.ЗаписатьСтроку(ИнформацияДляЗаписиВФайл);
	КонецЕсли;

КонецПроцедуры

Для снятия конкретного документа или справочника с регистрации изменений применяется метод платформы ПланыОбмена.УдалитьРегистрациюИзменений(). Выясним, как правильно сформировать вызов данного метода:


// УзелОбмена - Ссылка на узел плана обмена, для которого выполняется выгрузка
// СсылкаНаОбъект - Ссылка на выгруженный справочник или документ

ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, СсылкаНаОбъект);

Также доработку можно разместить в функции ВыгрузкаОбъектаВыборки или обработчике события ВызватьСобытияПослеВыгрузкиОбъекта. Если глобальный флаг ошибки Отказ равен Ложь, программа выполняет очистку регистрации для текущей ссылки:


Если Не Отказ Тогда
	УзелОбмена = НастройкиОбмена.УзелИнформационнойБазы;
	ПланыОбмена.УдалитьРегистрациюИзменений(УзелОбмена, ВыгружаемыйОбъект.Ссылка);
КонецЕсли;

Способ 2. Использование штатного механизма с пустыми правилами загрузки

Если нет необходимости вносить изменения в программный код типовой обработки ОбменДаннымиXML, рекомендуем использовать стандартную схему квитирования platform 1С, настроив двухсторонний обмен.

Разберем данный вариант по шагам:

  1. В базе-приемнике (например, Розница) создается настройка обмена с узлом базы-источника (УТ).
  2. В Конвертации Данных формируются пустые правила конвертации объектов в сторону источника (без передачи справочников и документов).
  3. В настройках обмена устанавливается последовательность шагов: Загрузка — Выгрузка — Загрузка (или настраивается двустороннее расписание).

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

Важные предупреждения и риски пообъектного удаления

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

← На главную