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