НачатьОбновлениеПорцииНаборовЗначенийДоступа (БСП)

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

Начать обновление порции наборов значений доступа. Подготовить первую порцию объектов для отложенной обработки прав доступа.

// Подготовить первую порцию объектов для отложенной обработки прав доступа.
// Для вызова из отложенных обработчиков обновления при изменении логики формирования наборов значений доступа.
//
// Параметры:
//   Параметры     - Структура - структура параметров отложенного обработчика обновления.
//   БизнесПроцесс - ОбъектМетаданных.БизнесПроцесс - метаданные бизнес-процесса, наборы значений доступа
//                   которого требуется обновить.
//   ИмяПроцедуры  - Строка - имя процедуры отложенного обработчика обновления для журнала регистрации.
//   РазмерПорции  - Число  - количество объектов, обрабатываемых за один вызов.
//
Процедура НачатьОбновлениеПорцииНаборовЗначенийДоступа(Параметры, БизнесПроцесс, ИмяПроцедуры, РазмерПорции = 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
///////////////////////////////////////////////////////////////////////////////////////////////////////

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

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

ЗавершитьОбновлениеПорцииНаборовЗначенийДоступа (БСП)

ОбновитьНаборыЗначенийДоступа (БСП)

ЗаполнитьНаборыЗначенийДоступа (БСП)

ЗначениеДоступаНачалоВыбора (БСП)

ДобавитьНаборыЗначенийДоступа (БСП)

ПриИзмененииНаборовЗначенийДоступа (БСП)

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