Подтверждение оплаты НДС в бюджет / Форма документы оплаты / Модуль формы

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

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

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

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ОплатаПодтвержденаПриИзменении(Элемент)
	
	УстановитьВидимостьДоступностьЭлементов();
	
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыДокументыОплаты

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ЗаписатьНаСервере()

	Если ЭтаФорма.Модифицированность Тогда
		РегистрыСведений.ПодтверждениеОплатыНДСВБюджет.ЗаписатьДанныеОплаты(СчетФактура, ДокументыОплаты.Выгрузить());
	КонецЕсли;

	Если ЭтоЗаявлениеОВвозе Тогда
		РегистрыСведений.ПодтверждениеОплатыНДСВБюджет.ЗаписатьПодтверждениеОплаты(СчетФактура, 
																				   ОплатаПодтверждена,
																				   НомерОтметкиОРегистрации,
																				   ДатаПодтвержденияОплаты);
		ЗаявлениеОВвозеЛокализация.СформироватьДвиженияВЖурналУчетаСчетовФактур(СчетФактура);
	КонецЕсли;
	
	Возврат РегистрыСведений.ПодтверждениеОплатыНДСВБюджет.ТекстСостояниеОплатыНДСВБюджет(СчетФактура);
	
КонецФункции

&НаСервере
Процедура ЗаполнитьПоДаннымРасчетовНаСервере()
	
	ТаблицаОплат = РегистрыСведений.ПодтверждениеОплатыНДСВБюджет.СформироватьТаблицуОплатНДСВБюджет(СчетФактура, ДокументыОплаты.Выгрузить());
	
	ДокументыОплаты.Загрузить(ТаблицаОплат);	
	
КонецПроцедуры

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

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