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