Инкрементальная загрузка из предназначена для получения измененных данных из в целевое хранилище 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. Допускается получение данных записей зависимых регистров или по их таблице регистрации, или по таблице регистрации документа-регистратора.

Управление очисткой таблицы изменений в

Когда вы работаете с инкрементальной загрузкой данных из в ETL, система регистрирует изменения в данных (например, новые документы, изменения в справочниках и т.д.). Эти изменения записываются в специальную таблицу — таблицу изменений.

После того как данные переданы в ETL, система обычно очищает эту таблицу изменений, чтобы в следующий раз передавать только новые изменения. Но иногда вам нужно получить данные из нескольких объектов (например, документ «Заказ» и его табличную часть с товарами) за один раз, не очищая таблицу изменений после каждого шага.

Для этого в настройках Состава выгрузки, на вкладке «Дополнительно», предусмотрена галочка «Увеличивать номер принятого сообщения». По умолчанию эта галочка установлена.

  • Если галочка не установлена, таблица изменений не очищается, и вы можете продолжать получать данные из других объектов, не теряя информацию о ранее зарегистрированных изменениях.
  • Если галочка установлена, таблица изменений очищается, и система понимает, что данные успешно переданы.

Пример:

  1. Первый шаг — получение данных из документа «Заказ»:
    • Галочка не установлена.
    • Данные из документа «Заказ» передаются в ETL.
    • Таблица изменений не очищается, потому что галка не установлена.
  2. Второй шаг — получение данных из табличной части «Товары»:
    • Галочка установлена.
    • Данные из табличной части «Товары» передаются в ETL.
    • Таблица изменений очищается, потому что галка установлена.

Таким образом, вы получаете данные из нескольких объектов (документ и его табличная часть) за один раз, а таблица изменений очищается только после завершения всего процесса.

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

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

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

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

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

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

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

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

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

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