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