Подготовить данные для выгрузки из информационной базы.
Процедура ПодготовитьДанныеДляВыгрузкиИзИнформационнойБазы(ПараметрыПроцедуры, АдресХранилища) Экспорт
Параметры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
///////////////////////////////////////////////////////////////////////////////////////////////////////
ВыполнитьВыгрузкуДляУзлаИнформационнойБазы (БСП)
ПодготовитьОбластьИзВыгрузки (БСП)
ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы (БСП)
ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВоВременноеХранилище (БСП)
ВыполнитьВыгрузкуДляУзлаИнформационнойБазыВСервисПередачиФайлов (БСП)
ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезФайл (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)