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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Функция ДанныеДляРегистрацииВУчетаСтажаПФР(МассивСсылок) Экспорт
	
	Возврат Документы.Увольнение.ДанныеДляРегистрацииВУчетаСтажаПФР(МассивСсылок, Истина);													
	
КонецФункции	


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

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

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

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

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

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

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

Функция ВидыОтпусковОбъекта(ТаблицаОтпусковСотрудников, Ссылка, Сотрудник)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Процедура СформироватьДвиженияМероприятийТрудовойДеятельности(НаборЗаписей, ДанныеДляПроведения) Экспорт
	
	Документы.Увольнение.СформироватьДвиженияМероприятийТрудовойДеятельности(НаборЗаписей, ДанныеДляПроведения);
	
КонецПроцедуры

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

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

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

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

#КонецЕсли

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