ПодготовитьДанныеДляВыгрузкиИзИнформационнойБазы (БСП)

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

Подготовить данные для выгрузки из информационной базы.

Процедура ПодготовитьДанныеДляВыгрузкиИзИнформационнойБазы(ПараметрыПроцедуры, АдресХранилища) Экспорт
	
	ПараметрыWEBСервиса = ПараметрыПроцедуры["ПараметрыWEBСервиса"];
	СообщениеОбОшибке   = ПараметрыПроцедуры["СообщениеОбОшибке"];
	
	УстановитьПривилегированныйРежим(Истина);
	
	КомпонентыОбмена = КомпонентыОбмена("Отправка", ПараметрыWEBСервиса);
	ИмяФайла         = Строка(Новый УникальныйИдентификатор()) + ".xml";
	
	КаталогВременныхФайлов = ОбменДаннымиСервер.КаталогВременногоХранилищаФайлов();
	ПолноеИмяФайла         = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(
		КаталогВременныхФайлов, ИмяФайла);
		
	// Открываем файл обмена.
	ОбменДаннымиXDTOСервер.ОткрытьФайлВыгрузки(КомпонентыОбмена, ПолноеИмяФайла);
	
	Если КомпонентыОбмена.ФлагОшибки Тогда
		КомпонентыОбмена.ФайлОбмена = Неопределено;
		
		ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена);
		
		ВызватьИсключение КомпонентыОбмена.СтрокаСообщенияОбОшибке;
	КонецЕсли;
	
	СтруктураНастроекОбмена = СтруктураНастроекОбмена(КомпонентыОбмена, Перечисления.ДействияПриОбмене.ВыгрузкаДанных);
	
	// Выгрузка данных.
	Попытка
		ОбменДаннымиXDTOСервер.ПроизвестиВыгрузкуДанных(КомпонентыОбмена);
	Исключение
		
		Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена Тогда
			РазблокироватьДанныеДляРедактирования(КомпонентыОбмена.УзелКорреспондента);
		КонецЕсли;
		
		Инфо = ИнформацияОбОшибке();
		КодОшибки = Новый Структура("КраткоеПредставлениеОшибки, ПодробноеПредставлениеОшибки",
			КраткоеПредставлениеОшибки(Инфо), ПодробноеПредставлениеОшибки(Инфо));
		
		ОбменДаннымиXDTOСервер.ЗаписатьВПротоколВыполнения(КомпонентыОбмена, КодОшибки);
		ОбменДаннымиXDTOСервер.ЗавершитьВедениеПротоколаОбмена(КомпонентыОбмена);
		
		КомпонентыОбмена.ФайлОбмена = Неопределено;
		
		ВызватьИсключение КодОшибки.КраткоеПредставлениеОшибки;
	КонецПопытки;
	
	КомпонентыОбмена.ФайлОбмена.Закрыть();
	
	ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена, КомпонентыОбмена);
	
	Если КомпонентыОбмена.ФлагОшибки Тогда
		
		СообщениеОбОшибке = КомпонентыОбмена.СтрокаСообщенияОбОшибке;
		ВызватьИсключение СообщениеОбОшибке;
		
	Иначе
		
		// Поместить файл во временное хранилище.
		ИдентификаторФайлаВоВременномХранилище = Строка(ОбменДаннымиСервер.ПоместитьФайлВХранилище(ПолноеИмяФайла));
		
		// Создаем временный каталог для хранения частей файла данных.
		ВременныйКаталог                     = ВременныйКаталогВыгрузки(
			ИдентификаторФайлаВоВременномХранилище);
		ИмяНеразделенногоФайла               = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(
			ВременныйКаталог, ИдентификаторФайлаВоВременномХранилище + ?(ПараметрыWEBСервиса.РазмерЧастиФайла > 0, ".zip", ".zip.1"));
		ИмяИсходногоФайлаВоВременномКаталоге = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(
			ВременныйКаталог, "data.xml");
		
		СоздатьКаталог(ВременныйКаталог);
		КопироватьФайл(ПолноеИмяФайла, ИмяИсходногоФайлаВоВременномКаталоге);
		
		// Архивируем файл.
		Архиватор = Новый ЗаписьZipФайла(ИмяНеразделенногоФайла);
		Архиватор.Добавить(ИмяИсходногоФайлаВоВременномКаталоге);
		Архиватор.Записать();
		
		Если ПараметрыWEBСервиса.РазмерЧастиФайла > 0 Тогда
			// Разделение файла на части.
			ИменаФайлов = РазделитьФайл(ИмяНеразделенногоФайла, ПараметрыWEBСервиса.РазмерЧастиФайла * 1024);
		Иначе
			ИменаФайлов = Новый Массив();
			ИменаФайлов.Добавить(ИмяНеразделенногоФайла);
		КонецЕсли;
		
		ВозвращаемоеЗначение = "{WEBService}$%1$%2";
		ВозвращаемоеЗначение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ВозвращаемоеЗначение, ИменаФайлов.Количество(), ИдентификаторФайлаВоВременномХранилище);
		
		Сообщение = Новый СообщениеПользователю();
		Сообщение.Текст = ВозвращаемоеЗначение;
		Сообщение.Сообщить();
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

ПодготовитьОбластьИзВыгрузки (БСП)

ВыгрузкаОбъектаВыборки (БСП)

ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы (БСП)

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

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

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

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

ЗагрузитьДанныеXDTOВИнформационнуюБазу (БСП)

1С Менеджер конфигураций