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

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

При интеграции сторонних баз данных в экосистему 1С разработчики часто используют механизм внешних источников данных. В попытке сохранить типовую конфигурацию на полной поддержке добавление новых таблиц нередко выполняют через расширение конфигурации. Однако на практике возникает неприятная ситуация: таблица заимствована или создана в расширении, строка подключения проверена, соединение успешно установлено и отмечено флажком в пользовательском режиме, но сама таблица в списке объектов внешнего источника отсутствует.

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

Анализ причин: почему расширение не отображает таблицу

Для того чтобы понять природу ошибки, рассмотрим технические особенности взаимодействия механизма расширений и внешних источников данных:

  1. Ограничения платформы и режима совместимости. Полноценная поддержка добавления собственных объектов внешних источников данных и модификация их структуры в расширениях появилась только в платформе версии 8.3.24. В более ранних релизах платформы механизм расширений не умеет корректно регистрировать таблицы внешних источников: конфигуратор позволяет их создать, но среда исполнения 1С:Предприятие их игнорирует. Кроме того, если платформа обновлена до 8.3.24+, но для конфигурации или расширения включен режим совместимости с более ранними версиями, функционал остается заблокированным.
  2. Безопасный режим расширения. По умолчанию любое подключаемое расширение функционирует с признаком БезопасныйРежим = Истина. В этом состоянии платформа принудительно блокирует доступ к внешним ресурсам операционной системы, включая сетевые соединения по ODBC и прямые вызовы СУБД.
  3. Права доступа (роли). Для любого нового объекта метаданных права по умолчанию отсутствуют. Если у текущего пользователя нет прав Чтение и Просмотр на добавленную таблицу, она не отобразится в интерфейсе внешнего источника данных.
  4. Кэширование пула соединений. Если подключение к внешнему источнику уже было инициализировано в рамках текущего сеанса до применения изменений структуры, сервер 1С использует закэшированное описание схемы данных.

Решение 1. Добавление таблицы напрямую в основную конфигурацию

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

  1. Переведем конфигурацию в режим поддержки с сохранением возможности изменений (если она находится на полной поддержке).
  2. Откроем ветку ВнешниеИсточникиДанных в основной конфигурации.
  3. Перейдем к нужному источнику данных и в ветке Таблицы добавим требуемую таблицу с указанием ее физического имени в СУБД.
  4. Настроим поля таблицы, обязательно определив Поля ключа (первичный ключ), без которых отображение данных в динамических списках и формах невозможно.
  5. Обновим конфигурацию базы данных (по нажатию клавиши F7).

После добавления таблицы в основную конфигурацию она сразу становится полноценным объектом метаданных и гарантированно отображается в пользовательском режиме при подключении внешнего источника.

Решение 2. Проверка и настройка параметров расширения (для платформы 8.3.24 и выше)

Если обновление платформы доступно и требуется сохранить конфигурацию без снятия с поддержки, выполним следующие шаги:

  1. Проверим версию платформы: она должна быть не ниже 8.3.24.
  2. В свойствах основной конфигурации и расширения проверим свойство РежимСовместимости. Значение должно быть установлено в НеИспользовать или иметь версию не ниже Версия 8.3.24.
  3. В режиме 1С:Предприятие откроем меню Администрирование — Печатные формы, отчеты и обработки — Расширения.
  4. Найдем наше расширение и снимем флажок Безопасный режим, либо настроим профиль безопасности с разрешением сетевого доступа к внешней СУБД.
  5. В самом расширении добавим новую роль, назначим ей права на чтение и просмотр созданной таблицы внешнего источника и присвоим эту роль пользователю.

Решение 3. Сброс кэша и переподключение источника

Если метаданные настроены корректно, но таблица по-прежнему не видна, сбросим текущее соединение с СУБД. Для этого в пользовательском режиме воспользуемся стандартной обработкой управления внешними источниками данных либо выполним сброс соединения программно:


ВнешнийИсточник = ВнешниеИсточникиДанных.ВнешнийИсточникДанных1;
ВнешнийИсточник.РазорватьСоединение();
ВнешнийИсточник.УстановитьСоединение();

После этого перезапустим клиентский сеанс (а в случае клиент-серверной базы — перезапустим рабочие процессы сервера 1С), чтобы сбросить кэш метаданных.

Альтернативные способы интеграции с внешней СУБД

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

  1. Прямой доступ через ADODB (для Windows-серверов). Мы можем выполнять произвольные SQL-запросы к внешней базе данных через COM-объект:
    
    Соединение = Новый COMОбъект("ADODB.Connection");
    Соединение.ConnectionString = "Driver={PostgreSQL Unicode};Server=192.168.1.100;Port=5432;Database=external_db;Uid=user;Pwd=password;";
    Соединение.Open();
    НаборЗаписей = Соединение.Execute("SELECT * FROM custom_table");
    
  2. Интеграция через REST / HTTP API. Если внешняя система поддерживает веб-сервисы, обмен организуется через объект HTTPСоединение, что исключает зависимость от ODBC-драйверов и архитектурных ограничений внешних источников данных.
← На главную