Почему возникает ошибка «Информационная база не обнаружена» в фоновых заданиях 1С?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

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

Причина 1: Рассинхронизация метаданных кластера серверов 1С

Часто сервер 1С после переименования информационной базы или изменения ее параметров (адрес сервера БД, имя базы) продолжает «держать» в кэше старые идентификаторы. Даже после перезапуска службы сервера 1С данные метаданные могут не обновиться корректно. Это приводит к тому, что рабочий процесс rphost, запускающий фоновое задание, не может корректно разрешить адрес целевой базы.

Как решить эту проблему:

  1. Откройте консоль администрирования серверов 1С:Предприятия.
  2. Найдите нужную информационную базу в списке.
  3. Удалите эту базу из списка консоли (важно: при этом сами данные на SQL-сервере удалены не будут, мы удаляем только запись из управления кластером).
  4. Добавьте эту же базу заново, указав актуальные параметры подключения к SQL-серверу.
  5. После этого сервер принудительно обновит внутренние идентификаторы, и ошибка должна исчезнуть.

Причина 2: Проблемы с формированием строки подключения внутри фонового задания

Иногда возникают ситуации, когда 1С по-разному определяет имя сервера или строку соединения в зависимости от того, запущен ли код пользователем или фоновым заданием. Если вы используете COM-объекты для подключения к другой базе, важно проверять строку соединения на соответствие текущему окружению.

Как реализовать защищенный механизм подключения:

Рассмотрим подход, который позволяет избежать ошибок при динамическом определении параметров базы. Мы можем добавить проверку строки соединения перед инициализацией объекта подключения.


// Пример проверки строки подключения с учетом регистра
СтрокаПодключенияВариант1 = "Srvr=Server1;Ref=BaseName;";
СтрокаПодключенияВариант2 = "Srvr=Server1.domain.local;Ref=BaseName;";

Функция ПолучитьВалиднуюСтроку(Строка1, Строка2)
    // Проверяем текущее имя хоста через параметры соединения
    ТекущаяСтрока = ПолучитьСтрокуСоединенияИнформационнойБазы();
    
    Если НРег(ТекущаяСтрока) = НРег(Строка1) Тогда
        Возврат Строка1;
    ИначеЕсли НРег(ТекущаяСтрока) = НРег(Строка2) Тогда
        Возврат Строка2;
    КонецЕсли;
    
    Возврат ТекущаяСтрока;
КонецФункции;

Используя функции НРег() (нижний регистр) или ВРег() (верхний регистр), мы исключаем влияние регистра символов в именах серверов, что часто является скрытой причиной ошибок в инфраструктуре с разными именами хостов.

Диагностика и дополнительные рекомендации

Если вышеуказанные шаги не привели к немедленному успеху, проанализируем ситуацию глубже:

Начните с простого — удаления и повторного добавления базы в консоли сервера. В 90% случаев это устраняет «фантомные» ошибки метаданных, возникающие после административных правок в свойствах баз данных.

← На главную