Платформа 1С:Предприятие 8.3 предоставляет большой выбор инструментов для работы с файлами. В данной статье будут рассмотрены основные функции по работе с файлами.
Поиск файлов
Для поиска файлов во встроенном языке существует метод НайтиФайлы, метод доступен в Тонком клиенте, веб-клиенте, мобильном клиенте, через сервер, толстый клиент, а также внешнее соединение, мобильное приложение (клиент) и мобильное приложение (сервер).
Метод принимает на вход путь к каталогу, в котором будет производиться поиск, маска имени для поиска файлов, флаг – «Искать в подкаталогах»:
НайтиФайлы(<Путь>, <Маска>, <ИскатьВПодкаталогах>)
Функция возвращает массив, элементы которого объекты типа Файл.
Пример кода:
Файлы = НайтиФайлы("C:\", "*.doc", Ложь);
Для Каждого Ф Из Файлы Цикл
Сообщить(Ф.Имя);
КонецЦикла;
В результате работы алгоритма будут выведены имена всех doc-файлов, содержащихся на диске C:\. Если последний параметр указать «истина», будут найдены все файлы во всех подчиненных каталогах. Несколько дополнительных слов по маске поиска, в ОС Windows допускается использовать символы «*» – любые символы в любом количестве и «?» – любой один символ. Сочетать несколько масок недопустимо. В других ОС (Linux, macOS, iOS, Android) маску можно задавать более гибко, подробнее можно посмотреть в справке по языку.
Объект «Файл»
Объект Файл является основным объектом для работы с файлом. Конструктор объекта принимает полное имя файла.
Свойства объекта:
- Имя
- ИмяБезРасширения
- ПолноеИмя
- Путь
- Расширение
Методы объекта:
- НачатьПолучениеВремениИзменения
- НачатьПолучениеКартинкиПредставленияФайлаБиблиотекиМобильногоУстройства
- НачатьПолучениеНевидимости
- НачатьПолучениеРазмера
- НачатьПолучениеТолькоЧтения
- НачатьПолучениеУниверсальногоВремениИзменения
- НачатьПроверкуСуществования
- НачатьПроверкуЭтоКаталог
- НачатьПроверкуЭтоФайл
- НачатьУстановкуВремениИзменения
- НачатьУстановкуНевидимости
- НачатьУстановкуТолькоЧтения
- НачатьУстановкуУниверсальногоВремениИзменения
- ПолучитьВремяИзменения
- ПолучитьКартинкуПредставленияФайлаБиблиотекиМобильногоУстройства
- ПолучитьНевидимость
- ПолучитьПредставлениеФайлаБиблиотекиМобильногоУстройства
- ПолучитьТолькоЧтение
- ПолучитьУниверсальноеВремяИзменения
- Размер
- Существует
- УстановитьВремяИзменения
- УстановитьНевидимость
- УстановитьТолькоЧтение
- УстановитьУниверсальноеВремяИзменения
- ЭтоКаталог
- ЭтоФайл
Некоторые методы по своей сути делают одно и то же действие, например, НачатьУстановкуТолькоЧтения и УстановитьТолькоЧтение. Методы, которые начинаются с «Начать*», предназначены для работы в асинхронном режиме, они доступны только на клиентах, а вот их «братья» доступны и на сервере. При работе на клиенте с файлами рекомендуется использовать асинхронные методы, однако методы без префикса «Начать» также доступны на клиенте. При использовании таких методов в веб-клиенте нужно будет подключать расширение по работе с файлами (как это сделать, будет рассмотрено ниже в статье).
Пример кода работы с объектом Файл:
Файлы = НайтиФайлы("C:\", "*.doc", Ложь);
Для Каждого Ф Из Файлы Цикл
ЕслиУстановитьТолькоЧтение(Ф);
КонецЦикла;
&НаКлиенте
Процедура ЕслиУстановитьТолькоЧтение(Файл)
Если Файл.Существует() И Файл.ЭтоФайл() И Файл.Размер() > 0 Тогда
Файл.УстановитьТолькоЧтение(Истина);
КонецЕсли;
КонецПроцедуры
Данный код устанавливает признак только чтения у всех файлов “*.doc” на диске C:\.
Пример этого же алгоритма, но с использованием асинхронных методов:
&НаКлиенте
Процедура ЕслиУстановитьТолькоЧтение(Файл)
ОО = Новый ОписаниеОповещения("ЗавершитьПроверкуСуществования", ЭтаФорма, Новый Структура("Файл", Файл));
Файл.НачатьПроверкуСуществования(ОО);
КонецПроцедуры
&НаКлиенте
Процедура ЗавершитьПолучениеРазмера(Размер, ДопПараметры) Экспорт
Перем Файл;
ДопПараметры.Свойство("Файл", Файл);
Если Размер > 0 И Файл Неопределено Тогда
ОО = Новый ОписаниеОповещения("ЗавершитьПроверкуЭтоФайл", ЭтаФорма, Новый Структура("Файл", Файл));
Файл.НачатьПроверкуЭтоФайл(ОО);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗавершитьПроверкуСуществования(Существует, ДопПараметры) Экспорт
Перем Файл;
ДопПараметры.Свойство("Файл", Файл);
Если Существует И Файл Неопределено Тогда
ОО = Новый ОписаниеОповещения("ЗавершитьПолучениеРазмера", ЭтаФорма, Новый Структура("Файл", Файл));
Файл.НачатьПолучениеРазмера(ОО);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗавершитьПроверкуЭтоФайл(ЭтоФайл, ДопПараметры) Экспорт
Перем Файл;
ДопПараметры.Свойство("Файл", Файл);
Если ЭтоФайл И Файл Неопределено Тогда
ОО = Новый ОписаниеОповещения("ЗавершитьУстановкуТолькоЧтения", ЭтаФорма);
Файл.НачатьУстановкуТолькоЧтения(ОО, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗавершитьУстановкуТолькоЧтения(ДопПараметры) Экспорт
Сообщить("Флаг только чтение установлен");
КонецПроцедуры
Писать асинхронный код очень неудобно, он получается громоздкий, но именно асинхронный подход надо применять, а особенно – при разработке для web клиента.
Работа с файлами в клиент-серверной архитектуре
При работе в клиент-серверной архитектуре мы не можем работать с файлом на сервере, который был выбран на клиенте, т.к. сервер и клиент – это физически две разных машины. Чтобы решить эту проблему, мы должны передать файл из клиента на сервер, используя временное хранилище.
Пример синхронного кода:
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.МножественныйВыбор = Ложь;
Если Диалог.Выбрать() ТОгда
Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла), ЭтаФорма.УникальныйИдентификатор);
ОбработкаФайлаНаСервере(Адрес);
КонецЕсли;
&НаСервереБезКонтекста
Процедура ОбработкаФайлаНаСервере(АдресВХ)
ДД = ПолучитьИзВременногоХранилища(АдресВХ);
Если ДД Неопределено Тогда
// работа с данными.
КонецЕсли;
КонецПроцедуры
Для передачи файлов существуют также такие асинхронные методы, как:
- НачатьПомещениеФайла
- НачатьПомещениеФайлов
Вместо функции ПолучитьИзВременногоХранилища также можно использовать функцию ПолучитьФайл.
Работа с файлами в web-клиенте
Для работы с файлами в веб-клиенте необходимо расширение работы с файлами, делается это функциями:
- НачатьУстановкуРасширенияРаботыСФайлами
- НачатьПодключениеРасширенияРаботыСФайламиЗавершение
Legacy методы:
- УстановитьРасширениеРаботыСФайлами
- ПодключитьРасширениеРаботыСФайлами
В БСП (подсистема ПодключаемоеОборудование) уже есть метод, который использует указанные выше функции.
МенеджерОборудованияКлиент.ПроверитьДоступностьРасширенияРаботыСФайлами (ОповещениеПриЗавершении, ПредлагатьУстановку = Истина)
Если у вас используется web клиент, рекомендуется использовать следующую конструкцию:
#Если ВебКлиент Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("callback_функция", ЭтотОбъект, ДопПараметры);
ПроверитьДоступностьРасширенияРаботыСФайлами(ОписаниеОповещения, Ложь);
#Иначе
// В тонком и толстом клиентах расширение подключено всегда.
// выполняем работу с файлами
#КонецЕсли
консультация эксперта
самые свежие новости 1 раз в месяц