При интеграции 1С с внешними информационными системами часто возникает задача загрузки данных напрямую из реляционных баз данных под управлением СУБД MS SQL Server. Рассмотрим основные способы организации прямого чтения данных средствами платформы 1С:Предприятие 8, разберем по шагам их настройку, преимущества, программную реализацию и ключевые технические нюансы.
Штатный механизм внешних источников данных платформы 1С является наиболее удобным и рекомендуемым способом интеграции. Он позволяет добавить внешние таблицы СУБД в дерево метаданных конфигурации и работать с ними как с привычными объектами конфигурации 1С (справочниками, табличными частями) через стандартный язык запросов 1С.
Разберем по шагам процесс подключения к MS SQL Server через внешний источник данных:
ВнешниеИсточникиДанных, добавим новый источник и запустим мастер добавления таблиц.ИмяВИсточникеДанных сохранит оригинальное системное имя таблицы SQL, а в свойстве Имя мы можем указать понятное наименование на русском или английском языке для удобного использования в коде 1С. Также источниками могут выступать не только физические таблицы, но и SQL-представления (Views), а также хранимые процедуры.Посмотрим на пример программной установки соединения и выборки данных с помощью встроенного языка запросов 1С:
ПараметрыПодключения = Новый ПараметрыПодключенияВнешнегоИсточникаДанных;
ПараметрыПодключения.СтрокаСоединения = "Driver={ODBC Driver 17 for SQL Server};Server=sql-server-name;Database=ExternalDB;Uid=sql_user;Pwd=StrongPassword123;";
ВнешниеИсточникиДанных.ВнешняяБазаSQL.УстановитьСоединение(ПараметрыПодключения);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВнешняяНоменклатура.КодТовара КАК КодТовара,
| ВнешняяНоменклатура.Наименование КАК Наименование,
| ВнешняяНоменклатура.Цена КАК Цена
|ИЗ
| ВнешнийИсточникДанных.ВнешняяБазаSQL.Таблица.Товары КАК ВнешняяНоменклатура";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Обработка и запись данных в объекты 1С
КонецЦикла;
Если нет возможности изменять структуру метаданных конфигурации или требуется выполнить разовую загрузку через внешнюю обработку, разберем альтернативный вариант — работу через COM-объект ADODB.Connection.
Рассмотрим подробнее реализацию подключения и чтения набора записей (Recordset):
Соединение = Новый COMОбъект("ADODB.Connection");
СтрокаПодключения = "Provider=MSOLEDBSQL;Data Source=sql-server-name;Initial Catalog=ExternalDB;User ID=sql_user;Password=StrongPassword123;";
Попытка
Соединение.Open(СтрокаПодключения);
Исключение
ВызватьИсключение "Ошибка подключения к MS SQL: " + ОписаниеОшибки();
КонецПопытки;
ТекстSQL = "SELECT ItemCode, ItemName, Price FROM Goods WHERE Active = 1";
НаборЗаписей = Соединение.Execute(ТекстSQL);
Пока НаборЗаписей.EOF = 0 Цикл
Код = Сокращенно(НаборЗаписей.Fields("ItemCode").Value);
Наименование = Сокращенно(НаборЗаписей.Fields("ItemName").Value);
Цена = НаборЗаписей.Fields("Price").Value;
// Перенос данных в 1С
НаборЗаписей.MoveNext();
КонецЦикла;
// Обязательное закрытие соединений и очистка памяти
НаборЗаписей.Close();
Соединение.Close();
НаборЗаписей = Неопределено;
Соединение = Неопределено;
Проанализируем ключевые моменты, на которые следует обратить внимание при настройке обмена:
ADODB.Connection невозможно — в этом случае применяются исключительно Внешние источники данных с настроенным UnixODBC, либо интеграция через HTTP-сервисы.WITH (NOLOCK) в текстах SQL-запросов.V83.COMConnector, Web-/HTTP-сервисы или планы обмена.