Перейти до основного контенту
База знань · виробничий облік USD41,42 ПДВ20% МЗП8 000

Кадри · Середній

Табель П-5: автоматичне зведення з Attendances vs ручне коригування

Як побудувати табель за формою П-5 на 31 робочий день: автоматично з hr.attendance, з ручним коригуванням лікарняних, надурочних і нічних змін. Звідки беруться коди «Я», «ТН», «ВД», «НУ» і як не пропустити надурочні без наказу.

Час
35 хвилин
Модуль Odoo
Attendances + Payroll → l10n_ua_hr.timesheet_p5
Читання
~6 хв
  • табель
  • П-5
  • hr.attendance
  • надурочні
  • нічні зміни

Кінець місяця, і табельникові треба закрити табель цеху — той самий П-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 потім підтягне працівників і дні.

  1. Створіть табель на місяць. Меню Payroll → Timesheets → P-5 Timesheets → New. Заповніть:

    • Department — Цех №1
    • Period Month — травень 2026
    • Responsible — табельник Шевченко В. К.
    • Working days in period — 20 (Odoo підтягне з календаря)
  2. Згенеруйте рядки. Кнопка Generate Lines — Odoo створює рядок на кожного активного працівника підрозділу з полями day_1 до day_31.

  3. Підтягніть Attendances. Кнопка Sync from Attendances — Odoo читає hr.attendance за період, рахує worked_hours за кожен день і записує в day_N. Коди:

    • «Я» — явка з фактично відпрацьованими годинами (8 для звичайної зміни)
    • «В» — вихідний день за календарем
    • «НУ» — надурочні (години понад норму зміни)
    • «Н» — нічні години (22
      — 06
      , КЗпП ст. 54)
  4. Накладіть відсутності з Time Off. Кнопка Apply Time Off — Odoo читає hr.leave зі статусом Validated і ставить коди:

    • «ВЧ» — щорічна (чергова) відпустка
    • «ВА» — адміністративна відпустка («за свій рахунок»)
    • «ВД» — відрядження
    • «ТН» — тимчасова непрацездатність (лікарняний)
    • «НЗ» — навчання за рахунок підприємства
  5. Перевірте автоматичне зведення. Підсумкові колонки рядка:

    • Total days — кількість днів з кодом «Я»
    • Total hours — сума фактично відпрацьованих годин
    • Night hours — окремо нічні
    • Overtime hours — окремо надурочні
    • Absence hours — відсутності в годинах
  6. Ручне коригування для крайніх випадків. Тут починається те, з чим автоматика не впорається:

    Лікарняний без позначки в Attendances. Працівник приніс Б/Л після закриття місяця. У day_N міняєте «В» (вихідний) або порожнє поле на «ТН», вказуєте номер лікарняного в примітці до рядка. Якщо лікарняний за минулий період — закривайте поточний табель як є, а виправлення оформте через l10n_ua_hr.timesheet_p5_correction за минулий період.

    Надурочні з наказом. Аварійні роботи 28.05, 4 години після зміни. Перевірте наявність наказу про залучення до надурочних з переліком ПІБ. У табелі на 28.05 — «Я 8 НУ 4». Без наказу 4 години надурочних — порушення трудового законодавства; навіть якщо їх відпрацьовано, оформіть «заднім числом» наказ керівника.

    Робота у вихідний. Працівник вийшов у суботу. У day_N (субота) ставите код «РП» (робота у вихідний), години — фактичні. За КЗпП ст. 72 оплата подвійна або інший день відпочинку. Якщо обрали «інший день» — на цей день у наступному тижні ставите код «ВЧ» (за рішенням працівника) або позначку компенсаційного відпочинку.

    Виклик до ТЦК. Окремий код «ВВ» (виконання військового обов’язку) або «ІО» (інші державні обов’язки) — за повістками. Оплата зберігається за середнім, ЄСВ і ПДФО — у звичайному режимі.

  7. Підтвердіть табель. Кнопка Confirm — статус Locked. Підсумкові години розблоковуються для hr.payslip — Odoo тепер може брати їх для розрахунку зарплати.

  8. Згенеруйте друковану форму П-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 за минулий місяць у режимі сторно й нового нарахування. Не редагуйте закритий табель напряму.

Дотичне