Сбалансированность планов / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

// Настройки общей формы отчета подсистемы "Варианты отчетов".
//
// Параметры:
//   Форма - ФормаКлиентскогоПриложения - Форма отчета.
//   КлючВарианта - Строка - Имя предопределенного варианта отчета или уникальный идентификатор пользовательского.
//   Настройки - См. ОтчетыКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию
//
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
	
	Настройки.События.ПриСозданииНаСервере = Истина;
	Настройки.События.ПередЗагрузкойВариантаНаСервере = Истина;
	Настройки.События.ПриЗагрузкеПользовательскихНастроекНаСервере = Истина;
	
КонецПроцедуры

// Вызывается в обработчике одноименного события формы отчета после выполнения кода формы.
//
// Параметры:
//   ЭтаФорма - ФормаКлиентскогоПриложения - Форма отчета.
//   Отказ - Булево - Передается из параметров обработчика "как есть".
//   СтандартнаяОбработка - Булево - Передается из параметров обработчика "как есть".
//
// См. также:
//   "ФормаКлиентскогоПриложения.ПриСозданииНаСервере" в синтакс-помощнике.
//
Процедура ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт
	
	Параметры = ЭтаФорма.Параметры;
	
	// Дополнительные команды
	НастройкиОтчета = ЭтаФорма.НастройкиОтчета;
	
	Если НастройкиОтчета.Свойство("Контекстный")
	   И НастройкиОтчета.Контекстный Тогда
		
		ПараметрСценарииСравнения = СхемаКомпоновкиДанных.Параметры.Найти("СценарииСравнения");
		ПараметрОтобразитьТолькоОтклоненияСценариев = СхемаКомпоновкиДанных.Параметры.Найти("ОтобразитьТолькоОтклоненияСценариев");
		
		ПараметрСценарииСравнения.ВключатьВДоступныеПоля = Ложь;
		ПараметрСценарииСравнения.ОграничениеИспользования = Истина;
		ПараметрОтобразитьТолькоОтклоненияСценариев.ВключатьВДоступныеПоля = Ложь;
		ПараметрОтобразитьТолькоОтклоненияСценариев.ОграничениеИспользования = Истина;
		
		ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, ЭтаФорма, СхемаКомпоновкиДанных, "");
		
	КонецЕсли;
	
	Если Параметры.Свойство("Расшифровка")
	   И Параметры.Расшифровка <> Неопределено Тогда
		
		// исправление ключа варианта отчета при расшифровке
		Если ЭтоАдресВременногоХранилища(Параметры.Расшифровка.Данные) Тогда
			
			ДанныеРасшифровки = ПолучитьИзВременногоХранилища(Параметры.Расшифровка.Данные);
			
			Если Параметры.Свойство("КлючВарианта") И Параметры.КлючВарианта = Неопределено Тогда
				Параметры.КлючВарианта = ДанныеРасшифровки.Настройки.ДополнительныеСвойства.КлючВарианта;
			КонецЕсли;
			
			ЭтаФорма.КлючТекущегоВарианта = ДанныеРасшифровки.Настройки.ДополнительныеСвойства.КлючВарианта;
			
		КонецЕсли;
		
		НастройкиОтчета.ВариантСсылка = ВариантыОтчетов.ВариантОтчета(НастройкиОтчета.ОтчетСсылка, ЭтаФорма.КлючТекущегоВарианта);
		
	КонецЕсли;
	
КонецПроцедуры

// Вызывается в одноименном обработчике формы отчета после выполнения кода формы.
// Подробнее - см. ОтчетыПереопределяемый.ПередЗагрузкойВариантаНаСервере.
//
// Параметры:
//   ЭтаФорма - ФормаКлиентскогоПриложения - Форма отчета.
//   НовыеНастройкиКД - НастройкиКомпоновкиДанных - Настройки для загрузки в компоновщик настроек.
//
Процедура ПередЗагрузкойВариантаНаСервере(ЭтаФорма, НовыеНастройкиКД) Экспорт
	
	ЗаполненоДопСвойства = ЗначениеЗаполнено(НовыеНастройкиКД.ДополнительныеСвойства);
	ЗаполненоКлючВарианта = НовыеНастройкиКД.ДополнительныеСвойства.Свойство("КлючВарианта")
							И ЗначениеЗаполнено(НовыеНастройкиКД.ДополнительныеСвойства.КлючВарианта);
	
	КлючТекущегоВарианта = ?(ЗаполненоДопСвойства И ЗаполненоКлючВарианта,
												НовыеНастройкиКД.ДополнительныеСвойства.КлючВарианта,
												ЭтаФорма.КлючТекущегоВарианта);
	
	Планирование.СбалансированностьПлановПередЗагрузкойВариантаНаСервере(ЭтаФорма, НовыеНастройкиКД);

	ПараметрТолькоПревышениеОтклонения = СхемаКомпоновкиДанных.Параметры.Найти("ТолькоПревышениеОтклонения");
	ПараметрТолькоМеньшеОтклонения = СхемаКомпоновкиДанных.Параметры.Найти("ТолькоМеньшеОтклонения");
	
	ПараметрСценарииСравнения = СхемаКомпоновкиДанных.Параметры.Найти("СценарииСравнения");
	ПараметрОтобразитьТолькоОтклоненияСценариев = СхемаКомпоновкиДанных.Параметры.Найти("ОтобразитьТолькоОтклоненияСценариев");
	
	Если КлючТекущегоВарианта <> "СбалансированностьПлановЗаПериод" Тогда
		
		ПараметрТолькоПревышениеОтклонения.ВключатьВДоступныеПоля = Ложь;
		ПараметрТолькоПревышениеОтклонения.ОграничениеИспользования = Истина;
		ПараметрТолькоМеньшеОтклонения.ВключатьВДоступныеПоля = Ложь;
		ПараметрТолькоМеньшеОтклонения.ОграничениеИспользования = Истина;
		
	Иначе
		
		ПараметрТолькоПревышениеОтклонения.ВключатьВДоступныеПоля = Истина;
		ПараметрТолькоПревышениеОтклонения.ОграничениеИспользования = Ложь;
		ПараметрТолькоМеньшеОтклонения.ВключатьВДоступныеПоля = Истина;
		ПараметрТолькоМеньшеОтклонения.ОграничениеИспользования = Ложь;
		
	КонецЕсли;
	
	Если КлючТекущегоВарианта <> "СравнениеСценариевЗаПериод"
	   И КлючТекущегоВарианта <> "СравнениеСценариевПоПериодам" Тогда
		
		ПараметрСценарииСравнения.ВключатьВДоступныеПоля = Ложь;
		ПараметрСценарииСравнения.ОграничениеИспользования = Истина;
		ПараметрОтобразитьТолькоОтклоненияСценариев.ВключатьВДоступныеПоля = Ложь;
		ПараметрОтобразитьТолькоОтклоненияСценариев.ОграничениеИспользования = Истина;
		
	Иначе
		
		ПараметрСценарииСравнения.ВключатьВДоступныеПоля = Истина;
		ПараметрСценарииСравнения.ОграничениеИспользования = Ложь;
		ПараметрОтобразитьТолькоОтклоненияСценариев.ВключатьВДоступныеПоля = Истина;
		ПараметрОтобразитьТолькоОтклоненияСценариев.ОграничениеИспользования = Ложь;
		
	КонецЕсли;
	
	ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, ЭтаФорма, СхемаКомпоновкиДанных, "");
	
КонецПроцедуры

// Вызывается в обработчике одноименного события формы отчета после выполнения кода формы.
//
// Параметры:
//   Форма - ФормаКлиентскогоПриложения - форма отчета.
//   НовыеПользовательскиеНастройкиКД - ПользовательскиеНастройкиКомпоновкиДанных -
//       Пользовательские настройки для загрузки в компоновщик настроек.
//
// См. синтакс-помощник "Расширение управляемой формы для отчета.ПриЗагрузкеПользовательскихНастроекНаСервере"
//    в синтакс-помощнике.
//
Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Форма, НовыеПользовательскиеНастройкиКД) Экспорт
	
	КомпоновщикНастроекФормы = Форма.Отчет.КомпоновщикНастроек;
	Параметры = Форма.Параметры;
	
	Если Параметры.Свойство("ПараметрКоманды") Тогда
		Планирование.СбалансированностьПлановПередЗагрузкойПользовательскихНастроекНаСервере(Форма, НовыеПользовательскиеНастройкиКД);
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытий

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	
	Планирование.СбалансированностьПлановОбработкаПроверкиЗаполнения(КомпоновщикНастроек, Отказ);
	
КонецПроцедуры

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	Сценарий = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(КомпоновщикНастроек.ПользовательскиеНастройки, "Сценарий");
	
	Если НЕ ЗначениеЗаполнено(Сценарий.Значение) Тогда
		ВызватьИсключение НСтр("ru= 'Не заполнено значение параметра ""Сценарий"".'");
	КонецЕсли;
	
	Планирование.СбалансированностьПлановПриКомпоновкеРезультата(СхемаКомпоновкиДанных, КомпоновщикНастроек, 
		ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка);
	
	ПроверитьОчередьЗаданийВывестиПредупреждение(Сценарий.Значение);

	СценарииСравнения = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(
		КомпоновщикНастроек.ПользовательскиеНастройки, "СценарииСравнения");
	
	Если СценарииСравнения <> Неопределено Тогда
		Если СценарииСравнения.Значение <> Неопределено Тогда
			ПроверитьОчередьЗаданийВывестиПредупреждение(СценарииСравнения.Значение);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура ПроверитьОчередьЗаданийВывестиПредупреждение(Сценарий)
	
	МассивСценариев = Новый Массив;
	
	Если ТипЗнч(Сценарий) <> Тип("СписокЗначений") Тогда
		МассивСценариев.Добавить(Сценарий);
	Иначе
		Для Каждого ДополнительныйСценарий Из Сценарий Цикл
			МассивСценариев.Добавить(ДополнительныйСценарий.Значение);
		КонецЦикла;
	КонецЕсли;
	
	Для Каждого ПроверяемыйСценарий Из МассивСценариев Цикл
		
		Запрос = Новый Запрос(
		"ВЫБРАТЬ ПЕРВЫЕ 1
		|	ИСТИНА
		|ИЗ
		|	РегистрСведений.ОчередьРасчетаПланаПроизводства КАК ОчередьРасчетаПланаПроизводства
		|ГДЕ
		|	ОчередьРасчетаПланаПроизводства.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРасчетаПланаПроизводства.ТребуетсяРасчет)
		|	И ОчередьРасчетаПланаПроизводства.Сценарий = &Сценарий
		|");
		
		Запрос.УстановитьПараметр("Сценарий", ПроверяемыйСценарий);
		
		УстановитьПривилегированныйРежим(Истина);
		РезультатЗапроса = Запрос.Выполнить();
		УстановитьПривилегированныйРежим(Ложь);
		
		Если Не РезультатЗапроса.Пустой() Тогда
			
			РегистрыСведений.ОчередьРасчетаПланаПроизводства.ЗапуститьЗадание();
			
			Для каждого Элемент Из КомпоновщикНастроек.Настройки.Структура Цикл
				Если Элемент.Имя = "ОчередьРасчета" Тогда
					Элемент.Использование = Истина;
				КонецЕсли;
			КонецЦикла;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

#КонецОбласти

#КонецЕсли

Связанные материалы