Выбрать измерения независимого регистра сведений для обработки. Возвращает значения измерений независимого регистра сведений для обработки.
// Возвращает значения измерений независимого регистра сведений для обработки.
// Данные берутся из зарегистрированных в очереди, учитываются заблокированные более приоритетными очередями данные.
//
// Параметры:
// Очередь - Число - очередь, к которой отнесен обработчик и в которой зарегистрированы данные, которые он будет
// обрабатывать.
// ПолноеИмяОбъекта - Строка - имя объекта, который нужно обработать. Например, РегистрСведений.ШтрихкодыНоменклатуры.
// ДополнительныеПараметры - Структура - см. ОбновлениеИнформационнойБазы.ДополнительныеПараметрыВыборкиДанныхДляОбработки.
//
// Возвращаемое значение:
// * ВыборкаИзРезультатаЗапроса - выборка значений измерений, которые нужно обработать, имена полей соответствует именам
// измерений регистра. Если по измерению не регистрировалась необходимость обработки,
// то в выборке по этому измерению будет пустое значение.
// * ТаблицаЗначений - данные, которые нужно обработать, имена колонок соответствуют именам измерений регистра.
//
Функция ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки(Очередь, ПолноеИмяОбъекта, ДополнительныеПараметры = Неопределено) Экспорт
Если ДополнительныеПараметры = Неопределено Тогда
ДополнительныеПараметры = ДополнительныеПараметрыВыборкиДанныхДляОбработки();
КонецЕсли;
ИмяОбъекта = СтрРазделить(ПолноеИмяОбъекта,".",Ложь)[1];
МетаданныеОбъекта = Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта);
ПараметрыПостроения = ПараметрыПостроенияВыборки(ДополнительныеПараметры, "ТаблицаИзменений");
ЗаданыПоляУпорядочивания = ЗаданыПоляУпорядочивания(ДополнительныеПараметры);
НеобходимоУпорядочивание = ЗаданыПоляУпорядочивания Или ПараметрыПостроения.ПостраничнаяВыборка;
Запрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 10000
| &ВыбираемыеПоля
|ИЗ
| #ТаблицаОбъектаИзменения КАК ТаблицаИзменений
| ЛЕВОЕ СОЕДИНЕНИЕ #ВТЗаблокированоИзмерения КАК ВТЗаблокированоИзмерения
| ПО &ТекстУсловияСоединенияИзмерений
| #ТекстЗапросаСоединениеСДопИсточниками
|ГДЕ
| ТаблицаИзменений.Узел = &ТекущаяОчередь
| И &ТекстУсловияПоОтборуНезаблокированных
| И &УсловиеПоДопИсточникамСсылкам
| И &УсловиеПоСтраницам";
Если НеобходимоУпорядочивание Тогда
УстановитьПоляУпорядочиванияНезависимогоРегистраСведений(ПараметрыПостроения);
ТекстЗапроса = ТекстЗапроса + "
|УПОРЯДОЧИТЬ ПО
| &ПорядокВыборки
|";
КонецЕсли;
ТекстУсловияСоединенияИзмерений = "ИСТИНА";
ТекстУсловияПоОтборуНезаблокированных = "ИСТИНА";
ПервоеИзмерение = Истина;
Для Каждого Измерение Из МетаданныеОбъекта.Измерения Цикл
Если Не Измерение.ОсновнойОтбор Тогда
Продолжить;
КонецЕсли;
УстановитьИзмерение(ПараметрыПостроения, Измерение.Имя);
ТекстУсловияСоединенияИзмерений = ТекстУсловияСоединенияИзмерений + "
| И (ТаблицаИзменений." + Измерение.Имя + " = ВТЗаблокированоИзмерения." + Измерение.Имя + "
| ИЛИ ТаблицаИзменений." + Измерение.Имя + " = &ПустоеЗначениеИзмерения"+ Измерение.Имя + "
| ИЛИ ВТЗаблокированоИзмерения." + Измерение.Имя + " = &ПустоеЗначениеИзмерения"+ Измерение.Имя + ")";
Запрос.УстановитьПараметр("ПустоеЗначениеИзмерения"+ Измерение.Имя, Измерение.Тип.ПривестиЗначение());
Если ПервоеИзмерение Тогда
ТекстУсловияПоОтборуНезаблокированных = "ВТЗаблокированоИзмерения." + Измерение.Имя + " ЕСТЬ 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К участников)