Счет-фактура полученный / Модуль менеджера

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

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

#Область Проведение

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

	//++ НЕ УТ
	МеханизмыДокумента.Добавить("РегламентированныйУчет");
	//-- НЕ УТ
	МеханизмыДокумента.Добавить("РеестрДокументов");
	МеханизмыДокумента.Добавить("УчетНДС");
	
КонецПроцедуры

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

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

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

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

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

// Определяет список команд отчетов.
//
// Параметры:
//   КомандыОтчетов - См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.КомандыОтчетов
//   Параметры - См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.Параметры
//
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
	
	Отчеты.КарточкаПартииПоВидамНалогообложения.ДобавитьКомандуОтчета(КомандыОтчетов);
	
КонецПроцедуры

// Возвращает представление счета-фактуры с учетом состояния проведения.
//
// Параметры:
// 	Номер - Строка - Номер счета-фактуры.
// 	Дата - Дата - Дата счета-фактуры.
// 	Проведен - Булево - Признак проведения документа.
//
// Возвращаемое значение:
//	Строка - Представление счета-фактуры.
//
Функция ПредставлениеСчетаФактуры(Номер, Дата, Проведен) Экспорт
	
	МассивПодстрок = Новый Массив;
	МассивПодстрок.Добавить(СтрШаблон(НСтр("ru = 'Счет-фактура № %1 от %2'"), СокрЛП(Номер), Формат(Дата, "ДЛФ=DD")));
	Если Не Проведен Тогда
		МассивПодстрок.Добавить(НСтр("ru = '(не проведен)'"));
	КонецЕсли;
	
	Возврат СтрСоединить(МассивПодстрок, " ");
	
КонецФункции

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

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

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

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

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

//Возвращает количество счетов-фактур к оформлению.
//
// Параметры:
//	Параметры - Структура:
//	* МассивОрганизаций - Массив - массив организаций.
//	* НачалоПериода - Дата - ограничение снизу на дату документа-основания.
//	* КонецПериода - Дата - ограничение сверху на дату документа-основания.
//	* БезОграниченияПериода - Булево - не ограничивать по дате документа-основания
//
// Возвращаемое значение:
//	Число - количество счетов-фактур к оформлению.
//
Функция ЕстьСчетаФактурыКОформлению(Параметры) Экспорт
	
	ПараметрыПоискаСчетовФактур = УчетНДС.НовыйПараметрыПоискаСчетовФактур();

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

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

//++ НЕ УТ

// Функция возвращает текст запроса для отражения документа в регламентированном учете.
//
// Возвращаемое значение:
//	Строка - Текст запроса
//
Функция ТекстОтраженияВРеглУчете() Экспорт
	
	Возврат "";
	
КонецФункции

// Функция возвращает текст запроса дополнительных временных таблиц,
// необходимых для отражения в регламентированном учете.
//
// Возвращаемое значение:
//	Строка - текст запроса
//
Функция ТекстЗапросаВТОтраженияВРеглУчете() Экспорт
	
	Возврат "";
	
КонецФункции

//-- НЕ УТ

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

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

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

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

	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ВЫБОР
	|		КОГДА ТипЗначения(Контрагент) = Тип(Справочник.Организации)
	|			ТОГДА ЗначениеРазрешено(Организация) ИЛИ ЗначениеРазрешено(Контрагент)
	|		ИНАЧЕ ЗначениеРазрешено(Организация) И ЗначениеРазрешено(Контрагент.Партнер)
	|	КОНЕЦ";

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

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

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

// СтандартныеПодсистемы.ВерсионированиеОбъектов
// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
// Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

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

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

#Область Проведение

Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт

	ИсточникиДанных = Новый Соответствие;
	
	Возврат ИсточникиДанных; 

КонецФункции

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

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

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

	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	
	Возврат ТекстЗапроса;
		
КонецФункции

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

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

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

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

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

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

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

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

//++ НЕ УТ

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

//-- НЕ УТ

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

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

#Область Заполнение

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

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

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

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

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

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

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

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

#Область ФормированиеГиперссылкиВЖурналеСчетовФактур

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

Функция ИмяФормыСчетФактураПолученный() Экспорт
	
	Возврат "Отчет.НаличиеСчетовФактур.Форма.ФормаОтчета";
	
КонецФункции

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

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

#КонецЕсли

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