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

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

Механизм внешних источников данных (ВИД) в платформе 1С:Предприятие — это мощный инструмент, позволяющий работать с таблицами сторонних СУБД так, будто это родные объекты конфигурации (справочники или документы). Однако, когда возникает задача подключить одну базу 1С к другой базе 1С через этот механизм, мы сталкиваемся с рядом архитектурных особенностей и ограничений. Разберем подробно, как это реализовать, с какими трудностями придется столкнуться и какие альтернативы существуют.

Понимание основ: механизм ВИД и ODBC

Для начала проанализируем, как работает этот механизм. Внешние источники данных в 1С работают через технологию ODBC (Open Database Connectivity). Это означает, что для успешного подключения к целевой базе в операционной системе должен быть установлен соответствующий драйвер СУБД, на которой работает эта база (например, SQL Server, PostgreSQL или Oracle).

Рассмотрим стандартный сценарий подключения к базе 1С, работающей в клиент-серверном варианте:

  1. Создаем в дереве конфигурации новый объект в ветке ВнешниеИсточникиДанных.
  2. Настраиваем строку соединения, в которой указываем драйвер, адрес сервера, имя базы данных SQL, логин и пароль.
  3. Выбираем таблицы для импорта. Здесь нас ждет первая серьезная трудность: 1С хранит данные в таблицах с именами вроде _Reference25 или _Document40.

Проблема файловых баз данных (.1CD)

Выясним причину, по которой пользователи часто заходят в тупик при попытке подключить файловую базу. Файловая база 1С использует собственный проприетарный формат хранения данных в файле 1Cv8.1CD. К сожалению, полноценного и стабильного ODBC-драйвера для прямого чтения этого файла не существует.

Рассмотрим, какие варианты остаются для файловых баз:

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

Работа с динамическими именами таблиц в SQL

Если же целевая база работает на SQL-сервере, подключение становится возможным, но возникает проблема реструктуризации. При изменении метаданных в целевой базе (например, при добавлении реквизита) 1С может переименовать таблицу в SQL. В результате ваш внешний источник данных перестанет видеть таблицу, так как он привязан к конкретному физическому имени (например, _InfoReg123).

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


// Пример получения структуры хранения для анализа имен таблиц
СтруктураХранения = ПолучитьСтруктуруХраненияБазыДанных( , Истина);
Для Каждого Таблица Из СтруктураХранения Цикл
    Если Таблица.ИмяМетаданных = "Справочник.Номенклатура" Тогда
        ИмяТаблицыВСУБД = Таблица.ИмяТаблицыХранения;
        Сообщить("Физическое имя таблицы номенклатуры: " + ИмяТаблицыВСУБД);
    КонецЕсли;
КонецЦикла;

Используя этот метод в целевой базе (например, через HTTP-сервис), можно передавать актуальные имена таблиц в базу-приемник и программно обновлять настройки ВнешнийИсточникДанных.

Опасности обхода бизнес-логики 1С

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

  1. Отсутствие событий: Обработчики ПередЗаписью или ПриЗаписи не сработают. Если в базе была логика заполнения реквизитов или проверки условий, она будет проигнорирована.
  2. Нарушение целостности: Вы можете случайно записать в таблицу ссылку на объект, которого не существует, или оставить «битые» ссылки.
  3. Проблема итогов: Запись напрямую в таблицы регистров через ВИД не приведет к пересчету таблиц итогов. В отчетах целевой базы вы увидите неверные данные.
  4. Смещение дат: 1С хранит даты в SQL со смещением (обычно +2000 лет). При чтении через ВИД вам придется программно вычитать это смещение, чтобы получить корректную дату.

По этой причине использование ВИД настоятельно рекомендуется только для чтения данных, например, для построения консолидированной отчетности в реальном времени.

Сравнение производительности и альтернативы

Разберем, когда использование ВИД действительно оправдано по сравнению с другими методами связи двух баз:

1. ВИД (Внешние источники данных): Это самый быстрый способ чтения огромных массивов данных (миллионы строк). Платформа обращается напрямую к SQL, минуя уровень объектной модели 1С. Скорость будет максимально возможной для вашей сети и дисковой подсистемы.

2. COM-соединение: Старый и проверенный метод. Плюсы: соблюдается бизнес-логика. Минусы: очень медленно, требует установки 1С на сервере, сложно отлаживать, потребляет много оперативной памяти (создается отдельный сеанс 1С).

3. OData (REST API): Современный стандарт. Работает через веб-сервер.


// Пример обращения к OData
Соединение = Новый HTTPСоединение("server_address", , "user", "pass");
Запрос = Новый HTTPЗапрос("/base_name/odata/standard.odata/Catalog_Номенклатура");
Ответ = Соединение.Получить(Запрос);
Обеспечивает баланс между скоростью и безопасностью, так как работает через штатные механизмы платформы.

Пошаговый план настройки подключения к SQL-базе 1С

Посмотрим на процесс настройки ВИД по шагам:

  1. Настройка ODBC на сервере 1С: Зайдите в «Администрирование — Источники данных ODBC (64-бит)». Создайте системный DSN, выбрав драйвер SQL Server. Проверьте успешность подключения к базе-источнику.
  2. Добавление ВИД в конфигураторе: Создайте новый ВнешнийИсточникДанных. В свойствах укажите строку соединения. Помните, что строка соединения на сервере и на клиенте может отличаться, если вы используете локальные DSN.
  3. Импорт таблиц: В окне выбора таблиц найдите нужные вам (пользуясь ПолучитьСтруктуруХраненияБазыДанных() для поиска соответствий).
  4. Типизация полей: 1С автоматически попытается сопоставить типы данных SQL с типами 1С. Проверьте Число, Строка и особенно Дата.
  5. Использование в коде: После настройки вы сможете обращаться к данным так:
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ * ИЗ ВнешнийИсточникДанных.НашаВнешняяБаза.Таблица.Товары";
    Результат = Запрос.Выполнить();
    

Резюме

Мы проанализировали ситуацию и выяснили, что использование внешних источников данных для связи двух баз 1С — это задача, требующая глубокого понимания структуры хранения данных 1С. Если ваша база файловая — используйте HTTP-сервисы или COM. Если база на SQL и вам нужно быстро читать данные для отчетов — ВИД будет лучшим решением, но будьте готовы к ручной настройке соответствия имен таблиц и обработке специфических типов данных 1С.

← На главную