Для корректной работы отчета необходимо внести изменения в справочник «СотрудникиОрганизаций»:
в табличную часть «ЕжегодныеОтпуска» надо добавить реквизит «Период» (Тип:Дата) и вывести его на форму «ФормаВводаЕжегодныхОтпусков»
Эти изменения для отпусков, у которых со временем меняется количество дней, положенных сотруднику, например, с выслугой или инвалидностью.
Отпуск за вредность считается на основе табелей рабочего времени. У нас вредность отражается в программе вечерними часами (Справочник.КлассификаторИспользованияРабочегоВремени.РаботаВечерниеЧасы), но можно поменять в коде. Если время во вредности к явке больше или равно 0.5, то день учитывается в стаже для отпуска.
После формирования отчета можно сделать расшифровку поля «Сотрудник», откроется типовая справка по отпуску. Расшифровка поля «Вид ежегодного отпуска» откроет детализацию отпуска по рабочим годам и месяцам(имеет смысл для персонального отпуска и отпуска за вредность).
Перед формированием отчета в параметрах надо указать отпуск за вредность.
Тестирование: по 180 сотрудникам расчитал за 8 минут. (1С клиент-серв)
Функция ИсходныеДанныеДляРасчетаОстатков — возвращает структуру данных, базу для расчета остатков отпусков.
В запрос добавил вывод поля «Период» из ТЧ ЕжегодныеОтпуска справочника «Сотрудники организаций». Далее в функции ЗаработанныеОтпуска эта дата анализируется, если есть и заполнена,естественно. Здесь необходимо заметить, что если у сотрудника меняется продолжительность отпуска, то необходимо указать всю историю изменений для корректной работы. Т.е. если раньше сотруднику было положенно 28 дней отпуска по основному ежегодному, и с какого — то времени — 30. То необходимо указать и 28, и 30 в ТЧ Ежегодные отпуска.
Функция ЗаработанныеОтпуска — формирует таблицу значений ТаблицаЗаработанныхДнейОтпусков. Колонки:
— Сотрудник;
— ВидЕжегодногоОтпуска;
— ДатаНачала — Начало рабочего года;
— ДатаОкончания — Окончание рабочего года;
— Период — Дата в рабочем месяце, с которой сотруднику положен отпуск за данный месяц (напр, 2,33 дня, если это основной ежегодный отпуск);
— КоличествоДнейЗаПериод — количество заработанных дней отпуска за данный месяц (расчитывается делением общей продолжительности отпуска на 12 (месяцев));
Добавил колонку «РабочиеДни», сюда записываю число рабочих дней сотрудника в месяце по его графику, это необходимо для расчета отпуска за вредность.
Функция ОстаткиОтпусков — собственно, здесь происходит окончательное формирование таблицы по сотрудникам с конечными остатками по видам отпусков. Здесь же и проводится расчет остатков отпуска за вредность. Я дополняю таблицу ТаблицаЗаработанныхДнейОтпусков следующими данными: ДнейСтажа, которые высчитваются по регистру накопления РабочееВремяРаботниковОрганизаций, в котором часы вредности у нас указаны вечерними часами. День засчитывается в стаж,если во вредности было отработанно половина или более от рабочего дня. Сам расчет следующий: если по должности положено 14 дней отпуска за вредность, то за месяц выходит 14/12 = 1.17, это если дни стажа совпадают с количество рабочих дней в месяце, если дней стажа меньше, то и дней отпуска уже положенно не 1.17, а 1.17/ЧислоРабочихДней*ДнейСтажа.
Ограничение: на данный момент ЧислоРабочихДней в месяце у сотрудника высчитываю запросом к регистру сведений ГрафикиРаботыПоВидамВремени на начало месяца. Соответственно, если у сотрудника была смена графика в течении месяца, то за данный месяц количество рабочих дней будет неверное.
UPD: в последних релизах ЗУП произошли изменения в общих модулях. Необходимо ОбщегоНазначения заменить на ОбщегоНазначенияЗК в модуле отчета во всех случаях обращения к функциям, процедурам этого модуля. Быстро сделать можно Ctrl-H или Правка — Заменить
Изменил расшифровку отпуска поля «Вид ежегодного отпуска», она показывала данные по первому сотруднику из отчета. На данный момент эту расшифровку перенес на поле «Сотрудник» («Детализация отпусков»), сформирует справку по всем видам отпусков у данного сотрудника в разрезе месяцев.
Расшифровку отчета «Детализация отпусков» сделал более информативной.
Зарплата и Управление Персоналом, редакция 2.5 (2.5.64.3)
Ошибка исполнения отчета
по причине:
Ошибка при выполнении обработчика — ‘ПриКомпоновкеРезультата’
по причине:
{ВнешнийОтчет.ОтчетПоОтпускам.МодульОбъекта(1681)}: Ошибка при вызове метода контекста (ВыполнитьПакет)
по причине:
{(410, 48)}: Поле не найдено «СотрудникиОрганизацийЕжегодныеОтпуска.Период»
ТОГДА СотрудникиОрганизацийЕжегодныеОтпуска.<<?>>Период
Необходимо реквизит «Период» добавить в ТЧ ЕжегодныеОтпуска спр-ка «СотрудникиОрганизаций». В публикации я это упоминал.
Расшифровка «Детализация отпуска» , выдает данные по виду отпуска по первому сотруднику из отчета. Так что ее имеет смысл смотреть, если отчет формировать с отбором по одному сотруднику. Постараюсь это исправить.
Изменил расшифровку, теперь корректно работает
Для учета любого количества дополнительных отпусков достаточно типового механизма.
Для сотрудника можно указать штатным образом в остатках отпусков, сколько у него отпусков, с какой они даты, и сколько дней отпуска в год сотруднику полагается. В частности, упомянутые в статье «персональные отпуска» в эту схему прекрасно укладываются.
С отпусками «за вредность», если пренебречь учетом неотработанных дней, ситуация тоже типовая — отпуск указывается для должности, тогда право на получения отпуска предоставляется за период, когда сотрудник занимал эту должность.
(5) mikhailovaew, к сожалению, типовой механизм у нас не прижился. Вернее был отторгнут на начальной стадии, когда только начали искать варианты подсчета отпусков за вредность и отпусков за выслугу, инвалидности.
— сотрудник постоянно работает на данной должности и определенное количество часов проводит во вредных условиях, вот за это самое время кадровики и просили подсчитать сколько дней отпуска положено сотруднику. Оформлять фиктивные перемещения между должностями для подсчета отпуска тоже не вариант. В итоге решили завязаться на табель, ведь там эта вредность учитывается для надбавки.
По «персональным», они прекрасно работают, спору нет, но при изменении количества дней отпуска (при выслуге) надо снова поработать с остатками. Здесь кадровики снова встали в позу, удалось договориться, что добавим дату, с которой увеличивается или уменьшается количество дней отпуска.
В добавок
нельзя так у нас, потому что за этим следит отдел внутреннего аудита, периодически проводит мониторинг,достает кадровиков и нас:-)(раз в год то уж точно,когда резервы формируются).
(6) понятно, все же в большинстве организаций не так все строго )
Добрый день.
1. Нельзя ли как-то обойтись без дополнительного реквизита Период?
Из-за одного реквизита конфигурация станет нетиповой.
Я настроила, но бухгалтер возражает. Ведь это внешняя обработка.
2. Подскажите пожалуйста, в настройках отчета используется параметр Отпуск за вредность.
Если выбрать не список, а только один вид, например Дополнительный отпуск(вредность) — это у нас так называется, то все равно выводит все виды отпусков, которые имеются у сотрудника.
В целом отчет отличный. Но мне придется многое дорабатывать. Кадровик рассчитывает по своей формуле.
3. Как будет рассчитываться отпуск за вредность, если в середине расчетного периода у сотрудника поменяется график? Вы упомянули, но мало. Не поняла, если честно)
Спасибо за разработку. Отлично. Буду благодарна за ответ.
(8) llg_44,
Добрый день
1. Обойтись можно, но необходимо в запросах убрать обращение к этому реквизиту, и соответственно, не будет возможности указать изменение длительности персонального отпуска. Если нет в этом необходимости,то конечно, удаляйте.
2.это не отбор, а скорее способ указать, какой отпуск считать по фактически отработанному времени.(по табелю).Попробуйте вид отпуска указать в нижней таб части, реквизит «Вид ежегодного отпуска». Тогда по конкретному виду отчет должен отработать.
3. да, этот момент не отработан.
В целом согласен, этот отчет не конечное решение, а некоторая основа, которую можно использовать в своих решениях.
Спасибо за ответ.
(9) dvimix, к сожалению с отбором не получается только по одному виду отпуска.
Изменить отчет смогла без учета настройки Периода.
Хорошая статья. Помогает четко определиться с сутью вопроса. Спасибо.