При переходе с файлового режима работы 1С:Предприятия на клиент-серверный пользователи и разработчики часто сталкиваются с непонятными сбоями во внешних обработках. Типичный пример — запуск обработки обмена данными (например, V8Exchan83.epf), при котором выбирается XML-файл загрузки на клиентском компьютере, но при нажатии кнопки выполнения система выдает ошибку: «Указанный файл не существует». В файловой базе эта же обработка работает без каких-либо нареканий.
Проанализируем архитектуру работы клиент-серверного режима, выясним основные причины возникновения этой ошибки и разберем практические способы решения проблемы.
В файловом режиме код 1С выполняется непосредственно на компьютере пользователя, поэтому система имеет прямой доступ ко всем локальным дискам и файлам. В клиент-серверном режиме исполнение кода разделено на клиентский контекст и серверный контекст.
Рассмотрим главные факторы, из-за которых сервер не видит файл:
C:\Exchange\data.xml). Если обработка выполняет загрузку на сервере, серверный процесс пытается найти этот файл на локальном диске самого сервера 1С, а не на компьютере пользователя. Естественно, на сервере такого файла нет.1C:Enterprise 8.3 Server Daemon) работает от имени специальной системной учетной записи (например, usr1cv8 или LocalSystem). У этой учетной записи может не быть прав на чтение папок текущего пользователя Windows..epf) по умолчанию запускаются с установленным флагом БезопасныйРежим = Истина. В этом режиме платформой ограничены небезопасные операции, включая доступ к файловой системе сервера и запуск внешних компонент.D:\Import\data.xml принципиально не может существовать в файловой системе Linux.Если используется стандартная обработка «Универсальный обмен данными XML» (V8Exchan83.epf), самый простой способ устранить ошибку — переключить режим выполнения загрузки.
Разберем необходимые шаги:
При работе в режиме «На клиенте» вся последовательность чтения файла и формирования объектов выполняется в контексте клиентского приложения, у которого есть прямой доступ к файлам на компьютере пользователя.
Для разработчиков, дорабатывающих собственные внешние обработки или механизмы обмена, наиболее правильным архитектурным решением является передача файла на сервер через временное хранилище платформы.
Рассмотрим, как реализовать этот подход программно по шагам:
Посмотрим на пример кода 1С:
&НаКлиенте
Процедура ЗагрузитьФайлНаКлиенте()
// Передаем файл во временное хранилище
АдресХранилища = "";
ВыбранныйФайл = Новый Файл(ПутьКФайлу);
Если Не ВыбранныйФайл.Существует() Тогда
Предупреждение("Выбранный файл не найден на клиенте!");
Возврат;
КонецЕсли;
АдресХранилища = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПутьКФайлу), УникальныйИдентификатор);
// Вызываем серверную процедуру обработки
ЗагрузитьФайлНаСервере(АдресХранилища);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьФайлНаСервере(Знач АдресХранилища)
// Извлекаем двоичные данные на сервере
ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(АдресХранилища);
// Создаем временный файл в файловой системе сервера
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml");
ДвоичныеДанныеФайла.Записать(ИмяВременногоФайла);
// Выполняем чтение и обработку файла на сервере
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяВременногоФайла);
// ... Код обработки документа XML ...
ЧтениеXML.Закрыть();
// Удаляем временный файл после завершения работы
УдалитьФайлы(ИмяВременногоФайла);
КонецПроцедуры
Если перенос файла на сервер должен происходить без интерактивной передачи данных, необходимо настроить общую сетевую папку, доступную как клиентскому компьютеру, так и серверу 1С.
Проанализируем требования к настройке сетевого доступа:
\\ServerName\ShareFolder\data.xml), так как локальные буквы дисков вроде Z:\ не видны службе сервера.1C:Enterprise 8.3 Server Daemon с системной учетной записи на доменную учетную запись.В случае применения Linux-сервера 1С сетевой SMB/NFS-ресурс необходимо заранее смонтировать в файловую систему Linux (например, в каталог /mnt/exchange) и прописывать в 1С пути относительно смонтированной директории.
Если обработка подключается через механизм «Дополнительные отчеты и обработки», служба сервера может блокировать работу с файловой системой из-за ограничений безопасности.
Выясним, как разрешить доступ к файлам:
БезопасныйРежим = Ложь.Применение описанных методов позволит избежать ошибок обращения к файловой системе при вызове обработок в клиент-серверном режиме работы 1С.