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