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