ПодключитьРасширениеРаботыСФайлами 1С, УстановитьРасширениеРаботыСФайлами 1С, ПолучитьФайл 1С, ПоместитьФайл 1С, ПолучитьФайлы 1С, ПоместитьФайлы 1С, ПолучитьИзВременногоХранилища 1С, ПоместитьВоВременноеХранилище 1С


В веб-клиенте работа с файлами (чтение/запись) производится только на сервере.

Функция ПодключитьРасширениеРаботыСФайлами() используется в веб-клиенте для включения разрешения работы с файлами (поддерживают не все браузеры), если неудачно – возвращает Ложь. Перед первым использованием функции в этом браузере на этом комьютере требуется установить расширение работы с файлами с помощью функции УстановитьРасширениеРаботыСФайлами()

Функции
• ПоместитьФайл(АдресКудаПомещен, ИмяФайла)
• ПолучитьФайл(АдресОткуда)
• ПоместитьФайлы(МассивИменФайлов, МассивАдресовКудаПомещены)
• ПолучитьФайлы(МассивАдресовОткуда)
позволяют передвать файлы между клиентом и сервером.

Функции ПолучитьИзВременногоХранилища() и ПоместитьВоВременноеХранилище() позволяют получить данные файла из временного хранилища сервера, куда они были помещены с помощью ПолучитьФайл() и ПоместитьФайл().


На клиенте файлы располагаются где требуется в файловой системе. На сервере файлы помещаются в «хранилище» — временный каталог файлов сервера 1С. Напрямую с хранилищем работать нельзя – требуется получить значение из хранилища с помощью функции ПолучитьИзВременногоХранилища() и сохранить во временный файл на сервере с помощью функции ПолучитьИмяВременногоФайла()

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

При использовании данных функций в веб-клиенте необходимо заранее выполнить функцию ПодключитьРасширениеРаботыСФайлами()

Обратите внимание на различные варианты поведения системы при выполнения данных функций. В некоторых браузерах выполнение кода программы прерывается до закачки файлов на сервер (например, пользователю выводится окно с процентами закачки файла), а в некоторых – выполнение программы продолжается, а загрузка производится фоново.

Для примеров использован текстовый файл на локальной «клиентской» машине по адресу «D:\Текстовый файл.txt» со следующим содержимым:
Привет, мир!
Конец файла

 

Пример 1. Чтение текстового файла на сервере. Имя файла выбирает пользователь/указывает программист


&НаКлиенте
Процедура КнопкаЧтениеФайла(Команда)
     //для веб-клиента требуется дополнительно подключение расширения работы с файлами
     #Если ВебКлиент Тогда
     Результат = ПодключитьРасширениеРаботыСФайлами();

     //если подключить не удалось - требуется установить его (в первый раз)
     Если не Результат Тогда
          //устанавливаем
          УстановитьРасширениеРаботыСФайлами();
          //если не удалось установить - то повторный вызов подключения будет неудачный
          Если не ПодключитьРасширениеРаботыСФайлами() Тогда
               //сообщаем об ошибке и прерываем работу программы
               ВызватьИсключение "Ошибка. Ваш браузер не поддерживает работу с файлами.";
          КонецЕсли;
     КонецЕсли;
     #КонецЕсли

     //перемещаем файл на сервер во "внутреннее хранилище сервера"
     ВнутреннийАдресСервера = "";

     //если имя файла выбирает пользователь в стандартном диалоговом окне Windows
     Результат = ПоместитьФайл(ВнутреннийАдресСервера);

     //если имя файла указывает программист напрямую
     //Результат = ПоместитьФайл(ВнутреннийАдресСервера, "D:\Текстовый файл.txt",, Ложь);

     Если не Результат Тогда
          ВызватьИсключение "Ошибка. Не удалось передать файл на сервер. Операция прервана.";
     КонецЕсли;
     Сообщить(ВнутреннийАдресСервера);

     //переводим выполнение на сервер вызовом серверной процедуры
     ЧтениеФайла(ВнутреннийАдресСервера);
КонецПроцедуры

&НаСервере
Процедура ЧтениеФайла(ВнутреннийАдресСервера)
     //получаем файл из "временного хранилища сервера" и сохраняем во временный файл на сервере
     ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
     ПолучитьИзВременногоХранилища(ВнутреннийАдресСервера).Записать(ИмяВременногоФайла);
     Сообщить(ИмяВременногоФайла);

     //начинаем работать с файлом

     //узнаем размер файла в байтах (и переведем размер в мегабайты)
     Файл = Новый Файл(ИмяВременногоФайла);
     Сообщить(Строка(Окр(Файл.Размер() /1024 /1024, 2)) + "Мб");

     //прочитаем первую строку файла
     ТекстовыйФайл = Новый ЧтениеТекста(ИмяВременногоФайла);
     ТекстПервойСтрокиФайла = ТекстовыйФайл.ПрочитатьСтроку();
     Сообщить(ТекстПервойСтрокиФайла);

     ТекстовыйФайл.Закрыть();
КонецПроцедуры

1с возвращает:
e1cib/tempstorage/ad728cdf-fce4-4c50-b348-87d5265a57a6
C:\Users\ИмяПользователяWindows\AppData\Local\Temp\v8_BE51_59.tmp
0Мб
Привет, мир!

 

Пример 2. Передача на сервер нескольких файлов. Имена файлов выбирает пользователь/указывает программист


&НаКлиенте
Процедура КнопкаЧтениеФайла(Команда)

     //для веб-клиента требуется дополнительно подключение расширения работы с файлами
     #Если ВебКлиент Тогда
     Результат = ПодключитьРасширениеРаботыСФайлами();

     //если подключить не удалось - требуется установить его (в первый раз)
     Если не Результат Тогда
          //устанавливаем
          УстановитьРасширениеРаботыСФайлами();
          //если не удалось установить - то повторный вызов подключения будет неудачный
          Если не ПодключитьРасширениеРаботыСФайлами() Тогда
               //сообщаем об ошибке и прерываем работу программы
               ВызватьИсключение "Ошибка. Ваш браузер не поддерживает работу с файлами.";
          КонецЕсли;
     КонецЕсли;
     #КонецЕсли

     //перемещаем файл на сервер во "внутреннее хранилище сервера"
     МассивВнутреннихАдресовСервера = Новый Массив;

     //если список имен файлов выбирает пользователь
     Результат = ПоместитьФайлы(,МассивВнутреннихАдресовСервера);

     //если список имен файлов указывает программист напрямую
     //МассивВнутреннихАдресовСервера = Новый Массив;
     //МассивИменФайлов = Новый Массив;
     //МассивИменФайлов.Добавить(Новый ОписаниеПередаваемогоФайла("D:\Текстовый файл.txt", ""));
     //Результат = ПоместитьФайлы(МассивИменФайлов, МассивВнутреннихАдресовСервера,, Ложь);

     Если не Результат или МассивВнутреннихАдресовСервера.Количество() = 0 Тогда
          ВызватьИсключение "Ошибка. Не удалось передать файл на сервер. Операция прервана.";
     КонецЕсли;

     Для каждого ИмяФайла из МассивВнутреннихАдресовСервера Цикл
          Сообщить(ИмяФайла.Хранение);

          //переводим выполнение на сервер вызовом серверной процедуры
          //реализацию этой функции см. в примере 1
          ЧтениеФайла(ИмяФайла.Хранение);
     КонецЦикла;

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

 

Пример 3. Запись нового файла на сервере с последующей передачей на клиент. Имя файла выбирает пользователь/формирует программист


&НаКлиенте
Процедура КнопкаЧтениеФайла(Команда)

     //для веб-клиента требуется дополнительно подключение расширения работы с файлами
     #Если ВебКлиент Тогда
     Результат = ПодключитьРасширениеРаботыСФайлами();

     //если подключить не удалось - требуется установить его (в первый раз)
     Если не Результат Тогда
          //устанавливаем
          УстановитьРасширениеРаботыСФайлами();
          //если не удалось установить - то повторный вызов подключения будет неудачный
          Если не ПодключитьРасширениеРаботыСФайлами() Тогда
               //сообщаем об ошибке и прерываем работу программы
               ВызватьИсключение "Ошибка. Ваш браузер не поддерживает работу с файлами.";
          КонецЕсли;
     КонецЕсли;
     #КонецЕсли

     //вызов серверной процедуры формирования файла, она возвращает "внутренний адрес", передаем его параметром
     //куда сохранил пользователь файл и сохранил ли - мы не знаем
     //пользователь всегда подтверждает разрешение на получение файла
     ПолучитьФайл(ФормированиеФайла());

     //вариант с сохранением файла без подтверждения пользователя, имя файла указываем сразу, в веб-клиенте работать не будет
     //ПолучитьФайл(ФормированиеФайла(), "D:\Текстовый файл.txt", Ложь);

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

&НаСервере
Функция ФормированиеФайла()

     //получаем файл из "временного хранилища сервера" и сохраняем во временный файл на сервере
     ИмяВременногоФайла = ПолучитьИмяВременногоФайла();

     //начинаем работать с файлом

     //записываем текст в файл
     ТекстовыйФайл = Новый ЗаписьТекста(ИмяВременногоФайла);
     ТекстовыйФайл.ЗаписатьСтроку("Привет, мир!");
     ТекстовыйФайл.ЗаписатьСтроку("Конец файла");
     ТекстовыйФайл.Закрыть();

     //помещаем во "временное хранилище сервера", система вернет "внутренний адрес"
     Возврат ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла));

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

 

Пример 4. Передача файла на сервер, изменение и возврат на клиент



Только зарегистрированные пользователи VIP группы могут видеть этот контент.




Проголосовать за этот пост:

1 Star2 Stars3 Stars4 Stars5 Stars (10 голосов, среднее: 4,50 из 5)
Загрузка...

Добавить комментарий