Сотрудники / Модуль менеджера

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

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

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

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

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

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

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

// СтандартныеПодсистемы.Печать

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати.
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	СотрудникиВнутренний.ДобавитьКомандыПечати(КомандыПечати);
КонецПроцедуры

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

// Конец СтандартныеПодсистемы.Печать

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

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

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

// СтандартныеПодсистемы.ПоискИУдалениеДублей

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

// См. ПоискИУдалениеДублейПереопределяемый.ПриОпределенииОбъектовСПоискомДублей
//
Процедура ПараметрыПоискаДублей(ПараметрыПоиска, ДополнительныеПараметры = Неопределено) Экспорт
	
	Ограничение = Новый Структура;
	Ограничение.Вставить("Представление",      НСтр("ru = 'Являются подработками сотрудников.'"));
	Ограничение.Вставить("ДополнительныеПоля", "ГоловнойСотрудник");
	ПараметрыПоиска.ОграниченияСравнения.Добавить(Ограничение);
	
	// Размер таблицы для передачи в обработчик.
	ПараметрыПоиска.КоличествоЭлементовДляСравнения = 100;
	
КонецПроцедуры

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

// Конец СтандартныеПодсистемы.ПоискИУдалениеДублей

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

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

#КонецЕсли

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

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

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
	СотрудникиВнутренний.ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка);
КонецПроцедуры

Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
	СотрудникиВнутренний.ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка);
КонецПроцедуры

#КонецЕсли

Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
	
	СотрудникиКлиентСервер.ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка);
	
КонецПроцедуры

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
	
	СотрудникиВызовСервера.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

Функция СтандартныйОтбор() Экспорт
	Возврат СотрудникиВнутренний.СтандартныйОтбор();
КонецФункции

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

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

Функция ПринадлежностиОбъекта() Экспорт
	Возврат ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве("ГоловнаяОрганизация");
КонецФункции

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

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

// См. ИнтеграцияС1СДокументооборотБазоваяФункциональностьПереопределяемый.ДополнитьСоответствиеТипов.
Процедура ДополнитьСоответствиеТипов(Таблица) Экспорт
	
	Настройки = Неопределено;
	
	Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
		МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьВызовСервера = ОбщегоНазначения.ОбщийМодуль(
			"ИнтеграцияС1СДокументооборотБазоваяФункциональностьВызовСервера");
		Настройки = МодульИнтеграцияС1СДокументооборотБазоваяФункциональностьВызовСервера.ИспользоватьИнтеграцию();
	КонецЕсли;
	
	Если Настройки = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Настройки.ИспользоватьИнтеграциюДО2 Тогда
		Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
			МодульИнтеграцияС1СДокументооборотБазоваяФункциональность = ОбщегоНазначения.ОбщийМодуль(
				"ИнтеграцияС1СДокументооборотБазоваяФункциональность");
			МодульИнтеграцияС1СДокументооборотБазоваяФункциональность.ДобавитьСтрокуСоответствияТипов(
				Таблица, "DMUser", Тип("СправочникСсылка.Сотрудники"));
		КонецЕсли;
	ИначеЕсли Настройки.ИспользоватьИнтеграциюДО3 Тогда
		Если ОбщегоНазначения.ПодсистемаСуществует("ИнтеграцияС1СДокументооборотом") Тогда
			МодульИнтеграцияС1СДокументооборотБазоваяФункциональность = ОбщегоНазначения.ОбщийМодуль(
				"ИнтеграцияС1СДокументооборотБазоваяФункциональность");
			МодульИнтеграцияС1СДокументооборотБазоваяФункциональность.ДобавитьСтрокуСоответствияТипов(
				Таблица, "DMEmployee", Тип("СправочникСсылка.Сотрудники"));
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Процедура ИнтеграцияС1СДокументооборотЗаполнитьДанныеСотрудника(Прокси, ОбъектXDTO, Сотрудник,
		ЗаполнятьПодразделение = Истина, ЗаполнятьРуководителя = Истина) Экспорт
	
	Запрос = Новый Запрос();
	Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ВТРабочиеМестаСотрудников.Организация КАК Организация,
	|	ВТРабочиеМестаСотрудников.Сотрудник.Наименование КАК Наименование,
	|	ВТРабочиеМестаСотрудников.ФизическоеЛицо КАК ФизическоеЛицо,
	|	ЕСТЬNULL(Пользователи.Ссылка, НЕОПРЕДЕЛЕНО) КАК Пользователь,
	|	ВТРабочиеМестаСотрудников.Подразделение КАК Подразделение,
	|	ВТРабочиеМестаСотрудников.Должность КАК Должность,
	|	&ДатаНачала КАК ДействуетС,
	|	&ДатаОкончания КАК ДействуетПо
	|ИЗ
	|	ВТРабочиеМестаСотрудников КАК ВТРабочиеМестаСотрудников
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
	|		ПО ВТРабочиеМестаСотрудников.ФизическоеЛицо = Пользователи.ФизическоеЛицо";
	
	ИспользуетсяКадровыйУчет = ПолучитьФункциональнуюОпцию("ИспользоватьКадровыйУчет");
	Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ДатаНачала",
		?(ИспользуетсяКадровыйУчет, "ВТРабочиеМестаСотрудников.ДатаНачала", "ДАТАВРЕМЯ(1,1,1)"));
	Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ДатаОкончания",
		?(ИспользуетсяКадровыйУчет, "ВТРабочиеМестаСотрудников.ДатаОкончания", "ДАТАВРЕМЯ(1,1,1)"));
	
	ДатаСведений = ТекущаяДатаСеанса();
	ПараметрыЗапроса = КадровыйУчет.ПараметрыДляЗапросВТРабочиеМестаСотрудниковПоСпискуСотрудников(
		ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудник),
		ДатаСведений,
		ДатаСведений);
	КадровыйУчет.СоздатьВТРабочиеМестаСотрудников(
		Запрос.МенеджерВременныхТаблиц,
		Истина,
		ПараметрыЗапроса);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		
		Если ЗначениеЗаполнено(Выборка.Наименование) Тогда
			ОбъектXDTO.name = Выборка.Наименование;
		КонецЕсли;
		
		Если ЗначениеЗаполнено(Выборка.ДействуетПо) Тогда
			ОбъектXDTO.isActual = (ТекущаяДатаСеанса() < Выборка.ДействуетПо);
			ОбъектXDTO.beginDate = Выборка.ДействуетС;
			ОбъектXDTO.endDate = Выборка.ДействуетПо;
		КонецЕсли;
		
		Если ЗначениеЗаполнено(Выборка.ФизическоеЛицо) Тогда
			ОсновнойСотрудник = КадровыйУчет.ОсновнойСотрудникФизическогоЛица(
				Выборка.ФизическоеЛицо,
				Выборка.Организация,
				ДатаСведений);
			ОбъектXDTO.mainEmployee = (ОсновнойСотрудник = Сотрудник);
		КонецЕсли;
		
		ИнтеграцияС1СДокументооборотБЗК.ЗаполнитьПодразделение(
			Выборка.Подразделение, Прокси, ОбъектXDTO, ЗаполнятьПодразделение, ЗаполнятьРуководителя);
		ИнтеграцияС1СДокументооборотБЗК.ЗаполнитьФизическоеЛицо(Выборка.ФизическоеЛицо, Прокси, ОбъектXDTO);
		ИнтеграцияС1СДокументооборотБЗК.ЗаполнитьПользователя(Выборка.Пользователь, Прокси, ОбъектXDTO);
		ИнтеграцияС1СДокументооборотБЗК.ЗаполнитьДолжность(Выборка.Должность, Прокси, ОбъектXDTO);
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

Процедура ДобавитьКомандуПечатиКарточкиУчетаСтраховыхВзносов(КомандыПечати) Экспорт
	
	КомандаПечати = КомандыПечати.Добавить();
	КомандаПечати.Обработчик = "УправлениеПечатьюБЗККлиент.ВыполнитьКомандуПечати";
	КомандаПечати.МенеджерПечати = "Отчет.КарточкаУчетаПоСтраховымВзносам";
	КомандаПечати.Идентификатор = "КарточкаУчетаПоСтраховымВзносам";
	КомандаПечати.Представление = НСтр("ru = 'Карточка учета страховых взносов'");
	КомандаПечати.Порядок = 60;
	
КонецПроцедуры

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

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

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

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

#КонецЕсли

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