Правила оплаты поставщику / Модуль

файл
#Область ОписаниеПеременных

&НаКлиенте
Перем ВыполняетсяЗакрытие;

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;
	
	ИспользоватьУпрощеннуюСхемуОплатыВЗакупках = ПолучитьФункциональнуюОпцию("ИспользоватьУпрощеннуюСхемуОплатыВЗакупках");
	ВалютаРеглУчета = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Параметры.Организация);
	ИдентификаторВызывающейФормы = Параметры.УникальныйИдентификатор;
	
	Если Не ИспользоватьОтрицательныеСуммыПлатежа Тогда
		ОграничитьТипЭлементовСуммыПлатежа();
	КонецЕсли;
	
	Параметры.ЗакрыватьПриВыборе            = Истина;
	Параметры.ЗакрыватьПриЗакрытииВладельца = Ложь;
	ЗаполнитьЗначенияСвойств(ЭтаФорма, Параметры);
	
	Если ЭтоЗаказ И ДатаЗаказа = Дата(1,1,1) Тогда
		ДатаЗаказа = ТекущаяДатаСеанса();
	ИначеЕсли ЗначениеЗаполнено(ГрафикИсполненияДоговора) И Не ЭтоЗаказ Тогда
		ДатаЗаказа = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Договор,"Дата");
	КонецЕсли;
	
	Если ЗначениеЗаполнено(Параметры.АдресВоВременномХранилище) Тогда
		ЭтапыГрафикаОплаты.Загрузить(ПолучитьИзВременногоХранилища(Параметры.АдресВоВременномХранилище));
		УдалитьИзВременногоХранилища(Параметры.АдресВоВременномХранилище);
	КонецЕсли;
	
	Если ЗначениеЗаполнено(Параметры.АдресСуммПоЗаказам) Тогда
		ТаблицаДокумента = ПолучитьИзВременногоХранилища(Параметры.АдресСуммПоЗаказам);
		ТабличнаяЧасть.Загрузить(ТаблицаДокумента);
		УдалитьИзВременногоХранилища(Параметры.АдресСуммПоЗаказам);
	КонецЕсли;
	
	МассивДат = Новый Массив;
	Для Каждого Стр Из ТабличнаяЧасть Цикл
		Если ЗначениеЗаполнено(Стр.ДатаОтгрузки) Тогда
			МассивДат.Добавить(Стр.ДатаОтгрузки);
		КонецЕсли;
	КонецЦикла;
	МассивДат = ОбщегоНазначенияКлиентСервер.СвернутьМассив(МассивДат);
	Если МассивДат.Количество() > 1 Тогда
		НесколькоДатОтгрузки = Истина;
	Иначе
		НесколькоДатОтгрузки = Ложь;
	КонецЕсли;
	Если МассивДат.Количество() = 1 Тогда
		ДатаОтгрузки = МассивДат[0];
	КонецЕсли;
	
	ЗаполнитьДатыОтгрузки();
	
	Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСПоставщиками") Тогда
		Соглашение = Неопределено;
	Иначе
		ГрафикСоглашенияЗаполнен = ЭтапыОплатыВызовСервера.ГрафикСоглашенияЗаполнен(Соглашение);
	КонецЕсли;
	
	Если ЗначениеЗаполнено(Соглашение) Тогда
		РеквизитыСоглашения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Соглашение, "СрокПереходаПраваСобственности,Календарь");
		СрокПереходаПраваСобственности = РеквизитыСоглашения.СрокПереходаПраваСобственности;
		Календарь = РеквизитыСоглашения.Календарь;
	КонецЕсли;
	
	ОбновитьСлужебныеРеквизиты();
	
	Если НЕ ЗначениеЗаполнено(АдресВоВременномХранилище)Тогда
		ВариантОтсчетаПостоплата = Перечисления.ВариантыОтсчетаДатыПлатежа.ОтДатыОтгрузки;
		ВариантКонтроляПостоплата = Перечисления.ВариантыКонтроляОплатыПоставщику.КредитПослеПоступления;
		Если ЗначениеЗаполнено(ДатаПлатежа) И ЗначениеЗаполнено(ДатаОтгрузки) Тогда
			СдвигПостоплата = (ДатаПлатежа-ДатаОтгрузки)/86400;
		КонецЕсли;
	КонецЕсли;
	
	Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
		Элементы.ГруппаИтого.ЦветФона = Новый Цвет();
	КонецЕсли;
	
	ЛокализацияРФ = ПолучитьФункциональнуюОпцию("ЛокализацияРФ");
	НастроитьЭлементыФормыПоПараметрам();
	УстановитьТекстКнопкиЗаполнения(ЭтаФорма);
	
	Если Параметры.ПараметрыВыбораРеквизитов <> Неопределено Тогда
		Для Каждого ЭлНастройки Из Параметры.ПараметрыВыбораРеквизитов Цикл
			ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, ЭлНастройки.Ключ, "ПараметрыВыбора", ЭлНастройки.Значение);
		КонецЦикла;
	КонецЕсли;
	
	ЗаполнитьСписокВыбораФормыОплаты();
	УстановитьДоступностьЭлементовПоФормеОплаты();
	
	РассчитатьИтоговыеПоказатели(ЭтаФорма);
	
	КлючСохраненияПоложенияОкна = Строка(Новый УникальныйИдентификатор);
	
	УстановитьСвойстваЭлементаПорядокРасчетов();
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ВыполняетсяЗакрытие = Ложь;
КонецПроцедуры

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

&НаКлиенте
Процедура ПередЗакрытиемЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
    
    ОтветНаВопрос = РезультатВопроса;
    
    Если ОтветНаВопрос = "Закрыть" Тогда
        ВыполняетсяЗакрытие = Истина;
		Закрыть();
    КонецЕсли;

КонецПроцедуры

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ЗаполнитьПоУмолчанию()
	
	ОчиститьСообщения();
	
	ЗаполнитьЭтапыГрафикаОплаты();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ЭтапыГрафикаОплатыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	
	Оповещение = Новый ОписаниеОповещения("ЭтапыГрафикаОплатыПередНачаломДобавленияЗавершение", ЭтотОбъект);
	
	ПараметрыРедактирования = ПараметрыРедактирования();
	
	ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыПередНачаломДобавления(ЭтаФорма,
		ПараметрыРедактирования,
		Отказ,
		Копирование,
		Оповещение);
	
КонецПроцедуры

&НаКлиенте
Процедура ЭтапыГрафикаОплатыПередНачаломДобавленияЗавершение(Результат, Параметры) Экспорт
	
	Если Результат <> Неопределено Тогда
		СвернутьЭтапыОплаты();
		СортироватьЭтапыОплаты();
		РассчитатьИтоговыеПоказатели(ЭтаФорма);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ЭтапыГрафикаОплатыПередУдалением(Элемент, Отказ)
	
	ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыПередУдалением(ЭтаФорма, Отказ, ЭтапыГрафикаОплаты);
	
КонецПроцедуры

&НаКлиенте
Процедура ЭтапыГрафикаОплатыПередНачаломИзменения(Элемент, Отказ)
	
	Оповещение = Новый ОписаниеОповещения("ЭтапыГрафикаОплатыПередНачаломИзмененияЗавершение", ЭтотОбъект);
	
	ПараметрыРедактирования = ПараметрыРедактирования();
	
	ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыПередНачаломИзменения(ЭтаФорма,
		ПараметрыРедактирования,
		Отказ,
		Оповещение);
	
КонецПроцедуры

&НаКлиенте
Процедура ЭтапыГрафикаОплатыПередНачаломИзмененияЗавершение(Результат, Параметры) Экспорт
	
	Если Результат <> Неопределено Тогда
		СвернутьЭтапыОплаты();
		СортироватьЭтапыОплаты();
		РассчитатьИтоговыеПоказатели(ЭтаФорма);
	КонецЕсли;
	
КонецПроцедуры

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

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДатаКредит.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДатаКредит");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
	ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ДатаПредоплата");

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", 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 = 'от даты договора'"));
	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ЭтапыГрафикаОплатыВариантОплаты.Имя);

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

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

#Область ЗаполнениеЭтаповГрафикаОплат

&НаКлиенте
Процедура ЗаполнитьЭтапыГрафикаОплаты()

	ВариантыОтветов = Новый СписокЗначений;
	ВариантыОтветов.Добавить(КодВозвратаДиалога.Да, НСтр("ru='Перезаполнить этапы оплаты'"));
	ВариантыОтветов.Добавить(КодВозвратаДиалога.Отмена, НСтр("ru='Отменить'"));
	
	ТекстВопроса = "";
	
	ПараметрыЗаполнения = Новый Структура;
	ПараметрыЗаполнения.Вставить("ПерезаполнитьЭтапы", Ложь);
	
	Если УпрощенныйРежим Тогда
		СуммаОплатыПоЭтапам    = СуммаПлатежаПредоплата + СуммаПлатежаКредит;
		СуммаЗалогаПоЭтапам    = СуммаЗалогаЗаТаруПредоплата + СуммаЗалогаЗаТаруКредит;
		ЭтапыОплатыНеЗаполнены = СуммаПлатежаПредоплата = 0 И СуммаПлатежаКредит = 0 И СуммаЗалогаПоЭтапам = 0;
	Иначе
		СуммаОплатыПоЭтапам    = ЭтапыГрафикаОплаты.Итог("СуммаПлатежа");
		СуммаЗалогаПоЭтапам    = ЭтапыГрафикаОплаты.Итог("СуммаЗалогаЗаТару");
		ЭтапыОплатыНеЗаполнены = ЭтапыГрафикаОплаты.Количество() = 0;
	КонецЕсли;
	
	Если СуммаОплатыПоДокументу = 0 И СуммаЗалогаПоДокументу = 0 Тогда
		
		Если ЭтапыОплатыНеЗаполнены Тогда
			
			ПоказатьПредупреждение(Неопределено, НСтр("ru='Сумма неотмененных строк заказа нулевая. Заполнение этапов оплаты не требуется.'"));
			Возврат;
			
		КонецЕсли;
		
		ЭтапыГрафикаОплаты.Очистить();
		ОчиститьДанныеУпрощенногоРежима(ЭтаФорма);
		ЭтапыОплатыКлиент.ОповеститьОНевозможностиЗаполненияЭтаповГрафикаОплаты();
		РассчитатьИтоговыеПоказатели(ЭтаФорма);
		Возврат;
		
	КонецЕсли;
	
	Если СуммаОплатыПоДокументу = СуммаОплатыПоЭтапам И СуммаЗалогаПоДокументу = СуммаЗалогаПоЭтапам Тогда
		
		ТекстВопроса = НСтр("ru='Сумма заказанных строк совпадает с суммой этапов оплаты'") + Символы.ПС +
							НСтр("ru='Перезаполнить этапы оплаты %ИсточникЗаполнения%?'");
		
	ИначеЕсли Не ЭтапыОплатыНеЗаполнены Тогда
		
		ВариантыОтветов.Вставить(1, КодВозвратаДиалога.Нет, НСтр("ru='Распределить сумму'"));
		
		ТекстВопроса = НСтр("ru='Этапы оплаты заполнены'")+ Символы.ПС +
							НСтр("ru='Перезаполнить этапы оплаты %ИсточникЗаполнения% или распределить сумму по имеющимся этапам?'");
		
	Иначе
		ПараметрыЗаполнения.ПерезаполнитьЭтапы = Истина;
	КонецЕсли;
	
	Если Не ПустаяСтрока(ТекстВопроса) Тогда
		
		ТекстВопроса = СтрЗаменить(ТекстВопроса, "%ИсточникЗаполнения%", ?(ГрафикСоглашенияЗаполнен,НСтр("ru='по соглашению'"),НСтр("ru='по умолчанию'")));
		
		Оповещение = Новый ОписаниеОповещения("ВыборИсточникаЗаполненияЗавершение", ЭтотОбъект, ПараметрыЗаполнения);
		ПоказатьВопрос(Оповещение, ТекстВопроса, ВариантыОтветов);
		Возврат;
		
	КонецЕсли;
	
	ЗаполнитьЭтапыГрафикаОплатыЗавершение(ПараметрыЗаполнения);
	
КонецПроцедуры

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

КонецПроцедуры

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

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

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

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

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

#Область ЗаполнениеГрафикаПоПредыдущимЗаказам

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

&НаСервере
Функция СформироватьПредставлениеШаблонаГрафика(МассивЭтаповГрафика)
	
	ПредставлениеГрафика = "";
	
	ФорматнаяСтрока = "НД = ЛОЖЬ";
	ПараметрыПредметаИсчисления=НСтр("ru='день,дня,дней,м,день,дня,дней,м,0'");
	
	ШаблонПредставленияЭтапа = НСтр("ru='%ПроцентПлатежа%% (%Отсрочка% %ВариантОтсчета%) %ВариантОплаты%'");
	
	ПервыйЭтап = Истина;
	
	Для Каждого ЭтапГрафика Из МассивЭтаповГрафика Цикл
		
		Если ЭтапГрафика.ВариантОплаты = Перечисления.ВариантыКонтроляОплатыПоставщику.ПредоплатаДоПоступления Тогда
			ТекстВариантаОплаты = НСтр("ru='до поступления'");
		ИначеЕсли ЭтапГрафика.ВариантОплаты = Перечисления.ВариантыКонтроляОплатыПоставщику.АвансДоПодтверждения Тогда
			ТекстВариантаОплаты = НСтр("ru='до подтверждения'");
		Иначе
			ТекстВариантаОплаты = ""
		КонецЕсли;
		
		ТекстОтсрочки = Формат(ЭтапГрафика.Сдвиг, "ЧН=0; ЧГ=0") + " " + СтрЗаменить(Прав(ЧислоПрописью(ЭтапГрафика.Сдвиг, ФорматнаяСтрока, ПараметрыПредметаИсчисления), 4)," ", "");
		
		ПредставлениеЭтапа = СтрЗаменить(ШаблонПредставленияЭтапа, "%ВариантОплаты%", ТекстВариантаОплаты);
		ПредставлениеЭтапа = СтрЗаменить(ПредставлениеЭтапа, "%Отсрочка%", ТекстОтсрочки);
		ПредставлениеЭтапа = СтрЗаменить(ПредставлениеЭтапа, "%ПроцентПлатежа%", ЭтапГрафика.ПроцентПлатежа);
		ПредставлениеЭтапа = СтрЗаменить(ПредставлениеЭтапа, "%ВариантОтсчета%", ЭтапГрафика.ВариантОтсчета);
		
		Если ПервыйЭтап Тогда
			ПервыйЭтап = Ложь;
			ПредставлениеГрафика = ПредставлениеГрафика + ПредставлениеЭтапа;
		Иначе
			ПредставлениеГрафика = ПредставлениеГрафика + ", " + ПредставлениеЭтапа;
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат ПредставлениеГрафика + ".";
	
КонецФункции

&НаСервере
Процедура ПоместитьГрафикВТаблицуШаблонов(ПредставлениеГрафика,
	                                      МассивЭтаповГрафика,
	                                      КодГрафика,
	                                      ДатаПоследнегоИспользования,
	                                      ДокументПоследнегоИспользования)
	
	СтрокаТаблицыГрафиков = ШаблоныГрафиков.Добавить();
	СтрокаТаблицыГрафиков.ПредставлениеГрафика            = ПредставлениеГрафика;
	СтрокаТаблицыГрафиков.КодГрафика                      = КодГрафика;
	СтрокаТаблицыГрафиков.ЧастотаИспользования            = 1;
	СтрокаТаблицыГрафиков.ДатаПоследнегоИспользования     = ДатаПоследнегоИспользования;
	СтрокаТаблицыГрафиков.ДокументПоследнегоИспользования = ДокументПоследнегоИспользования;
	
	Для Каждого ЭтапГрафика Из МассивЭтаповГрафика Цикл
		
		СтрокаЭтапа = ЭтапыШаблонов.Добавить();
		ЗаполнитьЗначенияСвойств(СтрокаЭтапа, ЭтапГрафика);
		СтрокаЭтапа.КодГрафика = КодГрафика;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура СформироватьТекстЗапросаПоГрафикамДокументов(ТекстЗапроса)
	
	ТекстЗапроса = 
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 50
	|	ЗаказПоставщикуЭтапыГрафикаОплаты.Ссылка КАК Ссылка,
	|	ЗаказПоставщикуЭтапыГрафикаОплаты.Ссылка.Соглашение КАК Соглашение,
	|	ЗаказПоставщикуЭтапыГрафикаОплаты.Ссылка.Дата КАК Дата,
	|	ЗаказПоставщикуЭтапыГрафикаОплаты.Ссылка.ЖелаемаяДатаПоступления КАК ЖелаемаяДатаПоступления,
	|	ЗаказПоставщикуЭтапыГрафикаОплаты.Ссылка.МоментВремени КАК МоментВремени
	|ПОМЕСТИТЬ ДокументыЗаказов
	|ИЗ
	|	Документ.ЗаказПоставщику.ЭтапыГрафикаОплаты КАК ЗаказПоставщикуЭтапыГрафикаОплаты
	|ГДЕ
	|	ЗаказПоставщикуЭтапыГрафикаОплаты.Ссылка.ПометкаУдаления = ЛОЖЬ
	|	И ЗаказПоставщикуЭтапыГрафикаОплаты.Ссылка.Проведен = ИСТИНА
	|	И ЗаказПоставщикуЭтапыГрафикаОплаты.Ссылка.Партнер = &Партнер
	|	И ЗаказПоставщикуЭтапыГрафикаОплаты.Ссылка.Ссылка <> &СсылкаНаТекущийЗаказ
	|	И ЗаказПоставщикуЭтапыГрафикаОплаты.Ссылка.ХозяйственнаяОперация В (
	|		ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ЗакупкаУПоставщика),
	|		ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ЗакупкаПоИмпорту)
	|	)
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Ссылка
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	ДокументыЗаказов.МоментВремени КАК МоментВремени,
	|	ЗаказПоставщикуЭтапыГрафикаОплаты.НомерСтроки КАК НомерСтроки,
	|	ДокументыЗаказов.Ссылка КАК ДокументПоследнегоИспользования,
	|	ЕСТЬNULL(СоглашенияСПоставщиками.Календарь, Неопределено) КАК Календарь,
	|	НАЧАЛОПЕРИОДА(ДокументыЗаказов.Дата, ДЕНЬ) КАК ДатаДокумента,
	|	НАЧАЛОПЕРИОДА(ДокументыЗаказов.ЖелаемаяДатаПоступления, ДЕНЬ) КАК ДатаПоступления,
	|	НАЧАЛОПЕРИОДА(ЗаказПоставщикуЭтапыГрафикаОплаты.ДатаПлатежа, ДЕНЬ) КАК ДатаПлатежа,
	|	ЗаказПоставщикуЭтапыГрафикаОплаты.ВариантОплаты КАК ВариантОплаты,
	|	ЗаказПоставщикуЭтапыГрафикаОплаты.ВариантОтсчета КАК ВариантОтсчета,
	|	ЗаказПоставщикуЭтапыГрафикаОплаты.Сдвиг КАК Сдвиг,
	|	ЗаказПоставщикуЭтапыГрафикаОплаты.ПроцентПлатежа КАК ПроцентПлатежа,
	|	ЗаказПоставщикуЭтапыГрафикаОплаты.ПроцентЗалогаЗаТару КАК ПроцентЗалогаЗаТару,
	|	ДокументыЗаказов.Дата КАК ДатаПоследнегоИспользования
	|ИЗ
	|	ДокументыЗаказов КАК ДокументыЗаказов
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику.ЭтапыГрафикаОплаты КАК ЗаказПоставщикуЭтапыГрафикаОплаты
	|			ПО (ЗаказПоставщикуЭтапыГрафикаОплаты.Ссылка = ДокументыЗаказов.Ссылка)
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СоглашенияСПоставщиками КАК СоглашенияСПоставщиками
	|		ПО ДокументыЗаказов.Соглашение = СоглашенияСПоставщиками.Ссылка
	|
	|УПОРЯДОЧИТЬ ПО
	|	ДокументыЗаказов.МоментВремени,
	|	ЗаказПоставщикуЭтапыГрафикаОплаты.НомерСтроки
	|ИТОГИ
	|	МАКСИМУМ(Календарь),
	|	КОЛИЧЕСТВО(ВариантОплаты),
	|	МАКСИМУМ(ДатаПоследнегоИспользования)
	|ПО
	|	ДокументПоследнегоИспользования
	|";
	
КонецПроцедуры

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

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

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

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

#Область ПриИзмененииРеквизитов

&НаСервере
Процедура ПриИзмененииФормыОплатыСервер()

	УстановитьДоступностьЭлементовПоФормеОплаты();
	
	ОплатаВРублях = НЕ ОплатаВВалюте;

	СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
	СтруктураПараметров.Организация 			= Организация;
	СтруктураПараметров.БанковскийСчет 			= БанковскийСчет;
	СтруктураПараметров.НаправлениеДеятельности = НаправлениеДеятельности;

	Если ОплатаВРублях Тогда
		СтруктураПараметров.Валюта				= ВалютаРеглУчета;
	КонецЕсли;

	БанковскийСчет = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);

	СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияКассыОрганизацииПоУмолчанию();
	СтруктураПараметров.Организация 			= Организация;
	СтруктураПараметров.НаправлениеДеятельности = НаправлениеДеятельности;
	СтруктураПараметров.ФормаОплаты 			= ФормаОплаты;
	СтруктураПараметров.Касса 					= Касса;

	Если ОплатаВРублях Тогда
		СтруктураПараметров.Валюта				= ВалютаРеглУчета;
	КонецЕсли;

	Касса          = ЗначениеНастроекПовтИсп.ПолучитьКассуОрганизацииПоУмолчанию(СтруктураПараметров);

КонецПроцедуры

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

&НаКлиенте
Процедура СуммаПлатежаПриИзменении(Сумма, Процент, ЗависимаяСумма, ЗависимыйПроцент, СуммаВсего)

	Если СуммаВсего <> 0 Тогда
		
		Процент           = Мин(Сумма * 100 / СуммаВсего, 100);
		ЗависимаяСумма    = Макс(СуммаВсего - Сумма, 0);
		ЗависимыйПроцент  = 100 - Процент;
		
	КонецЕсли;
	
	РассчитатьИтоговыеПоказатели(ЭтаФорма);

КонецПроцедуры

&НаКлиенте
Процедура ПроцентПлатежаПриИзменении(Сумма, Процент, ЗависимаяСумма, ЗависимыйПроцент, СуммаВсего)

	Сумма            = СуммаВсего * Процент / 100;
	ЗависимаяСумма   = СуммаВсего - Сумма;
	ЗависимыйПроцент = 100 - Процент;

	РассчитатьИтоговыеПоказатели(ЭтаФорма);

КонецПроцедуры

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

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

#Область УправлениеЭлементамиФормы

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

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

&НаСервере
Процедура УстановитьДоступностьКнопокЗаполнения()
	
	ДоступностьЭлемента = СуммаЗалогаПоДокументу <> 0 Или СуммаОплатыПоДокументу <> 0;
	Элементы.ЗаполнитьЭтапыГрафикаОплатыФорма.Доступность                = ДоступностьЭлемента;
	Элементы.ЗаполнитьЭтапыГрафикаОплатыТаблица.Доступность              = ДоступностьЭлемента;
	Элементы.ЗаполнитьЭтапыГрафикаПоПредыдущимЗаказамФорма.Доступность   = ДоступностьЭлемента;
	Элементы.ЗаполнитьЭтапыГрафикаПоПредыдущимЗаказамТаблица.Доступность = ДоступностьЭлемента;
	Элементы.РаспределитьСуммуФорма.Доступность                          = ДоступностьЭлемента;
	Элементы.РаспределитьСуммуТаблица.Доступность                        = ДоступностьЭлемента;
	
КонецПроцедуры

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьТекстКнопкиЗаполнения(Форма)
	
	ТекстКнопкиЗаполнения = НСтр("ru='Заполнить по умолчанию'");
	
	Если Форма.НакладнаяПоЗаказам 
			И Не Форма.ЭтоКорректировка
			И (Форма.ПорядокРасчетов = ПредопределенноеЗначение("Перечисление.ПорядокРасчетов.ПоЗаказам")
				ИЛИ Форма.ПорядокРасчетов = ПредопределенноеЗначение("Перечисление.ПорядокРасчетов.ПоЗаказамНакладным")
				ИЛИ НЕ ЗначениеЗаполнено(Форма.ГрафикИсполненияДоговора) И Форма.ПорядокРасчетов <> ПредопределенноеЗначение("Перечисление.ПорядокРасчетов.ПоНакладным")) Тогда
		ТекстКнопкиЗаполнения = НСтр("ru='Заполнить по заказам'");
	ИначеЕсли НЕ Форма.ЭтоЗаказ 
		И ЗначениеЗаполнено(Форма.ГрафикИсполненияДоговора)
		И Форма.ПорядокРасчетов <> ПредопределенноеЗначение("Перечисление.ПорядокРасчетов.ПоНакладным") Тогда
		ТекстКнопкиЗаполнения = НСтр("ru='Заполнить по графику договора'");
	ИначеЕсли Форма.ГрафикСоглашенияЗаполнен Тогда
		ТекстКнопкиЗаполнения = НСтр("ru='Заполнить по соглашению'");
	КонецЕсли;
	
	МассивЭлементов = Новый Массив;
	МассивЭлементов.Добавить("ЗаполнитьЭтапыГрафикаОплатыФорма");
	МассивЭлементов.Добавить("ЗаполнитьЭтапыГрафикаОплатыТаблица");
	
	ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(
		Форма.Элементы, МассивЭлементов, "Заголовок", ТекстКнопкиЗаполнения);
	
КонецПроцедуры

&НаСервере
Процедура ОграничитьТипЭлементовСуммыПлатежа()
	
	ОграниченныйТип = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(31, 2, ДопустимыйЗнак.Неотрицательный));
	
	МассивЭлементов = Новый Массив;
	
	МассивЭлементов.Добавить("ЭтапыГрафикаОплатыСуммаПлатежа");
	МассивЭлементов.Добавить("СуммаПлатежаПредоплата");
	МассивЭлементов.Добавить("СуммаПлатежаКредит");
	
	ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "ОграничениеТипа", ОграниченныйТип);
	
КонецПроцедуры

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

#Область Прочее

&НаСервере
Функция ПоместитьВоВременноеХранилищеНаСервере()
	
	Возврат ПоместитьВоВременноеХранилище(ЭтапыГрафикаОплаты.Выгрузить(), ИдентификаторВызывающейФормы);
	
КонецФункции

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

&НаСервере
Функция ЭтапСодержитДанные(ВариантОплаты)
	
	Если ВариантОплаты = "Кредит" Тогда
		Возврат ЗначениеЗаполнено(СуммаПлатежаКредит)
			ИЛИ ?(ТребуетсяЗалогЗаТару, ЗначениеЗаполнено(СуммаЗалогаЗаТаруКредит), ЛОЖЬ);
	Иначе
		Возврат ЗначениеЗаполнено(СуммаПлатежаПредоплата)
			ИЛИ ?(ТребуетсяЗалогЗаТару, ЗначениеЗаполнено(СуммаЗалогаЗаТаруПредоплата), ЛОЖЬ);
	КонецЕсли;
	
КонецФункции

&НаСервере
Процедура ПреобразоватьТаблицуЭтаповВДанныеУпрощенногоРежима(ЭтапыОплаты)
	
	ОчиститьДанныеУпрощенногоРежима(ЭтаФорма);
	
	Если ЭтапыОплаты.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	Для Каждого ТекСтрока Из ЭтапыОплаты Цикл
		
		Если ТекСтрока.ВариантОплаты <> Перечисления.ВариантыКонтроляОплатыПоставщику.КредитСдвиг
			И ТекСтрока.ВариантОплаты <> Перечисления.ВариантыКонтроляОплатыПоставщику.КредитПослеПоступления
			И ЕстьПредоплата Тогда //аванс и предоплата суммируются в общую сумму
			СуммаПлатежаПредоплата   = СуммаПлатежаПредоплата + ТекСтрока.СуммаПлатежа;
			ПроцентПлатежаПредоплата = ПроцентПлатежаПредоплата + ТекСтрока.ПроцентПлатежа;
			Если ТребуетсяЗалогЗаТару Тогда
				СуммаЗалогаЗаТаруПредоплата   = СуммаЗалогаЗаТаруПредоплата + ТекСтрока.СуммаЗалогаЗаТару;
				ПроцентЗалогаЗаТаруПредоплата = ПроцентЗалогаЗаТаруПредоплата + ТекСтрока.ПроцентЗалогаЗаТару;
			КонецЕсли;
			Если ДатаПредоплата <= ТекСтрока.ДатаПлатежа Тогда
				ДатаПредоплата = Макс(ДатаПредоплата, ТекСтрока.ДатаПлатежа);
				ВариантОтсчетаПредоплата = ТекСтрока.ВариантОтсчета;
				ВариантКонтроляПредоплата = ТекСтрока.ВариантОплаты;
				СдвигПредоплата = ТекСтрока.Сдвиг;
			КонецЕсли;
		Иначе
			СуммаПлатежаКредит   = СуммаПлатежаКредит + ТекСтрока.СуммаПлатежа;
			ПроцентПлатежаКредит = ПроцентПлатежаКредит + ТекСтрока.ПроцентПлатежа;
			Если ТребуетсяЗалогЗаТару Тогда
				СуммаЗалогаЗаТаруКредит   = СуммаЗалогаЗаТаруКредит + ТекСтрока.СуммаЗалогаЗаТару;
				ПроцентЗалогаЗаТаруКредит = ПроцентЗалогаЗаТаруКредит + ТекСтрока.ПроцентЗалогаЗаТару;
			КонецЕсли;
			Если ДатаКредит <= ТекСтрока.ДатаПлатежа Тогда
				ДатаКредит = Макс(ДатаКредит, ТекСтрока.ДатаПлатежа);
				ВариантОтсчетаПостоплата = ТекСтрока.ВариантОтсчета;
				ВариантКонтроляПостоплата= ТекСтрока.ВариантОплаты;
				СдвигПостоплата = ТекСтрока.Сдвиг;
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла;
	
	Если НЕ ЗначениеЗаполнено(ВариантОтсчетаПредоплата) Тогда
		ВариантОтсчетаПредоплата = Перечисления.ВариантыОтсчетаДатыПлатежа.ДоДатыОтгрузки;
	КонецЕсли;
	
	Если НЕ ЕстьПредоплата Тогда
		ВариантОтсчетаПостоплата = Перечисления.ВариантыОтсчетаДатыПлатежа.ОтДатыОтгрузки;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ОчиститьДанныеУпрощенногоРежима(Форма)
	
	Форма.ДатаПредоплата                = Неопределено;
	Форма.ДатаКредит                    = Неопределено;
	Форма.СуммаПлатежаПредоплата        = 0;
	Форма.СуммаПлатежаКредит            = 0;
	Форма.ПроцентПлатежаПредоплата      = 0;
	Форма.ПроцентПлатежаКредит          = 0;
	Форма.СуммаЗалогаЗаТаруПредоплата   = 0;
	Форма.СуммаЗалогаЗаТаруКредит       = 0;
	Форма.ПроцентЗалогаЗаТаруПредоплата = 0;
	Форма.ПроцентЗалогаЗаТаруКредит     = 0;
	
КонецПроцедуры

&НаСервере
Функция ПоместитьШаблоныГрафикаВоВременноеХранилище()
	
	ШаблоныГрафиковДанные = РеквизитФормыВЗначение("ШаблоныГрафиков");
	Возврат ПоместитьВоВременноеХранилище(ШаблоныГрафиковДанные);
	
КонецФункции

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

&НаКлиенте
Процедура СортироватьЭтапыОплаты()
	
	Если НЕ УпрощенныйРежим Тогда
		
		ЭтапыОплатыКлиентСервер.СортироватьТаблицуЭтапов(ЭтапыГрафикаОплаты);
		
		НомерСтроки = 1;
		Для каждого СтрокаТаблицы Из ЭтапыГрафикаОплаты Цикл
			СтрокаТаблицы.НомерСтроки = НомерСтроки;
			НомерСтроки = НомерСтроки + 1;
		КонецЦикла;
		
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьСписокВыбораФормыОплаты()
	
	Перем ОтборПоСсылке;
	
	Для Каждого ТекПараметр Из Элементы.ФормаОплаты.ПараметрыВыбора Цикл
		Если ТекПараметр.Имя = "Отбор.Ссылка" Тогда
			ОтборПоСсылке = ТекПараметр.Значение;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Запрос = Новый Запрос;
	ТекстЗапроса =
	"ВЫБРАТЬ
	|	ФормыОплаты.Ссылка
	|ИЗ
	|	Перечисление.ФормыОплаты КАК ФормыОплаты
	|ГДЕ
	|	&Условие";
	
	Если ОтборПоСсылке <> Неопределено Тогда
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", "Ссылка В(&ОтборПоСсылке)");
		Запрос.УстановитьПараметр("ОтборПоСсылке", ОтборПоСсылке);
	Иначе
		ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Условие", "ИСТИНА");
	КонецЕсли;
	
	Запрос.Текст = ТекстЗапроса;
	
	Выборка      = Запрос.Выполнить().Выбрать();
	СписокВыбора = Элементы.ФормаОплаты.СписокВыбора;
	Пока Выборка.Следующий() Цикл
		СписокВыбора.Добавить(Выборка.Ссылка);
	КонецЦикла;
	
	СписокВыбора.Добавить(Перечисления.ФормыОплаты.ПустаяСсылка(), НСтр("ru='Любая'"));
	ДенежныеСредстваСервер.УстановитьВидимостьОплатыПлатежнойКартой(Элементы.ФормаОплаты);
	
КонецПроцедуры

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

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

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

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

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

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

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

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