Работа с файлами в 1С 8.3
Меню

Работа с файлами в 1С 8.3

Содержание статьи
  1. Поиск файлов
  2. Объект «Файл»
  3. Работа с файлами в клиент-серверной архитектуре
  4. Работа с файлами в web-клиенте

Платформа 1С:Предприятие 8.3 предоставляет большой выбор инструментов для работы с файлами. В данной статье будут рассмотрены основные функции по работе с файлами.

Поиск файлов

Для поиска файлов во встроенном языке существует метод НайтиФайлы, метод доступен в Тонком клиенте, веб-клиенте, мобильном клиенте, через сервер, толстый клиент, а также внешнее соединение, мобильное приложение (клиент) и мобильное приложение (сервер).

Метод принимает на вход путь к каталогу, в котором будет производиться поиск, маска имени для поиска файлов, флаг – «Искать в подкаталогах»:

НайтиФайлы(<Путь>, <Маска>, <ИскатьВПодкаталогах>)

Функция возвращает массив, элементы которого объекты типа Файл.

Пример кода:


Файлы = НайтиФайлы("C:\", "*.doc", Ложь);
Для Каждого Ф Из Файлы Цикл
 	Сообщить(Ф.Имя); 	
КонецЦикла;

В результате работы алгоритма будут выведены имена всех doc-файлов, содержащихся на диске C:\. Если последний параметр указать «истина», будут найдены все файлы во всех подчиненных каталогах. Несколько дополнительных слов по маске поиска, в ОС Windows допускается использовать символы «*» – любые символы в любом количестве и «?» – любой один символ. Сочетать несколько масок недопустимо. В других ОС (Linux, macOS, iOS, Android) маску можно задавать более гибко, подробнее можно посмотреть в справке по языку.

Объект «Файл»

Объект Файл является основным объектом для работы с файлом. Конструктор объекта принимает полное имя файла.

Свойства объекта:

  • Имя
  • ИмяБезРасширения
  • ПолноеИмя
  • Путь
  • Расширение

Методы объекта:

  • НачатьПолучениеВремениИзменения
  • НачатьПолучениеКартинкиПредставленияФайлаБиблиотекиМобильногоУстройства
  • НачатьПолучениеНевидимости
  • НачатьПолучениеРазмера
  • НачатьПолучениеТолькоЧтения
  • НачатьПолучениеУниверсальногоВремениИзменения
  • НачатьПроверкуСуществования
  • НачатьПроверкуЭтоКаталог
  • НачатьПроверкуЭтоФайл
  • НачатьУстановкуВремениИзменения
  • НачатьУстановкуНевидимости
  • НачатьУстановкуТолькоЧтения
  • НачатьУстановкуУниверсальногоВремениИзменения
  • ПолучитьВремяИзменения
  • ПолучитьКартинкуПредставленияФайлаБиблиотекиМобильногоУстройства
  • ПолучитьНевидимость
  • ПолучитьПредставлениеФайлаБиблиотекиМобильногоУстройства
  • ПолучитьТолькоЧтение
  • ПолучитьУниверсальноеВремяИзменения
  • Размер
  • Существует
  • УстановитьВремяИзменения
  • УстановитьНевидимость
  • УстановитьТолькоЧтение
  • УстановитьУниверсальноеВремяИзменения
  • ЭтоКаталог
  • ЭтоФайл

Некоторые методы по своей сути делают одно и то же действие, например, НачатьУстановкуТолькоЧтения и УстановитьТолькоЧтение. Методы, которые начинаются с «Начать*», предназначены для работы в асинхронном режиме, они доступны только на клиентах, а вот их «братья» доступны и на сервере. При работе на клиенте с файлами рекомендуется использовать асинхронные методы, однако методы без префикса «Начать» также доступны на клиенте. При использовании таких методов в веб-клиенте нужно будет подключать расширение по работе с файлами (как это сделать, будет рассмотрено ниже в статье).

Пример кода работы с объектом Файл:


Файлы = НайтиФайлы("C:\", "*.doc", Ложь);
Для Каждого Ф Из Файлы Цикл
 	ЕслиУстановитьТолькоЧтение(Ф);
КонецЦикла;
 
&НаКлиенте
Процедура ЕслиУстановитьТолькоЧтение(Файл)
 	Если Файл.Существует() И Файл.ЭтоФайл() И Файл.Размер() > 0 Тогда
      	Файл.УстановитьТолькоЧтение(Истина);
 	КонецЕсли;
КонецПроцедуры

Данный код устанавливает признак только чтения у всех файлов “*.doc” на диске C:\.

Пример этого же алгоритма, но с использованием асинхронных методов:


&НаКлиенте
Процедура ЕслиУстановитьТолькоЧтение(Файл)
 	ОО = Новый ОписаниеОповещения("ЗавершитьПроверкуСуществования", ЭтаФорма, Новый Структура("Файл", Файл));
 	Файл.НачатьПроверкуСуществования(ОО);
КонецПроцедуры
 
&НаКлиенте
Процедура ЗавершитьПолучениеРазмера(Размер, ДопПараметры) Экспорт
 	Перем Файл;
 	
 	ДопПараметры.Свойство("Файл", Файл);
 	Если Размер > 0 И Файл  Неопределено Тогда
      	ОО = Новый ОписаниеОповещения("ЗавершитьПроверкуЭтоФайл", ЭтаФорма, Новый Структура("Файл", Файл));
      	Файл.НачатьПроверкуЭтоФайл(ОО);
 	КонецЕсли;
КонецПроцедуры
 
&НаКлиенте
Процедура ЗавершитьПроверкуСуществования(Существует, ДопПараметры) Экспорт
 	Перем Файл;
 	
 	ДопПараметры.Свойство("Файл", Файл);
 	Если Существует И Файл  Неопределено Тогда
      	ОО = Новый ОписаниеОповещения("ЗавершитьПолучениеРазмера", ЭтаФорма, Новый Структура("Файл", Файл));
      	Файл.НачатьПолучениеРазмера(ОО);
 	КонецЕсли;
КонецПроцедуры
 
&НаКлиенте
Процедура ЗавершитьПроверкуЭтоФайл(ЭтоФайл, ДопПараметры) Экспорт
 	Перем Файл;
 	
 	ДопПараметры.Свойство("Файл", Файл);
 	Если ЭтоФайл И Файл  Неопределено Тогда
      	ОО = Новый ОписаниеОповещения("ЗавершитьУстановкуТолькоЧтения", ЭтаФорма);
      	Файл.НачатьУстановкуТолькоЧтения(ОО, Истина); 
 	КонецЕсли;
КонецПроцедуры
 
&НаКлиенте
Процедура ЗавершитьУстановкуТолькоЧтения(ДопПараметры) Экспорт
 	Сообщить("Флаг только чтение установлен"); 	
КонецПроцедуры

Писать асинхронный код очень неудобно, он получается громоздкий, но именно асинхронный подход надо применять, а особенно – при разработке для web клиента.

Работа с файлами в клиент-серверной архитектуре

При работе в клиент-серверной архитектуре мы не можем работать с файлом на сервере, который был выбран на клиенте, т.к. сервер и клиент – это физически две разных машины. Чтобы решить эту проблему, мы должны передать файл из клиента на сервер, используя временное хранилище.

Пример синхронного кода:


Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
 	Диалог.МножественныйВыбор = Ложь;
 	Если Диалог.Выбрать() ТОгда
      	Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла), ЭтаФорма.УникальныйИдентификатор);
      	ОбработкаФайлаНаСервере(Адрес);
КонецЕсли;
 
&НаСервереБезКонтекста
Процедура ОбработкаФайлаНаСервере(АдресВХ)
 	ДД = ПолучитьИзВременногоХранилища(АдресВХ);  
 	Если ДД  Неопределено Тогда
      	// работа с данными.
 	КонецЕсли;
КонецПроцедуры

Для передачи файлов существуют также такие асинхронные методы, как:

  • НачатьПомещениеФайла
  • НачатьПомещениеФайлов

Вместо функции ПолучитьИзВременногоХранилища также можно использовать функцию ПолучитьФайл.

Работа с файлами в web-клиенте

Для работы с файлами в веб-клиенте необходимо расширение работы с файлами, делается это функциями:

  • НачатьУстановкуРасширенияРаботыСФайлами
  • НачатьПодключениеРасширенияРаботыСФайламиЗавершение

Legacy методы:

  • УстановитьРасширениеРаботыСФайлами
  • ПодключитьРасширениеРаботыСФайлами

В БСП (подсистема ПодключаемоеОборудование) уже есть метод, который использует указанные выше функции.


МенеджерОборудованияКлиент.ПроверитьДоступностьРасширенияРаботыСФайлами (ОповещениеПриЗавершении, ПредлагатьУстановку = Истина)

Если у вас используется web клиент, рекомендуется использовать следующую конструкцию:


#Если ВебКлиент Тогда
	ОписаниеОповещения = Новый ОписаниеОповещения("callback_функция", ЭтотОбъект, ДопПараметры);
	ПроверитьДоступностьРасширенияРаботыСФайлами(ОписаниеОповещения, Ложь);
#Иначе
	// В тонком и толстом клиентах расширение подключено всегда.
	// выполняем работу с файлами
#КонецЕсли


Рассказать друзьям
Предыдущая статья статья
Комиссионная торговля в 1С 8.3 Бухгалтерия
Следующая статья статья
1С:Управление торговлей 8 версия 11.5: обзор возможностей
Комментарии