Расходный кассовый ордер / Модуль объекта

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

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

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

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

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

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

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

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

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

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

Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
	
	РасходныйКассовыйОрдерЛокализация.ПриУстановкеНовогоНомера(ЭтотОбъект, СтандартнаяОбработка, Префикс);
	ИсправлениеДокументов.ПриУстановкеНовогоНомера(ЭтотОбъект, СтандартнаяОбработка, Префикс);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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