Почему в клиент-серверном режиме 1С обращается к файловой системе сервера и как работать с файлами на клиенте?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

При переходе на управляемые формы в клиент-серверном режиме разработчики нередко сталкиваются с ситуацией, когда операции чтения или записи файлов начинают выполняться на стороне сервера, а не на локальном компьютере пользователя. Разберем архитектурные причины такого поведения платформы 1С:Предприятие и рассмотрим правильные механизмы работы с файлами.

Архитектурная причина: разделение контекстов выполнения

Проанализируем базовый принцип клиент-серверной архитектуры: любой программный код платформы выполняется строго в том окружении, которое задано контекстом его директивы компиляции. Если в процедуре или функции используется директива &НаСервере или &НаСервереБезКонтекста, код исполняется процессом сервера приложений 1С (рабочим процессом rphost).

Выясним, к какой именно файловой системе обращается программа:

  1. Сервер приложений, а не сервер СУБД. Серверный код 1С взаимодействует исключительно с файловой системой того компьютера, на котором развернут кластер серверов 1С (сервер приложений). С файловой системой сервера базы данных (СУБД) платформа напрямую не взаимодействует.
  2. Права учетной записи службы. Серверный процесс функционирует в операционной системе от имени специальной системной учетной записи (по умолчанию usr1cv8). Эта учетная запись не имеет физического доступа к локальным дискам клиентских рабочих станций (дискам C:, D: пользователей) и сетевым дискам, подключенным в пользовательских сессиях Windows.
  3. Фоновые и регламентные задания. Любые задания, запускаемые по расписанию или асинхронно через фоновые процессы, всегда исполняются на сервере. У них полностью отсутствует клиентский интерфейсный контекст, поэтому прямое обращение к машине пользователя технически невозможно.

Штатный паттерн: передача файлов через временное хранилище

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

Рассмотрим по шагам загрузку файла с локального компьютера пользователя на сервер:

  1. На стороне клиента интерактивно запрашиваем файл у пользователя или используем готовый локальный путь.
  2. Помещаем выбранный файл во временное хранилище платформы, получая уникальный адрес.
  3. Передаем полученный адрес в серверную процедуру, где двоичные данные извлекаются и обрабатываются бизнес-логикой.

Посмотрим на пример загрузки файла на клиенте с последующей обработкой на сервере:


&НаКлиенте
Процедура ЗагрузитьФайлВыполнить(Команда)
    ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
    ПараметрыДиалога.Заголовок = "Выберите файл для загрузки";
    ПараметрыДиалога.Фильтр = "Файлы Excel (*.xlsx)|*.xlsx|Все файлы (*.*)|*.*";
    
    Оповещение = Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтотОбъект);
    НачатьПомещениеФайлаНаСервер(Оповещение, , , ПараметрыДиалога, УникальныйИдентификатор);
КонецПроцедуры

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

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

Разберем обратную задачу — формирование файла на стороне сервера и его последующее сохранение на диск пользователя:


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

&НаКлиенте
Процедура СохранитьФайлКлиенту(Команда)
    АдресФайла = СформироватьФайлНаСервере();
    
    ПараметрыПолучения = Новый ПараметрыДиалогаПолученияФайлов;
    ПараметрыПолучения.Заголовок = "Укажите путь для сохранения";
    
    НачатьПолучениеФайлаССервера(Неопределено, АдресФайла, "ПечатнаяФорма.pdf", ПараметрыПолучения);
КонецПроцедуры

Работа с сетевыми ресурсами через UNC-пути

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

Рассмотрим обязательные условия для корректной работы через сетевой путь:

  1. Использование UNC-путей. Путь к каталогу должен задаваться в формате \\server_name\shared_folder\file.xml, а не через букву сопоставленного диска (например, Z:\folder), так как служба сервера 1С не видит подключенные диски пользовательских сеансов.
  2. Настройка прав безопасности. Учетная запись операционной системы, под которой запущена служба сервера 1С, должна иметь явные права на чтение и запись (как на вкладке общего доступа «Доступ», так и на вкладке безопасности NTFS) к целевому каталогу.

Альтернативные способы хранения и обмена файлами

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

  1. Хранение в информационной базе. Использование реквизитов с типом ХранилищеЗначения. В этом случае файлы сохраняются непосредственно в таблицах СУБД, исключая необходимость администрирования отдельных дисковых каталогов и настроек прав на уровне операционной системы.
  2. Подсистема БСП «Работа с файлами». В типовых конфигурациях, таких как УТ, ERP или КА, предусмотрена встроенная подсистема Библиотеки стандартных подсистем. Она позволяет централизованно настроить хранение файлов в томах на сервере с прозрачной передачей на клиентские рабочие места.
  3. Внешние хранилища по протоколам HTTP/WebDAV/S3. Для масштабируемых систем сервер 1С обращается к внешним файловым сервисам через стандартные объекты HTTPСоединение, что полностью изолирует платформу от локальных дисковых структур конкретных рабочих мест.
← На главную