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

 

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

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

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

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

На стороне ETL

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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