Разработка и Конфигурация · 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С внешней базы, требует знания структуры таблиц.
Полный доступ к объектам и методам внешней базы. Только Windows, нужна та же версия платформы, медленный старт соединения.
Для регулярной интеграции и разных сетей. Требует разработки, но надёжен и масштабируем.
Настройка внешнего источника данных к базе 1С на SQL
Механизм ВИД доступен в конфигураторе: ветка «Общие» → «Внешние источники данных». Для подключения к базе 1С, развёрнутой на СУБД, создаётся новый источник, в свойствах которого указывается строка подключения ODBC/OLE DB к серверу баз данных. Важно понимать: подключение идёт к СУБД, а не к платформе 1С, поэтому читаются физические таблицы вида _Reference123 (справочники), _Document456 (документы), _AccumRg789 (регистры накопления).
После создания источника в него добавляются таблицы: платформа может загрузить список таблиц из схемы СУБД, после чего для каждой нужной таблицы сопоставляются поля. Затем таблицы ВИД можно использовать в запросах, СКД и отчётах наравне с обычными объектами конфигурации — это главное удобство механизма.
- 1Создайте в конфигураторе объект «Внешний источник данных» и укажите тип СУБД
- 2Пропишите строку подключения к серверу БД с учётными данными пользователя СУБД с правом чтения
- 3Загрузите список таблиц и добавьте нужные, сопоставив поля и ключи
- 4Напишите тестовый запрос или отчёт СКД по таблице ВИД
- 5Проверьте работу под пользователем без административных прав и задайте права на объект ВИД
Главная сложность — расшифровка структуры таблиц 1С на уровне СУБД. Имена таблиц и полей генерируются платформой и не совпадают с именами метаданных. Получить соответствие можно функцией ПолучитьСтруктуруХраненияБазыДанных() в толстом клиенте внешней базы или через отчёт по структуре хранения. Без этого сопоставления легко подключиться «не к той таблице».
COM-соединение с внешней базой 1С
COM-подключение создаётся программно через объект COMConnector. В базе-источнике при этом запускается сеанс под указанным пользователем, и вызывающий код получает доступ ко всем объектам: справочникам, документам, запросам, экспортным процедурам общих модулей.
Параметры = "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 записей), отчёт выполняется за приемлемое время на реальном объёме, и подключение работает под обычным пользователем, а не только под администратором. Журнал регистрации внешней базы и журналы СУБД помогут увидеть неудачные попытки входа и блокировки.
Как проверить результат
Записи совпадают с данными внешней базы при выборочной сверке
Пустая выборка, удвоенные строки или устаревшие значения
Отчёт по ВИД выполняется за секунды на рабочем объёме
Отчёт висит минутами, в консоли СУБД виден полный перебор таблицы
Обычный пользователь получает данные, лишних прав нет
Работает только под администратором или видны лишние таблицы
Когда внешний источник — не лучшее решение
ВИД и 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 на уровне ВИД не действуют, поэтому права на объект ВИД в конфигурации нужно настраивать отдельно.