Отмена совмещения / Модуль менеджера

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

#КонецЕсли

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