ОткрытьФайлВыгрузки (БСП)

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

Открыть файл выгрузки. Открывает файл выгрузки данных, записывает заголовок файла в соответствие с форматом обмена.

// Открывает файл выгрузки данных, записывает заголовок файла в соответствие с форматом обмена.
//
// Параметры:
//  КомпонентыОбмена - Структура - содержит все правила и параметры обмена.
//  ИмяФайлаОбмена - строка - имя файла обмена.
//
Процедура ОткрытьФайлВыгрузки(КомпонентыОбмена, ИмяФайлаОбмена = "") Экспорт

	ФайлОбмена = Новый ЗаписьXML;
	Если ИмяФайлаОбмена <> "" Тогда
		ФайлОбмена.ОткрытьФайл(ИмяФайлаОбмена);
	Иначе
		ФайлОбмена.УстановитьСтроку();
	КонецЕсли;
	ФайлОбмена.ЗаписатьОбъявлениеXML();
	
	ЗаписьСообщения = Неопределено;
	
	Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда

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

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

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

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

ОткрытьФайлСОповещением (БСП)

ОткрытьВерсиюФайла (БСП)

ОткрытьСертификатПослеВыгрузкиСертификата (БСП)

ОткрытьФайлПослеПодтверждения (БСП)

Выгрузка результата запроса в текстовый файл с разделителями

ОткрытьФормуДополненияВыгрузкиСценарийУзла (БСП)

ОткрытьФормуДополненияВыгрузкиВсеДокументы (БСП)

ОткрытьФормуДополненияВыгрузкиДетальныйОтбор (БСП)

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

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз