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