#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
Процедура ПодготовитьДанныеДляЗаполнения(СтруктураПараметров, АдресХранилища) Экспорт
ДанныеДляЗаполнения = Новый Структура;
НеоблагаемыеНДСОперации = НовыйНеоблагаемыеНДСОперации();
ПодтверждающиеДокументы = НовыйПодтверждающиеДокументы();
ДанныеДляЗаполнения.Вставить("НеоблагаемыеНДСОперации", НеоблагаемыеНДСОперации);
ДанныеДляЗаполнения.Вставить("ПодтверждающиеДокументы", ПодтверждающиеДокументы);
УчетНДСОтчетыПереопределяемый.ЗапросПоДаннымЗаполнения7РазделаДекларацииПоНДС(
СтруктураПараметров, ДанныеДляЗаполнения, АдресХранилища);
ПоместитьВоВременноеХранилище(ДанныеДляЗаполнения, АдресХранилища);
КонецПроцедуры
Процедура ЗарегистрироватьУчетныеМеханизмы(МеханизмыДокумента) Экспорт
МеханизмыДокумента.Добавить("УчетНДС");
КонецПроцедуры
Функция ДанныеДокументаДляПроведения(Документ, Регистры, ДопПараметры = Неопределено) Экспорт
Если ДопПараметры = Неопределено Тогда
ДопПараметры = ПроведениеДокументов.ДопПараметрыИнициализироватьДанныеДокументаДляПроведения();
КонецЕсли;
Если ТипЗнч(Документ) = Тип("ДокументОбъект.ФормированиеЗаписейРаздела7ДекларацииНДС") Тогда
ДокументСсылка = Документ.Ссылка;
Иначе
ДокументСсылка = Документ;
КонецЕсли;
Запрос = Новый Запрос;
ТекстыЗапроса = Новый СписокЗначений;
Если Не ДопПараметры.ПолучитьТекстыЗапроса Тогда
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Запрос.УстановитьПараметр("КодыРеализацийНеНаТерриторииРФ",
Справочники.КодыОперацийРаздела7ДекларацииПоНДС.КодыРеализацииНеНаТерриторииРФ());
Запрос.УстановитьПараметр("ПравилаЗаполненияДекларацииС4кв2020",
УчетНДС.ПравилаЗаполненияДекларацииС4кв2020(Документ.Дата));
ТекстЗапросаНДСЗаписиРаздела7Декларации(Запрос, ТекстыЗапроса, Регистры);
КонецЕсли;
Возврат ПроведениеДокументов.ИнициализироватьДанныеДокументаДляПроведения(Запрос, ТекстыЗапроса, ДопПараметры);
КонецФункции
Функция ВремяДокументаПоУмолчанию() Экспорт
Возврат Новый Структура("Часы, Минуты", 23, 0);
КонецФункции
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
КонецПроцедуры
Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
БизнесПроцессы.Задание.ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании);
КонецПроцедуры
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Возврат СозданиеНаОсновании.ДобавитьКомандуСозданияНаОсновании(КомандыСозданияНаОсновании, Метаданные.Документы.ФормированиеЗаписейРаздела7ДекларацииНДС);
КонецФункции
#Область ДляВызоваИзДругихПодсистем
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтениеИзменение
|ГДЕ
| ЗначениеРазрешено(Организация)";
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция НовыйНеоблагаемыеНДСОперации()
НеоблагаемыеНДСОперации = Новый ТаблицаЗначений;
НеоблагаемыеНДСОперации.Колонки.Добавить("КодОперации", Новый ОписаниеТипов("СправочникСсылка.КодыОперацийРаздела7ДекларацииПоНДС"));
НеоблагаемыеНДСОперации.Колонки.Добавить("ДокументРеализации", Документы.ТипВсеСсылки());
НеоблагаемыеНДСОперации.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты,СправочникСсылка.Организации"));
НеоблагаемыеНДСОперации.Колонки.Добавить("Организация", Новый ОписаниеТипов("СправочникСсылка.Организации"));
НеоблагаемыеНДСОперации.Колонки.Добавить("СуммаРеализации", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
НеоблагаемыеНДСОперации.Колонки.Добавить("СуммаПриобретения", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
НеоблагаемыеНДСОперации.Колонки.Добавить("НДСПрямой", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
НеоблагаемыеНДСОперации.Колонки.Добавить("НДСРаспределенный", ОбщегоНазначенияУТ.ОписаниеТипаДенежногоПоля());
НеоблагаемыеНДСОперации.Колонки.Добавить("КлючСтроки", ОбщегоНазначения.ОписаниеТипаСтрока(36));
НеоблагаемыеНДСОперации.Колонки.Добавить("ПодтверждающиеДокументыПредставление", ОбщегоНазначения.ОписаниеТипаСтрока(250));
Возврат НеоблагаемыеНДСОперации;
КонецФункции
Функция НовыйПодтверждающиеДокументы()
ПодтверждающиеДокументы = Новый ТаблицаЗначений;
ПодтверждающиеДокументы.Колонки.Добавить("ТипДокумента", Новый ОписаниеТипов("СправочникСсылка.ТипыДокументов"));
ПодтверждающиеДокументы.Колонки.Добавить("НомерДокумента", ОбщегоНазначения.ОписаниеТипаСтрока(50));
ПодтверждающиеДокументы.Колонки.Добавить("ДатаДокумента", ОбщегоНазначения.ОписаниеТипаДата(ЧастиДаты.Дата));
ПодтверждающиеДокументы.Колонки.Добавить("КлючСтроки", ОбщегоНазначения.ОписаниеТипаСтрока(36));
Возврат ПодтверждающиеДокументы;
КонецФункции
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
КонецПроцедуры
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КонецПроцедуры
#Область ОбработчикиОбновления
Процедура ЗаполнитьПредставлениеПодтверждающихДокументов(Параметры) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000
| ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.Ссылка КАК Ссылка
|ИЗ
| Документ.ФормированиеЗаписейРаздела7ДекларацииНДС.ПодтверждающиеДокументы КАК ФормированиеЗаписейРаздела7ДекларацииНДСПодтверждающиеДокументы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ФормированиеЗаписейРаздела7ДекларацииНДС.НеоблагаемыеНДСОперации КАК ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации
| ПО ФормированиеЗаписейРаздела7ДекларацииНДСПодтверждающиеДокументы.Ссылка = ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.Ссылка
| И ФормированиеЗаписейРаздела7ДекларацииНДСПодтверждающиеДокументы.КлючСтроки = ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.КлючСтроки
|ГДЕ
| ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.ПодтверждающиеДокументыПредставление = """"";
УстановитьПривилегированныйРежим(Истина);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Параметры.ОбработкаЗавершена = Истина;
Возврат;
КонецЕсли;
Параметры.ОбработкаЗавершена = Ложь;
ОбъектовОбработано = 0;
ПроблемныхОбъектов = 0;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектовОбработано = ОбъектовОбработано + 1;
НачатьТранзакцию();
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("Документ.ФормированиеЗаписейРаздела7ДекларацииНДС");
ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
Блокировка.Заблокировать();
ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
Если ДокументОбъект = Неопределено Тогда
Продолжить;
КонецЕсли;
Для Каждого НеоблагаемаяНДСОперация ИЗ ДокументОбъект.НеоблагаемыеНДСОперации Цикл
Если ЗначениеЗаполнено(НеоблагаемаяНДСОперация.ПодтверждающиеДокументыПредставление) Тогда
Продолжить;
КонецЕсли;
СтруктураОтбора = Новый Структура("КлючСтроки", НеоблагаемаяНДСОперация.КлючСтроки);
ПодтверждающиеДокументыПоСтроке = ДокументОбъект.ПодтверждающиеДокументы.НайтиСтроки(СтруктураОтбора);
Если ПодтверждающиеДокументыПоСтроке.Количество() > 0 Тогда
ЗаполнитьПредставлениеДокументаВСтроке(НеоблагаемаяНДСОперация, ПодтверждающиеДокументыПоСтроке);
Иначе
НеоблагаемаяНДСОперация.ПодтверждающиеДокументыПредставление = "<...>";
КонецЕсли;
КонецЦикла;
Попытка
ОбновлениеИнформационнойБазы.ЗаписатьДанные(ДокументОбъект);
ЗафиксироватьТранзакцию();
Исключение
ПроблемныхОбъектов = ПроблемныхОбъектов + 1;
ОтменитьТранзакцию();
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Процедуре Документы.ФормированиеЗаписейРаздела7ДекларацииНДС.ЗаполнитьПредставлениеПодтверждающихДокументов() не удалось обработать документ по причине:
|%1'"),
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение,
Метаданные.Документы.ФормированиеЗаписейРаздела7ДекларацииНДС, Выборка.Ссылка, ТекстСообщения);
КонецПопытки;
КонецЦикла;
Если ПроблемныхОбъектов > 0 Тогда
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Процедуре Документы.ФормированиеЗаписейРаздела7ДекларацииНДС.ЗаполнитьПредставлениеПодтверждающихДокументов() не удалось обработать документы: в %1 из %2 возникли ошибки'"),
ПроблемныхОбъектов,
ОбъектовОбработано);
ВызватьИсключение ТекстСообщения;
Иначе
ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация,
Метаданные.Документы.ФормированиеЗаписейРаздела7ДекларацииНДС,,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Процедура Документы.ФормированиеЗаписейРаздела7ДекларацииНДС.ЗаполнитьПредставлениеПодтверждающихДокументов() обработала очередную порцию документов: %1 документов'"), ОбъектовОбработано));
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьПредставлениеДокументаВСтроке(СтрокаТабличнойЧасти, ПодтверждающиеДокументыПоСтроке)
ПодтверждающиеДокументыПредставление = "";
КоличествоПодтверждающихДокументов = ПодтверждающиеДокументыПоСтроке.Количество();
Для Инд = 0 По КоличествоПодтверждающихДокументов - 1 Цикл
ПодтверждающийДокумент = ПодтверждающиеДокументыПоСтроке[Инд];
Если Инд = 2 Тогда
ПодтверждающиеДокументыПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 и еще %2'"),
ПодтверждающиеДокументыПредставление,
КоличествоПодтверждающихДокументов - 2);
ИначеЕсли Инд < 2 Тогда
ПодтверждающиеДокументыПредставление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1%2%3 №%4 от %5'"),
ПодтверждающиеДокументыПредставление,
?(ЗначениеЗаполнено(ПодтверждающиеДокументыПредставление), ";", ""),
Строка(ПодтверждающийДокумент.ТипДокумента),
ПодтверждающийДокумент.НомерДокумента,
Формат(ПодтверждающийДокумент.ДатаДокумента,"ДЛФ=D"));
КонецЕсли;
КонецЦикла;
СтрокаТабличнойЧасти.ПодтверждающиеДокументыПредставление = ПодтверждающиеДокументыПредставление;
КонецПроцедуры
#КонецОбласти
Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт
ИсточникиДанных = Новый Соответствие;
Возврат ИсточникиДанных;
КонецФункции
Функция ТекстЗапросаНДСЗаписиРаздела7Декларации(Запрос, ТекстыЗапроса, Регистры)
ИмяРегистра = "НДСЗаписиРаздела7Декларации";
Если Не ПроведениеДокументов.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.КодОперации,
| СУММА(ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.СуммаРеализации) КАК СуммаРеализации,
| СУММА(ВЫБОР
| КОГДА &ПравилаЗаполненияДекларацииС4кв2020
| ТОГДА ВЫБОР
| КОГДА ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.КодОперации В (&КодыРеализацийНеНаТерриторииРФ)
| ТОГДА 0
| ИНАЧЕ ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.СуммаПриобретения
| КОНЕЦ
| КОГДА КодыОперацийРаздела7ДекларацииПоНДС.ОперацияНеПодлежитНалогообложению
| ТОГДА ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.СуммаПриобретения
| ИНАЧЕ 0
| КОНЕЦ) КАК СуммаПриобретения,
| СУММА(ВЫБОР
| КОГДА &ПравилаЗаполненияДекларацииС4кв2020
| ТОГДА ВЫБОР
| КОГДА ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.КодОперации В (&КодыРеализацийНеНаТерриторииРФ)
| ТОГДА 0
| ИНАЧЕ ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.НДСПрямой + ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.НДСРаспределенный
| КОНЕЦ
| КОГДА КодыОперацийРаздела7ДекларацииПоНДС.ОперацияНеПодлежитНалогообложению
| ТОГДА ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.НДСПрямой + ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.НДСРаспределенный
| ИНАЧЕ 0
| КОНЕЦ) КАК СуммаНДС,
| ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.Ссылка.Дата КАК Период,
| ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.Ссылка.Ссылка КАК Регистратор,
| ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.Ссылка.Организация
|ИЗ
| Документ.ФормированиеЗаписейРаздела7ДекларацииНДС.НеоблагаемыеНДСОперации КАК ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КодыОперацийРаздела7ДекларацииПоНДС КАК КодыОперацийРаздела7ДекларацииПоНДС
| ПО ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.КодОперации = КодыОперацийРаздела7ДекларацииПоНДС.Ссылка
|ГДЕ
| ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.КодОперации,
| ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.Ссылка.Дата,
| ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.Ссылка.Ссылка,
| ФормированиеЗаписейРаздела7ДекларацииНДСНеоблагаемыеНДСОперации.Ссылка.Организация";
ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
Возврат ТекстЗапроса;
КонецФункции
#КонецОбласти
#КонецЕсли