Подтверждение оплаты НДС в бюджет / Модуль менеджера

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

#Область ПрограммныйИнтерфейс

// Вызывается из УчетНДСУП.УстановитьЗаголовокСостоянияОплатыНДСПоСчетуФактуре
// Получает текст состояния оплаты НДС по документу
// 
// Параметры:
// 	СчетФактура - ОпределяемыйТип.СчетФактура - Документ, требующий оплаты НДС.
//
// Возвращаемое значение:
// Строка
Функция ТекстСостояниеОплатыНДСВБюджет(СчетФактура) Экспорт
	
	Если Не ЗначениеЗаполнено(СчетФактура) Тогда
		Возврат НСтр("ru = 'Ожидает оплаты НДС в бюджет'");
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Истина);
	ТекущееСостояние = Перечисления.СостоянияОплатыНДСВБюджет.ПустаяСсылка();
	
	// к оплате
	Набор = СоздатьНаборЗаписей();
	Набор.Отбор.СчетФактура.Установить(СчетФактура);
	Набор.Отбор.Состояние.Установить(Перечисления.СостоянияОплатыНДСВБюджет.ОжидаетОплаты);
	Набор.Прочитать();
	КОплате = Набор.Итог("Сумма");
	Если КОплате > 0 Тогда 
		ТекущееСостояние = Перечисления.СостоянияОплатыНДСВБюджет.ОжидаетОплаты;
	КонецЕсли;
	
	// оплачено
	Набор.Отбор.Состояние.Установить(Перечисления.СостоянияОплатыНДСВБюджет.Оплачено);
	Набор.Прочитать();
	ТаблицаОплат = Набор.Выгрузить();
	ТаблицаОплат.Сортировать("ДатаПодтвержденияОплаты Убыв");
	Если ТаблицаОплат.Количество() > 0 Тогда 
		ТекущееСостояние        = Перечисления.СостоянияОплатыНДСВБюджет.Оплачено;
		ДатаПодтвержденияОплаты = Формат(ТаблицаОплат[0].ДатаПодтвержденияОплаты, "ДЛФ=D");
		Если ТаблицаОплат.Количество() > 1 Тогда
			СтрокаПлатежноРасчетныеДокументы = НСтр("ru = '<несколько платежей>'");
		Иначе
			СтрокаПлатежноРасчетныеДокументы = НСтр("ru = '№'") + " " + ТаблицаОплат[0].СтрокаПлатежноРасчетныеДокументы;
		КонецЕсли;
	КонецЕсли;
	
	// получено подтверждение
	Если ТипЗнч(СчетФактура) = Тип("ДокументСсылка.ЗаявлениеОВвозеТоваров")
		Или ВидЦенностиВводОстатков(СчетФактура) = Перечисления.ВидыЦенностей.ТаможенныйСоюз Тогда
			Набор.Отбор.Состояние.Установить(Перечисления.СостоянияОплатыНДСВБюджет.ПолученоПодтверждение);
			Набор.Прочитать();
			Если Набор.Количество() Тогда
				ТекущееСостояние         = Перечисления.СостоянияОплатыНДСВБюджет.ПолученоПодтверждение;
				НомерОтметкиОРегистрации = Набор[0].НомерОтметкиОРегистрации;
				ДатаПодтвержденияОплаты  = Формат(Набор[0].ДатаПодтвержденияОплаты, "ДЛФ=D");
			КонецЕсли;
	КонецЕсли;
	
	Если ТекущееСостояние = Перечисления.СостоянияОплатыНДСВБюджет.ПолученоПодтверждение Тогда
		Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Оплата подтверждена %1 г. Отметка № %2'"),
			ДатаПодтвержденияОплаты,
			НомерОтметкиОРегистрации);
	ИначеЕсли ТекущееСостояние = Перечисления.СостоянияОплатыНДСВБюджет.Оплачено Тогда
		Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'НДС оплачен %1 (%2)'"),
			ДатаПодтвержденияОплаты,
			СтрокаПлатежноРасчетныеДокументы);
	ИначеЕсли ТекущееСостояние = Перечисления.СостоянияОплатыНДСВБюджет.ОжидаетОплаты Тогда
		Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Укажите реквизиты документов оплаты НДС. Всего к оплате (руб.): %1.'"),
			Формат(КОплате, "ЧДЦ=2; ЧГ=0"));
	Иначе
		Возврат НСтр("ru = 'Ожидает оплаты НДС в бюджет'");
	КонецЕсли;
	
КонецФункции

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

	Если Не ЗначениеЗаполнено(ДокументРегистратор) Тогда
		Возврат;
	КонецЕсли;
	
	СчетаФактуры.Свернуть("СчетФактура,ВидАгентскогоДоговора,ОплатаЧерезЕдиныйЛицевойСчет","СуммаОплаты");
	
	// По указанному регистратору, если проведен:
	// 1. удаляем ранее сделанные записи ОжидаетОплаты
	// 2. Добавляем новые записи ОжидаетОплаты
	// 3. Сравниваем ОжидаетОплаты и Оплачено по каждому счету-фактуре
	// 3.1 Если Оплачено >= ОжидаетОплаты, то регистрируем событие ОплатаПодверждена по самой последней оплате
	//	для всех документов кроме Заявлений о ввозе
	// 3.2 Если Оплачено < ОжидаетОплаты, есть событие ОплатаПодтверждена и это не Заявление о ввозе, то удаляем подтверждение.

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

	ОбновитьСостояниеПодтвержденияОплаты(СчетаФактуры, Проведен);

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

// Вызывается из УчетНДСУП.ЗарегистрироватьОжиданиеОплатыНДСПоСчетамФактурам
// Регистрирует запланированную оплату НДС по документам.
// При этом в записи регистра ПодтверждениеОплатыНДСВБюджет с состоянием КОплате добавляется ссылка на заявку.
// Параметры:
// 	СчетаФактуры - ТаблицаЗначений - Таблица сумм НДС к оплате по счетам-фактурам.	
// 	Колонки таблицы:
//			* СчетФактура - ОпределяемыйТип.СчетФактура - Документ, требующий оплаты НДС
//			* СуммаОплаты - ОпределяемыйТип.ДенежнаяСуммаЛюбогоЗнака - Сумма НДС к оплате
// 	ТипНалога - СправочникСсылка.ВидыНалоговВзносов - тип уплачиваемого налога (налоговый агент, ввоз из ЕАЭС и т.п.)
// 	ДокументРегистратор - ДокументСсылка - Документ-регистратор операции.
// 	Проведен - Булево - Признак проведения документа-регистратора.
Процедура ЗарегистрироватьПланированиеОплатыНДСПоСчетамФактурам(СчетаФактуры, ТипНалога, ДокументРегистратор, Проведен) Экспорт

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

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

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

// Вызывается из УчетНДСУП.ЗарегистрироватьОплатуНДСПоСчетамФактурам
// Регистрирует фактическую оплату НДС по документам.
// При этом формируются записи регистра ПодтверждениеОплатыНДСВБюджет с состояние Оплачено.
// Параметры:
// 	СчетаФактуры - ТаблицаЗначений - Таблица сумм НДС к оплате по счетам-фактурам.	
// 	Колонки таблицы:
//			* СчетФактура - ОпределяемыйТип.СчетФактура - Документ, требующий оплаты НДС
//			* СуммаОплаты - ОпределяемыйТип.ДенежнаяСуммаЛюбогоЗнака - Сумма НДС к оплате
// 	ДокументРегистратор - ДокументСсылка - Документ-регистратор операции.
// 	РеквизитыДокументаОплаты - Структура - Структура реквизитов документа оплаты 
// 	Состав полей:
// 			* ДатаПеречисленияВБюджет - Дата - дата фактического перечисления НДС в бюджет.
// 			* ТипНалога - СправочникСсылка.ВидыНалоговВзносов - тип уплачиваемого налога (налоговый агент, ввоз из ЕАЭС и т.п.)
//			* НомерДокумента - Строка - номер документа перечисления налога
//			* ДатаДокумента - Дата - дата документа перечисления налога
// 	Проведен - Булево - Признак проведения документа-регистратора.
Процедура ЗарегистрироватьОплатуНДСПоСчетамФактурам(СчетаФактуры, ДокументРегистратор, РеквизитыДокументаОплаты, Проведен) Экспорт

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

	// По указанному регистратору, если не проведен:
	// 1. удаляем ранее сделанные записи Оплачено
	// 2. Если есть состояние ОплатаПодтверждена и Оплачено < КОплате и это не Заявление о ввозе, то удаляем подтверждение.

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

	ОбновитьСостояниеПодтвержденияОплаты(СчетаФактуры, Проведен);

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

#Область ФормаДокументыОплаты

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

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

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

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

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

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

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

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

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.УправлениеДоступом

// Параметры:
//   Ограничение - см. УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа.Ограничение.
//
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

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

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

// Конец СтандартныеПодсистемы.УправлениеДоступом

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

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

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

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

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

Функция ПреобразоватьТаблицуСчетовФактур(СчетаФактуры, ТипНалога)

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

	Возврат СчетаФактуры;
	
КонецФункции

Процедура ОбновитьСостояниеПодтвержденияОплаты(СчетаФактуры, Проведен)

	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("СчетаФактуры", СчетаФактуры);

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

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

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

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

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

#Область Обработчики_11_4_2

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

#КонецЕсли

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