Операция по платежной карте / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

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

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

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

Процедура ПриЗаписи(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
	
	ОперацияПоПлатежнойКартеЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);
	
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
	ОперацияПоПлатежнойКартеЛокализация.ОбработкаПроведения(ЭтотОбъект, Отказ, РежимПроведения);
	
КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
	ОперацияПоПлатежнойКартеЛокализация.ОбработкаУдаленияПроведения(ЭтотОбъект, Отказ);
	
КонецПроцедуры

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

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

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

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

#Область ИнициализацияИЗаполнение

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

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

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

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

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

		СуммаКОплате = Выборка.Сумма;

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

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

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

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

Процедура ЗаполнитьПоПодарочномуСертификату(Знач ДокументОснование, ДанныеЗаполнения)

	ПодарочныйСертификат = ДокументОснование;
	Если ТипЗнч(ДокументОснование) = Тип("Структура") Тогда
		Если ТипЗнч(ДанныеЗаполнения.ПодарочныйСертификат) = Тип("Массив") Тогда
			ПодарочныйСертификат = ДанныеЗаполнения.ПодарочныйСертификат[0];
		Иначе
			ПодарочныйСертификат = ДанныеЗаполнения.ПодарочныйСертификат;
		КонецЕсли;
	КонецЕсли;

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

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

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

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

	ДенежныеСредстваКлиентСервер.РассчитатьСуммуВзаиморасчетовВСтрокеРасшифровки(
				НоваяСтрока, Валюта, ВалютаРеглУчета);
				
КонецПроцедуры


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

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

Процедура ЗаполнитьПоЗаказуКлиента_Возврат(ДанныеЗаполнения)
	
	ДанныеЗаполнения = ДенежныеСредстваСервер.СформироватьДанныеЗаполненияПоВозвратуПлатежаОтЗаказКлиента(ДанныеЗаполнения.Основание, 
							Метаданные.Документы.ОперацияПоПлатежнойКарте.Представление(),
							Перечисления.ФормыОплаты.ПлатежнаяКарта);
							
	ДенежныеСредстваСервер.ЗаполнитьРасшифровкуПлатежаПоЗаказуКлиента(ДанныеЗаполнения, РасшифровкаПлатежа);
	СуммаДокумента = РасшифровкаПлатежа.Итог("Сумма");
	
КонецПроцедуры

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

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

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

Процедура ПроверитьДатыПогашения(Отказ) Экспорт
	
	Для Каждого СтрокаРасшифровки Из РасшифровкаПлатежа Цикл
		Если ЗначениеЗаполнено(СтрокаРасшифровки.ДатаПогашения)
			И СтрокаРасшифровки.ДатаПогашения < НачалоДня(Дата) Тогда
			
			ТекстОшибки = НСтр("ru = 'Дата погашения не может быть раньше даты платежа.'");
			Если ДополнительныеСвойства.Свойство("РасшифровкаБезРазбиения")
				И ДополнительныеСвойства.РасшифровкаБезРазбиения Тогда
				ПутьКДаннымОшибки = "ДатаПогашенияБезРазбиения";
			Иначе
				ПутьКДаннымОшибки = "Объект.РасшифровкаПлатежа" + "[" + (СтрокаРасшифровки.НомерСтроки - 1) + "].ДатаПогашения";
			КонецЕсли;
			ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , ПутьКДаннымОшибки, , Отказ);
			
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

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

#КонецЕсли

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