Как исправить ошибку Incorrect syntax near T1 при редактировании внешнего источника данных в 1С?

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

При интеграции 1С с реляционными СУБД с помощью механизма Внешние источники данных разработчики нередко сталкиваются с ситуацией, когда чтение и первичное добавление записей проходят успешно, но при попытке изменить существующую строку или удалить её возникает ошибка:

Ошибка ODBC. SQLSTATE: 42000. Номер ошибки: 102. Описание: [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'T1'.

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

Анализ причин возникновения ошибки

Проанализируем механику работы платформы 1С с внешними СУБД. При выполнении операций обновления (UPDATE) и удаления (DELETE) платформа генерирует специфические конструкции T-SQL с псевдонимами таблиц (например, UPDATE T1 SET ... FROM Table T1 или запросы с директивой OUTPUT). Это необходимо для контроля версий строк и блокировок.

Основными источниками ошибки являются:

  1. Использование устаревшего ODBC-драйвера. Строка подключения вида DRIVER={SQL Server} ссылается на стандартный системный драйвер Windows MDAC (SQLSRV32.DLL). Этот драйвер был разработан для устаревших версий SQL Server и не поддерживает современный синтаксис T-SQL, который транслирует платформа.
  2. Несоответствие настроек типа СУБД. В метаданных внешнего источника указан современный диалект MS SQL Server, под который 1С формирует запросы, но старый драйвер не способен их передать без искажения синтаксиса.
  3. Отсутствие настроенного первичного ключа. Если в свойствах таблицы внешнего источника в конфигураторе не указано или неверно определено свойство «Поле ключа», платформа не может однозначно сформировать предикат WHERE для целевой записи.

Способ 1. Замена ODBC-драйвера на актуальную версию

Рассмотрим основной и наиболее эффективный способ решения проблемы — переход на современный официальный драйвер от Microsoft (ODBC Driver for SQL Server или SQL Server Native Client).

В строке подключения внешнего источника данных необходимо заменить DRIVER={SQL Server} на актуальный драйвер, установленный в операционной системе:

  1. При использовании ODBC Driver 17 for SQL Server строка подключения принимает вид:
    DRIVER={ODBC Driver 17 for SQL Server};SERVER=.\SQLEXPRESS;DATABASE=aaa;UID=sa;PWD=12345;
  2. При использовании ODBC Driver 18 for SQL Server важно учитывать, что в 18-й версии шифрование включено по умолчанию. Если на сервере не настроен доверенный SSL-сертификат, добавьте параметр доверия к сертификату сервера:
    DRIVER={ODBC Driver 18 for SQL Server};SERVER=.\SQLEXPRESS;DATABASE=aaa;UID=sa;PWD=12345;TrustServerCertificate=yes;
  3. При использовании SQL Server Native Client 11.0 строка подключения выглядит следующим образом:
    DRIVER={SQL Server Native Client 11.0};SERVER=.\SQLEXPRESS;DATABASE=aaa;UID=sa;PWD=12345;

Если аутентификация в SQL Server выполняется под текущей учетной записью Windows, можно применить доверенное соединение, указав Trusted_Connection=yes вместо параметров UID и PWD.

Способ 2. Программная настройка параметров подключения

Посмотрим на пример программной установки параметров и типа СУБД во встроенном языке 1С. Это позволяет динамически задавать актуальный драйвер и исключать синтаксические конфликты при выполнении операций записи:


ПараметрыСоединения = ВнешниеИсточникиДанных.ИмяИсточника.ПолучитьОбщиеПараметрыПодключения();
ПараметрыСоединения.ТипСУБД = "MSSQLServer";
ПараметрыСоединения.СтрокаСоединения = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=.\SQLEXPRESS;DATABASE=aaa;UID=sa;PWD=12345;";
ПараметрыСоединения.АутентификацияСтандартная = Истина;

ВнешниеИсточникиДанных.ИмяИсточника.УстановитьОбщиеПараметрыПодключения(ПараметрыСоединения);
ВнешниеИсточникиДанных.ИмяИсточника.УстановитьСоединение();

Способ 3. Проверка метаданных таблицы в Конфигураторе

Разберем по шагам, какие свойства необходимо проверить в дереве метаданных 1С:

  1. Откройте свойства таблицы внешнего источника данных.
  2. Убедитесь, что для таблицы задано свойство «Поле ключа». Оно должно ссылаться на колонку, являющуюся первичным ключом (PRIMARY KEY) или уникальным индексом в таблице MS SQL.
  3. Если таблица предназначена только для выборки информации, включите свойство «Только чтение». В этом случае платформа заблокирует интерактивное и программное изменение строк, предотвратив попытки генерации некорректных команд UPDATE.

Важные нюансы разрядности и диагностики

При настройке внешних источников данных обратите внимание на следующие ключевые моменты:

  1. Разрядность драйверов (x86 / x64). Разрядность установленного ODBC-драйвера должна строго соответствовать разрядности исполняемого процесса 1С. Для 32-разрядного клиента или сервера необходим 32-битный ODBC-драйвер (настройка через %windir%\SysWOW64\odbcad32.exe). Для 64-разрядного сервера 1С требуется 64-битный драйвер (%windir%\System32\odbcad32.exe).
  2. Анализ запросов через Технологический журнал. Если ошибка сохраняется, для получения точного текста проблемного T-SQL запроса настройте сбор событий DBODBC в файле logcfg.xml. Это позволит увидеть сформированный запрос и локализовать ошибку синтаксиса.
← На главную