Правила оплаты клиентом / Модуль

файл
#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;
	
	ИспользоватьГрафикиОплаты               = ПолучитьФункциональнуюОпцию("ИспользоватьГрафикиОплаты");
	ИспользоватьДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров =
		ПолучитьФункциональнуюОпцию("ИспользоватьДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров");
	ИспользоватьУпрощеннуюСхемуОплатыВПродажах = ПолучитьФункциональнуюОпцию("ИспользоватьУпрощеннуюСхемуОплатыВПродажах");
	
	ВалютаРеглУчета = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Параметры.Организация);
	
	Параметры.ЗакрыватьПриВыборе            = Истина;
	Параметры.ЗакрыватьПриЗакрытииВладельца = Ложь;
	ЗаполнитьЗначенияСвойств(ЭтаФорма, Параметры);
	
	Если ЭтоЗаказ И ДатаЗаказа = Дата(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;
		
		Если УпрощенныйРежим Тогда
			ПроцентПлатежаПриИзменении(СуммаПлатежаПредоплата, ПроцентПлатежаПредоплата,
									СуммаПлатежаКредит, ПроцентПлатежаКредит, СуммаОплатыПоДокументу);
			ПроцентПлатежаПриИзменении(СуммаЗалогаЗаТаруПредоплата, ПроцентЗалогаЗаТаруПредоплата, 
								СуммаЗалогаЗаТаруКредит, ПроцентЗалогаЗаТаруКредит, СуммаЗалогаПоДокументу);
			ПроцентПлатежаПриИзменении(СуммаПлатежаКредит, ПроцентПлатежаКредит, 
								СуммаПлатежаПредоплата, ПроцентПлатежаПредоплата, СуммаОплатыПоДокументу);
			ПроцентПлатежаПриИзменении(СуммаЗалогаЗаТаруКредит, ПроцентЗалогаЗаТаруКредит,
								СуммаЗалогаЗаТаруПредоплата, ПроцентЗалогаЗаТаруПредоплата, СуммаЗалогаПоДокументу);
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьДатыОтгрузки()
	
	Для Каждого Стр Из ЭтапыГрафикаОплаты Цикл
		Если НесколькоДатОтгрузки Тогда
			
			СтруктураПараметров = ЭтапыОплатыКлиентСервер.ПараметрыРасчетаДатыПлатежа();
			СтруктураПараметров.ВариантОтсчета                 = Стр.ВариантОтсчета;
			СтруктураПараметров.Сдвиг                          = -Стр.Сдвиг;
			СтруктураПараметров.ДатаЗаказа                     = ДатаЗаказа;
			СтруктураПараметров.ДатаОтгрузки                   = Стр.ДатаПлатежа;
			СтруктураПараметров.ДатаПереходаПраваСобственности = ДатаПереходаПраваСобственности;
			СтруктураПараметров.ДатаСогласования               = ДатаСогласования;
			СтруктураПараметров.СрокПереходаПраваСобственности = СрокПереходаПраваСобственности;
			СтруктураПараметров.Календарь                      = Стр.Календарь;
			
			Если ЗначениеЗаполнено(Стр.Календарь) Тогда
				Стр.ДатаОтгрузки = ЭтапыОплатыВызовСервера.ДатаПлатежаПоКалендарю(СтруктураПараметров);
			Иначе
				Стр.ДатаОтгрузки = ЭтапыОплатыКлиентСервер.ДатаПлатежаБезКалендаря(СтруктураПараметров);
			КонецЕсли;
			
		Иначе
			Стр.ДатаОтгрузки = ДатаОтгрузки;
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Функция ПараметрыРедактирования()
	
	СтруктураОткрытия = Новый Структура;
	СтруктураОткрытия.Вставить("Валюта",                         Валюта);
	СтруктураОткрытия.Вставить("ЭтоРасчетыСКлиентами",           Истина);
	СтруктураОткрытия.Вставить("Календарь",                      Календарь);
	СтруктураОткрытия.Вставить("ДатаЗаказа",                     ДатаЗаказа);
	СтруктураОткрытия.Вставить("ДатаСогласования",               ДатаСогласования);
	СтруктураОткрытия.Вставить("СрокПереходаПраваСобственности", СрокПереходаПраваСобственности);
	СтруктураОткрытия.Вставить("ДатаПереходаПраваСобственности", ДатаПереходаПраваСобственности);
	СтруктураОткрытия.Вставить("СуммаОплатыПоДокументу",         СуммаОплатыПоДокументу);
	СтруктураОткрытия.Вставить("СуммаЗалогаПоДокументу",         СуммаЗалогаПоДокументу);
	СтруктураОткрытия.Вставить("ЭтоДоговор",                     Ложь);
	СтруктураОткрытия.Вставить("ДатыОтгрузок",                   ТабличнаяЧасть);
	СтруктураОткрытия.Вставить("ЭтапыГрафикаОплаты",             ЭтапыГрафикаОплаты);
	СтруктураОткрытия.Вставить("ЕстьТара",                       ТребуетсяЗалогЗаТару);
	
	Возврат СтруктураОткрытия;
	
КонецФункции

&НаСервере
Процедура СвернутьЭтапыОплаты()
	
	ТЗ = ЭтапыГрафикаОплаты.Выгрузить();
	ТЗ.Свернуть("ВариантОплаты, ДатаПлатежа, ВариантОтсчета, Сдвиг","СуммаПлатежа,ПроцентПлатежа,СуммаЗалогаЗаТару,ПроцентЗалогаЗаТару");
	ЭтапыГрафикаОплаты.Загрузить(ТЗ);
	ЗаполнитьДатыОтгрузки();
	
КонецПроцедуры


#КонецОбласти

#КонецОбласти

Связанные материалы