Почему в 1С при подключении внешнего источника данных SQL видны таблицы, но не отображаются колонки?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с механизмом Внешние источники данных программисты часто сталкиваются с ситуацией: соединение с базой SQL установлено успешно, список таблиц отображается, но при попытке выбрать конкретные поля список оказывается пустым или данные помечаются как «Не объектные данные». Разберем по шагам причины этой проблемы и способы их решения (может быть полезна подсистема выгрузки данных во внешнюю базу SQL).

Причина 1: Отсутствие первичного ключа (Primary Key)

Проанализируем, как 1С интерпретирует таблицы SQL. Платформа разделяет их на два типа: объектные и неообъектные. Если в таблице базы-источника не определен первичный ключ (Primary Key), 1С не может однозначно идентифицировать запись, из-за чего считает данные «не объектными». В некоторых случаях это блокирует корректное отображение состава колонок в мастере подключения.

Что нужно сделать: проверьте структуру таблицы в SQL Server Management Studio. Если ключа нет, его необходимо добавить (используя анализ структуры метаданных). Если изменять структуру таблицы нельзя, можно создать View (представление), в котором будет присутствовать уникальное поле, и подключаться уже к нему.

Причина 2: Ограничение прав на просмотр метаданных

Выясним причину, связанную с безопасностью. Даже если у пользователя SQL есть права db_datareader на чтение данных, этого может быть недостаточно для получения структуры колонок через драйвер ODBC. 1С требует доступа к системным представлениям метаданных.

Решение: выполните в консоли SQL запрос для назначения прав на просмотр определений:


GRANT VIEW DEFINITION TO [Имя_Вашего_Пользователя];

Также убедитесь, что вы не используете системную учетную запись sa, так как это может блокироваться настройками безопасности сервера. Используйте специально созданного пользователя с SQL-аутентификацией.

Причина 3: Устаревший драйвер и разрядность систем

Рассмотрим техническую сторону соединения. Часто в строке подключения используется стандартный драйвер {SQL Server}. Это старая библиотека (sqlsrv32.dll), которая плохо поддерживает современные типы данных и версии SQL Server.

  1. Обновите драйвер: рекомендуем установить и использовать ODBC Driver 17 for SQL Server (также может пригодиться процессор схемы запроса) или более поздние версии.
  2. Проверьте разрядность: если ваш сервер 1С работает в 64-битном режиме, то и драйвер ODBC (а также DSN, если он используется) должен быть настроен в 64-битной панели администрирования. Помните, что в Windows две разные панели odbcad32.exe — для 32 и 64 бит.

Причина 4: Использование прямых SQL-запросов (ADODB)

Если штатный механизм метаданных 1С все равно работает некорректно, рассмотрим альтернативный вариант — работу через ADODB.Connection. Этот метод позволяет обойти жесткие требования платформы к «объектности» данных и первичным ключам, так как мы получаем данные напрямую SQL-запросом.

Посмотрим на пример кода (для отладки подойдет управляемая консоль запросов) для выполнения прямого запроса:


Соединение = Новый COMОбъект("ADODB.Connection");
СтрокаСоединения = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=GTEST;UID=t;PWD=1;DATABASE=test_db;";

Попытка
    Соединение.Open(СтрокаСоединения);
    RecordSet = Соединение.Execute("SELECT TOP 10 * FROM dbo.MyTable");
    
    Пока НЕ RecordSet.EOF Цикл
        // Обработка данных
        ЗначениеПоля = RecordSet.Fields("ИмяКолонки").Value;
        RecordSet.MoveNext();
    КонецЦикла;
    
    Соединение.Close();
Исключение
    Сообщить("Ошибка подключения: " + ОписаниеОшибки());
КонецПопытки;

Важные нюансы настройки аутентификации

Проанализируем ситуацию с ошибкой «Невозможно использовать специального участника sa». Она возникает, если на сервере SQL включена только Windows-аутентификация. Чтобы подключение по логину и паролю (UID и PWD) заработало, необходимо в свойствах сервера SQL (раздел Security) установить режим SQL Server and Windows Authentication mode.

Подведем итог: для исправления проблемы первым делом проверьте наличие Primary Key в SQL и права VIEW DEFINITION. Если это не помогает — переходите на актуальный драйвер ODBC или используйте объект COMОбъект("ADODB.Connection") для прямого чтения данных.

← На главную