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