Счет-фактура выданный (аванс) / Модуль объекта

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

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

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

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

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

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

	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
	
	ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);
	
	ИсправлениеДокументов.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	Для Каждого СтрокаТаблицы Из ДокументыАвансовКомитента Цикл
		СтрокаПлатежноРасчетныеДокументы = СтрокаПлатежноРасчетныеДокументы
			+ ?(ПустаяСтрока(СтрокаПлатежноРасчетныеДокументы), "", ", ")
			+ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = '%1 от %2'"),
				СтрокаТаблицы.НомерПлатежноРасчетногоДокумента,
				Формат(СтрокаТаблицы.ДатаПлатежноРасчетногоДокумента, "ДЛФ=D"));
	КонецЦикла;
		
КонецПроцедуры

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

Функция ХозяйственныеОперацииНДСАванс()
	
	Операции = Новый Массив;
	Операции.Добавить(Перечисления.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента);
	Операции.Добавить(Перечисления.ХозяйственныеОперации.ПоступлениеОплатыОтКлиентаПоПлатежнойКарте);
	Операции.Добавить(Перечисления.ХозяйственныеОперации.ПоступлениеДенежныхСредствИзДругойОрганизации);
	
	Возврат Операции;
	
КонецФункции


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

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

#КонецЕсли

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