Рассмотрим распространенную задачу: сервер 1С работает под управлением ОС Linux (например, RedOS или Astra Linux с её спецификой настройки зависимостей), а данные для обмена находятся во внешней базе данных Firebird, которая расположена на отдельном сервере с Windows. При попытке настроить подключение из обработки 1С может возникнуть ошибка "Компьютер 'имя_сервера' недоступен!", даже если сетевая доступность и драйверы настроены верно. Разберемся, почему так происходит и как правильно организовать такое подключение.
Основная проблема часто кроется не в сети или firewall, а в неправильном методе подключения, выбранном в коде 1С. Проанализируем типичную ошибку и предложим правильное, кросс-платформенное решение.
Часто разработчики, привыкшие работать в среде Windows, пытаются использовать для подключения к внешним базам данных технологию ADO через COM-объекты. Посмотрим на пример кода, который приводит к ошибке в нашей ситуации:
СтрокаПодключения = "driver=Firebird/InterBase(r) driver;Dialect=2.5;CHARSET=CYRL;" + "Uid=" +
Пользователь +
";Pwd=" + Пароль +
";Dbname=" + Хост + ":" + ПутьКБазе;
// Попытка создать COM-объект
Connection = Новый COMОбъект("ADODB.Connection");
Connection.ConnectionTimeOut = ConnectionTimeOut;
Connection.CursorLocation = 3;
Connection.Open(СтрокаПодключения);
Этот код отлично работает, если он выполняется на клиенте или сервере 1С под управлением Windows. Однако, если COM-объект никак не хочет устанавливаться или работать на сервере 1С под управлением Linux (в серверном модуле или в регламентном задании), он неизбежно вызовет ошибку.
Ключевой момент: технология COM (Component Object Model) и, соответственно, объекты типа ADODB.Connection — это неотъемлемая часть операционной системы Windows. В Linux этой технологии не существует. Поэтому сервер 1С на Linux просто не может создать такой объект, что и приводит к ошибке. Сообщение "Компьютер недоступен" в данном случае является misleading (вводящим в заблуждение), так как реальная причина — невозможность создать COM-объект в текущей операционной системе.
Чтобы 1С на Linux смогла "увидеть" внешнюю базу данных, необходимо настроить ODBC-подключение на уровне операционной системы. Этот шаг является обязательной основой для дальнейшей работы.
Установка unixODBC. Это менеджер ODBC-драйверов для Linux-систем. Установите его с помощью пакетного менеджера вашего дистрибутива:
Для RedOS, CentOS, Fedora: sudo yum install unixODBC
Для Debian, Ubuntu: sudo apt-get install unixodbc
Иногда могут потребоваться дополнительные скрипты для настройки окружения для корректной сборки или работы внешних компонентов.
Установка ODBC-драйвера Firebird. Скачайте с официального сайта Firebird ODBC-драйвер для Linux, соответствующий разрядности вашего сервера 1С (скорее всего, x64). Распакуйте архив и установите его согласно инструкции.
Регистрация драйвера в odbcinst.ini. Необходимо сообщить системе о новом драйвере. Для этого отредактируйте файл /etc/odbcinst.ini (или создайте его, если он отсутствует) и добавьте секцию для Firebird. Путь к библиотеке libOdbcFb.so может отличаться в зависимости от того, куда вы установили драйвер.
[Firebird]
Description=InterBase/Firebird ODBC Driver
Driver64=/usr/lib64/libOdbcFb.so
Setup64=/usr/lib64/libOdbcFb.so
Threading=1
FileUsage=1
Проверка подключения через isql. Это самый важный этап диагностики. Он позволяет проверить, работают ли драйвер, сетевые настройки и firewall независимо от 1С. Для проверки используется консольная утилита isql. Для удобства можно создать DSN (Data Source Name) в файле /etc/odbc.ini, но можно подключиться и без него, напрямую указав строку подключения.
Проверку лучше выполнять командой, используя параметры из вашей строки подключения:
isql -v -k "DRIVER={Firebird};UID=sysdba;PWD=masterkey;DBNAME=192.168.22.1:C:\base\CER.NEW.GDB"
Если вы видите приглашение SQL>, значит, подключение на уровне ОС и драйвера успешно установлено.
Убедитесь, что сервер с базой Firebird готов принимать внешние подключения.
firebird.conf убедитесь, что сервер прослушивает нужный сетевой интерфейс (параметр RemoteBindAddress).Для кросс-платформенной работы с внешними базами данных в 1С существует специальный механизм — "Внешние источники данных". Он работает нативно как на Windows, так и на Linux, и является предпочтительным способом интеграции. Если вы используете несколько версий платформы, вам может пригодиться консольное переключение между платформами для быстрой настройки служб.
Разберем по шагам, как его настроить:
Самое главное — правильно составить Строку подключения. Она будет очень похожа на ту, что мы использовали для isql:
Driver={Firebird};Uid=sysdba;Pwd=masterkey;Dbname=192.168.22.1:C:\base\CER.NEW.GDB;CHARSET=CYRL;
Здесь:
Driver={Firebird} — имя драйвера, которое мы указали в квадратных скобках в файле odbcinst.ini.Uid и Pwd — логин и пароль для доступа к базе Firebird.Dbname=192.168.22.1:C:\base\CER.NEW.GDB — важнейший параметр. Он состоит из IP-адреса Windows-сервера и полного пути к файлу базы данных на этом Windows-сервере. Не пытайтесь изменить путь на Linux-формат. Драйвер сам правильно обработает этот путь и передаст его серверу Firebird.CHARSET=CYRL — указание кодировки для корректной работы с кириллицей.Пример запроса к внешнему источнику:
ТекстЗапроса = "ВЫБРАТЬ
| ДанныеИзFirebird.Поле1,
| ДанныеИзFirebird.Поле2
|ИЗ
| ВнешнийИсточник.КормОптима.GET_TABLE КАК ДанныеИзFirebird
|ГДЕ
| ДанныеИзFirebird.GUID = &GUID";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("GUID", ВашGUID);
Результат = Запрос.Выполнить().Выгрузить();
Этот подход является правильным, надежным и будет работать в любых серверных сценариях, включая регламентные задания, независимо от операционной системы сервера 1С.