Почему возникает ошибка «Указанный файл не существует» при выполнении внешних обработок на сервере 1С и как её исправить?

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

При переходе с файлового режима работы 1С:Предприятия на клиент-серверный пользователи и разработчики часто сталкиваются с непонятными сбоями во внешних обработках. Типичный пример — запуск обработки обмена данными (например, V8Exchan83.epf), при котором выбирается XML-файл загрузки на клиентском компьютере, но при нажатии кнопки выполнения система выдает ошибку: «Указанный файл не существует». В файловой базе эта же обработка работает без каких-либо нареканий.

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

Причины возникновения ошибки на сервере приложений

В файловом режиме код 1С выполняется непосредственно на компьютере пользователя, поэтому система имеет прямой доступ ко всем локальным дискам и файлам. В клиент-серверном режиме исполнение кода разделено на клиентский контекст и серверный контекст.

Рассмотрим главные факторы, из-за которых сервер не видит файл:

  1. Разделение контекстов исполнения (Клиент vs Сервер). Когда пользователь выбирает файл через диалог на клиенте, в реквизит обработки записывается локальный путь (например, C:\Exchange\data.xml). Если обработка выполняет загрузку на сервере, серверный процесс пытается найти этот файл на локальном диске самого сервера 1С, а не на компьютере пользователя. Естественно, на сервере такого файла нет.
  2. Недостаток прав у службы 1С:Предприятия. Даже если клиент и сервер запущены на одном физическом компьютере, служба 1С (1C:Enterprise 8.3 Server Daemon) работает от имени специальной системной учетной записи (например, usr1cv8 или LocalSystem). У этой учетной записи может не быть прав на чтение папок текущего пользователя Windows.
  3. Безопасный режим работы обработок. Внешние обработки (.epf) по умолчанию запускаются с установленным флагом БезопасныйРежим = Истина. В этом режиме платформой ограничены небезопасные операции, включая доступ к файловой системе сервера и запуск внешних компонент.
  4. Различие операционных систем. Если сервер 1С работает под управлением Linux, а клиент под Windows, путь формата D:\Import\data.xml принципиально не может существовать в файловой системе Linux.

Способ 1. Переключение режима обработки на клиенте

Если используется стандартная обработка «Универсальный обмен данными XML» (V8Exchan83.epf), самый простой способ устранить ошибку — переключить режим выполнения загрузки.

Разберем необходимые шаги:

  1. Откроем обработку в режиме 1С:Предприятие.
  2. На вкладке настройки параметров обмена найдем переключатель режима выполнения.
  3. Установим режим «На клиенте» вместо режима «На сервере».

При работе в режиме «На клиенте» вся последовательность чтения файла и формирования объектов выполняется в контексте клиентского приложения, у которого есть прямой доступ к файлам на компьютере пользователя.

Способ 2. Передача файла через временное хранилище

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

Рассмотрим, как реализовать этот подход программно по шагам:

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

Посмотрим на пример кода 1С:


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

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

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

Способ 3. Использование сетевых каталогов и UNC-путей

Если перенос файла на сервер должен происходить без интерактивной передачи данных, необходимо настроить общую сетевую папку, доступную как клиентскому компьютеру, так и серверу 1С.

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

  1. Указывайте путь к файлу исключительно в формате UNC (например, \\ServerName\ShareFolder\data.xml), так как локальные буквы дисков вроде Z:\ не видны службе сервера.
  2. Переведите службу 1C:Enterprise 8.3 Server Daemon с системной учетной записи на доменную учетную запись.
  3. Предоставьте созданной доменной учетной записи полные права NTFS и сетевые права на чтение и запись в расшаренную папку.

В случае применения Linux-сервера 1С сетевой SMB/NFS-ресурс необходимо заранее смонтировать в файловую систему Linux (например, в каталог /mnt/exchange) и прописывать в 1С пути относительно смонтированной директории.

Способ 4. Настройка безопасного режима

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

Выясним, как разрешить доступ к файлам:

  1. Откроем карточку внешнего отчета или обработки в справочнике дополнительного оборудования и обработок.
  2. Отключим режим безопасной работы (установим разрешение на выполнение небезопасных операций).
  3. При программном открытии обработки укажем параметр БезопасныйРежим = Ложь.

Применение описанных методов позволит избежать ошибок обращения к файловой системе при вызове обработок в клиент-серверном режиме работы 1С.

← На главную