Публикации

БСП
Разработки

Найдено результатов: 510


Поместить текст в буфер обмена

Устанавливает текст в буфер обмена
bolsun 37 4
Процедура УстановитьТекстВБуферОбмена(Текст) Экспорт
  #Если Клиент Тогда
    COMОбъект = Новый COMОбъект("htmlfile");
    COMОбъект.ParentWindow.ClipboardData.SetData("Text", Текст);
  #КонецЕсли
КонецПроцедуры

ПараметрыОбмена

ОбщийМодуль.ОбменДаннымиСервер
Автор: 1С
Функция ПараметрыОбмена() Экспорт
	
	СтруктураПараметров = Новый Структура;
	
	СтруктураПараметров.Вставить("ВидТранспортаСообщенийОбмена", Неопределено);
	СтруктураПараметров.Вставить("ВыполнятьЗагрузку", Истина);
	СтруктураПараметров.Вставить("ВыполнятьВыгрузку", Истина);
	
	СтруктураПараметров.Вставить("ТолькоПараметры",     Ложь);
	
	СтруктураПараметров.Вставить("ДлительнаяОперацияРазрешена", Ложь);
	СтруктураПараметров.Вставить("ДлительнаяОперация", Ложь);
	СтруктураПараметров.Вставить("ИдентификаторОперации", "");
	СтруктураПараметров.Вставить("ИдентификаторФайла", "");
	СтруктураПараметров.Вставить("ПараметрыАутентификации", Неопределено);
	
	СтруктураПараметров.Вставить("СообщениеДляСопоставленияДанных", Ложь);
	
	Возврат СтруктураПараметров;
	
КонецФункции

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

ИдентификаторОбменДанными

Возвращает идентификатор обмена данными, который был создан в сервисе обмена
ОбщийМодуль.СервисОбменаСообщениями
Автор: 1С
// Возвращает идентификатор обмена данными, который был создан в сервисе обмена
// данными с внешними системами.
//
// Возвращаемое значение:
//   Структура - содержит результат операции:
//    *КодОшибки - Булево  - Истина, если в не удалось получить информацию из сервиса;
//    *СообщениеОбОшибке   - Строка - описание ошибки для пользователя;
//    *ИдентификаторОбмена - Строка - идентификатор обмена данными.
//
Функция ИдентификаторОбменДанными(ИдентификаторСистемы, ОписаниеНастройки) Экспорт
	
	ЗаписатьИнформациюВЖурналРегистрации(
		НСтр("ru = 'Начало получения идентификатора загрузки данных.'"),
		Ложь);
	
	РезультатОперации = Новый Структура;
	РезультатОперации.Вставить("КодОшибки",           "");
	РезультатОперации.Вставить("СообщениеОбОшибке",   "");
	РезультатОперации.Вставить("ИдентификаторОбмена", "");
	
	ПараметрыПодключения = ИнициализироватьПараметрыПодключения();
	
	URLОперации = URLОперацииСервиса("/exchangeId/getNew");
	
	Результат = ДанныеАутентификации(URLОперации);
	
	Если Результат.Ошибка Тогда
		РезультатОперации.КодОшибки = КодОшибкиНеверныйЛогинИлиПароль();
		РезультатОперации.СообщениеОбОшибке = Результат.ИнформацияОбОшибке;
		Возврат РезультатОперации;
	КонецЕсли;
	
	ПараметрыЗапросаJSON = exchangeIdgetNew(
		ИдентификаторСистемы,
		ОписаниеНастройки,
		Результат.ДанныеАутентификации,
		ИнтернетПоддержкаПользователей.ДополнительныеПараметрыВызоваОперацииСервиса());
	
	Заголовки = Новый Соответствие;
	Заголовки.Вставить("Content-Type", "application/json");
	
	ПараметрыОтправки = Новый Структура;
	ПараметрыОтправки.Вставить("Метод"                   , "POST");
	ПараметрыОтправки.Вставить("ФорматОтвета"            , 1);
	ПараметрыОтправки.Вставить("Заголовки"               , Заголовки);
	ПараметрыОтправки.Вставить("ДанныеДляОбработки"      , ПараметрыЗапросаJSON);
	ПараметрыОтправки.Вставить("ФорматДанныхДляОбработки", 1);
	ПараметрыОтправки.Вставить("НастройкиПрокси"         , ПараметрыПодключения.НастройкиПроксиСервера);
	ПараметрыОтправки.Вставить("Таймаут"                 , 30);
	
	// Вызов операции сервиса.
	РезультатОтправки = ИнтернетПоддержкаПользователей.ЗагрузитьСодержимоеИзИнтернет(
		URLОперации,
		,
		,
		ПараметрыОтправки);
	
	Если Не ПустаяСтрока(РезультатОтправки.КодОшибки) Тогда
		
		РезультатОперации.КодОшибки         = ПереопределитьКодОшибкиСервиса(РезультатОтправки.КодСостояния);
		РезультатОперации.СообщениеОбОшибке = ПереопределитьСообщениеПользователю(РезультатОперации.КодОшибки);
		
		ЧастиСтрок = Новый Массив;
		ЧастиСтрок.Добавить(НСтр("ru = 'Не удалось получить идентификатор обмена данными.'"));
		ЧастиСтрок.Добавить(Символы.ПС);
		ЧастиСтрок.Добавить(РезультатОперации.СообщениеОбОшибке);
		ЧастиСтрок.Добавить(Символы.ПС);
		ЧастиСтрок.Добавить(Символы.ПС);
		ЧастиСтрок.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Техническая информация об ошибке:
				|При получении идентификатора обмена данными сервис вернул ошибку.
				|URL: %1
				|Код ошибки: %2
				|Подробная информация:
				|%3'"),
			URLОперации,
			РезультатОтправки.КодОшибки,
			РезультатОтправки.ИнформацияОбОшибке));
		
		ИнформацияОбОшибке = Новый ФорматированнаяСтрока(ЧастиСтрок);
		
		ЗаписатьИнформациюВЖурналРегистрации(
			Строка(ИнформацияОбОшибке),
			Истина);
		
		Возврат РезультатОперации;
		
	КонецЕсли;
	
	ПрочитатьДанные_exchangeIdgetNew(
		РезультатОтправки.Содержимое,
		РезультатОперации.ИдентификаторОбмена);
	
	ЗаписатьИнформациюВЖурналРегистрации(
		НСтр("ru = 'Завершено получение идентификатора обмена данными.'"),
		Ложь);
	
	Возврат РезультатОперации;
	
КонецФункции

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

Обмен данными XDTO (пример)

Обмен данными XDTO (пример)
Dmitry Zhurbenko 28 4

&НаКлиенте
Процедура Выгрузить(Команда)
	
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	Диалог.Заголовок = "Выберите файл для выгрузки";
	Диалог.Фильтр = "xml |*.xml|";	
	Если Диалог.Выбрать() Тогда
		Сообщить(Диалог.ПолноеИмяФайла);
		
	Иначе
		Возврат;
	КонецЕсли;
	
	
	
	ВыгрузкаXML=ПолучитьXMLФайл(ЭтаФорма.УникальныйИдентификатор);
	
	Описание=Новый ОписаниеПередаваемогоФайла(Диалог.ПолноеИмяФайла,ВыгрузкаXML);
	МассивОписаний=Новый Массив;
	МассивОписаний.Добавить(Описание);
	ПолучитьФайлы(МассивОписаний,,,Ложь);
КонецПроцедуры  



&НаСервереБезКонтекста
Функция ПолучитьXMLФайл(ГУИДФормы)
	
	ИмяТемпФайла = ПолучитьИмяВременногоФайла("xml");                                                
	Данные = Новый ЗаписьXML;
	Данные.ОткрытьФайл(ИмяТемпФайла);
	Данные.ЗаписатьОбъявлениеXML();
	Данные.ЗаписатьНачалоЭлемента("Данные");
	
	Фабрика = СоздатьФабрикуXDTO("D:\Приемник.xsd");
	
	РаботникиОбъектТип= Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config","CatalogObject.Работники");
	
		
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Сотрудники.Ссылка РаботникСсылка,
	|	Сотрудники.ПометкаУдаления DeletionMark,
	|	Сотрудники.Родитель РодительСсылка,
	|	Сотрудники.ЭтоГруппа IsFolder,
	|	Сотрудники.Код Code,
	|	Сотрудники.Наименование Description,
	|	Сотрудники.ДатаРождения ДеньРождения,
	|	Сотрудники.ПричинаУвольнения ПричинаУвольнения
	|ИЗ
	|	Справочник.Сотрудники КАК Сотрудники";
	
	Результат = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = Результат.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		РаботникиОбъект = Фабрика.Создать(РаботникиОбъектТип);		
		РаботникиОбъект.Ref = ВыборкаДетальныеЗаписи.РаботникСсылка.УникальныйИдентификатор();
		РаботникиОбъект.Parent = ВыборкаДетальныеЗаписи.РодительСсылка.УникальныйИдентификатор();

		Если ВыборкаДетальныеЗаписи.IsFolder Тогда
			ЗаполнитьЗначенияСвойств(РаботникиОбъект,ВыборкаДетальныеЗаписи,,"ДеньРождения,ПричинаУвольнения");
		Иначе
			ЗаполнитьЗначенияСвойств(РаботникиОбъект,ВыборкаДетальныеЗаписи);
			РаботникиОбъект.Автомобиль = Неопределено;
			РаботникиОбъект.Должность = новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
            РаботникиОбъект.Комментарий = "Импорт из исходной базы";
			РаботникиОбъект.Организация = новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
		КонецЕсли; 
		
		Фабрика.ЗаписатьXML(Данные,РаботникиОбъект);
	КонецЦикла;
	
		
	
	Данные.ЗаписатьКонецЭлемента();
	Данные.Закрыть();
	
	Двоичное=Новый ДвоичныеДанные(ИмяТемпФайла);
	Адрес=ПоместитьВоВременноеХранилище(Двоичное,ГУИДФормы);
	Возврат Адрес;
КонецФункции

&НаКлиенте
Процедура Загрузить(Команда)
	
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.Заголовок = "Выберите файл для загрузки";
	Диалог.Фильтр = "xml |*.xml|"; // картинки
	
	Если Диалог.Выбрать() Тогда
		Сообщить(Диалог.ПолноеИмяФайла);
		
	Иначе
		Возврат;
	КонецЕсли;
	
	ДвоичныеДанные = Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла);
	ГуидФормы = Этаформа.УникальныйИдентификатор;
	Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные,ГуидФормы);
	
	ЗагрузитьНаСервере(Адрес);
	
КонецПроцедуры


&НаСервереБезКонтекста
Процедура ЗагрузитьНаСервере(Адрес)
	
	ТемпФайл = ПолучитьИмяВременногоФайла("xml");
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
	ДвоичныеДанные.Записать(ТемпФайл);
	Данные = Новый ЧтениеXML;
	Данные.ОткрытьФайл(ТемпФайл);
	Данные.Прочитать();
	Данные.Прочитать();
	
	Пока СериализаторXDTO.ВозможностьЧтенияXML(Данные) Цикл
		РаботникОбъект = СериализаторXDTO.ПрочитатьXML(Данные);
		РаботникОбъект.ОбменДанными.Загрузка=Истина;
		РаботникОбъект.Записать();
	КонецЦикла; 
	
	Данные.Закрыть();
	
КонецПроцедуры 

ЭтоПланОбменаXDTO

Определяет, входит ли план обмена в список планов обмена, которые используют обмен данными по формату XDTO.
ОбщийМодуль.ОбменДаннымиСервер
Автор: 1С
// Определяет, входит ли план обмена в список планов обмена, которые используют обмен данными по формату XDTO.
//
// Параметры:
//  ПланОбмена - Ссылка на узел плана обмена или имя плана обмена.
//
// Возвращаемое значение:
//  Булево - Истина, если план обмена используется для обмена данными по формату XDTO.
//
Функция ЭтоПланОбменаXDTO(ПланОбмена) Экспорт
	Возврат ОбменДаннымиПовтИсп.ЭтоПланОбменаXDTO(ПланОбмена);
КонецФункции

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

ВыполнитьОбменДаннымиПоСценариюОбменаДанными

Выполняет процесс обмена данными отдельно для каждой строки настройки обмена.
ОбщийМодуль.ОбменДаннымиВызовСервера
Автор: 1С
// Выполняет процесс обмена данными отдельно для каждой строки настройки обмена.
// Процесс обмена данными состоит из двух стадий:
// - инициализация обмена - подготовка подсистемы обмена данными к процессу обмена
// - обмен данными        - процесс зачитывания файла сообщения с последующей загрузкой этих данных в ИБ 
//                          или выгрузки изменений в файл сообщения.
// Стадия инициализации выполняется один раз за сеанс и сохраняется в кэше сеанса на сервере 
// до перезапуска сеанса или сброса повторно-используемых значений подсистемы обмена данными.
// Сброс повторно-используемых значений происходит при изменении данных, влияющих на процесс обмена данными
// (настройки транспорта, настройка выполнения обмена, настройка отборов на узлах планов обмена).
//
// Обмен может быть выполнен полностью для всех строк сценария,
// а может быть выполнен для отдельной строки ТЧ сценария обмена.
//
// Параметры:
//  Отказ                     - Булево - флаг отказа; поднимается в случае возникновения ошибки при выполнении сценария.
//  НастройкаВыполненияОбмена - СправочникСсылка.СценарииОбменовДанными - элемент справочника,
//                              по значениям реквизитов которого будет выполнен обмен данными.
//  НомерСтроки               - Число - Номер строки по которой будет выполнен обмен данными.
//                              Если не указан, то обмен данными будет выполнен для всех строк.
// 
Процедура ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Отказ, НастройкаВыполненияОбмена, НомерСтроки = Неопределено) Экспорт
	
	ОбменДаннымиСервер.ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Отказ, НастройкаВыполненияОбмена, НомерСтроки);
	
КонецПроцедуры

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

ВыполнитьОбменДаннымиПоСценариюОбменаДанными

Выполняет процесс обмена данными отдельно для каждой строки настройки обмена.
ОбщийМодуль.ОбменДаннымиСервер
Автор: 1С
// Выполняет процесс обмена данными отдельно для каждой строки настройки обмена.
// Процесс обмена данными состоит из двух стадий:
// - инициализация обмена - подготовка подсистемы обмена данными к процессу обмена
// - обмен данными        - процесс зачитывания файла сообщения с последующей загрузкой этих данных в ИБ 
//                          или выгрузки изменений в файл сообщения.
// Стадия инициализации выполняется один раз за сеанс и сохраняется в кэше сеанса на сервере 
// до перезапуска сеанса или сброса повторно-используемых значений подсистемы обмена данными.
// Сброс повторно-используемых значений происходит при изменении данных, влияющих на процесс обмена данными
// (настройки транспорта, настройка выполнения обмена, настройка отборов на узлах планов обмена).
//
// Обмен может быть выполнен полностью для всех строк сценария,
// а может быть выполнен для отдельной строки ТЧ сценария обмена.
//
// Параметры:
//  Отказ                     - Булево - флаг отказа; поднимается в случае возникновения ошибки при выполнении сценария.
//  НастройкаВыполненияОбмена - СправочникСсылка.СценарииОбменовДанными - элемент справочника,
//                              по значениям реквизитов которого будет выполнен обмен данными.
//  НомерСтроки               - Число - Номер строки по которой будет выполнен обмен данными.
//                              Если не указан, то обмен данными будет выполнен для всех строк.
// 
Процедура ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Отказ, НастройкаВыполненияОбмена, НомерСтроки = Неопределено) Экспорт
	
	ПроверитьВозможностьВыполненияОбменов();
	
	ПроверитьИспользованиеОбменаДанными();
	
	УстановитьПривилегированныйРежим(Истина);
	
	ТекстЗапроса = "
	|ВЫБРАТЬ
	|	НастройкиВыполненияОбменаНастройкиОбмена.Ссылка                         КАК НастройкаВыполненияОбмена,
	|	НастройкиВыполненияОбменаНастройкиОбмена.НомерСтроки                    КАК НомерСтроки,
	|	НастройкиВыполненияОбменаНастройкиОбмена.ВыполняемоеДействие            КАК ВыполняемоеДействие,
	|	НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена            КАК ВидТранспортаОбмена,
	|	НастройкиВыполненияОбменаНастройкиОбмена.УзелИнформационнойБазы         КАК УзелИнформационнойБазы,
	|
	|	ВЫБОР КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.COM)
	|	ТОГДА ИСТИНА
	|	ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК ОбменЧерезВнешнееСоединение,
	|
	|	ВЫБОР КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.WS)
	|	ТОГДА ИСТИНА
	|	ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК ОбменЧерезВебСервис,
	|
	|	ВЫБОР КОГДА НастройкиВыполненияОбменаНастройкиОбмена.ВидТранспортаОбмена = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.ВнешняяСистема)
	|	ТОГДА ИСТИНА
	|	ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК ОбменСВнешнейСистемой
	|ИЗ
	|	Справочник.СценарииОбменовДанными.НастройкиОбмена КАК НастройкиВыполненияОбменаНастройкиОбмена
	|ГДЕ
	|	НастройкиВыполненияОбменаНастройкиОбмена.Ссылка = &НастройкаВыполненияОбмена
	|	[УсловиеПоНомеруСтроки]
	|УПОРЯДОЧИТЬ ПО
	|	НастройкиВыполненияОбменаНастройкиОбмена.НомерСтроки
	|";
	
	УсловиеПоНомеруСтроки = ?(НомерСтроки = Неопределено, "", "И НастройкиВыполненияОбменаНастройкиОбмена.НомерСтроки = &НомерСтроки");
	
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[УсловиеПоНомеруСтроки]", УсловиеПоНомеруСтроки);
	
	Запрос = Новый Запрос;
	Запрос.Текст = ТекстЗапроса;
	Запрос.УстановитьПараметр("НастройкаВыполненияОбмена", НастройкаВыполненияОбмена);
	Запрос.УстановитьПараметр("НомерСтроки", НомерСтроки);
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	ЭтоПодчиненныйУзелРИБТребующийУстановкиОбновления = 
		ЭтоПодчиненныйУзелРИБ() И ТребуетсяУстановкаОбновления();
		
	Пока Выборка.Следующий() Цикл
		ОтказПоСтрокеСценария = Ложь;
		Если ЭтоПодчиненныйУзелРИБТребующийУстановкиОбновления
			И ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Выборка.УзелИнформационнойБазы) Тогда
			// Обмен по расписанию не выполняется.
			Продолжить;
		ИначеЕсли Не НастройкаСинхронизацииЗавершена(Выборка.УзелИнформационнойБазы)
			И Не Выборка.ОбменСВнешнейСистемой Тогда
			Продолжить;
		КонецЕсли;
		
		Если Выборка.ОбменЧерезВнешнееСоединение Тогда
			
			ПроверитьВозможностьВнешнегоСоединения();
			
			КоличествоЭлементовВТранзакции = КоличествоЭлементовВТранзакцииВыполняемогоДействия(Выборка.ВыполняемоеДействие);
			
			ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыПоВнешнемуСоединению(ОтказПоСтрокеСценария,
				Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие, КоличествоЭлементовВТранзакции);
			
		ИначеЕсли Выборка.ОбменЧерезВебСервис Тогда
			
			ПараметрыОбмена = ПараметрыОбмена();
			ВыполнитьДействиеОбменаДляУзлаИнформационнойБазыЧерезWebСервис(ОтказПоСтрокеСценария,
				Выборка.УзелИнформационнойБазы, Выборка.ВыполняемоеДействие, ПараметрыОбмена);
			
		Иначе
			
			// ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ
			СтруктураНастроекОбмена = НастройкиОбменаДанными(Выборка.НастройкаВыполненияОбмена, Выборка.НомерСтроки);
			
			// Если настройка содержит ошибки, то обмен не производим; статус "Отменено".
			Если СтруктураНастроекОбмена.Отказ Тогда
				
				ОтказПоСтрокеСценария = Истина;
				
				// Фиксируем в ЖР лог по обмену данными.
				ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена);
				Продолжить;
			КонецЕсли;
			
			СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено;
			
			// Добавляем в ЖР информацию о процессе обмена данными.
			СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными по настройке %1'", ОбщегоНазначения.КодОсновногоЯзыка());
			СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.НастройкаВыполненияОбменаНаименование);
			ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена);
			
			// ОБМЕН ДАННЫМИ
			ВыполнитьОбменДаннымиЧерезФайловыйРесурс(СтруктураНастроекОбмена);
			
			// Фиксируем в ЖР лог по обмену данными.
			ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена);
			
			Если Не РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена) Тогда
				
				ОтказПоСтрокеСценария = Истина;
				
			КонецЕсли;
			
		КонецЕсли;
		Если ОтказПоСтрокеСценария Тогда
			Отказ = Истина;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

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

НастроитьОбменШаг1

ОбщийМодуль.СообщенияОбменаДаннымиУправлениеОбработчикСообщения_3_0_1_1
Автор: 1С
Процедура НастроитьОбменШаг1(Сообщение, Отправитель) Экспорт
	
	Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса") Тогда
		Возврат;
	КонецЕсли;
		
	МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса");
	МодульСообщенияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("СообщенияВМоделиСервиса");
	
	Тело = Сообщение.Body;
	
	КодЭтогоУзла = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПланыОбмена[Тело.ExchangePlan].ЭтотУзел(), "Код");
	ПсевдонимЭтогоУзла = "";
	
	Если Не ПустаяСтрока(КодЭтогоУзла) И КодЭтогоУзла <> Тело.Code Тогда
		ПсевдонимЭтогоУзла = ОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса());
	
		Если ПсевдонимЭтогоУзла <> Тело.Code Тогда
			СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Ожидаемый код предопределенного узла в этом приложении ""%1""
				|не соответствует фактическому ""%2"" или псевдониму ""%3"". План обмена: %4.'"),
				Тело.Code, КодЭтогоУзла, ПсевдонимЭтогоУзла, Тело.ExchangePlan);
			ВызватьИсключение СтрокаСообщения;
		КонецЕсли;
	КонецЕсли;
	
	КонечнаяТочкаКорреспондента = ОбменДаннымиВМоделиСервиса.МенеджерПланаОбменаКонечныхТочек().НайтиПоКоду(Тело.EndPoint);
	
	Если КонечнаяТочкаКорреспондента.Пустая() Тогда
		ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Не найдена конечная точка корреспондента с кодом ""%1"".'"),
			Тело.EndPoint);
	КонецЕсли;
	
	Префикс = "";
	ПрефиксКорреспондента = "";
	ИдентификаторНастройки = "";
	
	Если Сообщение.Установлено("AdditionalInfo") Тогда
		ДополнительныеСвойства = СериализаторXDTO.ПрочитатьXDTO(Сообщение.AdditionalInfo);
		Если ДополнительныеСвойства.Свойство("Префикс") Тогда
			Префикс = ДополнительныеСвойства.Префикс;
		КонецЕсли;
		Если ДополнительныеСвойства.Свойство("ПрефиксКорреспондента") Тогда
			ПрефиксКорреспондента = ДополнительныеСвойства.ПрефиксКорреспондента;
		КонецЕсли;
		Если ДополнительныеСвойства.Свойство("ИдентификаторНастройки") Тогда
			ИдентификаторНастройки = ДополнительныеСвойства.ИдентификаторНастройки;
		КонецЕсли;
	КонецЕсли;
	
	НастройкиXDTOКорреспондента = Новый Структура;
	
	НастройкиОтбора = СериализаторXDTO.ПрочитатьXDTO(Тело.FilterSettings);
	Если НастройкиОтбора.Свойство("НастройкиXDTOКорреспондента") Тогда
		НастройкиXDTOКорреспондента = НастройкиОтбора.НастройкиXDTOКорреспондента;
	КонецЕсли;
	
	// Создаем настройку обмена.
	НастройкиПодключения = Новый Структура;
	НастройкиПодключения.Вставить("ИмяПланаОбмена", Тело.ExchangePlan);
	НастройкиПодключения.Вставить("ИдентификаторНастройки", ИдентификаторНастройки);
	
	НастройкиПодключения.Вставить("Наименование", ""); // не требуется
	НастройкиПодключения.Вставить("НаименованиеКорреспондента", Тело.CorrespondentName);
	
	НастройкиПодключения.Вставить("Префикс",               Префикс);
	НастройкиПодключения.Вставить("ПрефиксКорреспондента", ПрефиксКорреспондента);
	
	НастройкиПодключения.Вставить("ИдентификаторИнформационнойБазыИсточника", КодЭтогоУзла);
	НастройкиПодключения.Вставить("ИдентификаторИнформационнойБазыПриемника", Тело.CorrespondentCode);
	
	НастройкиПодключения.Вставить("КонечнаяТочкаКорреспондента", КонечнаяТочкаКорреспондента);
	
	НастройкиПодключения.Вставить("НастройкиXDTOКорреспондента", НастройкиXDTOКорреспондента);

	НастройкиПодключения.Вставить("Корреспондент"); // выходной параметр
	
	НастройкиПодключения.Вставить("ОбластьДанныхКорреспондента", Тело.CorrespondentZone);
	
	НачатьТранзакцию();
	Попытка
		ОбменДаннымиВМоделиСервиса.СоздатьНастройкуОбмена_3_0_1_1(НастройкиПодключения,
			Истина, , ПсевдонимЭтогоУзла);
			
		// Отправляем ответное сообщение об успешной операции.
		ОтветноеСообщение = МодульСообщенияВМоделиСервиса.НовоеСообщение(
			СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеНастройкаОбменаШаг1УспешноЗавершена());
			
		ОтветноеСообщение.Body.Zone = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса();
		ОтветноеСообщение.Body.SessionId = Тело.SessionId;
		
		ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone;
		
		МодульСообщенияВМоделиСервиса.ОтправитьСообщение(ОтветноеСообщение, Отправитель, Истина);
		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		
		ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		
		ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(),
			УровеньЖурналаРегистрации.Ошибка, , , ПредставлениеОшибки);
		
		УдалитьНастройкуСинхронизации(НастройкиПодключения.Корреспондент);
		
		// Отправляем ответное сообщение об ошибке.
		НачатьТранзакцию();
		ОтветноеСообщение = МодульСообщенияВМоделиСервиса.НовоеСообщение(
			СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаНастройкиОбменаШаг1());
			
		ОтветноеСообщение.Body.Zone = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса();
		ОтветноеСообщение.Body.SessionId = Тело.SessionId;		
		
		ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone;
		ОтветноеСообщение.Body.ErrorDescription = ПредставлениеОшибки;
		
		МодульСообщенияВМоделиСервиса.ОтправитьСообщение(ОтветноеСообщение, Отправитель, Истина);
		ЗафиксироватьТранзакцию();
	КонецПопытки;
	
	МодульСообщенияВМоделиСервиса.ДоставитьБыстрыеСообщения();
	
КонецПроцедуры

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

ЗагрузитьСообщениеОбмена

ОбщийМодуль.СообщенияОбменаДаннымиУправлениеОбработчикСообщения_3_0_1_1
Автор: 1С
Процедура ЗагрузитьСообщениеОбмена(Сообщение, Отправитель) Экспорт
	
	Если Не ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса") Тогда
		Возврат;
	КонецЕсли;
		
	МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса");
	МодульСообщенияВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("СообщенияВМоделиСервиса");
	
	СообщениеДляСопоставленияДанных = Ложь;
	
	Если Сообщение.Установлено("AdditionalInfo") Тогда
		ДополнительныеСвойства = СериализаторXDTO.ПрочитатьXDTO(Сообщение.AdditionalInfo);
		Если ДополнительныеСвойства.Свойство("СообщениеДляСопоставленияДанных") Тогда
			СообщениеДляСопоставленияДанных = ДополнительныеСвойства.СообщениеДляСопоставленияДанных;
		КонецЕсли;
	КонецЕсли;
	
	Тело = Сообщение.Body;
	
	Если Тело.Свойства().Получить("MessageForDataMatching") <> Неопределено 
		И Тело.Установлено("MessageForDataMatching") Тогда
		СообщениеДляСопоставленияДанных = Тело.MessageForDataMatching; 
	КонецЕсли;
	
	ОтветноеСообщение = Неопределено;
	Попытка
		Корреспондент = КорреспондентОбмена(Тело.ExchangePlan, Тело.CorrespondentCode);
		
		// Загружаем сообщение обмена
		Отказ = Ложь;
		ОбменДаннымиВМоделиСервиса.ВыполнитьЗагрузкуДанных(Отказ, Корреспондент, СообщениеДляСопоставленияДанных);
		Если Отказ Тогда
			ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'В процессе загрузки данных из программы  ""%1"" возникли ошибки.'"),
				ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Корреспондент, "Наименование"));
		КонецЕсли;
		
		// Отправляем ответное сообщение об успешной операции.
		ОтветноеСообщение = МодульСообщенияВМоделиСервиса.НовоеСообщение(
			СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеЗагрузкаСообщенияОбменаУспешноЗавершена());
		ОтветноеСообщение.Body.Zone = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса();
		ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone;
		ОтветноеСообщение.Body.SessionId = Тело.SessionId;
	Исключение
		ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		
		ЗаписьЖурналаРегистрации(ОбменДаннымиВМоделиСервиса.СобытиеЖурналаРегистрацииНастройкаСинхронизацииДанных(),
			УровеньЖурналаРегистрации.Ошибка, , , ПредставлениеОшибки);
		
		// Отправляем ответное сообщение об ошибке.
		ОтветноеСообщение = МодульСообщенияВМоделиСервиса.НовоеСообщение(
			СообщенияОбменаДаннымиКонтрольИнтерфейс.СообщениеОшибкаЗагрузкиСообщенияОбмена());
		ОтветноеСообщение.Body.Zone = МодульРаботаВМоделиСервиса.ЗначениеРазделителяСеанса();
		ОтветноеСообщение.Body.CorrespondentZone = Тело.CorrespondentZone;
		ОтветноеСообщение.Body.SessionId = Тело.SessionId;
		
		ОтветноеСообщение.Body.ErrorDescription = ПредставлениеОшибки;
		
	КонецПопытки;
	
	Если Не ОтветноеСообщение = Неопределено Тогда
		НачатьТранзакцию();
		Попытка
			МодульСообщенияВМоделиСервиса.ОтправитьСообщение(ОтветноеСообщение, Отправитель, Истина);
			ЗафиксироватьТранзакцию();
		Исключение
			ОтменитьТранзакцию();
			ВызватьИсключение;
		КонецПопытки;
		МодульСообщенияВМоделиСервиса.ДоставитьБыстрыеСообщения();
	КонецЕсли;
	
КонецПроцедуры

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

ВариантОбменаДанными

ОбщийМодуль.ОбменДаннымиВызовСервера
Автор: 1С
Функция ВариантОбменаДанными(Знач Корреспондент) Экспорт
	
	УстановитьПривилегированныйРежим(Истина);
	
	Возврат ОбменДаннымиСервер.ВариантОбменаДанными(Корреспондент);
КонецФункции

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

НазначениеПланаОбмена

ОбщийМодуль.ОбменДаннымиПовтИсп
Автор: 1С
Функция НазначениеПланаОбмена(ИмяПланаОбмена) Экспорт
	
	Возврат ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "НазначениеПланаОбмена");
	
КонецФункции

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

НазначениеПланаОбмена

ОбщийМодуль.ОбменДаннымиСервер
Автор: 1С
Функция НазначениеПланаОбмена(ИмяПланаОбмена) Экспорт
	
	Возврат ОбменДаннымиПовтИсп.НазначениеПланаОбмена(ИмяПланаОбмена);
	
КонецФункции

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

ВариантОбменаДанными

ОбщийМодуль.ОбменДаннымиСервер
Автор: 1С
Функция ВариантОбменаДанными(Знач Корреспондент) Экспорт
	
	Результат = "Синхронизация";
	
	Если ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(Корреспондент) Тогда
		Возврат Результат;
	КонецЕсли;
	
	ИменаРеквизитов = ОбщегоНазначения.ИменаРеквизитовПоТипу(Корреспондент, Тип("ПеречислениеСсылка.РежимыВыгрузкиОбъектовОбмена"));
	
	ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Корреспондент, ИменаРеквизитов);
	
	Для Каждого Реквизит Из ЗначенияРеквизитов Цикл
			
		Если Реквизит.Значение = Перечисления.РежимыВыгрузкиОбъектовОбмена.ВыгружатьВручную
			Или Реквизит.Значение = Перечисления.РежимыВыгрузкиОбъектовОбмена.НеВыгружать Тогда
			
			Результат = "ПолучениеИОтправка";
			Прервать;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат Результат;
	
КонецФункции

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

ФорматОбмена

Возвращает строку с форматом обмена.
ОбщийМодуль.ОбменДаннымиXDTOСервер
Автор: 1С
// Возвращает строку с форматом обмена.
// Формат обмена включает: 
//  Базовый формат, предусмотренный для плана обмена.
//  Версию базового формата.
//
// Параметры:
//  ИмяПланаОбмена - Строка.
//  ВерсияФормата - Строка.
//
Функция ФорматОбмена(Знач ИмяПланаОбмена, Знач ВерсияФормата) Экспорт
	
	ФорматОбмена = ОбменДаннымиСервер.ЗначениеНастройкиПланаОбмена(ИмяПланаОбмена, "ФорматОбмена");
	
	Если Не ПустаяСтрока(ВерсияФормата) Тогда
		ФорматОбмена = ФорматОбмена + "/" + ВерсияФормата;
	КонецЕсли;
	
	Возврат ФорматОбмена;
	
КонецФункции

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

ЕстьМакетПланаОбмена

Определяет наличие макета у плана обмена.
ОбщийМодуль.ОбменДаннымиПовтИсп
Автор: 1С
// Определяет наличие макета у плана обмена.
//
// Параметры:
//  ИмяПланаОбмена - Строка - имя плана обмена, как оно задано в конфигураторе.
//  ИмяМакета - Строка - имя макета, наличие которого следует определить.
// 
//  Возвращаемое значение:
//   Истина - план обмена содержит заданный макет, иначе Ложь.
//
Функция ЕстьМакетПланаОбмена(Знач ИмяПланаОбмена, Знач ИмяМакета) Экспорт
	
	Возврат Метаданные.ПланыОбмена[ИмяПланаОбмена].Макеты.Найти(ИмяМакета) <> Неопределено;
	
КонецФункции

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

СтруктураНастроекОбмена

Получает структуру настроек обмена.
ОбщийМодуль.ОбменДаннымиВнешнееСоединение
Автор: 1С
// Получает структуру настроек обмена.
// (Только для внутреннего использования).
//
Функция СтруктураНастроекОбмена(Структура) Экспорт
	
	Возврат ОбменДаннымиСервер.СтруктураНастроекОбменаЧерезВнешнееСоединение(ОбменДаннымиСобытия.СкопироватьСтруктуру(Структура));
	
КонецФункции

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

ЗавершитьВедениеПротоколаОбмена

Завершает запись в протокол обмена.
ОбщийМодуль.ОбменДаннымиXDTOСервер
Автор: 1С
// Завершает запись в протокол обмена.
//
// Параметры:
//  КомпонентыОбмена - Структура - содержит все правила и параметры обмена.
//
Процедура ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена) Экспорт
	
	Если КомпонентыОбмена.ВедениеПротоколаДанных.ФайлПротоколаДанных <> Неопределено Тогда
		
		КомпонентыОбмена.ВедениеПротоколаДанных.ФайлПротоколаДанных.Закрыть();
		КомпонентыОбмена.ВедениеПротоколаДанных.ФайлПротоколаДанных = Неопределено;
		
	КонецЕсли;
	
КонецПроцедуры

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

ПриоритетныеДанныеОбмена

Возвращает список приоритетных данных обмена.
ОбщийМодуль.ОбменДаннымиСлужебный
Автор: 1С
// Возвращает список приоритетных данных обмена.
//
// Возвращаемое значение:
//	Массив - коллекция ссылок на выгруженные приоритетные данные обмена.
//
Функция ПриоритетныеДанныеОбмена() Экспорт
	
	УстановитьПривилегированныйРежим(Истина);
	
	Результат = Новый Массив;
	
	Для Каждого Элемент Из ПараметрыСеанса.ПриоритетныеДанныеОбмена Цикл
		
		Результат.Добавить(Элемент);
		
	КонецЦикла;
	
	Возврат Результат;
КонецФункции

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

ИнициализироватьКомпонентыОбмена

Инициализирует компоненты обмена.
ОбщийМодуль.ОбменДаннымиXDTOСервер
Автор: 1С
// Инициализирует компоненты обмена.
//
// Параметры:
//  НаправлениеОбмена - строка - "Отправка" либо "Получение".
//
// Возвращаемое значение:
//  Структура - Содержит компоненты обмена: правила обмена и параметры обмена.
//
Функция ИнициализироватьКомпонентыОбмена(НаправлениеОбмена) Экспорт
	
	КомпонентыОбмена = Новый Структура;
	КомпонентыОбмена.Вставить("ВерсияФорматаОбмена");
	КомпонентыОбмена.Вставить("XMLСхема");
	КомпонентыОбмена.Вставить("МенеджерОбмена");
	КомпонентыОбмена.Вставить("УзелКорреспондента");
	КомпонентыОбмена.Вставить("УзелКорреспондентаОбъект");
	КомпонентыОбмена.Вставить("ВерсияФорматаМенеджераОбмена");
		
	КомпонентыОбмена.Вставить("НаправлениеОбмена", НаправлениеОбмена);
	КомпонентыОбмена.Вставить("ЭтоОбменЧерезПланОбмена", Истина);
	КомпонентыОбмена.Вставить("ФлагОшибки", Ложь);
	КомпонентыОбмена.Вставить("СтрокаСообщенияОбОшибке", "");
	КомпонентыОбмена.Вставить("КлючСообщенияЖурналаРегистрации", ОбменДаннымиСервер.СобытиеЖурналаРегистрацииОбменДанными());
	КомпонентыОбмена.Вставить("ИспользоватьКвитирование", Истина);
	
	КомпонентыОбмена.Вставить("ОбменДаннымиСВнешнейСистемой", Ложь);
	КомпонентыОбмена.Вставить("ИдентификаторКорреспондента",  "");
	
	КомпонентыОбмена.Вставить("ТолькоНастройкиXDTO", Ложь);
	// Перечень поддерживаемых объектов формата для текущего сеанса обмена.
	// Содержит набор совместно поддерживаемых объектов этой базы и базы корреспондента
	// в контексте конкретного действия обмена (отправки/получения).
	// Подробнее см. ОбменДаннымиXDTOСервер.ЗаполнитьПоддерживаемыеОбъектыXDTO
	КомпонентыОбмена.Вставить("ПоддерживаемыеОбъектыXDTO", Новый Массив);
	
	СостояниеОбменаДанными = Новый Структура;
	СостояниеОбменаДанными.Вставить("УзелИнформационнойБазы");
	СостояниеОбменаДанными.Вставить("ДействиеПриОбмене");
	СостояниеОбменаДанными.Вставить("ДатаНачала");
	СостояниеОбменаДанными.Вставить("ДатаОкончания");
	СостояниеОбменаДанными.Вставить("РезультатВыполненияОбмена");
	КомпонентыОбмена.Вставить("СостояниеОбменаДанными", СостояниеОбменаДанными);
	
	ВедениеПротоколаДанных = Новый Структура;
	ВедениеПротоколаДанных.Вставить("ФайлПротоколаДанных", Неопределено);
	ВедениеПротоколаДанных.Вставить("ВыводВПротоколИнформационныхСообщений", Ложь);
	ВедениеПротоколаДанных.Вставить("ДописыватьДанныеВПротоколОбмена", Истина);
	
	КомпонентыОбмена.Вставить("ВедениеПротоколаДанных", ВедениеПротоколаДанных);
	
	КомпонентыОбмена.Вставить("ИспользоватьТранзакции", Истина);
	
	// Структура настроек XDTO этой базы.
	// Участвует в формировании списка поддерживаемых объектов (см. "ПоддерживаемыеОбъектыXDTO")
	// При отправке по ней будет сформирована заголовочная часть сообщения обмена - в этом случае
	// будет содержать перечень всех доступных объектов формата с детализацией по версиям.
	КомпонентыОбмена.Вставить("НастройкиXDTO", Новый Структура);
	КомпонентыОбмена.НастройкиXDTO.Вставить("Формат",                "");
	КомпонентыОбмена.НастройкиXDTO.Вставить("ПоддерживаемыеОбъекты", Новый ТаблицаЗначений);
	КомпонентыОбмена.НастройкиXDTO.Вставить("ПоддерживаемыеВерсии",  Новый Массив);
	
	ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата(
		КомпонентыОбмена.НастройкиXDTO.ПоддерживаемыеОбъекты, "ОтправкаПолучение");
	
	Если НаправлениеОбмена = "Отправка" Тогда
		
		КомпонентыОбмена.Вставить("ВыгруженныеОбъекты", Новый Массив);
		КомпонентыОбмена.Вставить("КоличествоОбъектовКВыгрузке", 0);
		КомпонентыОбмена.Вставить("СчетчикВыгруженныхОбъектов", 0);
		КомпонентыОбмена.Вставить("СоответствиеРегистрацияПоНеобходимости", Новый Соответствие);
		КомпонентыОбмена.Вставить("ВыгруженныеПоСсылкеОбъекты", Новый Массив);
		
		КомпонентыОбмена.Вставить("СценарийВыгрузки");
		
		КомпонентыОбмена.Вставить("ТаблицаПравилаРегистрацииОбъектов");
		КомпонентыОбмена.Вставить("СвойстваУзлаПланаОбмена");
		
		КомпонентыОбмена.Вставить("ПропускатьОбъектыСОшибкамиПроверкиПоСхеме", Ложь);
		КомпонентыОбмена.Вставить("НеВыгруженныеОбъекты", Новый Массив);
		
	Иначе
		
		КомпонентыОбмена.Вставить("НомерВходящегоСообщения");
		КомпонентыОбмена.Вставить("НомерСообщенияПолученногоКорреспондентом");
		
		КомпонентыОбмена.Вставить("РежимЗагрузкиДанныхВИнформационнуюБазу", Истина);
		КомпонентыОбмена.Вставить("СчетчикЗагруженныхОбъектов", 0);
		КомпонентыОбмена.Вставить("КоличествоОбъектовНаТранзакцию", 0);
		КомпонентыОбмена.Вставить("КоличествоОбъектовКЗагрузке", 0);
		КомпонентыОбмена.Вставить("РазмерФайлаСообщенияОбмена", 0);
		
		ДокументыДляОтложенногоПроведения = Новый ТаблицаЗначений;
		ДокументыДляОтложенногоПроведения.Колонки.Добавить("ДокументСсылка");
		ДокументыДляОтложенногоПроведения.Колонки.Добавить("ДатаДокумента",           Новый ОписаниеТипов("Дата"));
		ДокументыДляОтложенногоПроведения.Колонки.Добавить("ДокументПроведенУспешно", Новый ОписаниеТипов("Булево"));
		ДокументыДляОтложенногоПроведения.Колонки.Добавить("ЭтоКоллизия", Новый ОписаниеТипов("Число"));
		КомпонентыОбмена.Вставить("ДокументыДляОтложенногоПроведения", ДокументыДляОтложенногоПроведения);
		
		ЗагруженныеОбъекты = Новый ТаблицаЗначений;
		ЗагруженныеОбъекты.Колонки.Добавить("ИмяОбработчика");
		ЗагруженныеОбъекты.Колонки.Добавить("Объект");
		ЗагруженныеОбъекты.Колонки.Добавить("Параметры");
		ЗагруженныеОбъекты.Колонки.Добавить("СсылкаНаОбъект");
		ЗагруженныеОбъекты.Индексы.Добавить("СсылкаНаОбъект");
		КомпонентыОбмена.Вставить("ЗагруженныеОбъекты", ЗагруженныеОбъекты);
		
		ТаблицаОбъектовСозданныхПоСсылкам = Новый ТаблицаЗначений();
		ТаблицаОбъектовСозданныхПоСсылкам.Колонки.Добавить("СсылкаНаОбъект");
		ТаблицаОбъектовСозданныхПоСсылкам.Колонки.Добавить("УдалятьСозданныеПоКлючевымСвойствам");
		ТаблицаОбъектовСозданныхПоСсылкам.Индексы.Добавить("СсылкаНаОбъект");
		КомпонентыОбмена.Вставить("ТаблицаОбъектовСозданныхПоСсылкам", ТаблицаОбъектовСозданныхПоСсылкам);
		
		КомпонентыОбмена.Вставить("ТаблицаДанныхЗаголовкаПакета", НоваяТаблицаДанныхЗаголовкаПакета());
		КомпонентыОбмена.Вставить("ТаблицыДанныхСообщенияОбмена", Новый Соответствие);
		
		КомпонентыОбмена.Вставить("ОбъектыДляОтложеннойЗаписи", Новый Соответствие);
		
		// Структура настроек XDTO корреспондента, зачитываемая из сообщения обмена.
		КомпонентыОбмена.Вставить("НастройкиXDTOКорреспондента", Новый Структура);
		КомпонентыОбмена.НастройкиXDTOКорреспондента.Вставить("Формат",                "");
		КомпонентыОбмена.НастройкиXDTOКорреспондента.Вставить("ПоддерживаемыеОбъекты", Новый ТаблицаЗначений);
		КомпонентыОбмена.НастройкиXDTOКорреспондента.Вставить("ПоддерживаемыеВерсии",  Новый Массив);
		
		ИнициализироватьТаблицуПоддерживаемыхОбъектовФормата(
			КомпонентыОбмена.НастройкиXDTOКорреспондента.ПоддерживаемыеОбъекты, "ОтправкаПолучение");
		
		КомпонентыОбмена.Вставить("ПрефиксКорреспондента");
		
		КомпонентыОбмена.Вставить("УдалятьСозданныеПоКлючевымСвойствам", Ложь);
		
	КонецЕсли;
	
	Возврат КомпонентыОбмена;
	
КонецФункции

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

ПланыОбменаРИБ

Возвращает список планов обмена РИБ.
ОбщийМодуль.СтандартныеПодсистемыПовтИсп
Автор: 1С
// Возвращает список планов обмена РИБ.
// Если конфигурация работает в модели сервиса,
// то возвращает список разделенных планов обмена РИБ.
//
Функция ПланыОбменаРИБ() Экспорт
	
	Результат = Новый Массив;
	
	Если ОбщегоНазначения.РазделениеВключено() Тогда
		
		Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл
			
			Если Лев(ПланОбмена.Имя, 7) = "Удалить" Тогда
				Продолжить;
			КонецЕсли;
			
			Если ОбщегоНазначения.ПодсистемаСуществует("ТехнологияСервиса.БазоваяФункциональность") Тогда
				МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса");
				ЭтоРазделенныеДанные = МодульРаботаВМоделиСервиса.ЭтоРазделенныйОбъектМетаданных(
					ПланОбмена.ПолноеИмя(), МодульРаботаВМоделиСервиса.РазделительОсновныхДанных());
			Иначе
				ЭтоРазделенныеДанные = Ложь;
			КонецЕсли;
			
			Если ПланОбмена.РаспределеннаяИнформационнаяБаза
				И ЭтоРазделенныеДанные Тогда
				
				Результат.Добавить(ПланОбмена.Имя);
				
			КонецЕсли;
			
		КонецЦикла;
		
	Иначе
		
		Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл
			
			Если Лев(ПланОбмена.Имя, 7) = "Удалить" Тогда
				Продолжить;
			КонецЕсли;
			
			Если ПланОбмена.РаспределеннаяИнформационнаяБаза Тогда
				
				Результат.Добавить(ПланОбмена.Имя);
				
			КонецЕсли;
			
		КонецЦикла;
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

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