Выбрать регистраторы регистра для обработки. Возвращает порцию регистраторов, по которым нужно переформировать движения.
// Возвращает порцию регистраторов, по которым нужно переформировать движения.
// Данные берутся из зарегистрированных в очереди, учитываются заблокированные более приоритетными очередями данные.
// Блокировка по другим очередям делается по документу и по регистру.
// Регистраторы в выборке упорядочены по дате регистратора по убыванию, если передано полное имя документа.
// Если полное имя документа не передано - упорядочивание происходит по периоду регистра:
// - берется максимальная дата по каждому регистратору;
// - если по регистратору нет записей - он в топе.
// Параметры:
// Очередь - Число - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, которые он будет обрабатывать.
// ПолноеИмяДокумента - Строка - имя документа, движения по которому нужно переформировать. Если движения формируются не по данным
// документа, то нужно передать Неопределено - тогда не будет проверяться блокировка таблицы документа.
// Например, Документ.ПриходныйОрдерНаТовары.
// ПолноеИмяРегистра - Строка - имя регистра, движения по которому нужно переформировать.
// Например, РегистрНакопления.ТоварыНаСкладах.
// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки.
//
// Возвращаемое значение:
// * ВыборкаИзРезультатаЗапроса - выборка регистраторов, которые нужно обработать, поля выборки:
// ** Регистратор - ДокументСсылка.
// ** Период - Дата - дата документа, если передано полное имя документа, максимальный период по регистратору,
// если полное имя документа не передано.
// ** Проведен - Булево, Неопределено - значение реквизита Проведен документа, если передано полное имя документа,
// Неопределено - если имя документа не передано.
// * ТаблицаЗначений - данные, которые нужно обработать, имена колонок соответствуют именам измерений регистра.
//
Функция ВыбратьРегистраторыРегистраДляОбработки(Очередь, ПолноеИмяДокумента, ПолноеИмяРегистра, ДополнительныеПараметры = Неопределено) Экспорт
Если ДополнительныеПараметры = Неопределено Тогда
ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки();
КонецЕсли;
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц();
ПроверитьПараметрыВыборки(ДополнительныеПараметры);
ПараметрыПостроения = ПараметрыПостроенияВыборки(ДополнительныеПараметры);
Если ПолноеИмяДокумента = Неопределено Тогда
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 10000
| &ВыбираемыеПоля
|ИЗ
| #ТаблицаРегистраИзменения КАК ТаблицаРегистраИзменения
| ЛЕВОЕ СОЕДИНЕНИЕ #ТаблицаДвиженийРегистра КАК ТаблицаРегистра
| ПО ТаблицаРегистраИзменения.Регистратор = ТаблицаРегистра.Регистратор
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаблокированоРегистратор КАК ВТЗаблокированоРегистратор
| ПО ТаблицаРегистраИзменения.Регистратор = ВТЗаблокированоРегистратор.Регистратор
| #ТекстЗапросаСоединениеСДопИсточникамиРегистрами
|ГДЕ
| ТаблицаРегистраИзменения.Узел = &ТекущаяОчередь
| И ВТЗаблокированоРегистратор.Регистратор ЕСТЬ NULL
| И &УсловиеПоДопИсточникамРегистрам
|
|СГРУППИРОВАТЬ ПО
| ТаблицаРегистраИзменения.Регистратор";
Если ПараметрыПостроения.ПостраничнаяВыборка Тогда
ТекстЗапроса = ТекстЗапроса + "
|
|ИМЕЮЩИЕ
| &УсловиеПоСтраницам"
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
|
|УПОРЯДОЧИТЬ ПО
| &ПорядокВыборки";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаДвиженийРегистра", ПолноеИмяРегистра);
УстановитьПоляУпорядочиванияРегистра(ПараметрыПостроения);
Иначе
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 10000
| &ВыбираемыеПоля
|ИЗ
| #ТаблицаРегистраИзменения КАК ТаблицаРегистраИзменения
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаблокированоРегистратор КАК ВТЗаблокированоРегистратор
| ПО ТаблицаРегистраИзменения.Регистратор = ВТЗаблокированоРегистратор.Регистратор
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаблокированоСсылка КАК ВТЗаблокированоСсылка
| ПО ТаблицаРегистраИзменения.Регистратор = ВТЗаблокированоСсылка.Ссылка
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ #ПолноеИмяДокумента КАК ТаблицаДокумента
| #ТекстЗапросаСоединениеСДопИсточникамиПоШапке
| ПО ТаблицаРегистраИзменения.Регистратор = ТаблицаДокумента.Ссылка
| #ТекстЗапросаСоединениеСДопИсточникамиПоТЧ
| #ТекстЗапросаСоединениеСДопИсточникамиРегистрами
|
|ГДЕ
| ТаблицаРегистраИзменения.Узел = &ТекущаяОчередь
| И ТаблицаРегистраИзменения.Регистратор ССЫЛКА #ПолноеИмяДокумента
| И ВТЗаблокированоРегистратор.Регистратор ЕСТЬ NULL
| И ВТЗаблокированоСсылка.Ссылка ЕСТЬ NULL
| И &УсловиеПоДопИсточникамСсылкам
| И &УсловиеПоДопИсточникамРегистрам
| И &УсловиеПоСтраницам
|
|УПОРЯДОЧИТЬ ПО
| &ПорядокВыборки";
ДополнительныеПараметрыСозданияВТ = ДополнительныеПараметрыВыборкиДанныхДляОбработки();
ДополнительныеПараметрыСозданияВТ.ИмяВременнойТаблицы = "ВТЗаблокированоСсылка";
СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяДокумента, МенеджерВременныхТаблиц, ДополнительныеПараметрыСозданияВТ);
УстановитьПоляУпорядочиванияРегистраПоДокументу(ПараметрыПостроения);
КонецЕсли;
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ТаблицаРегистраИзменения", ПолноеИмяРегистра + ".Изменения");
ДополнительныеПараметрыСозданияВТ = ДополнительныеПараметрыВыборкиДанныхДляОбработки();
ДополнительныеПараметрыСозданияВТ.ИмяВременнойТаблицы = "ВТЗаблокированоРегистратор";
СоздатьВременнуюТаблицуЗаблокированныхДляЧтенияИИзмененияДанных(Очередь, ПолноеИмяРегистра, МенеджерВременныхТаблиц, ДополнительныеПараметрыСозданияВТ);
УстановитьРазмерВыборки(ТекстЗапроса, ДополнительныеПараметры);
ДобавитьПроверкуБлокировкиДополнительныхИсточников(Очередь, ТекстЗапроса, ПолноеИмяДокумента, ПолноеИмяРегистра, МенеджерВременныхТаблиц, Ложь, ДополнительныеПараметры);
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ПолноеИмяДокумента", ПолноеИмяДокумента);
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ТекущаяОчередь", ОчередьСсылкой(Очередь));
УстановитьПоляПоСтраницам(Запрос, ПараметрыПостроения);
УстановитьПорядокПоСтраницам(Запрос, ПараметрыПостроения);
Возврат ВыбратьДанныеДляОбработки(Запрос, ПараметрыПостроения);
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
СоздатьВременнуюТаблицуРегистраторовРегистраДляОбработки (БСП)
ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки (БСП)
ОтметитьРегистраторыКОбработке (БСП)
СпособВыборкиРегистраторыРегистра (БСП)
Остатки по регистру накопления при отборе по реквизиту регистратора
СоздатьВременнуюТаблицуЗначенийЗаблокированныхИзмерений (БСП)
ВыбратьСсылкиДляОбработки (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)