Настройка инкрементальной загрузки из 1С
5 минутное чтение
Инкрементальная загрузка из 1С предназначена для получения измененных данных из 1С в целевое хранилище ETL. Регистрация изменений в базе источнике выполняется на узлах обмена, а в ETL выполняется получение только зарегистрированных к отправке данных. После успешного получения данных регистрация изменений очищается.
Перед настройкой база-источник должна быть подключена в ETL при помощи Адаптера ETL, а также между ETL и базой-источником должна проходить проверка соединения
Настройка на стороне источника
- Выбрать план обмена, который будет выполнять регистрацию сведений. Подробней про планы обмена можно прочитать по ссылке https://v8.1c.ru/platforma/plan-obmena/. Вам необходимо выбрать или создать такой план обмена, чтобы на нем регистрировались метаданные конфигурации, которые вы намерены получить. Можно выбирать любой план обмена, который есть в конфигурации, или создать свой при помощи доработки конфигурации или создания расширения, которое будет содержать новый план обмена.
- После выбора плана обмена, необходимо перейти в список узлов выбранного плана обмена и создать новый Узел обмена. Для каждого объекта метаданных необходимо создавать свой экземпляр узла, каждый экземпляр узла должен иметь уникальный код и наименование.
Например, необходимо загружать изменения справочника «Контрагенты» и справочника «Номенклатура», тогда для каждого справочника вам нужно создать собственный элемент узла плана обмена. - Установить код у предопределенного узла обмена «Этот узел». «Этот узел» это специальный узел обмена, который создается автоматически. Для того чтобы механизм инкрементальной загрузки работал корректно нужно указать любой код в его карточке. Проверить регистрацию на узлах можно при помощи стандартной обработки «Регистрация изменений для обмена», которая есть в типовых конфигурациях или при помощи внешней обработки https://its.1c.ru/db/metod8dev/content/5013/hdoc.
На стороне ETL
- Загрузить информацию о плане обмена. Для этого необходимо в разделе «Источники данных» выбрать источник данных, который соответствует вашей базе в его карточке, на вкладке «Дополнительные настройки» нажать «Загрузить узлы планов обмена».
- Создать новые правила выгрузки данных и в верхней части документа установить признак «Загрузка изменений по плану обмена (1С)».
- Написать запрос для получения данных. Запрос к данным должен получать только измененные данные. Для этого в языке запросов 1С есть специальная конструкция «<ИмяТаблицы.Изменения». Обращаясь к таблице изменений объекта метаданных, пользователь получает информацию о ссылках на измененные или удаленные объекты или ключи регистов сведений, по которым произошли изменения.
Например, текст запроса получения данных контрагентов имеет следующий вид:
ВЫБРАТЬ
Контрагенты.Ссылка,
Контрагенты.ИНН,
Контрагенты.КПП,
Контрагенты.Наименование,
Контрагенты.Ответственный
ИЗ
Справочник.Контрагенты КАК Контрагенты
Для получения изменений его необходимо привести в следующий вид:
ВЫБРАТЬ
Контрагенты.ИНН,
Контрагенты.КПП,
Контрагенты.Наименование,
Контрагенты.Ответственный,
КонтрагентыИзменения.Ссылка КАК Ссылка
ИЗ
Справочник.Контрагенты.Изменения КАК КонтрагентыИзменения
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО КонтрагентыИзменения.Ссылка = Контрагенты.Ссылка
ГДЕ
КонтрагентыИзменения.Узел = &ПланОбмена_Узел
И &ПланОбмена_НомерПринятогоСообщения <> -1
-
В запросе необходимо обязательно указать два обязательных параметра
= &ПланОбмена_Узел
,&ПланОбмена_НомерПринятогоСообщения
.Для параметра
&ПланОбмена\_НомерПринятогоСообщения
рекомендуется устанавливать конструкцию-заглушку&ПланОбмена_НомерПринятогоСообщения <> -1
. -
Выполнить оставшуюся настройку правил выгрузки, провести и закрыть документ.
-
Создать состав выгрузки, указать созданные выше правила выгрузки. При выборе правила инкрементальной загрузки в форме появится раздел «Узлы обмена». В открывшейся таблице нужно нажать кнопку «Заполнить» и после загрузки списка узлов, заполнить колонку «Узел обмена».
-
Записать и закрыть состав выгрузки.
Рекомендации по написанию запросов инкрементальной загрузки
-
Для получения изменений узла обмена нужно использовать таблицу изменений:
- для объектных типов (справочников, документов, планов видов характеристик и тд.) ключом изменения является ссылка;
- для регистров накопления, расчетов, бухгалтерии и зависимых регистров сведений — регистратор;
- для независимых регистров — комбинация измерений.
-
Организовывать структуру таблиц-приемника нужно таким образом, чтобы таблицы всегда содержали колонку регистратора изменений или ключи независимого регистра сведений.
-
В запросе не должно быть отборов. Изменение объекта может привести к тому что объект не будет получен из-за отбора, и в хранилище останется его неактуальная версия.
-
Для получения данных нужно использовать ЛЕВОЕ соединение таблицы изменений с основной таблицей. Ключевые поля должны браться из таблицы изменений, остальные из основной таблицы.
Например, правила выгрузки содержат запрос:
ВЫБРАТЬ
Контрагенты.ИНН,
Контрагенты.КПП,
Контрагенты.Наименование,
Контрагенты.Ответственный,
КонтрагентыИзменения.Ссылка КАК Ссылка
ИЗ
Справочник.Контрагенты.Изменения КАК КонтрагентыИзменения
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО КонтрагентыИзменения.Ссылка = Контрагенты.Ссылка
ГДЕ
КонтрагентыИзменения.Узел = &ПланОбмена_Узел
И &ПланОбмена_НомерПринятогоСообщения <> -1
Если на узле зарегистрировано изменение данных и удаление вернутся следующие данные:
Ссылка | ИНН | КПП | Наименование | Ответственный |
---|---|---|---|---|
1 | 83b70f0d-f7f4-11e5-943d-00155d000f03 | 8813084210 | 495445951 | ООО «Рога и Копыта» |
2 | 511c9ecf-584c-11e8-944c-00155d000f02 |
Выборка запроса вернула две строки: первая строка вернула информацию о измененном контрагенте, который существует в основных данных,вторая строка вернула только идентификатор измененного объекта, но не вернула другие данные. Это значит, что второй элемент выборки был удален. ИНН, КПП, Наименование и Ответственный имеют пустое значение (IS NULL
).
- Предусмотрите, что удаленные объекты вернутся из запроса в виде заполненных ключевых полей без заполненных полей основной таблицы.
- Допускается получение данных записей зависимых регистров или по их таблице регистрации, или по таблице регистрации документа-регистратора.
Пример создания инкрементальной выгрузки
Получим данные по изменениям контрагентов из конфигурации «Документооборот 2.0». В качестве плана обмена выберем «Полный обмен данными». Перейдем в функции для технического специалиста, выберем план обмена «Полный обмен данными».
Убедимся, что в форме есть предопределенный узел с признаком «Этот узел», у которого заполнен код.
Создадим узел обмена «Контрагенты»:
Изменим один элемент, и убедимся при помощи обработки «Регистрация изменения для обмена», что изменения зарегистрировались на узле.
В ETL, в источниках данных, обновим информацию о узлах обмена.
Создадим новое правило выгрузки данных, установим текст запроса:
ВЫБРАТЬ
Контрагенты.ИНН,
Контрагенты.КПП,
Контрагенты.Наименование,
Контрагенты.Ответственный,
КонтрагентыИзменения.Ссылка КАК Ссылка
ИЗ
Справочник.Контрагенты.Изменения КАК КонтрагентыИзменения
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО КонтрагентыИзменения.Ссылка = Контрагенты.Ссылка
ГДЕ
КонтрагентыИзменения.Узел = &ПланОбмена_Узел
И &ПланОбмена_НомерПринятогоСообщения <> -1
Перейдем в состав выгрузки и укажем правило, вкладке дополнительно выберем нужный узел обмена.
Направим задание в очередь, проверим полученные данные. Настройка инкрементального получения выполнена.