1С:Предприятие 8.2 /
Разработчикам /
Клиент-серверное взаимодействие и вопросы безопасности
Доступ к файловой системе из кода конфигурации
Работа с временными файлами и каталогами
Передача файлов между клиентом и сервером
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. При обращении из кода конфигурации к файлам и каталогам файловой системы следует иметь в виду, что доступ к ним ограничен правами пользователя операционной системы, от имени которого запущено приложение.
1.1. Если доступ к файловой системе осуществляется из кода, выполняемого на клиенте, то он выполняется под правами пользователя, от имени которого запущено приложение (тонкий, толстый или веб-клиент). Как правило, это текущий пользователь операционной системы.
1.2. Если доступ к файловой системе осуществляется из кода, выполняемого на сервере, то:
- при использовании клиент-серверной информационной базы, доступ ограничен правами пользователя, от имени которого запущен сервер 1С:Предприятия (*);
- при использовании файловой базы, опубликованной на веб-сервере, доступ ограничен правами пользователя, от имени которого запущен веб-сервер.
Область применения (уточнение): управляемое приложение, обычное приложение. 2. Запрещается выполнять запись каких-либо файлов в каталог исполняемых файлов 1С:Предприятия , получаемого с помощью метода КаталогПрограммы. Использование метода КаталогПрограммы допустимо только для чтения или запуска файлов. Например, при работе в ОС Windows, для запуска копии тонкого клиента 1С:Предприятия текущей версии, допустимо использовать: ЗапуститьПриложение(КаталогПрограммы() + "1cv8s.exe"); |
Работа с временными файлами и каталогами
При необходимости использования временных файлов и каталогов необходимо соблюдать следующие требования:
1. Для получения имени временного файла следует использовать метод ПолучитьИмяВременногоФайла. В противном случае возможна некорректная работа конфигурации в многопользовательском режиме, с включенными профилями безопасностями, возникновение проблем с правами доступа к файлам операционной системы.
Неправильно:
ИмяПромежуточногоФайла = "C:/Временные файлы 1С/TempFile.xml"Данные.Записать(ИмяПромежуточногоФайла);
У текущего пользователя может не быть прав на запись в указанный каталог. Кроме того, при одновременном выполнении этого кода из двух разных сеансов возникнет ошибка.
Правильно:
ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("xml");Данные.Записать(ИмяПромежуточногоФайла);
При использовании этой функции будет получено уникальное имя, гарантирован доступ к файлу.
2. Для создания временного каталога рекомендуется также использовать имя, полученное при помощи метода ПолучитьИмяВременногоФайла. Это гарантирует уникальность имени создаваемого каталога при работе в многопользовательском режиме. После этого, внутри созданного каталога можно создавать другие каталоги и файлы без ограничений.
3. При выполнении кода на веб клиенте или в редких случаях, если не требуется обеспечение работы в многопользовательском режиме например, обновление файловой информационной базы, монопольный режим), необходимо использовать для формирования имени файла или каталога функцию КаталогВременныхФайлов.
См. также Особенности разработки конфигураций для ОС Linux, об особенностях использования имен и путей файлов.
4. После окончания работы с временным файлом или каталогом, его необходимо удалить самостоятельно. Нельзя рассчитывать на автоматическое удаление файлов и каталогов при следующем запуске платформы, это может привести к исчерпанию свободного места в каталоге временных файлов.
ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("xml");Данные.Записать(ИмяПромежуточногоФайла);// Работа с файлом...// Удаляем временный файлПопытка УдалитьФайлы(ИмяПромежуточногоФайла);Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Мой механизм.Действие'"), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));КонецПопытки;
См. также: Использование Журнала регистрации.
5. При использовании временных файлов и каталогов на сервере, необходимо полностью завершать работу с ними в рамках одного серверного вызова. При работе конфигурации с использованием кластера серверов, при следующем вызове эти файлы могут стать недоступны, так как код начнет исполняться на другом компьютере. При необходимости сохранить данные между серверными вызовами в пределах одного сеанса следует использовать временное хранилище платформы (методы ПоместитьВоВременноеХранилище, ПолучитьИзВременногоХранилища).
5. 1. В редких случаях может возникнуть необходимость передачи данных во временных файлах между сеансами, например, при подготовке данных для фонового задания, при организации длительного процесса, обслуживающего несколько последовательных вызовов web-сервиса. Необходимо самостоятельно обеспечивать гарантировано общее место хранения , права для доступа к файлам из разных мест их обработки, удаление файлов по истечению сроков их обработки или аварийного завершения процесса обработки. Рекомендуется использовать следующий подход:
- Для обеспечения доступа со всех возможных мест обработки заводится константа для хранения общего пути к файлам, доступного для доступа со всех серверов кластера;
- При создании временных файлов их имена заносятся во вспомогательный регистр сведений с сохранением времени создания файла;
- При штатном прохождении процесса, последняя операция, которой были нужны файлы, перед своим завершением удаляет как сам файл, так и записи о них во вспомогательном регистре ;
- Вспомогательное регламентное задание периодически проверяет наличие записей во вспомогательном регистре, время существования которых заведомо превышает время штатного завершения процесса. При обнаружении таких записей, задание удаляет временные файлы и записи о них.
Передача файлов между клиентом и сервером
1. При одновременной работе с файлом на клиенте и на сервере необходимо использовать передачу файла через временное хранилище (методы ПоместитьФайл, ПоместитьФайлы, ПолучитьФайл, ПолучитьФайлы, НачатьПомещениеФайла, ПоместитьВоВременноеХранилище, ПолучитьИзВременногоХранилища). В общем случае клиент и серверы кластера - это разные компьютеры с разной файловой системой, причем доступ к файлам может происходить под разными пользователями ОС с различными правами.
Неправильно:
&НаКлиентеПроцедура ОбработкаФайла() ... ИмяФайла = "C:/Файлы для обработки/Загрузка.xml"; Результат = ПроизвестиОбработкуНаСервере(ИмяФайла); ...КонецПроцедуры&НаСервереФункция ПроизвестиОбработкуНаСервере(ИмяФайла) Чтение = Новый ЧтениеТекста(ИмяФайла) ... Результат = Чтение.Прочитать(); Возврат Результат;КонецФункции
Правильно:
&НаКлиентеПроцедура ОбработкаФайла() ... ИмяФайлаДляОбработки = "C:/Файлы для обработки/Загрузка.xml"; Адрес = ""; ПоместитьФайл(Адрес, ИмяФайлаДляОбработки, ИмяФайлаДляОбработки, Ложь); Результат = ПроизвестиОбработкуНаСервере(Адрес); ...КонецПроцедуры&НаСервереФункция ПроизвестиОбработкуНаСервере(Адрес) Данные = ПолучитьИзВременногоХранилища(Адрес) ИмяПромежуточногоФайла = ПолучитьИмяВременногоФайла("txt"); Данные.Записать(ИмяПромежуточногоФайла); Чтение = Новый ЧтениеТекста(ИмяПромежуточногоФайла) ... Результат = Чтение.Прочитать(); ... УдалитьФайлы(ИмяПромежуточногоФайла); Возврат Результат;КонецФункции
2. Для сохранения данных во временном хранилище между несколькими серверными вызовами, при помещении его в хранилище необходимо использовать параметр УникальныйИдентификаторФормы метода ПоместитьФайл, передав в него идентификатор текущей формы . Такие значение будут удалены их временного хранилища только при закрытии указанной формы. При этом, при повторном помещении того же файла во временное хранилище, предыдущее значение необходимо удалять вручную. Например:
Неправильно:
... ИмяФайлаДляОбработки = "C:/Файлы для обработки/Загрузка.xml";
... // Первый серверный вызов Адрес = ""; ПоместитьФайл(Адрес, ИмяФайлаДляОбработки, ИмяФайлаДляОбработки, Ложь, УникальныйИдентификатор); Результат = ПроизвестиНачальнуюОбработкуНаСервере (Адрес);
... // Второй серверный вызов с той же версией файла Результат = ПроизвестиПромежуточнуюОбработкуНаСервере(Адрес); ...
// Третий серверный вызов с новой версией файла Адрес = ""; ПоместитьФайл(Адрес, ИмяФайлаДляОбработки, ИмяФайлаДляОбработки, Ложь, УникальныйИдентификатор); Результат = ПроизвестиКонечнуюбОбработкуНаСервере(Адрес); ...
При этом во временном хранилище формы останется две копии файлов. Адрес второй копии будет находиться в переменной Адрес, а адрес первой копии будет утерян. Это приводит к затрате дополнительных ресурсов приложения, замедлению работы.
Правильно:
... ИмяФайлаДляОбработки = "C:/Файлы для обработки/Загрузка.xml";
... // Первый серверный вызов Адрес = ""; ПоместитьФайл(Адрес, ИмяФайлаДляОбработки, ИмяФайлаДляОбработки, Ложь, УникальныйИдентификатор); Результат = ПроизвестиНачальнуюОбработкуНаСервере(Адрес);
... // Второй серверный вызов с той же версией файла Результат = ПроизвестиПромежуточнуюОбработкуНаСервере(Адрес); ...
// Третий серверный вызов с новой версией файла УдалитьИзВременногоХранилища(Адрес); Адрес = ""; ПоместитьФайл(Адрес, ИмяФайлаДляОбработки, ИмяФайлаДляОбработки, Ложь, УникальныйИдентификатор); Результат = ПроизвестиКонечнуюбОбработкуНаСервере(Адрес); ...
См. также
Тренинг-семинар «Как получить работу бухгалтера»
Курсы бухгалтеров с трудоустройством
Курсы программирования 1С:Предприятие 8.2
Другие материалы по теме:
чтение, каталог, доступ, процесс, загрузка, конецпроцедуры, файлы, записать, работа, обработки, клиент, файл, код, использование, например, формы, результат, работы, пример, данные, регистр, конфигурации
Материалы из раздела: 1С:Предприятие 8.2 / Разработчикам / Клиент-серверное взаимодействие и вопросы безопасности
Другие материалы по теме:
Запись данных в информационную базу в рамках обмена
Вопросы безопасности информационных систем на платформе 1С:Предприятие 8.1
Подготовка внешних компонент для загрузки в конфигурацию
Нас находят: 1с получение временных файлов ошибка режима безопасности, через тонкий клиент 1с 8 3 получить доступ к файлам на сервере, 1c 8 мобильное приложение сохранить файл, дос туп к файловой системе, ПолучитьИмяВременногоФайла(
Мы на Facebook