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