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