Как настроить доступ сервера 1С к файлам на другом компьютере или в сетевой папке?

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

Часто при переходе с файловой версии базы данных на клиент-серверную программисты и администраторы сталкиваются с неприятной особенностью: код, который успешно открывал файлы в сетевой папке, внезапно начинает выдавать ошибку "Доступ запрещен" или "Файл не найден". Проблема осложняется тем, что под обычным пользователем Windows папка открывается без проблем, а сервер 1С её "не видит".

В этой статье мы подробно разберем, почему возникает эта ошибка, как работает механизм аутентификации служб Windows и какими способами можно обеспечить стабильный доступ сервера 1С к сетевым ресурсам.

Почему возникает ошибка доступа на сервере?

Разберем первопричину. Когда вы запускаете 1С в файловом режиме, все операции с файлами выполняются от имени вашей текущей учетной записи Windows. У вас есть права на сетевую папку — у 1С они тоже есть.

В клиент-серверном варианте код, исполняемый в процедурах НаСервере, выполняется службой «Агент сервера 1С:Предприятия». По умолчанию при установке 1С создается специальный локальный пользователь (обычно это USR1CV8), от имени которого и работает эта служба. Этот пользователь существует только на том сервере, где установлена 1С, и «другой компьютер», на котором лежат файлы, ничего не знает о существовании этого локального пользователя. В итоге при попытке доступа удаленный компьютер видит «Анонимный вход» (Anonymous Logon), который из соображений безопасности заблокирован.

Решение 1: Сквозная аутентификация (Pass-through Authentication)

Проанализируем самый распространенный вариант решения в сетях без домена (Workgroup). Чтобы один компьютер «узнал» пользователя с другого компьютера, нам нужно создать идентичную среду на обоих узлах.

Рассмотрим по шагам, что необходимо сделать:

  1. Создание пользователя на файловом сервере: На компьютере, где физически расположены файлы, создаем пользователя с точно таким же именем, как и тот, под которым запущен сервер 1С (например, USR1CV8).
  2. Синхронизация паролей: Это критически важный момент. Пароли этого пользователя на сервере 1С и на файловом сервере должны полностью совпадать. Если вы не знаете текущий пароль USR1CV8, его придется сменить на обоих ПК.
  3. Настройка прав доступа: На файловом сервере для созданного пользователя USR1CV8 даем права «Чтение и запись» как на уровне общего доступа к папке (Sharing), так и на уровне файловой системы (вкладка Безопасность/Security в свойствах папки).
  4. Настройка службы 1С: Если вы меняли пароль, обязательно зайдите в «Панель управления» -> «Администрирование» -> «Службы». Найдите службу 1С, откройте свойства, перейдите на вкладку «Вход в систему» и заново введите актуальный пароль. После этого службу нужно перезапустить.

Решение 2: Использование UNC-путей

Выясним еще одну важную деталь. Службы Windows работают в так называемой «Сессии 0». В этой сессии не существуют подключенные сетевые диски (например, диск Z:\). Даже если вы зашли на сервер под администратором и подключили диск, сервер 1С его не увидит.

Правило: Всегда используйте полные сетевые пути в формате UNC:

\\ИмяКомпьютера\ИмяПапки\ИмяФайла.расширение

Если в вашем коде или настройках прописан путь через букву диска, его необходимо заменить на сетевой путь, иначе серверная процедура никогда не найдет файл.

Решение 3: Передача файла через временное хранилище (Лучшая практика)

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

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


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

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

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

Решение 4: Настройка прав в доменной среде

Если ваша сеть управляется контроллером домена Active Directory, задача упрощается. Вам не нужно создавать одинаковых пользователей вручную.

  1. Вы можете запустить службу 1С от имени специально созданного доменного пользователя (например, DOMAIN\1C_Service).
  2. Этому пользователю в домене даются права на нужную сетевую папку.
  3. Если служба работает под LocalSystem, то на папку нужно дать права учетной записи самого компьютера, на котором стоит сервер 1С (имя вида SERVERNAME$).

Диагностика: проверка текущего пользователя

Если вы запутались и не понимаете, от чьего имени 1С пытается достучаться до файла, воспользуйтесь системной диагностикой. Напишите простую обработку, которая выполнит команду whoami на стороне сервера и запишет результат в текстовый файл.

КомандаСистемы("whoami > C:\temp\user_info.txt");

Проанализировав содержимое файла user_info.txt, вы увидите реальное имя пользователя, под которым работает процесс rphost. Именно этому пользователю нужно давать права на сетевые ресурсы.

Важные нюансы и возможные ошибки

Проанализируем дополнительные факторы, которые могут блокировать доступ:

Подводя итог, можно сказать: наиболее стабильным и правильным с точки зрения разработки решением является использование Временного хранилища. Это избавляет администраторов от лишней настройки прав и делает систему более защищенной. Однако, если архитектура требует прямой работы сервера с сетевым диском, использование идентичных учетных записей (сквозная аутентификация) остается единственным надежным способом в простых сетях.

← На главную