Доход в натуральной форме / Модуль менеджера

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция ДанныеДляПроведения(РеквизитыДляПроведения, СтруктураВидовУчета) 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецЕсли

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