Как решить проблему доступа к внешним модулям и файлам в клиент-серверном режиме 1С?

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

При работе с внешними компонентами и подключаемыми модулями (например, модулем 1С:Диадок) пользователи часто сталкиваются с ошибкой «Файл не обнаружен». Ситуация выглядит парадоксально: файл физически существует на диске, у пользователя в системе 1С назначены «Полные права», а в операционной системе он является администратором. Однако программа настойчиво выдает ошибку при попытке обращения к внешнему объекту. Давайте подробно разберем, почему это происходит, как устроена работа с файлами в клиент-серверной архитектуре и какими способами можно решить эту задачу.

Проблема контекста выполнения: Клиент против Сервера

Первым делом проанализируем ситуацию, описанную в логах ошибки. Если мы видим путь вида C:\Users\ИмяПользователя\Documents\... и при этом база работает в клиент-серверном режиме, это главный индикатор проблемы. В 1С код может выполняться либо на стороне клиента (на компьютере пользователя), либо на стороне сервера (на мощном компьютере, где установлен сервер приложений 1С).

Разберем по шагам, что происходит в момент вызова внешнего модуля:

  1. Программа инициирует выполнение кода на сервере.
  2. Сервер получает команду: «Прочитать файл по пути C:\Users\...».
  3. Сервер начинает искать этот файл на своем локальном диске C:, а не на диске пользователя.
  4. Поскольку на сервере такого пути или файла не существует, система выдает ошибку Файл не обнаружен.

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

Настройка прав учетной записи службы сервера 1С

Если мы все же решили хранить файл на диске сервера или в сетевой папке, нам необходимо разобраться с правами доступа на уровне операционной системы. Проанализируем, под чьим именем работает сервер 1С. Обычно это специальная техническая учетная запись, создаваемая при установке платформы, — USR1CV8.

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

  1. Выясним имя службы: откроем «Службы» в Windows и найдем 1C:Enterprise 8.3 Server Agent. В колонке «Вход от имени» будет указан пользователь.
  2. Перейдем к папке, где лежит наш подключаемый модуль (ПМ).
  3. Нажмем правой кнопкой мыши — «Свойства» — вкладка «Безопасность».
  4. Добавим пользователя USR1CV8 (или того, которого мы нашли на шаге 1) и предоставим ему права «Чтение» и «Выполнение».

Внимание: если файл лежит в профиле пользователя (папка Users), операционная система может блокировать доступ к нему даже при наличии прямых разрешений из соображений безопасности. Рекомендуем выносить такие файлы в корень диска или специализированные директории, например C:\1C_Modules\.

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

Часто программисты пытаются использовать сетевые диски, например Z:\Modules\Module.epf. Проанализируем, почему это плохая практика для сервера. Сетевые диски — это «виртуальные» сущности, которые существуют только внутри сессии конкретного пользователя. Когда служба сервера 1С (работающая в своей изолированной сессии) пытается обратиться к диску Z:, она его просто не находит.

Для решения этой проблемы мы должны использовать только полные UNC-пути. Рассмотрим пример трансформации пути:

Вместо: Z:\Diadoc\PM_Diadoc.epf

Используем: \\FileServer\Public\Diadoc\PM_Diadoc.epf

При этом учетная запись, под которой запущен сервер 1С, должна иметь права доступа к этой сетевой «шаре» и на уровне файловой системы удаленного сервера.

Защита от опасных действий

Начиная с версии платформы 8.3.9, в 1С реализован механизм «Защита от опасных действий». Даже если все права на уровне ОС настроены верно, 1С может блокировать подключение внешнего модуля .epf, считая его потенциально опасным. Выясним, как это обойти.

Для конкретного пользователя в базе 1С можно отключить это подтверждение. Рассмотрим действия в конфигураторе:

  1. Откройте список пользователей.
  2. Найдите нужного сотрудника.
  3. На вкладке «Основные» снимите галочку Защита от опасных действий.

Если модулей много и пользователей тоже, проанализируем возможность массового отключения через файл conf.cfg, добавив параметр DisableUnsafeActionProtection. Однако помните, что это снижает общую безопасность системы.

Архитектурно верное решение: Временное хранилище

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

Сначала на клиенте мы выбираем файл и помещаем его в хранилище:


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

Затем на сервере мы можем использовать полученные двоичные данные. Проанализируем серверную часть:


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

Использование справочника «Дополнительные отчеты и обработки»

Самый стабильный и рекомендуемый способ для конфигураций на базе БСП (например, УТ 11.4, ERP, КА) — это добавление внешнего модуля в справочник Дополнительные отчеты и обработки. Рассмотрим преимущества этого метода:

Если модуль 1С:Диадок предполагает использование ПМ (подключаемого модуля) как внешнего файла, попробуйте загрузить его именно в этот справочник. Это исключит 99% проблем, связанных с правами доступа к внешним ссылкам и путям.

Резюме

Мы выяснили, что ошибка доступа к внешним ссылкам в 90% случаев связана с тем, что сервер 1С пытается найти файл там, где его нет (на своем локальном диске вместо клиентского). Для исправления ситуации мы можем либо настроить права для учетной записи USR1CV8 на сетевой ресурс с использованием UNC-путей, либо использовать механизм временного хранилища для передачи файла с клиента на сервер. Однако наиболее надежным способом остается интеграция модуля непосредственно в состав конфигурации или в справочник дополнительных обработок.

← На главную