К статье
Практический материал

Разработка и Конфигурация · 11 мин

База 1С как внешний источник данных: способы подключения и настройка

Как подключить базу 1С как внешний источник данных: механизм ВИД, COM-соединение, SQL, настройка прав, типичные ошибки и проверка результата.

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

Основных подхода три: штатный механизм «Внешние источники данных» (ВИД) с доступом через OLE DB/ODBC к СУБД, программное COM-соединение между базами 1С и обмен через промежуточные форматы (EnterpriseData, планы обмена, веб-сервисы). Каждый вариант имеет свои ограничения: прямой доступ к таблицам СУБД обходит бизнес-логику, COM требует совпадения версий платформы, а обмены требуют разработки правил.

Ниже разобраны условия выбора способа, пошаговая настройка внешнего источника данных, COM-подключение, вопросы прав и производительности, а также типичные ошибки, из-за которых подключение не работает или работает медленно.

Как выбрать способ подключения

Первый критерий — что именно нужно получать из внешней базы. Если требуются только данные для отчётов и аналитики (справочники, остатки, обороты) и вторая база развёрнута на MS SQL Server, PostgreSQL или Oracle, рационально использовать внешние источники данных с прямым чтением таблиц СУБД. Это быстро и не требует запуска второго сеанса 1С.

Если нужна бизнес-логика внешней базы — проведение документов, вызов экспортных функций общих модулей, учёт прав пользователей — подходит COM-соединение. Оно запускает полноценное соединение с базой через объект V83.COMConnector, и весь код выполняется в контексте внешней базы. Ограничения: работает только в Windows-окружении, требует зарегистрированной компоненты той же версии платформы и заметно расходует память.

Для постоянной регулярной интеграции между базами, особенно разнесённых по разным серверам и сетям, правильнее план обмена, веб-сервисы (HTTP/SOAP) или формат EnterpriseData. Эти способы сложнее в настройке, но устойчивы к разрывам связи, версионируются и не держат постоянное соединение.

Сравнение способов

Внешние источники данных (ВИД)

Прямое чтение таблиц СУБД для отчётов и СКД. Не выполняет код 1С внешней базы, требует знания структуры таблиц.

COM-соединение

Полный доступ к объектам и методам внешней базы. Только Windows, нужна та же версия платформы, медленный старт соединения.

План обмена / веб-сервисы

Для регулярной интеграции и разных сетей. Требует разработки, но надёжен и масштабируем.

Настройка внешнего источника данных к базе 1С на SQL

Механизм ВИД доступен в конфигураторе: ветка «Общие» → «Внешние источники данных». Для подключения к базе 1С, развёрнутой на СУБД, создаётся новый источник, в свойствах которого указывается строка подключения ODBC/OLE DB к серверу баз данных. Важно понимать: подключение идёт к СУБД, а не к платформе 1С, поэтому читаются физические таблицы вида _Reference123 (справочники), _Document456 (документы), _AccumRg789 (регистры накопления).

После создания источника в него добавляются таблицы: платформа может загрузить список таблиц из схемы СУБД, после чего для каждой нужной таблицы сопоставляются поля. Затем таблицы ВИД можно использовать в запросах, СКД и отчётах наравне с обычными объектами конфигурации — это главное удобство механизма.

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

Главная сложность — расшифровка структуры таблиц 1С на уровне СУБД. Имена таблиц и полей генерируются платформой и не совпадают с именами метаданных. Получить соответствие можно функцией ПолучитьСтруктуруХраненияБазыДанных() в толстом клиенте внешней базы или через отчёт по структуре хранения. Без этого сопоставления легко подключиться «не к той таблице».

COM-соединение с внешней базой 1С

COM-подключение создаётся программно через объект COMConnector. В базе-источнике при этом запускается сеанс под указанным пользователем, и вызывающий код получает доступ ко всем объектам: справочникам, документам, запросам, экспортным процедурам общих модулей.

bsl
Параметры = "File=\"D:\\Bases\\Trade\";Usr=\"Интеграция\";Pwd=\"secret\";";

Connector = Новый COMОбъект("V83.COMConnector");

Соединение = Connector.Connect(Параметры);

Запрос = Соединение.NewObject("Запрос");

Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 100 Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура";

Для клиент-серверной базы в строке подключения указываются Srvr и Ref вместо File. Учётная запись, под которой выполняется подключение, должна существовать во внешней базе и иметь ровно те права, которые нужны интеграции, — не административные. Создавайте отдельного служебного пользователя, чтобы по журналу регистрации внешней базы было видно действия интеграции.

Типичные проблемы COM: ошибка «Класс не зарегистрирован» (компонента comcntr.dll не зарегистрирована или зарегистрирована другой версии — лечится регистрацией из каталога нужной версии платформы командой regsvr32), несовпадение разрядности клиента и компоненты, а также зависшие сеансы, если соединение не освобождается. Присваивайте переменной соединения Неопределено после завершения работы и оборачивайте вызовы в Попытка/Исключение.

Права, безопасность и производительность

При доступе через ВИД аутентификация выполняется на уровне СУБД. Заведите отдельную учётную запись базы данных с правами только на чтение (datareader) и только к нужной базе. Строку подключения с паролем не храните в открытом виде в коде — используйте параметры подключения, задаваемые администратором, или программную установку параметров сеанса ВИД.

Производительность ВИД определяется запросами к СУБД. Если отчёт по внешней таблице работает медленно, проверьте, что фильтры передаются в источник, а не применяются после выборки: в запросе к таблице ВИД условия должны накладываться как можно раньше. Для больших выборок рассмотрите представления (view) на стороне СУБД с предварительной агрегацией.

При COM-подключении узкое место — сериализация данных между процессами. Передавайте через соединение только примитивные типы и таблицы значений разумного размера; «тяжёлые» выборки лучше выполнять запросом на стороне внешней базы и забирать результат порциями. Каждое обращение к свойству COM-объекта — отдельный вызов, поэтому циклы вида «для каждой строки получить реквизит через точку» работают на порядок медленнее одного запроса.

Если внешняя база нужна только для периодических отчётов, часто дешевле настроить ВИД с чтением итоговых таблиц регистров, чем поддерживать COM-соединение. Но если структура внешней конфигурации часто меняется (доработки, обновления), имена физических таблиц могут измениться при реструктуризации — после каждого обновления внешней базы проверяйте работоспособность ВИД.
ПЗ
Практическое замечание

Проверка результата и типичные ошибки

После настройки проверьте три вещи: данные возвращаются и совпадают с эталоном во внешней базе (выборочно сверьте 5–10 записей), отчёт выполняется за приемлемое время на реальном объёме, и подключение работает под обычным пользователем, а не только под администратором. Журнал регистрации внешней базы и журналы СУБД помогут увидеть неудачные попытки входа и блокировки.

Контрольные точки

Как проверить результат

Состав данных
Норма

Записи совпадают с данными внешней базы при выборочной сверке

Тревожный признак

Пустая выборка, удвоенные строки или устаревшие значения

Скорость отчёта
Норма

Отчёт по ВИД выполняется за секунды на рабочем объёме

Тревожный признак

Отчёт висит минутами, в консоли СУБД виден полный перебор таблицы

Права
Норма

Обычный пользователь получает данные, лишних прав нет

Тревожный признак

Работает только под администратором или видны лишние таблицы

Типичные ошибки
01
Чтение таблиц итогов вместо таблиц движений или наоборот — итоги хранятся в отдельных таблицах (_AccumRgT, _InfoRgSL), путаница даёт неверные цифры
02
Хранение пароля СУБД или пользователя 1С прямо в коде общего модуля — пароль попадает в хранилище конфигурации и виден всем разработчикам
03
COM-соединение внутри цикла — соединение создаётся на каждую итерацию, система перегружается сеансами; соединение нужно создавать один раз
04
Игнорирование версии платформы: компонента V83.COMConnector регистрируется от конкретной версии, после обновления платформы подключение отваливается
05
Запись в таблицы внешней базы через SQL — разрушает целостность данных и итоги регистров

Когда внешний источник — не лучшее решение

ВИД и COM — инструменты для сценариев «здесь и сейчас»: интерактивные отчёты, разовые выборки, обращения по требованию. Если данные нужны регулярно, в больших объёмах или между базами в разных сетях, эти способы становятся источником проблем: постоянные соединения, зависимость доступности второй базы, блокировки.

В таких случаях переходите на асинхронную интеграцию: план обмена с регистрацией изменений, HTTP-сервисы во внешней базе, обмен через EnterpriseData или брокер сообщений. Да, это требует разработки, но снимает жёсткую связность систем. Компромиссный вариант — регламентное задание, которое по расписанию забирает данные через COM и складывает в локальные регистры сведений, а отчёты строятся уже по локальным данным.

Итог

Что важно запомнить

Для чтения данных из другой базы 1С используйте ВИД (прямой доступ к СУБД, только чтение) или COM-соединение (полный доступ к объектам и логике). Заводите отдельные служебные учётные записи, не храните пароли в коде и никогда не пишите в таблицы 1С напрямую через SQL. Для постоянной интеграции выбирайте план обмена или веб-сервисы.

Частые вопросы

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

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

Ошибка «Класс не зарегистрирован» при создании V83.COMConnector — что делать?

Компонента comcntr.dll не зарегистрирована или зарегистрирована от другой версии платформы. Выполните от имени администратора regsvr32 для файла comcntr.dll из каталога bin нужной версии платформы. Учтите разрядность: 64-разрядному серверу 1С нужна 64-разрядная компонента.

Как узнать, какая физическая таблица СУБД соответствует справочнику или регистру?

Во внешней базе выполните функцию ПолучитьСтруктуруХраненияБазыДанных() — она возвращает таблицу соответствия объектов метаданных и имён таблиц и полей на уровне СУБД. Функция доступна в толстом клиенте; результат удобно вывести в табличный документ и сохранить для настройки ВИД.

Работает ли механизм внешних источников данных на Linux-сервере 1С?

Да, ВИД поддерживается на Linux при наличии соответствующих ODBC-драйверов для целевой СУБД. А вот COM-соединение доступно только в Windows-окружении — для Linux остаются ВИД, веб-сервисы и файловые обмены.

Отчёт по внешнему источнику работает очень медленно. С чего начать?

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

Безопасно ли давать пользователю СУБД доступ ко всей базе 1С для ВИД?

Допустимо при условии, что это отдельная учётная запись только с правом чтения и только к одной базе. Учтите, что через СУБД видны все данные, включая те, что в 1С закрыты RLS и правами ролей: ограничения record level security на уровне ВИД не действуют, поэтому права на объект ВИД в конфигурации нужно настраивать отдельно.