Работа с внешними источниками данных (ВИД) в 1С — это мощный инструмент для интеграции с внешними SQL-базами, однако при его использовании в веб-клиенте разработчики часто сталкиваются со специфическими проблемами. Разберем ситуацию, когда попытка открыть внешнюю таблицу приводит к критическому сбою сессии, и выясним, почему стандартные механизмы записи могут конфликтовать с настройками SQL Server.
Рассмотрим сценарий: вы подключаете внешнюю базу данных, настраиваете таблицу как Объектную, выносите ее в интерфейс, но при попытке открытия в веб-клиенте (браузере) получаете ошибку: Ошибка отображения типов: Отображение лексического значения 'undefined' в значение типа 'УникальныйИдентификатор'. После этого работа в веб-клиенте становится невозможной, так как ошибка начинает преследовать пользователя при открытии любых других форм.
Анализируем причину:
Данная проблема была официально признана багом платформы 1С версии 8.3.16. Суть заключается в механизме сериализации данных. Когда веб-клиент обращается к серверу за данными объектной таблицы внешнего источника, платформа преобразует эти данные в формат JSON для передачи в браузер. В версиях 8.3.16 алгоритм формирования ссылки на объект ВИД работал некорректно: внутренний идентификатор записи (UUID) не передавался должным образом, и вместо него в JSON-пакет попадало значение undefined. Браузер, ожидая строгий тип УникальныйИдентификатор, выдавал программное исключение.
Решение проблемы:
Вторая распространенная проблема возникает при попытке записи данных в таблицы, где первичный ключ (Primary Key) имеет свойство IDENTITY (автоинкремент на стороне SQL Server). Проанализируем типичную ошибку: Невозможно вставить явное значение для столбца идентификаторов в таблице, когда параметр IDENTITY_INSERT имеет значение OFF.
Выясним причину конфликта:
В SQL Server поля с IDENTITY заполняются автоматически самой СУБД. Если 1С пытается явно передать значение в это поле при выполнении команды INSERT, сервер блокирует операцию. Это часто случается, если в конфигураторе 1С таблица внешнего источника настроена как Необъектная.
Разберем способы решения:
Как показывает практика, при переводе таблицы в статус Объектная платформа 1С начинает более корректно обрабатывать поля идентификаторов. В этом режиме 1С понимает структуру сущности и при добавлении новой записи исключает поле первичного ключа из SQL-запроса вставки, позволяя SQL Server самостоятельно сгенерировать ID. Убедитесь, что для ключевого поля в свойствах ВнешнегоИсточникаДанных установлены следующие параметры:
Число).Если вам необходимо использовать именно необъектную таблицу, проанализируем настройки полей. Даже если вы установите флаг «Только чтение» для поля ID, в некоторых версиях платформы 1С все равно может попытаться передать туда 0 или NULL при записи. В этом случае выполните следующие шаги:
INSTEAD OF INSERT. Рассмотрим пример такого кода для SQL:
CREATE TRIGGER tr_TestTable_Insert
ON testtable
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO testtable (name) -- Перечисляем все поля, КРОМЕ id
SELECT name
FROM inserted
END;
Такой триггер перехватит попытку вставки от 1С, проигнорирует переданный id и позволит СУБД самой назначить идентификатор.
Посмотрим на важные аспекты настройки серверного окружения, которые влияют на стабильность работы ВИД в веб-клиенте:
SQL Server Native Client 11.0 может некорректно транслировать типы данных в JSON-потоки веб-клиента.Подведем итог: Для стабильной работы внешних источников данных в веб-клиенте критически важно использовать платформу версии 8.3.17 и выше. При проектировании таблиц отдавайте предпочтение Объектным таблицам, так как они обеспечивают лучшую совместимость с механизмами 1С по управлению транзакциями и идентификаторами записей.