Премия / Модуль менеджера

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

#Область ПрограммныйИнтерфейс

// СтандартныеПодсистемы.ВерсионированиеОбъектов

// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
//  Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт

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

// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

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

			// Начисления
			РасчетЗарплатыРасширенный.СформироватьДвиженияНачислений(
				Движения, Отказ, РеквизитыДляПроведения.Организация, МесяцНачисления, ДанныеДляПроведения.Начисления, ДанныеДляПроведения.ПоказателиНачислений, Истина);
				
			РасчетЗарплатыРасширенный.СформироватьДвиженияРаспределенияПоТерриториямУсловиямТруда(Движения, Отказ, РеквизитыДляПроведения.Ссылка, РеквизитыДляПроведения.РаспределениеПоТерриториямУсловиямТруда);
			РасчетЗарплатыРасширенный.СформироватьДвиженияРаспределенияРезультатовНачислений(Движения, Отказ, РеквизитыДляПроведения.Ссылка, РеквизитыДляПроведения.РаспределениеРезультатовНачислений);
			ПерерасчетЗарплаты.СформироватьДвиженияИсходныеДанныхПерерасчетов(Движения, РеквизитыДляПроведения.Организация, РеквизитыДляПроведения.ПериодРегистрации, ДанныеДляПроведения.Начисления);

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

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

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.УправлениеДоступом

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

// Конец СтандартныеПодсистемы.УправлениеДоступом

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

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

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

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

#Область СлужебныйПрограммныйИнтерфейс

#Область ОбработчикиПравилРегистрации

// См. ЗарплатаКадрыРасширенныйСинхронизацияДанных.ШаблонОбработчика
Процедура ПриЗаполненииНастроекОбработчиковПравилРегистрации(Настройки) Экспорт
	ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОтбораПоОрганизации(Настройки);
	ЗарплатаКадрыРасширенныйСинхронизацияДанных.ДляОбъектаСПрисоединеннымиФайлами(Настройки);
КонецПроцедуры

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

// Возвращает описание состава документа
//
// Возвращаемое значение:
//  Структура - см. ЗарплатаКадрыСоставДокументов.НовоеОписаниеСоставаОбъекта.
Функция ОписаниеСоставаОбъекта() Экспорт
	
	МетаданныеДокумента = Метаданные.Документы.Премия;
	Возврат ЗарплатаКадрыСоставДокументов.ОписаниеСоставаОбъектаПоМетаданнымФизическиеЛицаВТабличныхЧастях(МетаданныеДокумента);
	
КонецФункции

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

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

Функция ПараметрыИсправляемогоДокумента(ДокументСсылка) Экспорт
	
	Возврат ИсправлениеДокументовЗарплатаКадры.ПараметрыИсправляемогоДокумента(ДокументСсылка,
		СвойстваИсправляемогоДокумента(ДокументСсылка));
	
КонецФункции

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

Функция ОбъектЗаблокирован(СсылкаНаОбъект) Экспорт
	
	Возврат Ложь;
	
КонецФункции

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

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

Функция ДобавитьКомандыСозданияДокументов(КомандыСозданияДокументов, ДополнительныеПараметры) Экспорт
	
	ЗарплатаКадрыРасширенный.ДобавитьВКоллекциюКомандуСозданияДокументаПоМетаданнымДокумента(
		КомандыСозданияДокументов, Метаданные.Документы.Премия);
	
КонецФункции

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати.
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	// Приказ о поощрении сотрудников (Т-11а).
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
	КомандаПечати.МенеджерПечати = "Отчет.ПечатнаяФормаТ11";
	КомандаПечати.Идентификатор = "ПФ_MXL_Т11а";
	КомандаПечати.Представление = НСтр("ru = 'Приказ о поощрении сотрудников (Т-11а)'");
	
	// Приказ о поощрении сотрудника (Т-11).
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
	КомандаПечати.МенеджерПечати = "Отчет.ПечатнаяФормаТ11";
	КомандаПечати.Идентификатор = "ПФ_MXL_Т11";
	КомандаПечати.ДополнительныеПараметры.Вставить("ПечатьВсехПриказов", Истина);
	КомандаПечати.Представление = НСтр("ru = 'Приказы на каждого сотрудника в отдельности (Т-11)'");
	КомандаПечати.ДополнительныеПараметры.Вставить("РеквизитыДетализации", "РаботаСотрудник");
	
КонецПроцедуры	

Функция ДанныеДляБухучетаЗарплатыПервичныхДокументов(Объект) Экспорт

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

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

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

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

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

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

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

	ПараметрыЗаполнения = ПерерасчетЗарплаты.ПараметрыЗаполненияИсходныхДанныхПерерасчетов();
	ПараметрыЗаполнения.ПолеВидРасчета = "Ссылка.ВидПремии";
	ПерерасчетЗарплаты.ЗаполнитьИсходныеДанныеПерерасчетов(ПараметрыОбновления, Метаданные.Документы.Премия, ПараметрыЗаполнения);

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

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

#Область СозданиеНовогоДокумента

Функция ДанныеНовогоДокумента() Экспорт

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

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

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

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

#Область Расчет

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

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

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

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

Функция РассчитыватьРазовыеНачисленияВЦеломЗаПериод() Экспорт
	НастройкиРасчетаЗарплаты = РасчетЗарплатыРасширенный.НастройкиРасчетаЗарплаты();
	Возврат НастройкиРасчетаЗарплаты.РассчитыватьРазовыеНачисленияВЦеломЗаПериод;
КонецФункции

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

Функция ОписаниеДокумента(ОбъектДокумента, ПараметрыРасчета) Экспорт
	
	ПраваНаДокумент = ЗарплатаКадрыРасширенный.ПраваНаМногофункциональныйДокумент(ОбъектДокумента);

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

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

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

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

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

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

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

Функция ОписаниеТаблицыКорректировкиВыплаты() Экспорт
	
	ОписаниеТаблицы = РасчетЗарплатыРасширенныйКлиентСервер.ОписаниеТаблицыКорректировкиВыплаты();
	Возврат ОписаниеТаблицы;
	
КонецФункции

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

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

#КонецЕсли

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