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