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

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

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

Почему объект «Внешний источник данных» нельзя создать программно

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

Попытки программного вмешательства в системные таблицы метаданных (такие как Config или ConfigSave) с помощью SQL-скриптов являются крайне опасными и не рекомендуемыми практиками. Это не только приведет к потере поддержки конфигурации, но и с высокой долей вероятности нарушит целостность базы данных, сделав невозможным дальнейшее обновление или корректную работу системы.

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

Как работать с внешними данными эффективно: альтернативные подходы

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

1. Работа через COM-объект (ADO)

Классический способ подключения к сторонним БД, таким как MS SQL, MySQL или PostgreSQL. Вы используете стандартные библиотеки ADODB.Connection и ADODB.Recordset. Этот метод позволяет динамически менять строку подключения в зависимости от логики вашего приложения.

Пример структуры обращения через COMОбъект:


Соединение = Новый COMОбъект("ADODB.Connection");
СтрокаПодключения = "Driver={SQL Server};Server=MyServer;Database=MyDB;Uid=User;Pwd=Password;";
Соединение.Open(СтрокаПодключения);
Рекордсет = Соединение.Execute("SELECT * FROM MyTable");
Пока Не Рекордсет.EOF Цикл
    // Обработка данных
    Рекордсет.MoveNext();
КонецЦикла;

2. Использование микросервисной архитектуры (API)

На сегодняшний день это наиболее прогрессивный подход. Вместо прямого доступа 1С к «железу» внешней БД, вы создаете промежуточный сервис (на Go, Python, Node.js или C#), который предоставляет REST API (например, в формате JSON).

Преимущества данного метода:

3. Динамическое управление подключением ВИД

Если вы уже создали ВнешнийИсточникДанных в Конфигураторе, это не значит, что вы «привязаны» к одной базе. Платформа 1С позволяет программно изменять параметры подключения для уже существующего объекта. Вы можете управлять свойствами источника в модуле приложения или в отдельной обработке.

Пример изменения строки соединения:


ПараметрыПодключения = ВнешниеИсточникиДанных.МойВнешнийИсточник.ПолучитьОбщиеПараметрыСоединения();
ПараметрыПодключения.СтрокаСоединения = "Driver={PostgreSQL Unicode};Server=NewServer;Database=NewDB;";
ВнешниеИсточникиДанных.МойВнешнийИсточник.УстановитьОбщиеПараметрыСоединения(ПараметрыПодключения);

Этот метод позволяет переключаться между идентичными по структуре, но разными по расположению базами данных, не пересоздавая метаданные.

Рекомендации по выбору решения

  1. Если структура внешней БД фиксирована и меняется редко — используйте штатный ВнешнийИсточникДанных с динамическим изменением строки подключения.
  2. Если необходимо обеспечить высокую скорость работы на Linux-серверах — рассмотрите внешние компоненты, работающие через Native API, которые исключают использование COM.
  3. Если требуется сложная интеграция с множеством систем — создавайте API-прослойку. Это сделает вашу систему 1С более устойчивой к изменениям внешней среды и облегчит процесс отладки.

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

← На главную