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