Экземпляр бюджета / Ввод строки с аналитикой / Модуль формы

файл


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

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

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

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ДобавитьСтроку(Команда)
	
	СоответствиеАналитик = Новый Соответствие;
	Для Сч = 1 По 6 Цикл
		ВидАналитики = ЭтотОбъект["ВидАналитики" + Сч];
		Если ЗначениеЗаполнено(ВидАналитики) Тогда
			СоответствиеАналитик.Вставить(ВидАналитики, ЭтотОбъект["Аналитика" + Сч]);
		КонецЕсли;
	КонецЦикла;
	
	Закрыть(СоответствиеАналитик);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура АналитикаПриИзменении(Элемент)
	
	Для Сч = 1 По КоличествоВидовАналитик Цикл
		Если Элементы["Аналитика"+Сч] = Элемент Тогда
			НомерТекущейАналитики = Сч;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Для Сч = НомерТекущейАналитики По КоличествоВидовАналитик Цикл
		ДобавитьПараметрыСвязиПоВладельцу(Сч, Элементы["Аналитика" + Сч].ОграничениеТипа,
			ПараметрыВидовАналитик.РеквизитыАналитик, ПараметрыВидовАналитик.ЗначенияАналитик,
			ПараметрыВидовАналитик.ПодчиненныеЗначенияАналитик);
	КонецЦикла;
	
КонецПроцедуры

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

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

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