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

файл
#Область ОбработчикиСобытийФормы

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

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

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	
	СтруктураВозврата = ПриЗакрытииНаСервере();
	
	Если ПеренестиВДокумент Тогда
		ОповеститьОВыборе(СтруктураВозврата);
	КонецЕсли;
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыЗадолженностьНалоговыйАгентНДС

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

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыПодобраннаяКУплатеЗадолженность

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

&НаКлиенте
Процедура ПодобраннаяКУплатеЗадолженностьПослеУдаления(Элемент)
	
	УстановитьТекстПодсказки(ЭтотОбъект);
	Модифицированность = Истина;
	
КонецПроцедуры

&НаКлиенте
Процедура ПодобраннаяКУплатеЗадолженностьПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
	
	УстановитьТекстПодсказки(ЭтотОбъект);
	Модифицированность = Истина;
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Подобрать(Команда)
	
	ВыбранныеСтроки = Элементы.ЗадолженностьНалоговыйАгентНДС.ВыделенныеСтроки;
	Если ВыбранныеСтроки.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	НоваяСтрока = Неопределено;
	Для Каждого ИдентификаторСтроки Из ВыбранныеСтроки Цикл
		
		СтрокаПодбора = Объект.ЗадолженностьНалоговыйАгентНДС.НайтиПоИдентификатору(ИдентификаторСтроки);
		Если СтрокаПодбора.СтрокаПодобрана Тогда
			Продолжить;
		КонецЕсли;
		
		НоваяСтрока = Объект.ПодобраннаяКУплатеЗадолженность.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаПодбора);
		СтрокаПодбора.СтрокаПодобрана = Истина;
	КонецЦикла;
	
	Если НоваяСтрока <> Неопределено Тогда
		УстановитьТекстПодсказки(ЭтотОбъект);
		Модифицированность = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПеренестиВДокумент(Команда)
	
	ПеренестиВДокумент = Истина;
	Закрыть(КодВозвратаДиалога.OK);

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьТекстПодсказки(Форма)
	
	Объект   = Форма.Объект;
	
	ТекстСообщенияПодобрано = НСтр("ru='Всего подобрано к уплате [Подобрано] руб.'");
	
	СуммаПодобрано = Объект.ПодобраннаяКУплатеЗадолженность.Итог("Сумма");
	
	НадписьПодобраноНаСумму = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(
			ТекстСообщенияПодобрано, 
			Новый Структура("Подобрано", СуммаПодобрано));
			
	Форма.НадписьПодобраноНаСумму = НадписьПодобраноНаСумму;
	
КонецПроцедуры

&НаСервере
Функция ПриЗакрытииНаСервере()
	
	СтруктураВозврата = Новый Структура();
	
	Если ПеренестиВДокумент Тогда
		АдресВременногоХранилища = ПоместитьПодобраннуюЗадолженностьВХранилище();
		СтруктураВозврата.Вставить("АдресВременногоХранилища", АдресВременногоХранилища);
	КонецЕсли;
	
	Возврат СтруктураВозврата;
	
КонецФункции

&НаСервере
Функция ПоместитьПодобраннуюЗадолженностьВХранилище()
	
	ТаблицаЗадолженности = Объект.ПодобраннаяКУплатеЗадолженность.Выгрузить();
	АдресВременногоХранилища = ПоместитьВоВременноеХранилище(ТаблицаЗадолженности, УникальныйИдентификатор);
	
	Возврат АдресВременногоХранилища;
	
КонецФункции

&НаКлиенте
Процедура ВопросПеренестиВДокументЗавершение(ОтветНаВопрос, ДополнительныеПараметры) Экспорт
	
	Если ОтветНаВопрос = КодВозвратаДиалога.Да Тогда
		ПеренестиВДокумент = Истина;
		Закрыть();
	ИначеЕсли ОтветНаВопрос = КодВозвратаДиалога.Нет Тогда
		ПеренестиВДокумент = Истина;
		Объект.ПодобраннаяКУплатеЗадолженность.Очистить();
		Закрыть();
	КонецЕсли;
	
КонецПроцедуры

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

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

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