Акт приемки выполненных работ / Модуль объекта

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

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

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

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

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

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

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

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

// Получает данные для формирования движений.
// Возвращает таблицу значений - данные, необходимые для формирования плановых начислений по договорам.
//
Функция ДанныеДляПроведения()
	
	ДанныеДляПроведения = Новый Структура;
	
	НДФЛДоговорыРаботыУслуги = УчетНДФЛ.ДоходыНДФЛПоВидуОсобыхНачислений(Перечисления.ВидыОсобыхНачисленийИУдержаний.ДоговорРаботыУслуги);
	КодДохода = НДФЛДоговорыРаботыУслуги[0];
	
	ВычетыКДоходам = УчетНДФЛ.ВычетыКДоходам(Год(МесяцНачисления));
		КодыВычетов = ВычетыКДоходам[КодДохода];
	КодВычета = КодыВычетов[0];
	Если КодыВычетов.Количество() > 1 Тогда
		КодВычетаДополнительный = КодыВычетов[1];
	Иначе
		КодВычетаДополнительный = Справочники.ВидыВычетовНДФЛ.ПустаяСсылка();
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	Запрос.УстановитьПараметр("КодГПХдляСтраховыхВзносов", УчетСтраховыхВзносов.ВидДоходаДляДоговораНаВыполнениеРабот(Ложь));
	Запрос.УстановитьПараметр("КодГПХдляСтраховыхВзносовОблагаетсяФСС_НС", УчетСтраховыхВзносов.ВидДоходаДляДоговораНаВыполнениеРабот(Истина));
	Запрос.УстановитьПараметр("КодДохода", КодДохода);
	Запрос.УстановитьПараметр("КодВычета", КодВычета);
	Запрос.УстановитьПараметр("КодВычетаДополнительный", КодВычетаДополнительный);
	
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	АктВыполненныхРабот.Организация КАК Организация,
	|	АктВыполненныхРабот.МесяцНачисления КАК МесяцНачисления,
	|	АктВыполненныхРабот.Сотрудник КАК Сотрудник,
	|	АктВыполненныхРабот.Договор КАК Договор,
	|	ВЫБОР
	|		КОГДА ДоговорРаботыУслуги.Номер ЕСТЬ НЕ NULL 
	|			ТОГДА &КодДохода
	|		КОГДА ДоговорАвторскогоЗаказа.Номер ЕСТЬ НЕ NULL 
	|			ТОГДА ДоговорАвторскогоЗаказа.ВидАвторскогоДоговора.КодДоходаНДФЛ
	|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ВидыДоходовНДФЛ.ПустаяСсылка)
	|	КОНЕЦ КАК КодДохода,
	|	ВЫБОР
	|		КОГДА ДоговорРаботыУслуги.Номер ЕСТЬ НЕ NULL 
	|			ТОГДА ВЫБОР
	|					КОГДА ДоговорРаботыУслуги.ОблагаетсяФСС_НС
	|						ТОГДА &КодГПХдляСтраховыхВзносовОблагаетсяФСС_НС
	|					ИНАЧЕ &КодГПХдляСтраховыхВзносов
	|				КОНЕЦ
	|		КОГДА ДоговорАвторскогоЗаказа.Номер ЕСТЬ НЕ NULL 
	|			ТОГДА ДоговорАвторскогоЗаказа.ВидАвторскогоДоговора.КодДоходаСтраховыеВзносы
	|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ВидыДоходовПоСтраховымВзносам.ПустаяСсылка)
	|	КОНЕЦ КАК КодДоходаСтраховыеВзносы,
	|	ВЫБОР
	|		КОГДА ДоговорРаботыУслуги.Номер ЕСТЬ НЕ NULL 
	|			ТОГДА &КодВычета
	|		КОГДА ДоговорАвторскогоЗаказа.Номер ЕСТЬ НЕ NULL 
	|			ТОГДА ДоговорАвторскогоЗаказа.КодВычета
	|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ВидыДоходовНДФЛ.ПустаяСсылка)
	|	КОНЕЦ КАК КодВычета,
	|	ВЫБОР
	|		КОГДА ДоговорРаботыУслуги.Номер ЕСТЬ НЕ NULL 
	|			ТОГДА &КодВычетаДополнительный
	|		ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ВидыДоходовНДФЛ.ПустаяСсылка)
	|	КОНЕЦ КАК КодВычетаДополнительный,
	|	АктВыполненныхРабот.Подразделение КАК Подразделение,
	|	АктВыполненныхРабот.Территория КАК Территория,
	|	АктВыполненныхРабот.СпособОтраженияЗарплатыВФинансовомУчете КАК СпособОтраженияЗарплатыВФинансовомУчете,
	|	АктВыполненныхРабот.МестоВСтруктуреПредприятия КАК МестоВСтруктуреПредприятия,
	|	АктВыполненныхРабот.Договор.ДатаНачала КАК ДатаНачала,
	|	ВЫБОР
	|		КОГДА АктВыполненныхРабот.Договор.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)
	|				ИЛИ АктВыполненныхРабот.Договор.ДатаОкончания > КОНЕЦПЕРИОДА(АктВыполненныхРабот.МесяцНачисления, МЕСЯЦ)
	|			ТОГДА КОНЕЦПЕРИОДА(АктВыполненныхРабот.МесяцНачисления, МЕСЯЦ)
	|		ИНАЧЕ АктВыполненныхРабот.Договор.ДатаОкончания
	|	КОНЕЦ КАК ДатаОкончания,
	|	ЕСТЬNULL(АктВыполненныхРабот.Договор.ЗаключенСоСтудентомРаботающимВСтудотряде, ЛОЖЬ) КАК ЗаключенСоСтудентомРаботающимВСтудотряде,
	|	АктВыполненныхРабот.Результат КАК Сумма,
	|	АктВыполненныхРабот.СуммаВычета КАК СуммаВычета,
	|	АктВыполненныхРабот.СуммаВычетаДополнительная КАК СуммаВычетаДополнительная,
	|	ВЫБОР
	|		КОГДА ДоговорАвторскогоЗаказа.СтавкаНДФЛ ЕСТЬ NULL
	|			ТОГДА ЗНАЧЕНИЕ(Перечисление.КатегорииДоходовНДФЛ.ПустаяСсылка)
	|		КОГДА ДоговорАвторскогоЗаказа.СтавкаНДФЛ = ЗНАЧЕНИЕ(Перечисление.НДФЛСтавки.Ставка03)
	|			ТОГДА ЗНАЧЕНИЕ(Перечисление.КатегорииДоходовНДФЛ.АвторскиеРоялтиПоСтавке03)
	|		КОГДА ДоговорАвторскогоЗаказа.СтавкаНДФЛ = ЗНАЧЕНИЕ(Перечисление.НДФЛСтавки.Ставка05)
	|			ТОГДА ЗНАЧЕНИЕ(Перечисление.КатегорииДоходовНДФЛ.АвторскиеРоялтиПроцентыПоСтавке05)
	|		КОГДА ДоговорАвторскогоЗаказа.СтавкаНДФЛ = ЗНАЧЕНИЕ(Перечисление.НДФЛСтавки.Ставка06)
	|			ТОГДА ЗНАЧЕНИЕ(Перечисление.КатегорииДоходовНДФЛ.АвторскиеРоялтиПоСтавке06)
	|		КОГДА ДоговорАвторскогоЗаказа.СтавкаНДФЛ = ЗНАЧЕНИЕ(Перечисление.НДФЛСтавки.Ставка07)
	|			ТОГДА ЗНАЧЕНИЕ(Перечисление.КатегорииДоходовНДФЛ.АвторскиеРоялтиПроцентыПоСтавке07)
	|		КОГДА ДоговорАвторскогоЗаказа.СтавкаНДФЛ = ЗНАЧЕНИЕ(Перечисление.НДФЛСтавки.Ставка10)
	|			ТОГДА ЗНАЧЕНИЕ(Перечисление.КатегорииДоходовНДФЛ.АвторскиеРоялтиПроцентыПоСтавке10)
	|		КОГДА ДоговорАвторскогоЗаказа.СтавкаНДФЛ = ЗНАЧЕНИЕ(Перечисление.НДФЛСтавки.Ставка15)
	|			ТОГДА ЗНАЧЕНИЕ(Перечисление.КатегорииДоходовНДФЛ.АвторскиеРоялтиПроцентыПоСтавке15)
	|		ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.КатегорииДоходовНДФЛ.ПустаяСсылка)
	|	КОНЕЦ КАК КатегорияДохода,
	|	АктВыполненныхРабот.Ссылка КАК ДоговорАкт,
	|	АктВыполненныхРабот.Договор.Проведен КАК ДоговорПроведен,
	|	ВЫБОР
	|		КОГДА АктВыполненныхРабот.Договор.СпособОплаты = ЗНАЧЕНИЕ(Перечисление.СпособыОплатыПоДоговоруГПХ.ПоАктамВыполненныхРабот)
	|			ТОГДА ИСТИНА
	|		ИНАЧЕ ЛОЖЬ
	|	КОНЕЦ КАК ОплатаПоАктам,
	|	АктВыполненныхРабот.ПланируемаяДатаВыплаты КАК ПланируемаяДатаВыплаты,
	|	АктВыполненныхРабот.ФизическоеЛицо КАК ФизическоеЛицо
	|ИЗ
	|	Документ.АктПриемкиВыполненныхРаботОказанныхУслуг КАК АктВыполненныхРабот
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДоговорРаботыУслуги КАК ДоговорРаботыУслуги
	|		ПО АктВыполненныхРабот.Договор = ДоговорРаботыУслуги.Ссылка
	|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДоговорАвторскогоЗаказа КАК ДоговорАвторскогоЗаказа
	|		ПО АктВыполненныхРабот.Договор = ДоговорАвторскогоЗаказа.Ссылка
	|ГДЕ
	|	АктВыполненныхРабот.Ссылка = &Ссылка";
	
	ДанныеДляПроведения.Вставить("ДанныеДоговора", Запрос.Выполнить().Выгрузить());
	
	РаботаВХозрасчетнойОрганизации = ПолучитьФункциональнуюОпцию("РаботаВХозрасчетнойОрганизации");
	СтатьяРасходовДоговора = Справочники.СтатьиРасходовЗарплата.ПустаяСсылка();
	Если РаботаВХозрасчетнойОрганизации Тогда
		ОписаниеСтатейРасходов = ЗарплатаКадры.СтатьиРасходовПоСпособамРасчетовСФизическимиЛицами();
		СтатьяРасходовДоговора = ОписаниеСтатейРасходов[Перечисления.СпособыРасчетовСФизическимиЛицами.ОплатаТруда];
		РасчетыСКонтрагентами = ОписаниеСтатейРасходов[Перечисления.СпособыРасчетовСФизическимиЛицами.РасчетыСКонтрагентами];
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВЫБОР
		|		КОГДА ДоговорРаботыУслуги.Номер ЕСТЬ НЕ NULL 
		|			ТОГДА ДоговорРаботыУслуги.СпособРасчетовСФизическимиЛицами
		|		КОГДА ДоговорАвторскогоЗаказа.Номер ЕСТЬ НЕ NULL 
		|			ТОГДА ДоговорАвторскогоЗаказа.СпособРасчетовСФизическимиЛицами
		|		ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СпособыРасчетовСФизическимиЛицами.ПустаяСсылка)
		|	КОНЕЦ КАК СпособРасчетов
		|ИЗ
		|	Документ.АктПриемкиВыполненныхРаботОказанныхУслуг КАК Акт
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДоговорРаботыУслуги КАК ДоговорРаботыУслуги
		|		ПО Акт.Договор = ДоговорРаботыУслуги.Ссылка
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДоговорАвторскогоЗаказа КАК ДоговорАвторскогоЗаказа
		|		ПО Акт.Договор = ДоговорАвторскогоЗаказа.Ссылка
		|ГДЕ
		|	Акт.Ссылка = &Ссылка";
		СпособыРасчетов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("СпособРасчетов");
		Если ЗначениеЗаполнено(СпособыРасчетов) И ЗначениеЗаполнено(СпособыРасчетов[0]) Тогда
			Если СпособыРасчетов[0] = Перечисления.СпособыРасчетовСФизическимиЛицами.РасчетыСКонтрагентами Тогда
				СтатьяРасходовДоговора = РасчетыСКонтрагентами;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	НовыеНастройкиБухучета = ОтражениеЗарплатыВБухучете.НоваяТаблицаНастройкиБухучетаДоговоровГПХ();
	Если БухучетУказываетсяРаспределением Тогда
		Для каждого СтрокаТЧ Из НастройкиБухучета Цикл
			НоваяСтрока = НовыеНастройкиБухучета.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
			НоваяСтрока.ДоговорАкт = Ссылка;
			НоваяСтрока.ИдентификаторСтроки = СтрокаТЧ.НомерСтроки;
			Если РаботаВХозрасчетнойОрганизации Тогда
				НоваяСтрока.СтатьяРасходов = СтатьяРасходовДоговора;
			Иначе
				НоваяСтрока.СтатьяРасходов = СтрокаТЧ.СтатьяРасходов;
			КонецЕсли;
		КонецЦикла;
	Иначе
		ИдентификаторСтроки = 0;
		Если СуммаЕНВД > 0 Тогда
			НоваяСтрока = НовыеНастройкиБухучета.Добавить();
			НоваяСтрока.ДоговорАкт 					= Ссылка;
			НоваяСтрока.ИдентификаторСтроки 		= ИдентификаторСтроки;
			НоваяСтрока.ПодразделениеУчетаЗатрат 	= Подразделение;
			НоваяСтрока.СтатьяФинансирования 		= СтатьяФинансирования;
			НоваяСтрока.ОблагаетсяЕНВД 				= Истина;
			НоваяСтрока.ДоляРаспределения 			= СуммаЕНВД;
			НоваяСтрока.СпособОтраженияЗарплатыВБухучете = СпособОтраженияЗарплатыВБухучете;
			Если РаботаВХозрасчетнойОрганизации Тогда
				НоваяСтрока.СтатьяРасходов = СтатьяРасходовДоговора;
			Иначе
				НоваяСтрока.СтатьяРасходов = СтатьяРасходов;
			КонецЕсли;
			ИдентификаторСтроки = ИдентификаторСтроки + 1;
		КонецЕсли;
		Если Результат > СуммаЕНВД Тогда
			НоваяСтрока = НовыеНастройкиБухучета.Добавить();
			НоваяСтрока.ДоговорАкт 					= Ссылка;
			НоваяСтрока.ИдентификаторСтроки 		= ИдентификаторСтроки;
			НоваяСтрока.ПодразделениеУчетаЗатрат 	= Подразделение;
			НоваяСтрока.СтатьяФинансирования 		= СтатьяФинансирования;
			НоваяСтрока.ОблагаетсяЕНВД 				= Ложь;
			НоваяСтрока.СпособОтраженияЗарплатыВБухучете = СпособОтраженияЗарплатыВБухучете;
			Если РаботаВХозрасчетнойОрганизации Тогда
				НоваяСтрока.СтатьяРасходов = СтатьяРасходовДоговора;
			Иначе
				НоваяСтрока.СтатьяРасходов = СтатьяРасходов;
			КонецЕсли;
			Если СуммаЕНВД > 0 Тогда
				НоваяСтрока.ДоляРаспределения = Результат - СуммаЕНВД;
			Иначе
				НоваяСтрока.ДоляРаспределения = 1;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	ДанныеДляПроведения.Вставить("НастройкиБухучета", НовыеНастройкиБухучета);
	
	Возврат ДанныеДляПроведения;
	
КонецФункции

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

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

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

Процедура ЗаполнитьИсходныеДанныеДокумента(ДанныеЗаполнения)

	Если Не ЗначениеЗаполнено(ЭтотОбъект.МесяцНачисления) Тогда
		ДанныеЗаполнения.Свойство("МесяцНачисления", ЭтотОбъект.МесяцНачисления);
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(ЭтотОбъект.Дата) Тогда
		ДанныеЗаполнения.Свойство("Дата", ЭтотОбъект.Дата);
	КонецЕсли;

	Если Не ЗначениеЗаполнено(ЭтотОбъект.Организация) Тогда
		ДанныеЗаполнения.Свойство("Организация", ЭтотОбъект.Организация);
	КонецЕсли;

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

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

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

#Область ЗаполнениеИРасчет	

Функция ПараметрыРасчета() Экспорт
	
	ПараметрыРасчета = Новый Структура();
	ПараметрыРасчета.Вставить("Сотрудник", Неопределено);
	ПараметрыРасчета.Вставить("ТолькоОбновитьНДФЛ", Ложь);
	ПараметрыРасчета.Вставить("ВычетПоНормативу", Ложь);
	
	Возврат ПараметрыРасчета;
	
КонецФункции

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

Функция РеквизитыДоговора(ВычетПоНормативу = Неопределено) Экспорт

	НДФЛДоговорыРаботыУслуги = УчетНДФЛ.ДоходыНДФЛПоВидуОсобыхНачислений(Перечисления.ВидыОсобыхНачисленийИУдержаний.ДоговорРаботыУслуги);
	КодДохода = НДФЛДоговорыРаботыУслуги[0];
	
	ВычетыКДоходам = УчетНДФЛ.ВычетыКДоходам(Год(ЭтотОбъект.МесяцНачисления));
	КодыВычетов = ВычетыКДоходам[КодДохода];
	КодВычета = КодыВычетов[0];
	Если КодыВычетов.Количество() > 1 Тогда
		КодВычетаДополнительный = КодыВычетов[1];
	Иначе
		КодВычетаДополнительный = Справочники.ВидыВычетовНДФЛ.ПустаяСсылка();
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Договор);
	Запрос.УстановитьПараметр("КодГПХдляСтраховыхВзносов", УчетСтраховыхВзносов.ВидДоходаДляДоговораНаВыполнениеРабот(Ложь));
	Запрос.УстановитьПараметр("КодГПХдляСтраховыхВзносовОблагаетсяФСС_НС", УчетСтраховыхВзносов.ВидДоходаДляДоговораНаВыполнениеРабот(Истина));
	Запрос.УстановитьПараметр("КодДоходаНДФЛ", КодДохода);
	Запрос.УстановитьПараметр("КодВычета", КодВычета);
	Запрос.УстановитьПараметр("КодВычетаДополнительный", КодВычетаДополнительный);
	
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ДоговорАвторскогоЗаказа.ДатаНачала КАК ДатаНачала,
	|	ДоговорАвторскогоЗаказа.ДатаОкончания КАК ДатаОкончания,
	|	ДоговорАвторскогоЗаказа.Подразделение КАК Подразделение,
	|	ДоговорАвторскогоЗаказа.Территория КАК Территория,
	|	ДоговорАвторскогоЗаказа.СпособОтраженияЗарплатыВБухучете КАК СпособОтраженияЗарплатыВБухучете,
	|	ДоговорАвторскогоЗаказа.ОтношениеКЕНВД КАК ОтношениеКЕНВД,
	|	ДоговорАвторскогоЗаказа.ВидАвторскогоДоговора.КодДоходаНДФЛ КАК КодДохода,
	|	ДоговорАвторскогоЗаказа.ВидАвторскогоДоговора.КодДоходаСтраховыеВзносы КАК КодДоходаСтраховыеВзносы,
	|	ДоговорАвторскогоЗаказа.КодВычета КАК КодВычета,
	|	ЗНАЧЕНИЕ(Справочник.ВидыВычетовНДФЛ.ПустаяСсылка) КАК КодВычетаДополнительный,
	|	ДоговорАвторскогоЗаказа.СтатьяФинансирования КАК СтатьяФинансирования,
	|	ДоговорАвторскогоЗаказа.СтатьяРасходов КАК СтатьяРасходов,
	|	ДоговорАвторскогоЗаказа.Сумма КАК Результат,
	|	ДоговорАвторскогоЗаказа.СпособРасчетовСФизическимиЛицами КАК СпособРасчетовСФизическимиЛицами
	|ИЗ
	|	Документ.ДоговорАвторскогоЗаказа КАК ДоговорАвторскогоЗаказа
	|ГДЕ
	|	ДоговорАвторскогоЗаказа.Ссылка = &Ссылка
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ДоговорРаботыУслуги.ДатаНачала,
	|	ДоговорРаботыУслуги.ДатаОкончания,
	|	ДоговорРаботыУслуги.Подразделение,
	|	ДоговорРаботыУслуги.Территория,
	|	ДоговорРаботыУслуги.СпособОтраженияЗарплатыВБухучете,
	|	ДоговорРаботыУслуги.ОтношениеКЕНВД,
	|	&КодДоходаНДФЛ,
	|	ВЫБОР
	|		КОГДА ДоговорРаботыУслуги.ОблагаетсяФСС_НС
	|			ТОГДА &КодГПХдляСтраховыхВзносовОблагаетсяФСС_НС
	|		ИНАЧЕ &КодГПХдляСтраховыхВзносов
	|	КОНЕЦ,
	|	&КодВычета,
	|	&КодВычетаДополнительный,
	|	ДоговорРаботыУслуги.СтатьяФинансирования,
	|	ДоговорРаботыУслуги.СтатьяРасходов,
	|	ДоговорРаботыУслуги.Сумма,
	|	ДоговорРаботыУслуги.СпособРасчетовСФизическимиЛицами
	|ИЗ
	|	Документ.ДоговорРаботыУслуги КАК ДоговорРаботыУслуги
	|ГДЕ
	|	ДоговорРаботыУслуги.Ссылка = &Ссылка";
	ТаблицаРезультат = Запрос.Выполнить();
	
	РеквизитыДокумента = Новый Структура();
	РеквизитыДокумента.Вставить("ДатаНачала");
	РеквизитыДокумента.Вставить("ДатаОкончания");
	РеквизитыДокумента.Вставить("Подразделение");
	РеквизитыДокумента.Вставить("Территория");
	РеквизитыДокумента.Вставить("СпособОтраженияЗарплатыВБухучете");
	РеквизитыДокумента.Вставить("ОтношениеКЕНВД");
	РеквизитыДокумента.Вставить("КодДохода");
	РеквизитыДокумента.Вставить("КодДоходаСтраховыеВзносы");
	РеквизитыДокумента.Вставить("КодВычета");
	РеквизитыДокумента.Вставить("КодВычетаДополнительный");
	РеквизитыДокумента.Вставить("СтатьяФинансирования");
	РеквизитыДокумента.Вставить("СтатьяРасходов");
	РеквизитыДокумента.Вставить("СпособРасчетовСФизическимиЛицами");
	РеквизитыДокумента.Вставить("Результат");
	
	Выборка = ТаблицаРезультат.Выбрать();
	Выборка.Следующий();
	ЗаполнитьЗначенияСвойств(РеквизитыДокумента, Выборка);
	
	ВычетПоНормативу = РеквизитыДокумента.КодВычета = УчетНДФЛ.ВычетВПределахНормативовПоАвторскимВознаграждениям();
	РеквизитыДокумента.Вставить("ВычетПоНормативу", ВычетПоНормативу);

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

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

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

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

#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли

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