Реквизиты формы:
1. Дата отчета - обязателен для заполнения.
2. Среднее кол-во дней в месяце - по умолчанию 30.4.
3. Показать дни и месяцы - показывать или нет Дней отработанных / Дней отработанных минус отпуск без сохранения / Кол-во месяцев.
4. Показать оклад - показывать оклады или нет.
Печатная форма:
1. Цвета которые используются при покраске ячеек (какой цвет для чего) - выводятся сверху печатной формы.
Принцип работы:
1. Данные берутся из документов обычной выборкой, можете попробовать написать "черный запрос", возможно будет быстрее.
2. Выбираются все сотрудники которые работают на дату отчета, если сотрудник работал, потом уволился, и снова был принят - будет учитываться последний период его работы (после второго приема на работу). Отчет находит дату приема на работу, она выводится в печатную форму и по ней определяется больше года отработал сотрудник или нет. Если он не нашел дату в истории, он ищет ее в записанных за последний месяц документах "Приказ о приеме" (пожелание наших кадровиков).
3. Аналогично проверяется и дата увольнения: если сотрудник уволен до даты отчета - он пропускается, если отчет не нашел дату увольнения в истории - он смотрит в записанных приказах.
4. Далее выбираются все Приказы на отпуск, при этом учитываются и записанные и проведенные, и по каждому сотруднику считается сколько в каком отпуске был. При этом отпуск очередной берется весь, даже если дата окончания отпуска больше даты отчета, а вот у отпуска по уходу и у отпуска без сохранения - берется только период до даты отчета.
5. А теперь самое интересное, собственно сам алгоритм расчета:
- Берется количество дней с начала работы до даты отчета, из него вычитается отпуск без сохранения з/п (если этот отпуск превышает 14 дней), потом делится на среднее кол-во дней в месяце (реквизит формы). Округляем и получаем целое кол-во месяцев. За каждый месяц сотрудник заработает 2.33 дня отпуска. За каждый третий месяц - 2.34 дня. То есть за три отработанных месяца у сотрудника получится ровно 7 дней отпуска. В год соответственно - 28. Таким образом рассчитывается сколько сотруднику положено дней отпуска. Потом из этой цифры вычитается сколько он уже отгулял и выводится итоговая цифра - резерв (+) или превышение(-).
- Еще там есть округление превышения, дробная часть приводится к такому виду: 0.66 (если было 0.67) и 0.33 (если было 0.34). Тоже пожелание кадровиков.
6. В коде есть мои комментарии, поэтому если захотите доработать отчет - сделаете это без проблем.