ВыполнитьПередачуФайлаПриложению (БСП)

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

Выполнить передачу файла приложению. Вызывает команду передачи файла из текущей области данных в любую другую область

// Вызывает команду передачи файла из текущей области данных в любую другую область 
// данных сервиса.
// Важно! Если какой-либо из параметров передан некорректно, вызывается исключение.
//
// Параметры:
//	ИмяФайла - Строка - полное имя к передаваемому файлу.
//	КодПолучателя - Число - код области данных, куда нужно передать файл.
//	БыстраяПередача - Булево - указывает, что необходимо использовать быстрые сообщения для передачи файла. 
//	ПараметрыВызова - Структура - дополнительные параметры вызова,
//						*Код (Число), *Тело (Строка).
//
// Возвращаемое значение:
//   УникальныйИдентификатор   - GUID вызова.
//
Функция ВыполнитьПередачуФайлаПриложению(ИмяФайла, КодПолучателя, БыстраяПередача = Ложь, ПараметрыВызова = Неопределено) Экспорт

	Локаль = ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка();
		
	// Проверяем существование файла.
	
	Указатель = Новый Файл(ИмяФайла);
	Если НЕ Указатель.Существует() Тогда
		Комментарий = НСтр("ru = 'Файл с указанным именем не найден на файловой системе.'", Локаль); 
		ВызватьИсключение Комментарий;
	КонецЕсли; 
	
	// Проверяем код получателя.
	
	Если НЕ ЗначениеЗаполнено(КодПолучателя) И НЕ ТипЗнч(КодПолучателя) = Тип("Число") Тогда
		Комментарий = НСтр("ru = 'Параметр КодПолучателя не содержит валидный код области данных.'", Локаль); 
		ВызватьИсключение Комментарий;
	КонецЕсли; 
	
	// Помещаем файл в общее хранилище МС.
	
	УстановитьПривилегированныйРежим(Истина);
	
	ИдентификаторВызова = Новый УникальныйИдентификатор();
	
	ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ИмяФайла);
	ИдентификаторФайла = РаботаВМоделиСервиса.ПоместитьФайлВХранилищеМенеджераСервиса(ДвоичныеДанныеФайла);
	
	// Формируем и отправляем сообщение.
	
	ТипСообщения = СообщенияРаспределенноеВыполнениеКомандИнтерфейс.ТипПередачаФайлаЗапрос();
	Сообщение = СообщенияВМоделиСервиса.НовоеСообщение(ТипСообщения);
	Сообщение.Body.Zone = РаботаВМоделиСервиса.ЗначениеРазделителяСеанса();
	Сообщение.Body.Call_ID = ИдентификаторВызова;
	Сообщение.Body.File_ID = ИдентификаторФайла;
	Сообщение.Body.Sender = Сообщение.Body.Zone;
	Сообщение.Body.Recipient = КодПолучателя;
	Сообщение.Body.RapidTransfer = БыстраяПередача;
	
	Если НЕ ПараметрыВызова = Неопределено И ТипЗнч(ПараметрыВызова) = Тип("Структура") Тогда
		
		Если ПараметрыВызова.Свойство("Код") Тогда
			Сообщение.Body.CallCode = ПараметрыВызова.Код;
		КонецЕсли; 
		
		Если ПараметрыВызова.Свойство("Тело") Тогда
			Сообщение.Body.CallBody = ПараметрыВызова.Тело;
		КонецЕсли; 
		
	КонецЕсли; 
	
	// Высылаем сообщение МС.
	
	НачатьТранзакцию();
	Попытка
		Получатель = РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса();
		СообщенияВМоделиСервиса.ОтправитьСообщение(Сообщение, Получатель, БыстраяПередача);	
		
		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		ВызватьИсключение;
	КонецПопытки;
	
	УстановитьПривилегированныйРежим(Ложь);
	
	Возврат ИдентификаторВызова;

КонецФункции

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

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

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

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

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

Выбор файла управляемое приложение

ВыполнитьСравнениеФайлов (БСП)

ПолучитьРазмерБлокаПередачиФайла (БСП)

ОбработатьЗапросНаПередачуФайла (БСП)

ОбработатьОтветНаПередачуФайла (БСП)

ОбработатьОшибкуПередачиФайла (БСП)

ОтработатьКвитанциюПередачиФайла (БСП)

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