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