При работе в гетерогенных сетевых окружениях (когда сервер 1С находится в рабочей группе, а пользователи авторизованы в домене Active Directory) часто возникает неприятная ситуация. Программа "1С:Предприятие" при попытке обратиться к файлу на сетевом ресурсе выдает ошибку, а в журнале безопасности Windows (Security Audit) фиксируется событие "Учетной записи не удалось выполнить вход в систему". При этом на одной конфигурации (например, "Документооборот") всё работает отлично, а на другой (например, "Управление производственным предприятием") — возникает сбой.
В этой статье мы подробно разберем, почему возникает эта ошибка, проанализируем разницу в поведении платформ и клиентов, а также рассмотрим несколько эффективных способов решения проблемы — как программных, так и административных.
Главная причина кроется в контексте исполнения кода 1С и архитектурных различиях между тонким клиентом (на котором обычно работает "1С:Документооборот") и толстым клиентом (в котором запускается "УПП").
Проанализируем цепочку событий для каждого случая:
USR1CV8). Когда серверный код вызывает метод Файл.Существует(), обращение к расшаренной папке на этом же сервере происходит локально. Операционная система сервера обрабатывает этот запрос мгновенно, не требуя сетевой авторизации.\\имя_сервера\папка\файл.txt, запрос уходит по сети по протоколу SMB.Так как компьютер пользователя находится в домене Active Directory, операционная система клиента пытается авторизоваться на сетевом ресурсе под доменной учетной записью текущего пользователя. Но сам сервер 1С не входит в домен! Его локальная служба безопасности (LSA) ничего не знает о доменных пользователях и отклоняет запрос. Именно это и порождает ошибку "Учетной записи не удалось выполнить вход в систему" в системном аудите Windows.
Самый правильный и надежный способ решить эту проблему изнутри 1С — принудительно заставить код выполняться на сервере под правами локального пользователя службы 1С. Для этого мы перенесем процедуру проверки и работы с файлами в специальный общий модуль.
Рассмотрим по шагам, как это сделать:
РаботаСФайламиПереопределяемый) или выберем существующий серверный модуль.Теперь напишем простую функцию-обертку, которая будет проверять существование файла непосредственно на сервере:
Функция ПроверитьСуществованиеФайлаНаСервере(Знач ПолныйПутьКФайлу) Экспорт
СсылкаНаФайл = Новый Файл(ПолныйПутьКФайлу);
Возврат СсылкаНаФайл.Существует();
КонецФункции
В коде толстого клиента вместо прямого обращения к объекту Файл мы будем вызывать нашу серверную функцию:
// Вместо старого кода:
// ФайлНаДиске = Новый Файл(ПутьКФайлу);
// Если ФайлНаДиске.Существует() Тогда ...
// Мы вызываем серверную функцию общего модуля:
Если РаботаСФайламиПереопределяемый.ПроверитьСуществованиеФайлаНаСервере(ПутьКФайлу) Тогда
// Файл успешно найден на сервере под учетной записью службы 1С
КонецЕсли;
Если конфигурация находится на поддержке и вы не хотите вносить изменения в программный код, проблему авторизации можно решить средствами операционной системы Windows.
Вариант А: Использование зеркальных учетных записей
На сервере 1С, который находится в рабочей группе, можно вручную создать локальных пользователей. Имена пользователей и их пароли должны символьно совпадать с доменными именами и паролями сотрудников, работающих в УПП. В этом случае при сетевом обращении по протоколу SMB Windows автоматически сопоставит учетные данные и предоставит доступ к расшаренной папке без вывода ошибок авторизации.
Вариант Б: Настройка Диспетчера учетных данных на клиентах
На каждом клиентском компьютере пользователя можно настроить явную авторизацию для сетевого ресурса сервера:
\\192.168.1.100 или \\Server1C).После этого операционная система клиента при любом обращении к серверу будет использовать сохраненные надежные учетные данные вместо доменных.
При переносе файловых операций на сторону сервера обязательно учитывайте специфику работы службы "Агент сервера 1С:Предприятия":
X:\). В коде 1С всегда следует прописывать только полные UNC-пути формата \\ИмяСервера\ИмяПапки\Файл.ext.USR1CV8) не сможет получить к ней доступ по умолчанию. В такой ситуации службу 1С необходимо перевести на запуск под доменной учетной записью и предоставить этой учетной записи соответствующие права NTFS и SMB на удаленном ресурсе.В современных конфигурациях 1С (начиная со стандартных библиотек БСП) разработчики полностью уходят от прямого обращения к файловой системе с клиента через UNC-пути. Рекомендуется использовать асинхронную схему передачи файлов через временное хранилище платформы:
ПоместитьФайлНаСервер().ПолучитьИзВременногоХранилища() данные считываются, обрабатываются и сохраняются в нужный каталог на сервере локально.Такой подход полностью изолирует логику работы приложения от капризов сетевых настроек операционной системы и Active Directory, гарантируя стабильную работу программы в любых инфраструктурных сценариях.