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

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

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

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

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

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

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

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

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

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

Создать временную таблицу из таблицы значений

СоздатьВТРасписанияРаботыНаПериод (БСП)

Создает временную таблицу по набору записей

СтруктураПоМенеджеруЗаписи (БСП)

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

TurboConf - расширение Конфигуратора 1С