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

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

Создать временную таблицу измерений независимого регистра сведений для обработки. Создает временную таблицу значения измерений независимого регистра сведений для обработки.

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

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

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

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

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

СоздатьВременнуюТаблицуЗначенийЗаблокированныхИзмерений (БСП)

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

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

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

Создать временную таблицу по имени регистра СрезПоследних

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

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

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

TurboConf ИР адаптер 2.63