Мат. часть (ссылки):
Кратко: начиная с 8.2.14 появился новый объект метаданных "Внешние источники данных", пока доступно только чтение (в том числе просмотр данных в пользовательском интерфейсе, работа с данными через механизм запросов), обещана поддержка основных СУБД.
Вводная: необходимо организовать загрузку мастер-данных в 1С из справочных данных некой системы, последняя данные хранит в СУБД MS SQL. Под мастер-данными следует понимать, что эти данные при загрузке имеют приоритет перед уже существующими на стороне приемника: новые данные добавляются; существующие, если отличны, обновляются; существующие на стороне приемника, но не в новых данных, считать устаревшими, иметь возможность пометить на удаление.
Так как задача не предусматривает изменения мастер-данных, т.е. предполагает только чтение - это хороший пример для "Внешних источников".
Моё решение следующее:
- Считать данные из Внешнего источника. Необходимые поля интерпретировать к данным на стороне приемника.
- Сравнить считанные данные с данными приемника согласно набору ключей (чаще всего такие поля id).
- Добавить новые данные, не найденные при сравнении.
- Обновить найденные данные, если они отличны.
- Пометить на удаление не найденные данные при сравнении (последний шаг опционально)
Следует оговорить одно из замечаний к существующей реализации "Внешних источников", а именно: нет возможности считать данные непосредственно во временную таблицу и работать с данными дальше (что логично, так как временные таблицы создаются на стороне СУБД, обслуживающей 1С, а при работе с Внешними источниками это сторонняя СУБД).
Функция ВыполнитьОбновлениеСправочникаИзВнешнегоИсточника(
ИмяСправочника,
ИмяИсточника,
ИмяТаблицыИсточника,
СтруктураКлючи,
СтруктураПоля,
знач СоздаватьНовые = Истина,
знач СниматьПометкуУдаления = Истина,
знач ПомечатьНаУдаление = Истина)
...
КонецФункции
Подробнее о методе и его параметрах:
- ИмяСправочника - название справочника приемника данных
- ИмяИсточника - название источника из "Внешние источники"
- ИмяТаблицыИсточника - название целевой таблицы
- СтруктураКлючи - Структура, где ключ - поле таблицы источника, значение - поле справочника (приемника данных).
- СтруктураПоля - Структура, где ключ - поле источника, значение - тип данных к которому нужно привести поле источника.
- необязательные параметры (опции) функции (СоздаватьНовые, СниматьПометкуУдаления, ПомечатьНаУдаление ) - нужны на тот случай, когда мастер-данные соответствуют помеченному на удаление объекту данных 1С (см. описание задачи).
Пример вызова метода
ИмяИсточника = "MSSQL";
ИмяСправочника = "Кварталы";
ИмяТаблицыИсточника = "dbo_Quarter";
СтруктураДополнительноеПоле = Новый Структура();
СтруктураДополнительноеПоле.Вставить("Имя","Владелец");
СтруктураДополнительноеПоле.Вставить("Источник","Справочник.УчастковыеЛесничества");
СтруктураДополнительноеПоле.Вставить("ИсточникПоле","Ссылка");
СтруктураДополнительноеПоле.Вставить("СвязьПолеИсточник","КодВнешний");
СтруктураКлючи = Новый Структура("OID", "КодВнешний");
СтруктураПоля = Новый Структура("OrdinalNumber,DivisionalForestry_OID", "Наименование", Новый Структура("Владелец", СтруктураДополнительноеПоле));
// DivisionalForestry_OID будет замещён на Владельца
ВыполнитьОбновлениеСправочникаИзВнешнегоИсточника( ИмяСправочника, ИмяИсточника, ИмяТаблицыИсточника, СтруктураКлючи, СтруктураПоля);
В примере показан момент, когда в мастер-данных реализована свзяь "отец-сын", для 1С принято понятие "владелец". Для описания такого поля используется <СтруктураДополнительноеПоле>, обязательные свойства структуры: Имя (как будет приставлено поле в источнике); Источник, таблица на стороне 1С с данными для сопоставления; ИсточникПоле, имя поля таблицы (см. Источник ранее); СвязьПолеИсточник, имя поля таблицы (Источник) для сопоставления с данными из Внешнего источника.
Для хранения внешних ключей (id из мастер данных) было принято решение использовать реквизиты справочников, т.е. во всех участвующих в синхронизации справочниках был добавлен реквизит <КодВнешний>. В примере вызова это видно
СтруктураКлючи = Новый Структура("OID", "КодВнешний");
При такой реализации прежде всего следует строго соблюдать типизацию, т.е. типы данных полей внешнего источника и реквизитов справочников должны совпадать.
Метод может быть использован как метод Общего модуля, или методом тела обработки.
Задачи, которые необходимо решить следом: регламентные задание, управление регламентным заданием, формирование сообщения о выполнении, или не выполнении с причиной ошибки.