При попытке подключения к внешней базе данных MS SQL из 1С через COMОбъект нередко возникают ошибки, связанные с сетевым взаимодействием. Ошибки вида [DBNETLIB]Недопустимое соединение или SQL Server не существует, или доступ запрещен указывают на то, что клиентская машина не может установить соединение с сервером базы данных. Давайте разберем, как последовательно диагностировать и устранить эту проблему.
Прежде чем отлаживать программный код на встроенном языке 1С, необходимо исключить проблемы на уровне операционной системы и драйверов. Для этого используем UDL-файл (Universal Data Link).
.txt на .udl.Microsoft OLE DB Provider for SQL Server.Если проверка не проходит здесь, значит, проблема точно не в 1С, а в сетевых настройках или правах доступа к самому серверу SQL.
Часто проблема заключается в том, что на сервере, особенно если это версия SQL Server Express, удаленные подключения заблокированы по умолчанию. Для их активации выполним следующие действия:
SQL Server Configuration Manager (Диспетчер конфигурации SQL Server).SQL Server Network Configuration (Сетевая конфигурация SQL Server).Protocols for [ИмяЭкземпляра].TCP/IP и Named Pipes включены (состояние Enabled). Если они отключены, нажмите правой кнопкой мыши и выберите «Включить».SQL Server в разделе SQL Server Services.Если вы используете именованный экземпляр SQL Server, необходимо убедиться, что служба SQL Server Browser запущена. Она отвечает за перенаправление клиентских запросов к нужному порту. Также стоит проверить настройки TCP/IP:
TCP/IP перейдите на вкладку IP Addresses.IPAll, укажите порт 1433 (стандартный порт SQL Server).TCP 1433 и UDP 1434 (для SQL Browser).Если сетевые настройки проверены и доступ разрешен, вернемся к коду. Рассмотрим пример правильной инициализации подключения через ADODB.Connection.
// Подключение к SQL-серверу через ADODB
Попытка
Соединение = Новый COMОбъект("ADODB.Connection");
// Формируем строку соединения
// Используем запятую перед портом, если он нестандартный
СтрокаСоединения = "driver={SQL Server};" +
"server=" + ИмяСервераSQL + ",1433;" +
"uid=" + ПользовательSQL + ";" +
"pwd=" + ПарольSQL + ";" +
"database=" + БазаДанныхSQL + ";";
Соединение.ConnectionTimeout = 30;
Соединение.CommandTimeout = 600;
Соединение.Open(СтрокаСоединения);
Сообщить("Успешное подключение!");
Исключение
Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;
Если подключение проходит, но при попытке обращения к данным возникают ошибки, проверьте права пользователя в SQL Server Management Studio. Роль public позволяет подключиться к экземпляру, но для чтения конкретных таблиц пользователю могут потребоваться дополнительные разрешения (например, db_datareader).
Попробуйте выполнить вход в SQL Server Management Studio под теми же учетными данными, которые вы используете в 1С. Если вы не можете войти в систему даже через стандартную консоль управления SQL, значит, проблема в логине или пароле, а не в коде 1С.
Использование Внешних источников данных (ВИД) в 1С является более предпочтительным методом интеграции, так как этот механизм работает на уровне платформы и обеспечивает более прозрачное управление метаданными. После того как вы добьетесь успешного соединения через COMОбъект, рекомендуем перенести настройки в ВИД для стабильной работы в режиме предприятия.