Ресурсные спецификации / Форма выбора элемента производственного процесса / Модуль формы

файл

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

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


&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ЭлементыДерева = Дерево.ПолучитьЭлементы();
	
	Если ЭлементыДерева.Количество() = 1 Тогда
		Элементы.Дерево.Развернуть(ЭлементыДерева[0].ПолучитьИдентификатор());
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыДерево

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

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

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

&НаКлиенте
Процедура ПоказатьВсе(Команда)
	
	Элементы.ФормаПоказатьВсе.Пометка = Не Элементы.ФормаПоказатьВсе.Пометка;
	
	ЗаполнитьДеревоЭлементов(Ложь);
	
КонецПроцедуры

&НаКлиенте
Процедура ДеревоСвернуть(Команда)
	
	ДеревоСвертка(Дерево, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ДеревоРазвернуть(Команда)
	
	ДеревоСвертка(Дерево, Ложь);
	
КонецПроцедуры


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

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

&НаСервере
Процедура НастроитьЭлементыФормы()
	
	Если Режим = "ЭтапВыпуска" Тогда
		
		Если Параметры.Свойство("Номенклатура")
				И Параметры.Свойство("Характеристика")
				И ЗначениеЗаполнено(Параметры.Номенклатура) Тогда
			Заголовок = СтрШаблон(НСтр("ru = 'Этапы производства изделия %1'"),
				НоменклатураКлиентСервер.ПредставлениеНоменклатуры(Параметры.Номенклатура, Параметры.Характеристика));
		КонецЕсли;
		
		Элементы.ФормаПоказатьВсе.Видимость = Дерево.ПолучитьЭлементы().Количество() > 0;
		
		Элементы.ДеревоУпаковка.Видимость = Истина;
		Элементы.ДеревоКоличество.Видимость = Истина;
	
	КонецЕсли;
	
	Если ПараметрыДерева.ВидыЭлементов.Найти("Операция") = Неопределено Тогда
		Элементы.ДеревоРабочийЦентр.Видимость = Ложь;
		Элементы.ДеревоГруппаПодразделениеРабочийЦентр.Заголовок = Элементы.ДеревоПодразделение.Заголовок;
		Элементы.ДеревоНаименование.Заголовок = НСтр("ru = 'Этап'");
	Иначе
		Элементы.ДеревоНаименование.Заголовок = НСтр("ru = 'Этап / Операция'");
	КонецЕсли;
	
	Если ПараметрыДерева.ВидыЭлементов.Количество() < 2 Тогда
		Элементы.ДеревоГруппаСвернутьРазвернуть.Видимость = Ложь;
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	УсловноеОформление.Элементы.Очистить();
	
	//
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Дерево.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дерево.КоличествоДостаточно");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Ложь;

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Режим");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = "ЭтапВыпуска";
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветТекстаОтмененнойСтрокиДокумента);
	
	//
	Элемент = УсловноеОформление.Элементы.Добавить();
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоКоличество.Имя);
	
	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дерево.РасчетПоФормуле");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ОтборЭлемента.ПравоеЗначение = Истина;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<по формуле>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийТекст);
	
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ДеревоСвертка(КоллекцияСтрок, Свернуть = Истина)
	
	Для каждого СтрокаДерева Из КоллекцияСтрок.ПолучитьЭлементы() Цикл
		Если Свернуть Тогда
			ДеревоСвертка(СтрокаДерева, Свернуть);
			Элементы.Дерево.Свернуть(СтрокаДерева.ПолучитьИдентификатор());
		Иначе
			Элементы.Дерево.Развернуть(СтрокаДерева.ПолучитьИдентификатор(), Истина);
		КонецЕсли;
	КонецЦикла;

КонецПроцедуры

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

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