Командировка / Модуль менеджера

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

КонецФункции 

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

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

	КонецЕсли;
	
	Возврат ДанныеОВремени;
	
КонецФункции

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

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

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

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

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

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

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

#Область ПечатьРасчетаСреднегоЗаработка

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

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

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

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


#Область ПечатьПодробногоРасчетаНачислений

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

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

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

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

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

	Возврат ДанныеДляРегистрацииВУчете;
														
КонецФункции	

// Функция возвращает структуру с описанием данного вида документа.
//
Функция ОписаниеДокумента() Экспорт 

	ОписаниеДокумента = ЗарплатаКадрыРасширенныйКлиентСервер.СтруктураОписанияДокумента();
	
	ОписаниеДокумента.КраткоеНазваниеИменительныйПадеж	 = НСтр("ru = 'командировка'");
	ОписаниеДокумента.КраткоеНазваниеРодительныйПадеж	 = НСтр("ru = 'командировки'");
	ОписаниеДокумента.ИмяРеквизитаСотрудник				 = "Сотрудник";
	ОписаниеДокумента.ИмяРеквизитаОтсутствующийСотрудник = "Сотрудник";
	ОписаниеДокумента.ИмяРеквизитаДатаНачалаСобытия		 = "ДатаНачала";
	ОписаниеДокумента.ИмяРеквизитаДатаОкончанияСобытия	 = "ДатаОкончания";
	
	Возврат ОписаниеДокумента;

КонецФункции

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

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

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

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

#Область ПараметрыВыбораНачислений

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

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

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

КонецФункции

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

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

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

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

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

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

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

Функция ДатаНачалаСобытия(РеквизитыДляПроведения)
	
	Возврат ?(РеквизитыДляПроведения.РассчитыватьСПлановымиНачислениями, РеквизитыДляПроведения.ДатаНачала, КонецМесяца(РеквизитыДляПроведения.ДатаНачала) + 1);
	
КонецФункции

Функция РегистрироватьПлановыеНачисления(РеквизитыДляПроведения)
	
	Возврат РеквизитыДляПроведения.РассчитыватьСПлановымиНачислениями 
			Или (РеквизитыДляПроведения.ДлительнаяКомандировка И РеквизитыДляПроведения.ДатаНачала < НачалоМесяца(РеквизитыДляПроведения.ДатаОкончания));
	
КонецФункции

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

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

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

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

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

Функция ОписаниеТаблицыПерерасчетов() Экспорт
	
	ОписаниеТаблицы = РасчетДокументовБЗК.ОписаниеТаблицыРасчета();
	
	ОписаниеТаблицы.ИмяТаблицы									= "НачисленияПерерасчет";
	ОписаниеТаблицы.НомерТаблицы 								= 1;

	ОписаниеТаблицы.ИмяРеквизитаПериод 							= "ПериодРегистрации";
	ОписаниеТаблицы.ИмяРеквизитаДокументОснование 				= "ДокументОснование";
	
	Возврат ОписаниеТаблицы;
КонецФункции

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

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

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


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

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

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

#КонецЕсли

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