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