Варианты чтения таблиц (режимы работы)

В данной статье мы рассмотрим режимы работы Инжектора 1С в плане способа чтения таблиц внешней СУБД.

Выбор каждого конкретного варианта зависит от целей загрузки, а так же от прав, которые есть у пользователя для взаимодействие с внешней СУБД. Выбор способа происходит на этапе создания проекта загрузки, также режим работы Инжектора 1С можно отредактировать в уже созданном проекте на вкладке «Выбор подключения».

В Инжекторе 1С доступны 5 вариантов чтения таблиц. Ниже рассмотрим подробно и с примерами каждый из них.

Читаем каждый раз всю таблицу целиком

Для применения такого способа чтения таблицы достаточно иметь права на чтение внешней СУБД. Не накладываем никаких отборов при создании запроса, просто читаем всю таблицу целиком.

Настройка

Для создания проекта с текущим режимом работы достаточно следовать классической инструкции для создания проекта в Инжекторе 1С.

Пример запроса к внешней СУБД:

SELECT `AnalitikaUchetaPartiy`.`GruppaFinansovogoUcheta` as `GruppaFinansovogoUcheta`, `AnalitikaUchetaPartiy`.`GruppaFinansovogoUchetaGuid` as `GruppaFinansovogoUchetaGuid`, `AnalitikaUchetaPartiy`.`KlyuchAnalitiki` as `KlyuchAnalitiki`, `AnalitikaUchetaPartiy`.`KlyuchAnalitikiGuid` as `KlyuchAnalitikiGuid`, `AnalitikaUchetaPartiy`.`KodStroki` as `KodStroki`, `AnalitikaUchetaPartiy`.`Kontragent` as `Kontragent`, `AnalitikaUchetaPartiy`.`KontragentGuid` as `KontragentGuid`, `AnalitikaUchetaPartiy`.`NalogooblozhenieNDS` as `NalogooblozhenieNDS`, `AnalitikaUchetaPartiy`.`NalogooblozhenieNDSGuid` as `NalogooblozhenieNDSGuid`, `AnalitikaUchetaPartiy`.`Postavshchik` as `Postavshchik`, `AnalitikaUchetaPartiy`.`PostavshchikGuid` as `PostavshchikGuid`, `AnalitikaUchetaPartiy`.`StavkaNDS` as `StavkaNDS`, `AnalitikaUchetaPartiy`.`VidTSennosti` as `VidTSennosti`, `AnalitikaUchetaPartiy`.`VidTSennostiGuid` as `VidTSennostiGuid` FROM `test_erofeeva`.`AnalitikaUchetaPartiy` as `AnalitikaUchetaPartiy`

При каждом запуске проекта Инжектор 1С будет считывать весь массив данных, который содержится в СУБД по вышеприведенному запросу.

Отмечаем в СУБД все прочитанные строки

Такой способ удобен и необходим, если мы планируем в перспективе отслеживать изменения в СУБД и подгружать с каждым запуском проекта только новые данные либо использовать информацию о прочтении в СУБД в других проектах.

Для применения такого способа чтения таблицы нужно иметь право чтения и записи во внешней СУБД. Так же этот способ будет быстро отрабатывать в процессе загрузки, если в исходной таблице СУБД имеются колонки для быстрого перехода к нужной строке (например, ID строки или комбинация id документа + дата выгрузки).

Настройка

В процессе создания проекта (на этапе сопоставления источника и приемника) помощник настройки автоматически предложит выбрать или создать колонку отметки о прочтении. Эта колонка должна быть предназначена именно для записи даты и времени прочтения и не содержать в себе другую постороннюю информацию.

Запустить помощник настройки самостоятельно можно нажав на кнопку «Открыть помощник настройки чтения» на вкладке «Выбор схемы данных».

Если все существующие колонки заполнены данными, то выбираем пункт «Нет такой колонки, добавим» и создадим дополнительную колонку ReadDate.

Так же обязательным условием настройки для данного типа чтения является выбор ключевого поля таблицы. Выбираем KodStroki.

Пример запроса к внешней СУБД:

SELECT `AnalitikaUchetaPartiy`.`GruppaFinansovogoUcheta` as `GruppaFinansovogoUcheta`, `AnalitikaUchetaPartiy`.`GruppaFinansovogoUchetaGuid` as `GruppaFinansovogoUchetaGuid`, `AnalitikaUchetaPartiy`.`KlyuchAnalitiki` as `KlyuchAnalitiki`, `AnalitikaUchetaPartiy`.`KlyuchAnalitikiGuid` as `KlyuchAnalitikiGuid`, `AnalitikaUchetaPartiy`.`KodStroki` as `KodStroki`, `AnalitikaUchetaPartiy`.`Kontragent` as `Kontragent`, `AnalitikaUchetaPartiy`.`KontragentGuid` as `KontragentGuid`, `AnalitikaUchetaPartiy`.`NalogooblozhenieNDS` as `NalogooblozhenieNDS`, `AnalitikaUchetaPartiy`.`NalogooblozhenieNDSGuid` as `NalogooblozhenieNDSGuid`, `AnalitikaUchetaPartiy`.`Postavshchik` as `Postavshchik`, `AnalitikaUchetaPartiy`.`PostavshchikGuid` as `PostavshchikGuid`, `AnalitikaUchetaPartiy`.`StavkaNDS` as `StavkaNDS`, `AnalitikaUchetaPartiy`.`VidTSennosti` as `VidTSennosti`, `AnalitikaUchetaPartiy`.`VidTSennostiGuid` as `VidTSennostiGuid` FROM `test_erofeeva`.`AnalitikaUchetaPartiy` as `AnalitikaUchetaPartiy` WHERE ReadDate is NULL

При каждом запуске проекта Инжектор 1С будет заполнять колонку ReadDate текущей датой и временем. По умолчанию все не обработанные строки в колонке ReadDate is NULL.

Читаем новые строки по отметке времени

Для применения такого способа чтения таблицы нужно иметь право чтения во внешней СУБД. Этот вариант подходит для небольших таблиц, причем в запросе к внешней базе всегда происходит сортировка по полю ParametrDataDen. При чтении таблицы происходит запоминание значения временной метки из последней прочитанной строки в параметр.

Такой способ чтения подходит, если таблица СУБД содержит колонку с уникальными значениями даты и времени для каждой строки.

Настройка

В процессе создания проекта (на этапе сопоставления источника и приемника) помощник настройки автоматически предложит выбрать поле, в котором есть временная отметка (например Дата Выгрузки).

Запустить помощник настройки самостоятельно можно нажав на кнопку «Открыть помощник настройки чтения» на вкладке «Выбор схемы данных».

Пример запроса к внешней СУБД:

SELECT `OtchetORoznichnykhProdazhakhSerii`.`extr_Author` as `extr_Author`, `OtchetORoznichnykhProdazhakhSerii`.`extr_ModifyDate` as `extr_ModifyDate`, `OtchetORoznichnykhProdazhakhSerii`.`extr_Operation` as `extr_Operation`, `OtchetORoznichnykhProdazhakhSerii`.`Kolichestvo` as `Kolichestvo`, `OtchetORoznichnykhProdazhakhSerii`.`Nomenklatura` as `Nomenklatura`, `OtchetORoznichnykhProdazhakhSerii`.`NomerStroki` as `NomerStroki`, `OtchetORoznichnykhProdazhakhSerii`.`ParametrDataDen` as `ParametrDataDen`, `OtchetORoznichnykhProdazhakhSerii`.`ReadDate` as `ReadDate`, `OtchetORoznichnykhProdazhakhSerii`.`Seriya` as `Seriya`, `OtchetORoznichnykhProdazhakhSerii`.`Ssylka` as `Ssylka`, `OtchetORoznichnykhProdazhakhSerii`.`SsylkaData` as `SsylkaData`, `OtchetORoznichnykhProdazhakhSerii`.`SsylkaGuid` as `SsylkaGuid` FROM `test_erofeeva`.`OtchetORoznichnykhProdazhakhSerii` as `OtchetORoznichnykhProdazhakhSerii` WHERE `OtchetORoznichnykhProdazhakhSerii`.`ParametrDataDen` > &ParametrDataDen ORDER BY `OtchetORoznichnykhProdazhakhSerii`.`ParametrDataDen` ASC

Где параметр &ParametrDataDen хранит значение последней прочитанной даты.

При каждом запуске проекта Инжектор 1С будет отбирать для прочтения из СУБД только более новые данные, ориентируясь относительно последней даты в &ParametrDataDen.

Читаем по сегментам + отмечаем в СУБД прочитанные строки

Для применения такого способа чтения таблицы нужно иметь право чтения и записи во внешней СУБД. Этот способ позволяет разделить по параметрам массив считываемых данных на сегменты и организовать многопоточную загрузку данных.

Настройка

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

В текущем примере мы выбираем поле DataVigruzki для деления исходной таблицы на сегменты и добавляем в исходную СУБД колонку ReadDate для установки пометки о прочтении и загрузке (это своего рода метка обработанного сегмента). Если сегмент уже загружался, то в поле ReadDate запишется дата загрузки. А если сегмент еще не загружался, то поле ReadDate будет NULL.

В процессе создания проекта (на этапе сопоставления источника и приемника) помощник настройки автоматически предложит заполнить необходимые поля.

Примеры запросов к внешней СУБД:

Запрос на определение значений параметра сегментирования.

SELECT DISTINCT `OtchetORoznichnykhProdazhakhSerii`.`ParametrDataDen` as `ParametrDataDen` FROM `test_erofeeva`.`OtchetORoznichnykhProdazhakhSerii` as `OtchetORoznichnykhProdazhakhSerii` WHERE `OtchetORoznichnykhProdazhakhSerii`.`ReadDate` IS NULL

При выполнении этого запроса получаем условие деления на сегменты: список уникальных дат выгрузки.

Запрос на получение самих данных загрузки.

SELECT `OtchetORoznichnykhProdazhakhSerii`.`extr_Author` as `extr_Author`, `OtchetORoznichnykhProdazhakhSerii`.`extr_ModifyDate` as `extr_ModifyDate`, `OtchetORoznichnykhProdazhakhSerii`.`extr_Operation` as `extr_Operation`, `OtchetORoznichnykhProdazhakhSerii`.`Kolichestvo` as `Kolichestvo`, `OtchetORoznichnykhProdazhakhSerii`.`Nomenklatura` as `Nomenklatura`, `OtchetORoznichnykhProdazhakhSerii`.`NomerStroki` as `NomerStroki`, `OtchetORoznichnykhProdazhakhSerii`.`ParametrDataDen` as `ParametrDataDen`, `OtchetORoznichnykhProdazhakhSerii`.`ReadDate` as `ReadDate`, `OtchetORoznichnykhProdazhakhSerii`.`Seriya` as `Seriya`, `OtchetORoznichnykhProdazhakhSerii`.`Ssylka` as `Ssylka`, `OtchetORoznichnykhProdazhakhSerii`.`SsylkaData` as `SsylkaData`, `OtchetORoznichnykhProdazhakhSerii`.`SsylkaGuid` as `SsylkaGuid` FROM `test_erofeeva`.`OtchetORoznichnykhProdazhakhSerii` as `OtchetORoznichnykhProdazhakhSerii` WHERE `OtchetORoznichnykhProdazhakhSerii`.`ParametrDataDen` = &ParametrDataDen AND `OtchetORoznichnykhProdazhakhSerii`.`ReadDate` IS NULL

При каждом запуске проекта Инжектор 1С будет отбирать для прочтения из СУБД только новые данные, ориентируясь на значение в колонке ReadDate is NULL. Из всего массива новых данных Инжектор 1С сформирует несколько сегментов, у каждого из которых будет одинаковая дата выгрузки. Эти сегменты можно загрузить как по очереди, так и многопоточно.

Читаем по сегменту «Дата выгрузки», запоминаем последнее прочитанное

Для применения такого способа чтения таблицы нужно иметь право чтения во внешней СУБД. При таком варианте загрузки происходит группировка данных по полю Дата Выгрузки. после успешного прочтения последняя дата запоминается и хранится в параметре.

Настройка

В процессе создания проекта (на этапе сопоставления источника и приемника) помощник настройки автоматически предложит выбрать поле, в котором есть временная отметка (например Дата Выгрузки).

Запустить помощник настройки самостоятельно можно нажав на кнопку «Открыть помощник настройки чтения» на вкладке «Выбор схемы данных».

Примеры запросов к внешней СУБД:

Запрос на определение значений параметра сегментирования.

SELECT DISTINCT `OtchetORoznichnykhProdazhakhSerii`.`ParametrDataDen` as `ParametrDataDen` FROM `test_erofeeva`.`OtchetORoznichnykhProdazhakhSerii` as `OtchetORoznichnykhProdazhakhSerii` WHERE `OtchetORoznichnykhProdazhakhSerii`.`ParametrDataDen` > &ParametrDataDen ORDER BY `OtchetORoznichnykhProdazhakhSerii`.`ParametrDataDen`

При выполнении этого запроса получаем условие деления на сегменты: список уникальных дат выгрузки.

SELECT `OtchetORoznichnykhProdazhakhSerii`.`extr_Author` as `extr_Author`, `OtchetORoznichnykhProdazhakhSerii`.`extr_ModifyDate` as `extr_ModifyDate`, `OtchetORoznichnykhProdazhakhSerii`.`extr_Operation` as `extr_Operation`, `OtchetORoznichnykhProdazhakhSerii`.`Kolichestvo` as `Kolichestvo`, `OtchetORoznichnykhProdazhakhSerii`.`Nomenklatura` as `Nomenklatura`, `OtchetORoznichnykhProdazhakhSerii`.`NomerStroki` as `NomerStroki`, `OtchetORoznichnykhProdazhakhSerii`.`ParametrDataDen` as `ParametrDataDen`, `OtchetORoznichnykhProdazhakhSerii`.`ReadDate` as `ReadDate`, `OtchetORoznichnykhProdazhakhSerii`.`Seriya` as `Seriya`, `OtchetORoznichnykhProdazhakhSerii`.`Ssylka` as `Ssylka`, `OtchetORoznichnykhProdazhakhSerii`.`SsylkaData` as `SsylkaData`, `OtchetORoznichnykhProdazhakhSerii`.`SsylkaGuid` as `SsylkaGuid` FROM `test_erofeeva`.`OtchetORoznichnykhProdazhakhSerii` as `OtchetORoznichnykhProdazhakhSerii` WHERE `OtchetORoznichnykhProdazhakhSerii`.`ParametrDataDen` = &ParametrDataDen

При каждом запуске проекта Инжектор 1С будет отбирать для прочтения из СУБД только новые данные, ориентируясь на значение параметра &ParametrDataDen. Из всего массива новых данных Инжектор 1С сформирует несколько сегментов, у каждого из которых будет одинаковая дата выгрузки. Эти сегменты можно загрузить как по очереди, так и многопоточно.