Как в 1С 8.x скопировать файл с клиента на сервер в два клика?




В статье рассмотрен удобный и элегантный способ переноса файлов с клиентского дискового пространства на сервер, где установлено 1С: Предприятие

Основная идея заключается в том, чтобы на Клиенте поместить двоичные данные экспортируемого файла во временное хранилище, передать адрес временного хранилища на Сервер, «распаковать» и записать данные в файл.

Для реализации задуманного нам понадобится общий модуль, в который мы заложем основную логику механизма, назовём его МодульЗаписи; и глобальный модуль, содержащий одну единственную процедуру вызова записи на Сервере. Это «транзитная» процедура, которая в сущности является связующим звеном между Клиентом и Сервером.

МодульЗаписи будет иметь две процедуры.

Первая — точка входа. Эта процедура на вход получает имя экспортируемого файла, преобразует его содержимое в двоичные данные, помещает их во временное хранилище и передаёт на выполнение процедуре из Глобального модуля. Вторая процедура вызывается непосредственно из Глобального модуля и выполняет сохранение полученных данных в файл на дисковом пространстве сервера.

Ниже представлен код модуля МодульЗаписи.

// Сохраняет файл на сервере
//
// Параметры
//  <ИмяФайла> - <Строка> - содержит адрес файла, который нужно перенести на сервер
//  <ЛокальныйАдресКаталога> - <Строка> - содержит адрес каталога на сервере, куда необходимо поместить новый файл
Процедура СохранитьФайлНаСервере(ИмяФайла, ЛокальныйАдресКаталога, Расширение = ".xml") Экспорт

Если ПустаяСтрока(ИмяФайла) Тогда

Возврат;

КонецЕсли;

ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла);
Идентификатор  = Новый УникальныйИдентификатор;

АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, Идентификатор);

ВызватьЗаписьНаСервере(АдресХранилища, ЛокальныйАдресКаталога, Расширение);

КонецПроцедуры

&НаСервере
// Выполняет запись файла из временного хранилища на диск
Процедура ЗаписатьНаСервер(АдресХранилища, ЛокальныйАдресКаталога = "", Расширение) Экспорт

// Проверим заполнен ли адрес временного хранилища, откуда будем брать файл
Если ПустаяСтрока(АдресХранилища) Тогда
Возврат;
КонецЕсли;

// Проверим заполнен ли адрес каталога для записи
Если ПустаяСтрока(ЛокальныйАдресКаталога) Тогда

// По умолчанию дирректорию устнавливаем "C:1C"
ЛокальныйАдресКаталога = "C:1C";

КонецЕсли;

// Проверим существует ли указанный каталог
КаталогЗаписи = Новый Файл(ЛокальныйАдресКаталога);

Если НЕ КаталогЗаписи.Существует() Тогда
СоздатьКаталог(ЛокальныйАдресКаталога);
КонецЕсли;

ЛокальныйАдресКаталога = ЛокальныйАдресКаталога;

ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);

ИмяФайла = Новый УникальныйИдентификатор;

Попытка
// Записать файл на сервере
ДвоичныеДанные.Записать(ЛокальныйАдресКаталога  + "" + ИмяФайла + Расширение);
Исключение
ЗаписьЖурналаРегистрации("Запись XML-файла на сервере.", УровеньЖурналаРегистрации.Ошибка, , ,ОписаниеОшибки());
КонецПопытки;

КонецПроцедуры

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

Приятного и комфортного пользования 🙂

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *