Основная идея заключается в том, чтобы на Клиенте поместить двоичные данные экспортируемого файла во временное хранилище, передать адрес временного хранилища на Сервер, «распаковать» и записать данные в файл.
Для реализации задуманного нам понадобится общий модуль, в который мы заложем основную логику механизма, назовём его МодульЗаписи; и глобальный модуль, содержащий одну единственную процедуру вызова записи на Сервере. Это «транзитная» процедура, которая в сущности является связующим звеном между Клиентом и Сервером.
МодульЗаписи будет иметь две процедуры.
Первая — точка входа. Эта процедура на вход получает имя экспортируемого файла, преобразует его содержимое в двоичные данные, помещает их во временное хранилище и передаёт на выполнение процедуре из Глобального модуля. Вторая процедура вызывается непосредственно из Глобального модуля и выполняет сохранение полученных данных в файл на дисковом пространстве сервера.
Ниже представлен код модуля МодульЗаписи.
// Сохраняет файл на сервере
//
// Параметры
// <ИмяФайла> - <Строка> - содержит адрес файла, который нужно перенести на сервер
// <ЛокальныйАдресКаталога> - <Строка> - содержит адрес каталога на сервере, куда необходимо поместить новый файл
Процедура СохранитьФайлНаСервере(ИмяФайла, ЛокальныйАдресКаталога, Расширение = ".xml") Экспорт
Если ПустаяСтрока(ИмяФайла) Тогда
Возврат;
КонецЕсли;
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла);
Идентификатор = Новый УникальныйИдентификатор;
АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, Идентификатор);
ВызватьЗаписьНаСервере(АдресХранилища, ЛокальныйАдресКаталога, Расширение);
КонецПроцедуры
&НаСервере
// Выполняет запись файла из временного хранилища на диск
Процедура ЗаписатьНаСервер(АдресХранилища, ЛокальныйАдресКаталога = "", Расширение) Экспорт
// Проверим заполнен ли адрес временного хранилища, откуда будем брать файл
Если ПустаяСтрока(АдресХранилища) Тогда
Возврат;
КонецЕсли;
// Проверим заполнен ли адрес каталога для записи
Если ПустаяСтрока(ЛокальныйАдресКаталога) Тогда
// По умолчанию дирректорию устнавливаем "C:1C"
ЛокальныйАдресКаталога = "C:1C";
КонецЕсли;
// Проверим существует ли указанный каталог
КаталогЗаписи = Новый Файл(ЛокальныйАдресКаталога);
Если НЕ КаталогЗаписи.Существует() Тогда
СоздатьКаталог(ЛокальныйАдресКаталога);
КонецЕсли;
ЛокальныйАдресКаталога = ЛокальныйАдресКаталога;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
ИмяФайла = Новый УникальныйИдентификатор;
Попытка
// Записать файл на сервере
ДвоичныеДанные.Записать(ЛокальныйАдресКаталога + "" + ИмяФайла + Расширение);
Исключение
ЗаписьЖурналаРегистрации("Запись XML-файла на сервере.", УровеньЖурналаРегистрации.Ошибка, , ,ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Во вложении выгрузка конфигурации с уже настроенным механизмом копирования и встроенной демонстрационной обработкой.
Приятного и комфортного пользования 🙂