Мониторинг отсутствий сотрудника и остаток дней отпуска - подробно для ЗУП 3.1
Учетные задачи - Учет рабочего времени
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
1. Задача, с которой всё началось
Кадровик пришёл с вопросом: "Система показывает у сотрудника 5 дней отпуска, а мы с сотрудником пересчитали вручную - получается 10. Кто прав?"
Ситуация классическая: цифру в 1С видно, а из чего она сложилась - нет. Отчёт "Остатки отпусков" показывает итог, карточка сотрудника - список отпусков, а вот свести одно с другим, да ещё с "авансами" и больничными, попавшими в отпуск,- уже работа на полдня.
В этой статье:
- как устроен расчёт остатка в ЗУП 3.1.30+ и как проверить его запросом за пару минут;
- как разложить итог по годам и по документам, чтобы увидеть "аванс" и "возврат";
- готовый инструмент - внешняя обработка "Мониторинг отсутствий сотрудника";
- отдельный нюанс, на котором спотыкаются почти все: два документа отпуска на одни и те же даты - это перерасчёт, и нулевые дни во второй строке - норма, а не ошибка.
2. Откуда берётся цифра: модель "заработанные права + фактические отпуска"
В актуальных релизах ЗУП остаток отпуска считается не "по среднему", а из двух регистров:
РегистрСведений.ЗаработанныеПраваНаОтпуска- сколько дней сотрудник заработал. Начисление идёт ежемесячно:28 / 12 = 2,33333дня за полный месяц, накапливается нарастающим итогом по каждому рабочему году (у сотрудника, принятого 02.12.2021, рабочие годы идут 02.12–01.12).РегистрНакопления.ФактическиеОтпуска- сколько дней фактически списано приказами об отпуске.
Формула простая:
Остаток = Σ ЗаработанныеПрава − Σ ФактическиеОтпуска
Именно эту пару и надо проверить, когда "система говорит одно, а люди - другое".
Рис. 1. Отчёт "Мониторинг отсутствий сотрудника" по сотруднику на дату.
3. Проверка запросом: два разреза - календарный и по рабочим годам
Остаток удобно смотреть в двух разрезах. Первый - по календарным годам (как привыкли кадровики), второй - по рабочим годам (как считает сама ЗУП).
3.1. Таблица по календарным годам
Запрос (собирается в "Консоли запросов", параметры -&Сотрудник и &Дата):
| Год | Начислено | Накоплено всего | Остаток на начало | Доступно | Использовано | Остаток на конец |
|---|---|---|---|---|---|---|
| 2021 | 2,33 | 2,33 | 0,00 | 2,33 | 0,00 | 2,33 |
| 2022 | 28,00 | 30,33 | 2,33 | 30,33 | 28,00 | 2,33 |
| 2023 | 28,00 | 58,33 | 2,33 | 30,33 | 28,00 | 2,33 |
| 2024 | 28,00 | 86,33 | 2,33 | 30,33 | 31,00 | -0,67 |
| 2025 | 28,00 | 114,33 | -0,67 | 27,33 | 28,00 | -0,67 |
| 2026 (на 13.11) | 25,67 | 140,00 | -0,67 | 25,00 | 20,00 | 5,00 |
Здесь сразу видно два важных момента:
- Начисление 2,33 за декабрь 2021 - это не "бонус", а первый месяц первого рабочего года (02.12.2021–01.12.2022). Поэтому "на конец 2022 накоплено 30,33" - это 28 за первый рабочий год плюс 2,33 за первый месяц второго (он начался 02.12.2022). Складывать "30,33 - 28 = 2,33 свободных дня" и переносить этот остаток на сегодня нельзя: в 2024 году сотрудник взял 31 день при начислении 28 (14 в апреле + 17 в августе), и эти 2,33 "съелись", остаток ушёл в -0,67.
- Итог на 11.11.2026: 140,00 − 135,00 = 5,00 дня. Ровно то, что показывает система.
3.2. Разрез по рабочим годам и "аванс" по документам
Если разложить те же данные по рабочим годам (02.12–01.12), картина становится ещё прозрачнее:
| Рабочий год | Положено | Использовано | Остаток |
|---|---|---|---|
| 02.12.2021–01.12.2022 | 28 | 28 (14 + 14) | 0 |
| 02.12.2022–01.12.2023 | 28 | 28 (14 + 14) | 0 |
| 02.12.2023–01.12.2024 | 28 | 31 (14 + 17) | 0, из них 3 дня - авансом |
| 02.12.2024–01.12.2025 | 28 | 31 (3 + 14 + 14) | 0, из них 3 дня - авансом |
| 02.12.2025–01.12.2026 | 28 | 23 (3 + 20) | 5 |
"Аванс" - это дни, которые сотрудник отгулял сверх остатка своего рабочего года и которые "ушли в счёт" следующего:
- приказ 80-от от 24.07.2024: 17 дней при остатке 14 → -3;
- приказ 155-от от 21.07.2025: 14 дней при остатке 11 → -3.
Именно эти -3 и -3 дают на конец 2024 и 2025 остаток -0,67, а к ноябрю 2026 - те самые 5 дней.
Рис. 2. Расшифровка по документам с колонкой "Аванс (-) / возврат (+)".
3.3. А если 10?
Чтобы получить 10, нужно либо начислить 145 дней (норма 28 в год, и в штатном расписании, и в карточке сотрудника - 28), либо признать неиспользованными 5 дней. В базе нет ни того, ни другого: все девять приказов проведены, сторно и приостановок нет, единственный 5-дневный блок - хвост февральского отпуска 03–07.03.2026, и он оплачен (20 дней: 13 в феврале + 7 в марте). Обычно "лишние 5" появляются, когда в ручном расчёте февральский отпуск считают 15 днями вместо 20, либо когда к остатку прибавляют "дни, которые ещё начислятся" до конца года.
Закладка 1. "Остатки и расшифровка"
- Сверху крупно - остаток на выбранную дату и справа красным "взято авансом по документам".
- Таблица начислений/использования по годам - та самая, из раздела 3.1.
- Ниже -расшифровка по документам: дата с / дата по, дней, документ (гиперссылкой, открывается в 1С), вид отпуска, рабочий год и колонка "Аванс (-) / возврат (+)":
- аванс - минус и красным (
−3,00); - возврат дней по больничному, попавшему в отпуск, - плюс и зелёным (
+3,00).
- аванс - минус и красным (
Алгоритм аванса последовательный, по рабочим годам: берём норму года (28), вычитаем уже выбранное в этом году; превышение = аванс и переносится в следующий рабочий год. Поэтому больничный, "выпавший" на отпуск (табличная часть "Периоды приостановки отпуска" в приказе), показывается как +N и уменьшает использование - дни возвращаются на баланс.
Закладка 2. «Все отсутствия»
Хронологический список всех отсутствий: отпуска с сохранением и без оплаты (фиолетовым), больничные (синим), прогулы/неявки (красным), переносы отпуска (серым). Колонки: дата с, дата по, дней, вид, документ-ссылка, примечание (основание, рабочий год).
Рис. 3. Пример: два документа на одни даты, у второго - 0,00 дней (перерасчёт).
Экспорт в Excel и PDF
На форме две кнопки -"Excel" и "PDF". Они сохраняют одним файлом все три таблицы: начисления по годам, расшифровку по документам и список отсутствий. Excel -.xlsx с рамками, выровненными вправо числами и альбомной ориентацией страницы; PDF - тот же макет для печати и отправки.
Почему отдельными кнопками, а не "дискеткой": встроенная кнопка сохранения у поля HTML-документа умеет сохранять только сам HTML. Поэтому печатная форма собирается программно в ТабличныйДокумент и пишется в .xlsx/.pdf штатным Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX/PDF), а на клиенте пользователь выбирает место через диалог сохранения.
4. Нюанс: два документа отпуска на одни даты в списке - это перерасчёт
В расшифровке иногда видно такую картину: в одном периоде два документа "Отпуск" на одни и те же даты, причём у второго в колонке "Дней" стоит 0,00 (или пусто). Это не ошибка и не "пропавшие" дни.
Что происходит:
- Сотруднику оформляют отпуск приказом № 1 (например, 15.02–07.03.2026, 20 дней). В регистр
ФактическиеОтпускауходит запись на 20 дней. - Затем отпуск пересчитывают: исправляют сумму, период регистрации, основание, дату выплаты - словом, всё, что не меняет продолжительность. Создаётся второй документ-перерасчёт (или исправленный документ), и он регистрирует дельту, а не полные дни.
- Если продолжительность не менялась, дельта по дням = 0. В расшифровке появляется вторая строка с теми же датами и нулём дней.
Поэтому правило чтения расшифровки простое:
- строк несколько - суммируем дни по строкам, а не "считаем документы";
- 0,00 во второй строке - признак перерасчёта, а не ошибки: дни не изменились, изменились деньги/реквизиты;
- если перерасчёт меняет продолжительность (отпуск продлили или сократили), второй документ даст дельту
+Nили−N- тогда смотрите на знак и на итог по периоду; - "Итого" по периоду в таблице начислений/использования считается по регистру, а не по количеству документов, поэтому перерасчёт на итог не влияет.
В обработке такие строки видны отдельно (своя строка на каждый документ-регистратор), поэтому ноль сразу понятен: это не "потерянные" дни, а дельта перерасчёта. Если же ноль стоит у единственного документа периода - вот это уже повод проверять: значит, документ есть, а движения по дням нет.
"Система показывает 5, а должно быть 10" почти всегда означает: либо в ручном расчёте потеряли 5 дней использования, либо посчитали авансом то, что ещё не начислено. В нашем случае правда оказалась на стороне системы: 140,00 − 135,00 = 5,00, и это подтверждается каждым документом.
Проверено на следующих конфигурациях и релизах:
- Зарплата и управление персоналом, редакция 3.1, релизы 3.1.38.123
Вступайте в нашу телеграмм-группу Инфостарт