Распределение НДС / Модуль объекта

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

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

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

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	
	ПроверитьДублиДокументов(Отказ);
	
	МассивНепроверяемыхРеквизитов = Новый Массив;
	
	НеобходимоРаспределениеНДС = Документы.РаспределениеНДС.НеобходимоРаспределениеНДС(Организация, Дата);
	
	ПараметрыВыбораСтатейИАналитик = Документы.РаспределениеНДС.ПараметрыВыбораСтатейИАналитик(ЭтотОбъект);
	ДоходыИРасходыСервер.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты, ПараметрыВыбораСтатейИАналитик);

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

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

Процедура ПриЗаписи(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
	
	РаспределениеНДСЛокализация.ПриЗаписи(ЭтотОбъект, Отказ);
	
КонецПроцедуры

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

Процедура ОбработкаУдаленияПроведения(Отказ)
	
	ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
	РаспределениеНДСЛокализация.ОбработкаУдаленияПроведения(ЭтотОбъект, Отказ);
	
КонецПроцедуры

#Область ЗаполнениеДокумента

Процедура ЗаполнитьРеквизитыПоУмолчанию()

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

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

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

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

Процедура ПроверитьДублиДокументов(Отказ)
	
	УстановитьПривилегированныйРежим(Истина);
	
	Запрос = Новый Запрос(
		"ВЫБРАТЬ
		|	РаспределениеНДС.Ссылка КАК Ссылка
		|ИЗ
		|	Документ.РаспределениеНДС КАК РаспределениеНДС
		|ГДЕ
		|	РаспределениеНДС.Проведен
		|	И РаспределениеНДС.Организация = &Организация
		|	И РаспределениеНДС.Дата МЕЖДУ &ПериодНачало И &ПериодОкончание
		|	И НЕ РаспределениеНДС.Ссылка = &ТекущийДокумент");
	
	Запрос.УстановитьПараметр("Организация", Организация);
	Запрос.УстановитьПараметр("ПериодНачало", НачалоМесяца(Дата));
	Запрос.УстановитьПараметр("ПериодОкончание", КонецМесяца(Дата));
	Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка);
	
	Результат = Запрос.Выполнить();
	Если Не Результат.Пустой() Тогда
		
		ПредставлениеПериода = ПредставлениеПериода(НачалоМесяца(Дата), КонецМесяца(Дата), "ДЛФ=D");

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

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

#КонецЕсли

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