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