ЗарегистрироватьОбъектНаВсехУзлах (БСП)

Автор: 1С
ОбщийМодуль.СтандартныеПодсистемыСервер
1С БСП

Зарегистрировать объект на всех узлах. Выполняет регистрацию изменений объекта на всех узлах плана обмена.

// Выполняет регистрацию изменений объекта на всех узлах плана обмена.
// Для разделенных конфигураций должны выполняться условия:
//  - план обмена должен быть разделенным,
//  - регистрируемый объект должен быть неразделенным.
//
//  Параметры:
//    Объект         - Объект - СправочникОбъект, ДокументОбъект и др., который требуется зарегистрировать.
//                              Объект должен быть неразделенным, иначе будет выдано исключение.
//
//    ИмяПланаОбмена - Строка - имя плана обмена, на всех узлах которого требуется выполнить регистрацию объекта.
//                              План обмена должен быть разделенным, иначе будет выдано исключение.
//
//    ВключаяГлавныйУзел - Булево - если Ложь, тогда в подчиненном узле
//                         не будет выполнена регистрация для главного узла.
// 
//
Процедура ЗарегистрироватьОбъектНаВсехУзлах(Знач Объект, Знач ИмяПланаОбмена, Знач ВключаяГлавныйУзел = Истина) Экспорт
	
	Если Метаданные.ПланыОбмена[ИмяПланаОбмена].Состав.Найти(Объект.Метаданные()) = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если ОбщегоНазначения.РазделениеВключено() Тогда
		
		Если ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда
			ВызватьИсключение НСтр("ru = 'Регистрация изменений неразделенных данных в разделенном режиме.'");
		КонецЕсли;
		
		МодульРаботаВМоделиСервиса = Неопределено;
		Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
			МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса");
		КонецЕсли;
		
		Если МодульРаботаВМоделиСервиса <> Неопределено Тогда
			ЭтоРазделенныйПланОбмена = МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(
				"ПланОбмена." + ИмяПланаОбмена, МодульРаботаВМоделиСервиса.РазделительОсновныхДанных());
		Иначе
			ЭтоРазделенныйПланОбмена = Ложь;
		КонецЕсли;
		
		Если Не ЭтоРазделенныйПланОбмена Тогда
			ВызватьИсключение НСтр("ru = 'Регистрация изменений для неразделенных планов обмена не поддерживается.'");
		КонецЕсли;
		
		Если МодульРаботаВМоделиСервиса <> Неопределено Тогда
			ЭтоРазделенныйОбъектМетаданных = МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(
				Объект.Метаданные().ПолноеИмя(), МодульРаботаВМоделиСервиса.РазделительОсновныхДанных());
		Иначе
			ЭтоРазделенныйОбъектМетаданных = Ложь;
		КонецЕсли;
		
		Если ЭтоРазделенныйОбъектМетаданных Тогда
				ВызватьИсключение НСтр("ru = 'Регистрация изменений для разделенных объектов не поддерживается.'");
		КонецЕсли;
		
		ТекстЗапроса =
		"ВЫБРАТЬ
		|	ПланОбмена.Ссылка КАК Получатель
		|ИЗ
		|	#ТаблицаПланаОбмена КАК ПланОбмена
		|ГДЕ
		|	ПланОбмена.РегистрироватьИзменения
		|	И НЕ ПланОбмена.ПометкаУдаления";
		
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаПланаОбмена", "ПланОбмена." + ИмяПланаОбмена);
		
		Запрос = Новый Запрос;
		Запрос.Текст = ТекстЗапроса;
		
		Получатели = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Получатель");
		
		Для Каждого Получатель Из Получатели Цикл
			
			Объект.ОбменДанными.Получатели.Добавить(Получатель);
			
		КонецЦикла;
		
	Иначе
		
		ТекстЗапроса =
		"ВЫБРАТЬ
		|	ПланОбмена.Ссылка КАК Получатель
		|ИЗ
		|	#ТаблицаПланаОбмена КАК ПланОбмена
		|ГДЕ
		|	НЕ ПланОбмена.ЭтотУзел
		|	И НЕ ПланОбмена.ПометкаУдаления";
		
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаПланаОбмена", "ПланОбмена." + ИмяПланаОбмена);
		
		Запрос = Новый Запрос;
		Запрос.Текст = ТекстЗапроса;
		
		Получатели = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Получатель");
		
		ГлавныйУзел = ПланыОбмена.ГлавныйУзел();
		
		Для Каждого Получатель Из Получатели Цикл
			Если Не ВключаяГлавныйУзел И Получатель = ГлавныйУзел Тогда
				Продолжить;
			КонецЕсли;
			Объект.ОбменДанными.Получатели.Добавить(Получатель);
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ЗарегистрироватьИзмененияОбщихДанныхУзлов (БСП)

ЗарегистрироватьИзменениеПриоритетныхДанныхДляПодчиненныхУзловРИБ (БСП)

ЗарегистрироватьОшибкуЗаписиОбъекта (БСП)

РассчитатьКоличествоЗарегистрированныхОбъектов (БСП)

ЗарегистрироватьОбъектыДляПереносаЭлектронныхПодписейИСертификатовШифрования (БСП)

ЗарегистрироватьИзмененияДанных (БСП)

ЗарегистрироватьИсточник (БСП)

ИнтерактивноеИзменениеВыгрузкиЗарегистрироватьДополнительныеДанные (БСП)

ЗарегистрироватьНовоеИмяМакета (БСП)

Синтакс-помощник БСП с нейросетевым ассистентом