Счет на оплату клиенту / Форма документа / Модуль формы

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

&НаКлиенте
Перем ОтветПередЗаписью;

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

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

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

	УстановитьУсловноеОформление();
	
	Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа.
		Возврат;
	КонецЕсли;

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);

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

	// ИнтеграцияС1СДокументооборотом
	ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтаФорма);
	// Конец ИнтеграцияС1СДокументооборотом

	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ПараметрыЭДОПриСоздании = ОбменСКонтрагентами.ПараметрыПриСозданииНаСервере_ФормаДокумента();
	ПараметрыЭДОПриСоздании.Форма = ЭтотОбъект;
	ПараметрыЭДОПриСоздании.ДокументСсылка = Объект.Ссылка;
	ПараметрыЭДОПриСоздании.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
	ПараметрыЭДОПриСоздании.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
	ПараметрыЭДОПриСоздании.МестоРазмещенияКоманд = Элементы.ПодменюЭДО;
	
	ОбменСКонтрагентами.ПриСозданииНаСервере_ФормаДокумента(ПараметрыЭДОПриСоздании);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	
	Элементы.ДекорацияСостояниеЭДО.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьОбменЭД");

	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
	
	Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
		Элементы.ГруппаИтого.ЦветФона = Новый Цвет();
	КонецЕсли;
	
	// СтандартныеПодсистемы.РаботаСФайлами
	ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
	ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
	РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
	// Конец СтандартныеПодсистемы.РаботаСФайлами

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

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

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	Если ОбщегоНазначенияУТКлиентСервер.АвторизованВнешнийПользователь() Тогда
		ТребуетсяОткрытиеПечатнойФормы = Истина;
		Возврат;
	КонецЕсли;
	
	ПриЧтенииСозданииНаСервере();

	МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ПараметрыЭДОПриСоздании = ОбменСКонтрагентами.ПараметрыПриЧтенииНаСервере_ФормаДокумента();
	ПараметрыЭДОПриСоздании.Форма = ЭтотОбъект;
	ПараметрыЭДОПриСоздании.ДокументСсылка = Объект.Ссылка;
	ПараметрыЭДОПриСоздании.МестоРазмещенияКоманд = Элементы.ПодменюЭДО;
	ПараметрыЭДОПриСоздании.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
	ПараметрыЭДОПриСоздании.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
	ОбменСКонтрагентами.ПриЧтенииНаСервере_ФормаДокумента(ПараметрыЭДОПриСоздании);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	
КонецПроцедуры

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

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

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

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

	// СтандартныеПодсистемы.УправлениеДоступом
	УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	// Конец СтандартныеПодсистемы.УправлениеДоступом
	
	Элементы.ГруппаКомментарий.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Объект.Комментарий);
	
	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ПараметрыПослеЗаписи = ОбменСКонтрагентами.ПараметрыПослеЗаписиНаСервере();
	ПараметрыПослеЗаписи.Форма = ЭтотОбъект;
	ПараметрыПослеЗаписи.ДокументСсылка = Объект.Ссылка;
	ПараметрыПослеЗаписи.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
	ПараметрыПослеЗаписи.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;

	ОбменСКонтрагентами.ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи, ПараметрыПослеЗаписи);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами

	МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);

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

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

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

&НаКлиенте
Процедура ПерезаполнитьНазначениеПлатежа(Команда)
	ЗаполнитьНазначениеПлатежа();
КонецПроцедуры

&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
		
	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ОбменСКонтрагентамиКлиент.ПослеЗаписи_ФормаДокумента(ЭтаФорма, ПараметрыЗаписи);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами	

	МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи);

	// СтандартныеПодсистемы.ПодключаемыеКоманды
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
		МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
		МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
	
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

	МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи);

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

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

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

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

&НаКлиенте
Процедура ЧастичнаяОплатаПриИзменении(Элемент)
	
	Если Не Объект.ЧастичнаяОплата И ЗначениеЗаполнено(ОБъект.ДокументОснование) Тогда
		Если Объект.ЭтапыГрафикаОплаты.Количество() > 0 Тогда
			ОтветНаВопрос = Неопределено;

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

	Иначе
		УстановитьДоступностьЭлементовПоЧастичнойОплате();
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура СуммаДокументаПриИзменении(Элемент)
	
	ЭтапыОплатыКлиентСервер.РаспределитьСуммуПоЭтапамГрафикаОплаты(Объект.ЭтапыГрафикаОплаты, Объект.СуммаДокумента);
	
КонецПроцедуры

&НаКлиенте
Процедура ДекорацияЭДОНажатие(Элемент, СтандартнаяОбработка)
	
	// ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	ОбменСКонтрагентамиКлиент.СостояниеЭДОНажатие_ФормаДокумента(ЭтотОбъект, СтандартнаяОбработка);
	// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами
	
КонецПроцедуры

&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
	
	ДатаПриИзмененииСервер();
	
КонецПроцедуры


&НаКлиенте
Процедура ПартнерПриИзменении(Элемент)
	
	ПартнерПриИзмененииСервер();
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыЭтапыГрафикаОплаты

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

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

&НаКлиенте
Процедура ЭтапыГрафикаОплатыПроцентПлатежаПриИзменении(Элемент)
	
	ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыПроцентПлатежаПриИзменении(Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные, Объект.ЭтапыГрафикаОплаты, Объект.СуммаДокумента);
	
КонецПроцедуры

&НаКлиенте
Процедура ЭтапыГрафикаОплатыСуммаПлатежаПриИзменении(Элемент)

	ЭтапыОплатыКлиент.ЭтапыГрафикаОплатыСуммаПлатежаПриИзменении(Элементы.ЭтапыГрафикаОплаты.ТекущиеДанные, Объект.ЭтапыГрафикаОплаты, Объект.СуммаДокумента);
	Объект.СуммаДокумента = Объект.ЭтапыГрафикаОплаты.Итог("СуммаПлатежа");
	
КонецПроцедуры

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

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

&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры


&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
	ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры


// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
	 РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// СтандартныеПодсистемы.РаботаСФайлами
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
	 РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.РаботаСФайлами

// ИнтеграцияС1СДокументооборотом
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
	
	ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтаФорма, Объект);
	
КонецПроцедуры
// Конец ИнтеграцияС1СДокументооборотом

&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Записать(ЭтаФорма);
	
КонецПроцедуры

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

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

// ЭлектронноеВзаимодействие.ОбменСКонтрагентами

&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуЭДО(Команда)
	
	ЭлектронноеВзаимодействиеКлиент.ВыполнитьПодключаемуюКомандуЭДО(Команда, ЭтаФорма, Объект);
	
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбработчикОжиданияЭДО()
	
	ОбменСКонтрагентамиКлиент.ОбработчикОжиданияЭДО(ЭтотОбъект);
	
КонецПроцедуры

// Конец ЭлектронноеВзаимодействие.ОбменСКонтрагентами

&НаКлиенте
Процедура ПровестиДокумент(Команда)
	
	ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
	
	ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма);
	
КонецПроцедуры

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

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

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

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

	//

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

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

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.FireBrick);

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.FireBrick);

	//

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Seagreen);

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<залог за тару>'"));
	Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);

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

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

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

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

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

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

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

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

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

&НаСервере
Процедура ДатаПриИзмененииСервер()
	
	ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект);
	
КонецПроцедуры

&НаСервере
Процедура ПартнерПриИзмененииСервер()
	
	ОтветственныеЛицаСервер.ЗаполнитьСписокВыбораМенеджера(Элементы.Менеджер, Объект);
	
КонецПроцедуры

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

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

#Область Инициализация

ОтветПередЗаписью = Ложь;

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

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