Настройка инкрементальной загрузки из 1С

Инкрементальная загрузка из 1С предназначена для получения измененных данных из 1С в целевое хранилище ETL. Регистрация изменений в базе источнике выполняется на узлах обмена, а в ETL выполняется получение только зарегистрированных к отправке данных. После успешного получения данных регистрация изменений очищается.

Перед настройкой база-источник должна быть подключена в ETL при помощи Адаптера ETL, а также между ETL и базой-источником должна проходить проверка соединения

Настройка на стороне источника

  1. Выбрать план обмена, который будет выполнять регистрацию сведений. Подробней про планы обмена можно прочитать по ссылке https://v8.1c.ru/platforma/plan-obmena/. Вам необходимо выбрать или создать такой план обмена, чтобы на нем регистрировались метаданные конфигурации, которые вы намерены получить. Можно выбирать любой план обмена, который есть в конфигурации, или создать свой при помощи доработки конфигурации или создания расширения, которое будет содержать новый план обмена.

  2. После выбора плана обмена, необходимо перейти в список узлов выбранного плана обмена и создать новый Узел обмена. Для каждого объекта метаданных необходимо создавать свой экземпляр узла, каждый экземпляр узла должен иметь уникальный код и наименование.

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

  3. Установить код у предопределенного узла обмена «Этот узел». «Этот узел» это специальный узел обмена, который создается автоматически. Для того чтобы механизм инкрементальной загрузки работал корректно нужно указать любой код в его карточке. Проверить регистрацию на узлах можно при помощи стандартной обработки «Регистрация изменений для обмена», которая есть в типовых конфигурациях или при помощи внешней обработки https://its.1c.ru/db/metod8dev/content/5013/hdoc.

На стороне ETL

  1. Загрузить информацию о плане обмена. Для этого необходимо в разделе «Источники данных» выбрать источник данных, который соответствует вашей базе в его карточке, на вкладке «Дополнительные настройки» нажать «Загрузить узлы планов обмена».
  2. Создать новые правила выгрузки данных и в верхней части документа установить признак «Загрузка изменений по плану обмена (1С)».
  3. Написать запрос для получения данных. Запрос к данным должен получать только измененные данные. Для этого в языке запросов 1С есть специальная конструкция «<ИмяТаблицы>.Изменения». Обращаясь к таблице изменений объекта метаданных, пользователь получает информацию о ссылках на измененные или удаленные объекты или ключи регистов сведений, по которым произошли изменения.

Например, текст запроса получения данных контрагентов имеет следующий вид:

ВЫБРАТЬ
	Контрагенты.Ссылка,
	Контрагенты.ИНН,
	Контрагенты.КПП,
	Контрагенты.Наименование,
	Контрагенты.Ответственный
ИЗ
	Справочник.Контрагенты КАК Контрагенты

Для получения изменений его необходимо привести в следующий вид:

ВЫБРАТЬ
	Контрагенты.ИНН,
	Контрагенты.КПП,
	Контрагенты.Наименование,
	Контрагенты.Ответственный,
	КонтрагентыИзменения.Ссылка КАК Ссылка
ИЗ
	Справочник.Контрагенты.Изменения КАК КонтрагентыИзменения
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
		ПО КонтрагентыИзменения.Ссылка = Контрагенты.Ссылка
ГДЕ
	КонтрагентыИзменения.Узел = &ПланОбмена_Узел
	И &ПланОбмена_НомерПринятогоСообщения <> -1
  1. В запросе необходимо обязательно указать 2 обязательных параметра «= &ПланОбмена_Узел», «&ПланОбмена_НомерПринятогоСообщения».

    Для параметра «&ПланОбмена_НомерПринятогоСообщения» рекомендуется устанавливать конструкцию-заглушку «&ПланОбмена_НомерПринятогоСообщения <> -1».

  2. Выполнить оставшуюся настройку правил выгрузки, провести и закрыть документ.

  3. Создать состав выгрузки, указать созданные выше правила выгрузки. При выборе правила инкрементальной загрузки в форме появится раздел «Узлы обмена». В открывшейся таблице нужно нажать кнопку «Заполнить» и после загрузки списка узлов, заполнить колонку «Узел обмена».  

  4. Записать и закрыть состав выгрузки.

Рекомендации по написанию запросов инкрементальной загрузки

  1. Для получения изменений узла обмена нужно использовать таблицу изменений:
    1. Для объектных типов (справочников, документов, планов видов характеристик и тд.) ключом изменения является ссылка.
    2. Для регистров накопления, расчетов, бухгалтерии и зависимых регистров сведений – регистратор.
    3. Для независимых регистров – комбинация измерений.
  2. Организовывать структуру таблиц-приемника нужно таким образом, чтобы таблицы всегда содержали колонку регистратора изменений или ключи независимого регистра сведений.
  3. В запросе не должно быть отборов. Изменение объекта может привести к тому что объект не будет получен из-за отбора, и в хранилище останется его неактуальная версия.
  4. Для получения данных нужно использовать ЛЕВОЕ соединение таблицы изменений с основной таблицей. Ключевые поля должны браться из таблицы изменений, остальные из основной таблицы.

Например, правила выгрузки содержат запрос:

ВЫБРАТЬ
	Контрагенты.ИНН,
	Контрагенты.КПП,
	Контрагенты.Наименование,
	Контрагенты.Ответственный,
	КонтрагентыИзменения.Ссылка КАК Ссылка
ИЗ
	Справочник.Контрагенты.Изменения КАК КонтрагентыИзменения
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
		ПО КонтрагентыИзменения.Ссылка = Контрагенты.Ссылка
ГДЕ
	КонтрагентыИзменения.Узел = &ПланОбмена_Узел
	И &ПланОбмена_НомерПринятогоСообщения <> -1

Если на узле зарегистрировано изменение данных и удаление вернутся следующие данные

Ссылка ИНН КПП Наименование Ответственный
1 83b70f0d-f7f4-11e5-943d-00155d000f03 8813084210 495445951 ООО «Рога и Копыта» Смирнов
2 511c9ecf-584c-11e8-944c-00155d000f02        

Выборка запроса вернула 2 строки: первая строка вернула информацию о измененном контрагенте, который существует в основных данных,вторая строка вернула только идентификатор измененного объекта, но не вернула другие данные. Это значит, что второй элемент выборки был удален. ИНН, КПП, Наименование и Ответственный имеют пустое значение (IS NULL).

  1. Предусмотрите, что удаленные объекты вернутся из запроса в виде заполненных ключевых полей без заполненных полей основной таблицы.

  2. Допускается получение данных записей зависимых регистров или по их таблице регистрации, или по таблице регистрации документа-регистратора.

Пример создания инкрементальной выгрузки

Получим данные по изменениям контрагентов из конфигурации «Документооборот 2.0». В качестве плана обмена выберем «Полный обмен данными». Перейдем в функции для технического специалиста, выберем план обмена «Полный обмен данными».

Убедимся, что в форме есть предопределенный узел с признаком «Этот узел», у которого заполнен код.

Создадим узел обмена «Контрагенты»

Изменим один элемент, и убедимся при помощи обработки «Регистрация изменения для обмена», что изменения зарегистрировались на узле.

В ETL, в источниках данных, обновим информацию о узлах обмена.

Создадим новое правило выгрузки данных, установим текст запроса:

ВЫБРАТЬ
	Контрагенты.ИНН,
	Контрагенты.КПП,
	Контрагенты.Наименование,
	Контрагенты.Ответственный,
	КонтрагентыИзменения.Ссылка КАК Ссылка
ИЗ
	Справочник.Контрагенты.Изменения КАК КонтрагентыИзменения
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
		ПО КонтрагентыИзменения.Ссылка = Контрагенты.Ссылка
ГДЕ
	КонтрагентыИзменения.Узел = &ПланОбмена_Узел
	И &ПланОбмена_НомерПринятогоСообщения <> -1

Перейдем в состав выгрузки и укажем правило, вкладке дополнительно выберем нужный узел обмена.

Направим задание в очередь, проверим полученные данные. Настройка инкрементального получения выполнена.