ВыбратьИзмеренияНезависимогоРегистраСведенийДляОбработки (БСП)

Автор: 1С
ОбщийМодуль.ОбновлениеИнформационнойБазы
БСП

Выбрать измерения независимого регистра сведений для обработки. Возвращает значения измерений независимого регистра сведений для обработки.

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

СоздатьВременнуюТаблицуИзмеренийНезависимогоРегистраСведенийДляОбработки (БСП)

СпособВыборкиИзмеренияНезависимогоРегистраСведений (БСП)

Запись в регистр сведений (периодический, независимый)

Групповое изменение Измерения в НабореЗаписей регистра сведений

Очистка регистра сведений

Ключ менеджера записи регистра сведений

ИменаИзмеренийРегистраПоТипу (БСП)

ВыбратьРегистраторыРегистраДляОбработки (БСП)

Создать запись в регистре сведений

1С Менеджер конфигураций