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