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