Кінець місяця, і табельникові треба закрити табель цеху — той самий П-5, який потім ляже в основу зарплати. Якщо у вас працюють Attendances, більшість відміток Odoo проставить сам: явки, вихідні, нічні, надурочні. Але автоматика бачить лише факт проходу через кіоск — лікарняний, що приніс працівник після закриття місяця, надурочні без наказу чи виклик до ТЦК доведеться додати руками. Цей гайд проводить вас через обидві частини: спершу зведення з Attendances, далі ручне коригування крайніх випадків, щоб закритий табель пішов у hr.payslip без розбіжностей.
Результат
Закритий табель цеху №1 за місяць, готовий до передачі в бухгалтерію: 8 працівників, кожен з відмітками за всі робочі дні, коди відсутності проставлені, надурочні підкріплені наказом, нічні години виділені окремою колонкою. Файл за формою П-5 для друку — і паралельно дані вже в hr.payslip кожного працівника.
Передумови
- Працівники цеху заведені в Employees з табельними номерами, контрактами і робочим календарем (
resource_calendar_id— 5-денний 40-годинний, або 4-змінний для безперервного виробництва). - Налаштований модуль Attendances з кіоском на вході в цех (
hr_attendance_kiosk) або інтегрований електронний пропуск. Для малих підрозділів — табельник заводить дні руками. - Є модуль l10n_ua_hr з об’єктом
l10n_ua_hr.timesheet_p5(українська локалізація табеля). Якщо немає — табель робиться QWeb-шаблоном поверхhr.attendance. - На місяць є виробничий календар з кількістю робочих днів (на травень 2026 — 20 робочих, 11 вихідних і святкових). Святкові дні мають бути позначені в
resource.calendar.leavesяк «public holiday». - Усі накази (відпустки, відрядження, надурочні, прогули) внесені в Time Off і прив’язані до конкретних працівників.
Як це зробити
Спочатку створюємо «шапку» табеля на місяць — документ, до якого Odoo потім підтягне працівників і дні.
-
Створіть табель на місяць. Меню Payroll → Timesheets → P-5 Timesheets → New. Заповніть:
- Department — Цех №1
- Period Month — травень 2026
- Responsible — табельник Шевченко В. К.
- Working days in period — 20 (Odoo підтягне з календаря)
-
Згенеруйте рядки. Кнопка Generate Lines — Odoo створює рядок на кожного активного працівника підрозділу з полями
day_1доday_31. -
Підтягніть Attendances. Кнопка Sync from Attendances — Odoo читає
hr.attendanceза період, рахуєworked_hoursза кожен день і записує вday_N. Коди:- «Я» — явка з фактично відпрацьованими годинами (8 для звичайної зміни)
- «В» — вихідний день за календарем
- «НУ» — надурочні (години понад норму зміни)
- «Н» — нічні години (22 — 06, КЗпП ст. 54)
-
Накладіть відсутності з Time Off. Кнопка Apply Time Off — Odoo читає
hr.leaveзі статусом Validated і ставить коди:- «ВЧ» — щорічна (чергова) відпустка
- «ВА» — адміністративна відпустка («за свій рахунок»)
- «ВД» — відрядження
- «ТН» — тимчасова непрацездатність (лікарняний)
- «НЗ» — навчання за рахунок підприємства
-
Перевірте автоматичне зведення. Підсумкові колонки рядка:
- Total days — кількість днів з кодом «Я»
- Total hours — сума фактично відпрацьованих годин
- Night hours — окремо нічні
- Overtime hours — окремо надурочні
- Absence hours — відсутності в годинах
-
Ручне коригування для крайніх випадків. Тут починається те, з чим автоматика не впорається:
Лікарняний без позначки в Attendances. Працівник приніс Б/Л після закриття місяця. У
day_Nміняєте «В» (вихідний) або порожнє поле на «ТН», вказуєте номер лікарняного в примітці до рядка. Якщо лікарняний за минулий період — закривайте поточний табель як є, а виправлення оформте черезl10n_ua_hr.timesheet_p5_correctionза минулий період.Надурочні з наказом. Аварійні роботи 28.05, 4 години після зміни. Перевірте наявність наказу про залучення до надурочних з переліком ПІБ. У табелі на 28.05 — «Я 8 НУ 4». Без наказу 4 години надурочних — порушення трудового законодавства; навіть якщо їх відпрацьовано, оформіть «заднім числом» наказ керівника.
Робота у вихідний. Працівник вийшов у суботу. У
day_N(субота) ставите код «РП» (робота у вихідний), години — фактичні. За КЗпП ст. 72 оплата подвійна або інший день відпочинку. Якщо обрали «інший день» — на цей день у наступному тижні ставите код «ВЧ» (за рішенням працівника) або позначку компенсаційного відпочинку.Виклик до ТЦК. Окремий код «ВВ» (виконання військового обов’язку) або «ІО» (інші державні обов’язки) — за повістками. Оплата зберігається за середнім, ЄСВ і ПДФО — у звичайному режимі.
-
Підтвердіть табель. Кнопка Confirm — статус Locked. Підсумкові години розблоковуються для
hr.payslip— Odoo тепер може брати їх для розрахунку зарплати. -
Згенеруйте друковану форму П-5. Кнопка Print → Timesheet P-5 — QWeb-шаблон за наказом Держстату №489. Підписи табельника, керівника підрозділу, прийняв бухгалтер — на паперовій копії.
Перевірка
- Кількість днів «Я» + усі відсутності = кількість календарних днів у місяці. Жоден день не «загубився».
- Сума «Total hours» за всіма працівниками збігається з сумарною годинною нормою цеху за вирахуванням відсутностей.
- Усі надурочні години мають посилання на наказ. Без наказу — або оформіть наказ, або зніміть код «НУ».
- Усі лікарняні мають номер Б/Л у примітках рядка.
- Нічні години правильно витягнулись для змін, що перетинають опівніч (22 — 06 наступного дня). Перевірте на одній зміні руками.
- Для відрядників — звірте табельні години з виробничим нарядом. Якщо в наряді 80 нормогодин на партію, а в табелі 160 фактичних — різниця 80 годин йде як погодинна доплата або як простій.
- Дані пішли в
hr.payslip: відкрийте розрахунковий лист одного працівника, перевірте, що «Worked Days» = кількість «Я» з табеля.
Якщо щось пішло не так
- Attendances пропустила нічну зміну. Кіоск зафіксував прихід о 21, а вихід о 06. Odoo записав
worked_hours = 8, проте не виділив нічні. Перевірте налаштування Night Time на робочому календарі — має бути діапазон 22 — 06. Без нього всі години — денні. - Зміна, що перетинає опівніч, розрізалася на два дні. Це нормальна поведінка Attendances: 2 години з 22 до 24 пішли в
day_28, 6 годин з 00 до 06 — уday_29. Для П-5 за українською методикою цілісну зміну прийнято фіксувати на день початку. Або змиріться з розрізанням, або руками перекиньте години на день початку зміни. - Графік 2/2 з 12-годинними змінами. Календар
resource.calendarмає бути спеціальний з усередненою нормою, інакше Odoo вважатиме кожну 12-годинну зміну за 4 надурочних години. Для двозмінного безперервного виробництва замовте окремий календар з річною нормою 1980-2000 годин. - Прогул задокументовано, але кодом «НН». «НН» — це «неявка з нез’ясованої причини» (до з’ясування). Прогул, доведений актом про відсутність з підписами двох свідків, — це код «П». Відмінність важлива: «НН» означає, що ще треба з’ясувати, «П» — підстава для звільнення за КЗпП ст. 40 п. 4.
- Святковий день виявився робочим. Святковий за виробничим календарем (наприклад, 9 травня — у нашому прикладі НЕ працює у 2026), а працівник вийшов за наказом. Код «РП» (робота у святковий), оплата — подвійна за КЗпП ст. 73. Без наказу — порушення.
- Табель з минулого місяця заблокувався, а лікарняний знайшовся. Створюйте
l10n_ua_hr.timesheet_p5_correction— окремий корекційний документ з посиланням на оригінальний табель. Він автоматично перерахуєhr.payslipза минулий місяць у режимі сторно й нового нарахування. Не редагуйте закритий табель напряму.
Дотичне
- Табель — табель П-5 як документ і вимоги
- Перша зарплата — як табель перетворюється на розрахунковий лист
- Розрахункова відомість — зведена відомість за підрозділом
- Accounting — як зарплатні нарахування лягають в облік