При работе с системой 1С:WMS Логистика. Управление складом (редакция 4.5) на платформе 1С:Предприятие 8.3 пользователи часто сталкиваются с техническими трудностями при интеграции торгового оборудования. Одной из наиболее специфичных проблем является ошибка SOAP-сервера: «При вызове веб-сервиса произошла ошибка. Ошибка SOAP сервера: Сервер RPC недоступен...». Эта ситуация возникает в момент обращения к подсистеме печати, чаще всего при вызове метода GetAllPrinters.
В данной статье мы подробно разберем, почему возникает эта ошибка, как она связана с архитектурой Windows и какие шаги необходимо предпринять для ее устранения. Мы пройдем путь от простого включения службы до глубокой диагностики разрешений и сетевых портов.
Для начала проанализируем ситуацию. Метод GetAllPrinters используется в 1С для получения списка доступных принтеров в системе. В контексте 1С:WMS, когда код выполняется на стороне веб-сервиса (серверный контекст), система обращается к механизмам Windows через протокол RPC (Remote Procedure Call — Удаленный вызов процедур). Если подсистема печати Windows не отвечает или недоступна для процесса, в котором запущен сервер 1С, возникает ошибка «Сервер RPC недоступен».
Рассмотрим ситуацию, когда в тестовой базе все работает корректно, а на «боевом» сервере возникает ошибка. Это явный признак различий в конфигурации системных служб или прав доступа. Разберем по шагам, что нужно проверить.
Как показывает практика и решение, найденное в обсуждении, основной причиной является остановленная служба печати. Выясним причину: если служба Print Spooler не запущена, Windows не может обработать запрос на перечисление принтеров, и RPC-вызов завершается с ошибкой.
Рассмотрим порядок действий для проверки службы:
Win + R и введите services.msc.Если служба запущена, но ошибка сохраняется, нам необходимо проверить зависимости. Служба печати не работает в изоляции. Проанализируем критически важные зависимости:
Попробуйте перезапустить службу «Удаленный вызов процедур (RPC)», если это позволяют политики безопасности, хотя обычно эта служба является критической для работы всей ОС.
Выясним еще один важный нюанс: от чьего имени запущена служба ragent (сервер 1С). Если сервер 1С работает под учетной записью LocalService или ограниченной доменной учеткой, у нее может не быть прав на чтение ветки реестра, отвечающей за принтеры.
Проанализируем права в реестре. Проверьте, имеет ли пользователь службы 1С доступ к ветке:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print
Рекомендация: Для диагностики попробуйте временно запустить службу 1С:Предприятия от имени System. Если ошибка исчезнет, значит, проблему нужно решать выдачей прав конкретному пользователю в группах безопасности «Пользователи системного мониторинга» или через настройки ACL для объектов печати.
Метод GetAllPrinters часто опирается на запросы к WMI (Windows Management Instrumentation). Если база данных WMI повреждена, стандартные запросы будут выдавать ошибку RPC. Проверим работоспособность WMI вне среды 1С.
Рассмотрим использование PowerShell для проверки. Запустите консоль от имени администратора и выполните следующую команду:
Get-WmiObject -Query "Select * from Win32_Printer"
Если команда возвращает список принтеров, значит, WMI исправен. Если же PowerShell выдает ошибку, связанную с RPC или репозиторием, проблему необходимо решать восстановлением WMI-репозитория командами winmgmt /salvagerepository.
Если сервер 1С и сервер печати разнесены на разные физические или виртуальные машины, проблема может крыться в сетевых экранах. Для работы RPC требуется:
Проанализируем настройки брандмауэра: если динамические порты закрыты, вы увидите ошибку «Сервер RPC недоступен» сразу после успешного «хендшейка» на 135 порту.
Важно помнить, что при вызове кода через SOAP-сообщение (веб-сервис), контекст выполнения всегда серверный. Это означает следующее:
Если ваш код пытается вызвать GetAllPrinters и ожидает увидеть принтеры текущего пользователя, это может привести к некорректному поведению системы, если список окажется пустым или служба печати будет заблокирована для фонового процесса.
Иногда служба печати формально запущена, но RPC-запросы к ней «зависают» из-за поврежденных файлов в очереди. Разберем процедуру полной очистки:
C:\Windows\System32\spool\PRINTERS.Этот простой шаг часто помогает, когда RPC-сервер перестает отвечать из-за бесконечного ожидания доступа к заблокированному файлу задания печати.
Ошибка «Сервер RPC недоступен» при вызове GetAllPrinters в 1С:WMS — это комплексная проблема, которая в 90% случаев решается простой проверкой службы Print Spooler. Однако, если это не помогло, следует последовательно проверить права учетной записи 1С, целостность WMI и доступность портов RPC. Системный подход к диагностике позволяет быстро вернуть складскую систему в рабочее состояние и избежать простоев в логистических процессах.