Skip to main content

Функції розрахунку зарплати

Шлях: Адміністрування / Функція розрахунку зарплати

Цей документ містить детальний опис усіх функцій розрахунку зарплати, які використовуються в налаштуваннях зарплатних елементів та звітів у системі SMART Payroll. Кожна функція має унікальний номер і виконує конкретну розрахункову операцію під час обчислення зарплатного документа.

Як читати цей документ

Кожна функція описана за єдиною структурою:

  • Що робить — загальний опис призначення функції
  • Параметри — які дані функція приймає та з яких таблиць
  • Результат — що повертає функція та які поля рядка зарплатного документа заповнює
  • Логіка розрахунку — покроковий алгоритм обчислення

*[ЗП]: Зарплатний (документ, елемент тощо) *[СЗ]: Середній заробіток *[ПДФО]: Податок на доходи фізичних осіб *[ЄСВ]: Єдиний соціальний внесок *[МЗП]: Мінімальна заробітна плата *[МРОТ]: Мінімальна заробітна плата (код у системі: MROT) *[YTD]: З початку року (Year-to-Date) *[LCY]: Локальна валюта (Local Currency)

Групи функцій

Діапазон номерівОписКодуніт
100–550Час і календар, ліміти, базові суми, діапазони, розподіл, окладиSMA Payroll Document Calculate
2002–2301Оподаткування, утримання, суми з початку року, оклади за період, стаж, авансиSMA Payroll Document Calculate
21094000–21094050Оклади на дату, лікарняні, індексація, валюта, нарахування за періодSMA Payroll Document Calculate
21094051–21094112Відпустки, резерви, перевірки даних, баланси, нетто-розрахунокSMA Payroll Document Calculate
21094900–21094924Діапазони, стаж, базові суми, дати дій, позиціїSMA Payroll Document Calculate
21094500–21094518Функції для звітів: статистика, сумиSMA Payroll Report Calculation

Примітка: Функції з позначкою ЗАСТАРІЛА збережені для зворотної сумісності. Для нових налаштувань використовуйте рекомендовані заміни.


Функції розрахунку заробітної плати (Частина 1): Час, ліміти, базові суми, оклади, аванси (100–550, 2002–2301)

Цей розділ містить функції для роботи з часом і календарем, лімітами, базовими сумами, діапазонами, окладами, оподаткуванням та авансами. Кожна функція використовується у рядках розрахунку зарплатного елемента і викликається під час обчислення зарплатного документа.


Час, календар, ліміти, базові суми, розподіл, оклади (100–550)


Функція 100 — Розрахунок тривалості часу (CalcTimeMeasure)

Що робить: Універсальна конфігурована функція, яка повертає планові або фактичні дні чи години за обраний період. Залежно від параметрів може звертатися до зарплатного календаря (планові значення) або до табеля обліку робочого часу (фактичні значення).

Параметри:

ПараметрДжерелоОпис
Код параметраРядок розрахунку (Parameter Code)Обов'язковий. Визначає набір налаштувань функції у таблиці «Параметри функції розрахунку»
Тип тривалості часуПараметр функції розрахунку (Time Measure Type)Обов'язковий. Визначає, яке саме значення повертати. Можливі значення: Планові календарні дні, Планові робочі дні, Планові вихідні дні, Планові робочі години, Планові нічні години, Планові вечірні години, Планові святкові години, Офіційні версії цих же показників, Фактичні календарні дні, Фактичні години, Фактичні робочі дні, Фактичні календарні дні без свят, Планові робочі дні (за табелем)
Фільтр періодуПараметр функції розрахунку (Period Filter)Обов'язковий. Визначає діапазон дат. Можливі значення: За датами дії, За періодом оплати, За кодом періоду нарахування, За кодом періоду, За періодом премій, За датами входження, В поточному році, За періодом середнього заробітку
Використовувати фільтр вимірівПараметр функції розрахунку (Use Dimensions Filter)Необов'язковий. Якщо увімкнено, фільтрує дані табеля за вимірами (Код скороченого виміру 1, Код скороченого виміру 2) рядка ЗП документа
Група часових активностейРядок розрахунку (Time Activity Group)Використовується для фільтрації даних табеля за групою часових активностей

Результат:

  • Повертає: Decimal -- кількість днів або годин відповідно до обраного типу міри часу
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Завантажує параметр функції за кодом параметра з рядка розрахунку.
  2. Перевіряє обов'язковість полів «Тип тривалості часу» та «Фільтр періоду».
  3. Визначає діапазон дат (FromDate, ToDate) залежно від фільтра періоду:
    • «За датами дії» -- бере дати дії з рядка документа.
    • «За періодом оплати» -- бере початок та кінець періоду оплати документа.
    • «За кодом періоду нарахування» -- бере дати періоду нарахування.
    • «За кодом періоду» -- бере дати поточного зарплатного періоду.
    • «За періодом премій» -- бере дати преміального періоду.
    • «За датами входження» -- бере перетин дат дії з датами періоду.
    • «В поточному році» -- від початку першого періоду року до кінця року.
    • «За періодом СЗ» -- бере дати періоду середнього заробітку.
  4. Залежно від типу тривалості часу:
    • Для планових значень -- викликає CalendarMgt.GetPeriodInfo() з календарем працівника або офіційним календарем (для типів «Off.»).
    • Для фактичних значень -- викликає TimesheetMgt.GetTimesheetInfo() або TimesheetMgt.GetTimesheetInfoWithDimension() (якщо увімкнено фільтр вимірів).
  5. Повертає отримане числове значення.

Функція 150 — Отримання ліміту зарплати (GetPayrollLimit)

Що робить: Повертає значення зарплатного ліміту із таблиці «Ліміти зарплати» за заданим типом ліміту та періодом.

Параметри:

ПараметрДжерелоОпис
Код параметраРядок розрахунку (Parameter Code)Обов'язковий. Визначає налаштування функції
Тип ліміту зарплатиПараметр функції розрахунку (Payroll Limit Type)Визначає, який ліміт повертати. Можливі значення: МРОТ, Ліміт ЄСВ, Поріг індексації, Прожитковий мінімум, МРОТ погодинний, Компенсаційний коефіцієнт, Норма добових, Норма добових за кордоном
Фільтр періодуПараметр функції розрахунку (Period Filter)Обов'язковий. Визначає, який період використовувати для пошуку ліміту. Можливі значення: За кодом періоду, За кодом періоду нарахування, За періодом оплати, В поточному році, За датами дії, За датами входження, За періодом премій

Результат:

  • Повертає: Decimal -- сума ліміту з таблиці «Ліміти зарплати»
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Завантажує параметр функції та перевіряє обов'язковість фільтра періоду.
  2. Визначає код періоду залежно від фільтра:
    • «За кодом періоду» -- бере Period Code рядка документа.
    • «За кодом періоду нарахування» -- бере Wage Period From.
    • «За періодом оплати» -- бере період оплати документа.
    • «В поточному році» -- бере код першого періоду року.
    • «За датами дії» -- знаходить період за датою початку дії.
    • «За датами входження» -- знаходить період за датою початку документа.
    • «За періодом премій» -- бере код періоду премій.
  3. Шукає в таблиці «Ліміти зарплати» останній запис з типом ліміту та кодом періоду <= визначеного.
  4. Повертає поле Amount знайденого запису або 0, якщо запис не знайдено.

Функція 220 — Базова сума з поточного документа (BaseAmount)

Що робить: Підсумовує суми з рядків поточного зарплатного документа відповідно до налаштувань таблиці «Базова сума зарплати». Це основна функція для визначення бази нарахування або утримання.

Параметри:

ПараметрДжерелоОпис
Код базової сумиРядок розрахунку (Base Amount Code)Обов'язковий. Визначає набір фільтрів у таблиці «Базова сума зарплати»

Налаштування фільтрів у таблиці «Базова сума зарплати»:

ПараметрОпис
Фільтр працівника (Employee Filter)За працівником / За особою / За іншими працівниками
Фільтр періоду (Period Filter)За кодом періоду / За кодом періоду нарахування / За преміальним періодом / За датами дії / За датами входження / За періодом оплати
Тип суми (Amount Type)Сума зарплати / Корег. сума / Оподатковувана сума / Податковий відрахунок та інші
Фільтр коду елемента (Element Code Filter)Фільтр за кодом зарплатного елемента
Фільтр типу елемента (Element Type Filter)Фільтр за типом елемента
Фільтр групи елементів (Element Group Filter)Фільтр за групою елементів
Фільтр бази ПДФО (Income Tax Base Filter)Фільтр за базою оподаткування ПДФО
Фільтр бази ЄСВ (SSC Base Filter)Фільтр за базою ЄСВ

Результат:

  • Повертає: Decimal -- сума відповідно до налаштованого типу суми
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Завантажує налаштування базової суми за кодом елемента та кодом базової суми.
  2. Перевіряє обов'язковість поля «Тип суми».
  3. Визначає фільтр по працівнику:
    • «За працівником» -- фільтрує за номером документа поточного рядка.
    • «За особою» -- фільтрує за кодом особи серед усіх документів. Якщо група розрахунку має тип «Міжрозрахунковий» (Between), додатково агрегує дані з проведених документів інших розрахункових груп.
    • «За іншими працівниками» -- фільтрує за кодом особи, виключаючи поточного працівника.
  4. Встановлює фільтри за базовою сумою (коди елементів, типи, групи тощо).
  5. Встановлює фільтр періоду згідно з налаштуванням.
  6. Підсумовує відповідний тип суми з відфільтрованих рядків документа.
  7. Повертає результат.

Функція 230 — Деталізована базова сума (DetailedBaseAmount)

Що робить: Повертає деталізовану базову суму для податків. На відміну від функції 220, працює з таблицею «Деталізована база для податку» та створює в ній записи для подальшого розподілу суми податку між джерелами.

Параметри:

ПараметрДжерелоОпис
Код базової сумиРядок розрахунку (Base Amount Code)Обов'язковий. Визначає фільтри у таблиці «Базова сума зарплати»

Результат:

  • Повертає: Decimal -- деталізована базова сума відповідно до типу суми (Сума зарплати, Корег. сума або Податковий відрахунок)
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Завантажує налаштування базової суми та перевіряє обов'язковість типу суми.
  2. Фільтрує таблицю «Деталізована база для податку» за номером документа бази та номером документа податку.
  3. Встановлює фільтр за кодом елемента зарплати та кодом елемента податку.
  4. Залежно від типу суми підсумовує відповідне поле (Корег. сума, Сума зарплати або Сума відрахування).
  5. Повертає підсумок.

Функція 247 — Базовий баланс з книги операцій (BaseBalance)

Що робить: Повертає суму з проведених операцій зарплати (таблиця «Книга операцій зарплати»). На відміну від функції 220, яка працює з поточним документом, ця функція читає дані з уже проведених документів.

Параметри:

ПараметрДжерелоОпис
Код базової сумиРядок розрахунку (Base Amount Code)Обов'язковий. Визначає фільтри у таблиці «Базова сума зарплати»

Фільтри аналогічні функції 220, але застосовуються до таблиці «Книга операцій зарплати».

Результат:

  • Повертає: Decimal -- сума з проведених операцій зарплати
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Завантажує налаштування базової суми та перевіряє обов'язковість типу суми.
  2. Встановлює фільтри базової суми на таблицю «Книга операцій зарплати».
  3. Визначає фільтр по працівнику (За працівником / За особою / За іншими працівниками).
  4. Визначає фільтр періоду:
    • «За кодом періоду» -- може використовувати попередній період (якщо увімкнено прапорець «Використовувати попередній період»).
    • «За кодом періоду нарахування» -- фільтрує за Wage Period From.
    • Інші фільтри аналогічні функції 220.
  5. Підсумовує відповідний тип суми з відфільтрованих операцій.
  6. Повертає результат.

Функція 249 — Утримання за діапазоном (Deduction)

Що робить: Розраховує суму утримання на основі рядків діапазону (шкали). Функція використовується для розрахунку утримань, що залежать від суми та мають прогресивну або табличну структуру.

Параметри:

ПараметрДжерелоОпис
Заголовок діапазонуВизначається автоматично (GetRangeHeader)Завантажується за кодом елемента, типом діапазону та кодом діапазону з рядка розрахунку
Тип діапазонуРядок розрахунку (Range Type)Тип діапазону зарплати
Код діапазонуРядок розрахунку (Range Code)Код конкретного діапазону

Результат:

  • Повертає: Decimal -- сума утримання, розрахована за рядками діапазону
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Отримує кількість пільг із книги операцій елементів зарплати працівника.
  2. Фільтрує рядки діапазону за кодом елемента, кодом діапазону, кодом періоду.
  3. Додатково фільтрує за статтю працівника (якщо дозволено в заголовку), датою народження та статусом інвалідності.
  4. Перебирає рядки діапазону (від найбільшого до найменшого):
    • Якщо рядок містить «Суму понад» -- перевіряє, чи перевищено цей поріг.
    • Розраховує суму утримання = Сума + (Річна база * Відсоток / 100).
    • Якщо увімкнено «На пільгу» -- множить на кількість пільг.
    • Перевіряє мінімальну та максимальну суми рядка.
    • Приводить результат до місячного значення (ділить на 12).
  5. Повертає підсумкову суму утримання.

Функція 250 — Базова сума з початку року (YTDBaseAmount)

Що робить: Повертає суму з книги операцій зарплати (проведених документів) з початку календарного року. Використовує ті ж самі фільтри базової суми, що і функція 220, але читає з проведених даних за період від першого періоду року.

Параметри:

ПараметрДжерелоОпис
Код базової сумиРядок розрахунку (Base Amount Code)Обов'язковий. Визначає фільтри у таблиці «Базова сума зарплати»

Результат:

  • Повертає: Decimal -- сума з початку року з книги операцій зарплати
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Завантажує налаштування базової суми та перевіряє тип суми.
  2. Встановлює фільтри базової суми на таблицю «Книга операцій зарплати».
  3. Визначає фільтр по працівнику (За працівником / За особою / За іншими).
  4. Визначає фільтр періоду:
    • «За кодом періоду» -- від першого періоду року до поточного (або попереднього, якщо увімкнено).
    • «За кодом періоду нарахування» -- аналогічно.
    • «За періодом премій» -- фільтрує за преміальним періодом.
    • «За датами дії» -- за діапазоном дат дії.
    • «За датами входження» -- за вкладеними датами.
    • «За періодом оплати» -- від першого періоду року до періоду оплати.
  5. Підсумовує відповідний тип суми та повертає результат.

Функція 252 — Мінімальне значення діапазону (Brackets Min)

Що робить: Повертає мінімальну суму з першого відповідного рядка діапазону зарплати. Використовується для отримання порогових значень з довідника діапазонів.

Параметри:

ПараметрДжерелоОпис
Заголовок діапазонуВизначається автоматично (GetRangeHeader)Завантажується за кодом елемента, типом та кодом діапазону
Тип діапазонуРядок розрахунку (Range Type)Тип діапазону
Код діапазонуРядок розрахунку (Range Code)Код діапазону

Результат:

  • Повертає: Decimal -- значення поля «Мін. сума» першого відповідного рядка діапазону
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Отримує заголовок діапазону (GetRangeHeader).
  2. Фільтрує рядки діапазону за кодом діапазону, кодом елемента, кодом періоду.
  3. Додатково фільтрує за статтю (якщо дозволено) та датою народження працівника.
  4. Знаходить перший рядок та повертає значення поля «Min Amount».
  5. Якщо рядок не знайдено, повертає 0.

Функція 253 — Максимальне значення діапазону (Brackets Max)

Що робить: Повертає максимальну суму з першого відповідного рядка діапазону зарплати. Аналогічна функції 252, але повертає інше поле.

Параметри:

ПараметрДжерелоОпис
Заголовок діапазонуВизначається автоматично (GetRangeHeader)Завантажується за кодом елемента, типом та кодом діапазону
Тип діапазонуРядок розрахунку (Range Type)Тип діапазону
Код діапазонуРядок розрахунку (Range Code)Код діапазону

Результат:

  • Повертає: Decimal -- значення поля «Макс. сума» першого відповідного рядка діапазону
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Отримує заголовок діапазону (GetRangeHeader).
  2. Фільтрує рядки діапазону за кодом діапазону, кодом елемента, кодом періоду.
  3. Додатково фільтрує за статтю та датою народження працівника.
  4. Знаходить перший рядок та повертає значення поля «Max Amount».
  5. Якщо рядок не знайдено, повертає 0.

Функція 255 — Кількість з діапазону (Brackets Quantity)

Що робить: Повертає значення поля «Кількість» з першого відповідного рядка діапазону зарплати.

Параметри:

ПараметрДжерелоОпис
Заголовок діапазонуВизначається автоматично (GetRangeHeader)Завантажується за кодом елемента, типом та кодом діапазону
Тип діапазонуРядок розрахунку (Range Type)Тип діапазону
Код діапазонуРядок розрахунку (Range Code)Код діапазону

Результат:

  • Повертає: Decimal -- значення поля «Quantity» першого відповідного рядка діапазону
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Отримує заголовок діапазону (GetRangeHeader).
  2. Фільтрує рядки діапазону аналогічно функціям 252/253.
  3. Знаходить перший рядок та повертає значення поля «Quantity».
  4. Якщо рядок не знайдено, повертає 0.

Функція 261 — Баланс до дати (BalanceToDate)

Що робить: Повертає суму нарахувань зарплати з книги операцій для працівника та елемента з початку року до поточного періоду включно.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично з поточного рядка
Тип елементаРядок документа ЗП (Element Type)Автоматично з поточного рядка
Код елементаРядок документа ЗП (Element Code)Автоматично з поточного рядка
Код періодуРядок документа ЗП (Period Code)Автоматично з поточного рядка

Результат:

  • Повертає: Decimal -- сума зарплати (Payroll Amount) з книги операцій
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Фільтрує книгу операцій за кодом працівника, типом та кодом елемента.
  2. Встановлює фільтр періоду від першого періоду року до поточного періоду рядка.
  3. Використовує FlowField «SMA Payroll Amount» картки працівника для підсумовування.
  4. Повертає підсумкову суму.

Функція 263 — Сума оподатковуваного податку з початку року (YTDTaxableIncomeTax)

Що робить: Повертає суму оподатковуваного доходу (Taxable Amount) з книги операцій зарплати для працівника, елемента та типу проведення з початку року до поточного періоду включно.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично з поточного рядка
Тип елементаРядок документа ЗП (Element Type)Автоматично
Тип проведенняРядок документа ЗП (Posting Type)Автоматично
Код елементаРядок документа ЗП (Element Code)Автоматично
Код періодуРядок документа ЗП (Period Code)Автоматично

Результат:

  • Повертає: Decimal -- оподатковувана сума з початку року
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Фільтрує книгу операцій за працівником, типом елемента, типом проведення та кодом елемента.
  2. Встановлює фільтр періоду від першого періоду року до поточного періоду рядка (включно).
  3. Використовує FlowField «SMA Taxable Amount» для підсумовування.
  4. Повертає суму оподатковуваного доходу.

Функція 270 — Отримання ліміту МРОТ (GetFSILimit MROT)

ЗАСТАРІЛА. Замінена функцією 150 (GetPayrollLimit) з відповідним типом ліміту.

Що робить: Повертає значення МРОТ (мінімального розміру оплати праці) з таблиці «Ліміти зарплати» за поточний період.

Параметри:

ПараметрДжерелоОпис
Код періодуРядок документа ЗП (Period Code)Автоматично з поточного рядка

Результат:

  • Повертає: Decimal -- значення МРОТ
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Шукає в таблиці «Ліміти зарплати» запис з типом MROT та кодом періоду <= поточного.
  2. Повертає поле Amount або 0.

Функція 271 — Отримання ліміту ЄСВ (GetFSILimit SSC)

ЗАСТАРІЛА. Замінена функцією 150 (GetPayrollLimit) з відповідним типом ліміту.

Що робить: Повертає граничне значення бази нарахування ЄСВ з таблиці «Ліміти зарплати».

Параметри:

ПараметрДжерелоОпис
Код періодуРядок документа ЗП (Period Code)Автоматично з поточного рядка

Результат:

  • Повертає: Decimal -- гранична сума для ЄСВ
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Шукає в таблиці «Ліміти зарплати» запис з типом SSC Limit та кодом періоду <= поточного.
  2. Повертає поле Amount або 0.

Функція 280 — Оновлення коду елемента (UpdatePayrollElementCode)

Що робить: Замінює код елемента зарплати, код базової суми та групу часових активностей на рядку зарплатного документа. Нові значення беруться з налаштувань базової суми та часової групи параметра функції.

Параметри:

ПараметрДжерелоОпис
Код базової сумиРядок розрахунку (Base Amount Code)Визначає новий код елемента через фільтр кодів елементів базової суми
Група часових активностейРядок розрахунку (Time Activity Group)Визначає нову часову активність

Результат:

  • Повертає: Integer (0)
  • Заповнює поля рядка ЗП документа: Код елемента (Element Code), Код часової активності (Time Activity Code)

Логіка розрахунку:

  1. Завантажує налаштування базової суми за кодом елемента та кодом базової суми.
  2. Визначає новий код елемента з фільтра кодів елементів базової суми (бере перший до символу «|»).
  3. Визначає нову часову активність з фільтра часових активностей групи.
  4. Якщо код елемента відрізняється від поточного -- оновлює його через Validate.
  5. Якщо код часової активності відрізняється -- оновлює його.
  6. Оновлює записи табеля, замінюючи код часової активності в деталях табеля.

Функція 290 — Створення повідомлення (CreateAttention)

Що робить: Створює запис повідомлення (увага) у панелі фактів зарплатного документа. Текст повідомлення береться з поля «Текст повідомлення» рядка розрахунку. Зазвичай використовується після оператора IF для попередження про особливі умови.

Параметри:

ПараметрДжерелоОпис
Текст повідомленняРядок розрахунку зарплати (Attention Text)Текст, що відображатиметься у панелі фактів. Підтримує підстановку коду елемента та номера рядка

Результат:

  • Повертає: Integer (0)
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Знаходить актуальний рядок розрахунку елемента з текстом повідомлення.
  2. Перевіряє, чи вже існує аналогічне повідомлення для цього рядка документа.
  3. Якщо повідомлення ще немає, створює новий запис у таблиці «Повідомлення документа» з відформатованим текстом.

Функція 300 — Група інвалідності (GetPersonGroupDisability)

Що робить: Повертає номер групи інвалідності працівника (1, 2 або 3) на визначену дату. Якщо працівник не має інвалідності, повертає 0.

Параметри:

ПараметрДжерелоОпис
Код параметраРядок розрахунку (Parameter Code)Обов'язковий. Визначає, яку дату використовувати для перевірки інвалідності
Фільтр періодуПараметр функції розрахунку (Period Filter)Визначає дату перевірки: За кодом періоду нарахування, За кодом періоду, За періодом оплати, В поточному році або За датами дії

Результат:

  • Повертає: Integer -- номер групи інвалідності (1, 2, 3) або 0
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Завантажує параметр функції та визначає дату перевірки залежно від фільтра періоду.
  2. Шукає в таблиці «Медична інформація особи» запис з типом «Інвалідність».
  3. Фільтрує за кодом особи, датою початку <= поточної дати, датою закінчення >= поточної дати (або порожньою).
  4. Фільтрує за непорожньою групою інвалідності.
  5. Повертає номер групи інвалідності або 0.

Функція 310 — Перерахунок рядка (RecalculateLine)

Що робить: Перераховує інші рядки в поточному документі. Використовується, коли зміна одного елемента потребує перерахунку інших залежних елементів.

Параметри:

ПараметрДжерелоОпис
Код базової сумиРядок розрахунку (Base Amount Code)Обов'язковий. Визначає, які рядки документа потрібно перерахувати через фільтри базової суми

Результат:

  • Повертає: Integer (0)
  • Заповнює поля рядка ЗП документа: Перераховує залежні рядки (обнуляє та перераховує їхні суми)

Логіка розрахунку:

  1. Зберігає поточний рядок документа (Modify).
  2. Завантажує налаштування базової суми.
  3. Знаходить рядки документа, що відповідають фільтрам базової суми та мають номер рядка менший за поточний.
  4. Для кожного знайденого рядка:
    • Видаляє пов'язані записи середнього заробітку та страхового стажу.
    • Обнуляє всі суми та часові показники рядка.
    • Запускає повний перерахунок рядка через codeunit «SMA Payroll Document Calculate».
    • Зберігає перерахований рядок.

Функція 320 — Чиста сума (GetNetAmount)

Що робить: Повертає ознаку, чи є рядок нетто-сумою (чиста сума до виплати). Фактично перевіряє прапорець «Net Amount» на рядку документа.

Параметри:

ПараметрДжерелоОпис
--Рядок документа ЗПАвтоматично

Результат:

  • Повертає: Integer -- 1, якщо рядок має ознаку «Net Amount» (нетто), 0 в іншому випадку
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Перевіряє поле «Net Amount» рядка документа.
  2. Якщо true, повертає 1; інакше -- 0.

Функція 330 — Суми з проведених міжперіодних документів (GetAmountsFromPostedInterperiodPayrollDocuments)

Що робить: Повертає суми з проведених міжперіодних зарплатних документів, які мають створену виплату. Використовується для врахування сум, нарахованих в інших розрахункових групах типу «Між».

Параметри:

ПараметрДжерелоОпис
Код базової сумиРядок розрахунку (Base Amount Code)Обов'язковий. Визначає фільтри

Результат:

  • Повертає: Decimal -- сума з проведених міжперіодних документів
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Завантажує налаштування базової суми.
  2. Знаходить усі проведені документи з групами розрахунку типу «Між» (Between).
  3. Фільтрує за працівником, кодом періоду, ознакою створеної виплати.
  4. Виключає коригувальні та сторнувальні документи.
  5. Фільтрує рядки проведених документів за налаштуваннями базової суми та фільтром періоду.
  6. Підсумовує відповідний тип суми та повертає результат.

Функція 340 — Норма годин поточного місяця (SumOfNormHours current month)

Що робить: Повертає норму робочих годин для поточного місяця з нормативного календаря. Використовується для підсумованого обліку робочого часу.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично
Дата закінчення діїРядок документа ЗП (Action Ending Date)Визначає поточний місяць

Результат:

  • Повертає: Decimal -- норма робочих годин з нормативного календаря
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Отримує календар працівника на дату закінчення дії.
  2. Перевіряє, чи увімкнено підсумований облік робочого часу.
  3. Визначає діапазон дат згідно з типом облікового періоду (місяць, квартал, півріччя, рік, тиждень).
  4. Розраховує норму годин з нормативного календаря за допомогою CalendarMgt.GetPeriodInfo (робочі години).
  5. Повертає норму годин без усереднення.

Функція 345 — Норма годин за рік (SumOfNormHours entire year)

Що робить: Аналогічна функції 340, але повертає середньомісячну норму годин за обліковий період. Використовує той самий механізм підсумованого обліку робочого часу.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично
Дата закінчення діїРядок документа ЗП (Action Ending Date)Визначає поточний місяць

Результат:

  • Повертає: Decimal -- середньомісячна норма годин за обліковий період
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Виконує кроки 1--4 функції 340.
  2. Додатково ділить результат на кількість місяців в обліковому періоді (3 для кварталу, 6 для півріччя, 12 для року).
  3. Повертає округлену середньомісячну норму.

Функція 400 — Розподіл суми при обліку (AllocatePEPayrollAmount)

Що робить: Розподіляє суму нарахування зарплати за вимірами проведення. Створює рядки розподілу для подальшого проведення відповідно до групи розподілу працівника.

Параметри:

ПараметрДжерелоОпис
Код базової сумиРядок розрахунку (Base Amount Code)Необов'язковий. Якщо задано, визначає фільтр елемента через базову суму

Результат:

  • Повертає: Integer (0)
  • Заповнює поля рядка ЗП документа: Створює записи у таблиці «Розподіл рядка ЗП документа» (SMA Payroll Doc. Line PE Alloc)

Логіка розрахунку:

  1. Видаляє існуючі рядки розподілу для цього рядка документа.
  2. Отримує код групи розподілу з картки працівника.
  3. Якщо група не задана -- виходить без дій.
  4. Знаходить тип групи розподілу за кодом елемента та періодом.
  5. Для кожного рядка групи розподілу створює запис розподілу з відсотком, групою проведення та набором вимірів.

Функція 500 — Середній оклад на дату (погодинний) (GetAESalaryByDate hourly)

Що робить: Повертає базовий оклад працівника на задану дату, перерахований у погодинну ставку.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично
Дата початку діїРядок документа ЗП (Action Starting Date)Дата, на яку визначається оклад

Результат:

  • Повертає: Decimal -- погодинна ставка базового окладу
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Знаходить останній запис окладу в книзі операцій елементів зарплати, чинний на задану дату.
  2. Використовує фільтр елементів окладу з налаштувань кадрів (Код елемента оклад за днями, Код елемента оклад за годинами, Код елемента оклад сумою).
  3. Ділить суму окладу на кількість робочих годин за місяць із календаря працівника.
  4. Для елемента погодинної ставки множить на кількість годин з офіційного календаря.
  5. Для елемента денної ставки множить на кількість днів з офіційного календаря.
  6. Повертає погодинну ставку.

Функція 501 — Середня додаткова зарплата на дату (погодинна) (GetAEExtraSalaryByDate hourly)

Що робить: Повертає суму додаткових виплат (надбавок), які залежать від базового окладу, перерахованих у погодинну ставку.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично
Дата початку діїРядок документа ЗП (Action Starting Date)Дата, на яку визначаються надбавки

Результат:

  • Повертає: Decimal -- погодинна ставка додаткових виплат
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Знаходить усі зарплатні елементи, у яких поле «Залежить від елемента окладу» посилається на елемент окладу.
  2. Для кожного такого елемента знаходить чинний запис у книзі операцій на задану дату.
  3. Ділить суму кожного елемента на кількість робочих годин за місяць із календаря.
  4. Підсумовує та повертає загальну погодинну ставку надбавок.

Функція 502 — Загальний заробіток на дату (погодинний) (Sum of 500+501)

Що робить: Повертає повний заробіток (базовий оклад + додаткові виплати) у вигляді погодинної ставки. Це сума результатів функцій 500 та 501.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично
Дата початку діїРядок документа ЗП (Action Starting Date)Дата

Результат:

  • Повертає: Decimal -- сума погодинних ставок окладу та надбавок
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Викликає GetAESalaryByDate (з прапорцем ByHours = true) -- отримує погодинну ставку окладу.
  2. Викликає GetAEExtraSalaryByDate (з прапорцем ByHours = true) -- отримує погодинну ставку надбавок.
  3. Повертає суму двох значень.

Функція 550 — Базовий оклад на дату у місцевій валюті (GetSalaryByDateLCY)

Що робить: Повертає базовий оклад працівника на задану дату, конвертований у місцеву валюту. Підтримує оклади у іноземних валютах з автоматичним перерахунком за курсом.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично
Дата початку документаРядок документа ЗП (Document Starting Date)Дата, на яку визначається оклад
Дата проведенняРядок документа ЗП (Posting Date)Дата для конвертації валюти

Результат:

  • Повертає: Decimal -- сума окладу у місцевій валюті
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Знаходить чинний запис окладу в книзі операцій елементів зарплати на задану дату.
  2. Якщо оклад у іноземній валюті -- перераховує через курс валют на дату проведення.
  3. Для елемента погодинної ставки -- множить на кількість робочих годин з офіційного календаря за місяць.
  4. Для елемента денної ставки -- множить на кількість робочих днів з офіційного календаря за місяць.
  5. Повертає суму у місцевій валюті.

Оподаткування, утримання, оклади за період, стаж, аванси (2002–2301)


Функція 2002 — Утримання податку за шкалою (Withholding)

Що робить: Розраховує суму утримання податку за прогресивною шкалою (рядки діапазону зарплати). Основна функція для розрахунку ПДФО та інших податків, що використовують шкалу ставок.

Параметри:

ПараметрДжерелоОпис
Заголовок діапазонуВизначається автоматично (GetRangeHeader)Завантажується за кодом елемента, типом та кодом діапазону
Тип діапазонуРядок розрахунку (Range Type)Тип діапазону
Код діапазонуРядок розрахунку (Range Code)Код діапазону
Оподатковувана базаРядок документа ЗП (Corr. Amount)Корегована сума для розрахунку податку

Результат:

  • Повертає: Decimal -- сума утримання (повертається з від'ємним знаком; виклик функції інвертує знак)
  • Заповнює поля рядка ЗП документа: Код довідника (Directory Code) -- якщо рядок діапазону містить код довідника

Логіка розрахунку:

  1. Визначає знак оподатковуваної бази (додатна чи від'ємна).
  2. Перевіряє, чи є елемент типом «Фонд» (SSC) -- впливає на порядок сортування.
  3. Фільтрує рядки діапазону за кодом елемента, кодом діапазону, кодом періоду.
  4. Додатково фільтрує за:
    • Статтю працівника (якщо дозволено в заголовку діапазону).
    • Датою народження (якщо дозволено фільтр за віком).
    • Статусом інвалідності на дату початку дії.
  5. Знаходить останній рядок, де «Сума понад» менша за абсолютне значення бази.
  6. Якщо рядок не знайдено для інвалідів -- знімає фільтр інвалідності та шукає повторно.
  7. Якщо жодного рядка не знайдено -- повертає 0.
  8. Формула: Сума податку = Сума фіксованого податку + (Оподатковувана база - Знак * Сума понад) * Відсоток податку / 100
  9. Якщо результат < 0 і документ не є коригувальним -- повертає 0.
  10. Якщо задано максимальне утримання і результат його перевищує -- обмежує результат.
  11. Якщо рядок діапазону має код довідника -- оновлює поле «Код довідника» на рядку документа.
  12. Повертає суму утримання.

Функція 2003 — Оподатковувана сума з початку року (YTDTaxableAmount)

Що робить: Повертає оподатковувану суму (Taxable Amount) з книги операцій зарплати за період від першого періоду року до попереднього періоду.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично
Тип елементаРядок документа ЗП (Element Type)Автоматично
Тип проведенняРядок документа ЗП (Posting Type)Автоматично
Код елементаРядок документа ЗП (Element Code)Автоматично

Результат:

  • Повертає: Decimal -- оподатковувана сума з початку року до попереднього періоду
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Фільтрує книгу операцій за працівником, типом елемента, типом проведення та кодом елемента.
  2. Встановлює фільтр зарплатного періоду від першого періоду року до попереднього періоду (не включаючи поточний).
  3. Використовує FlowField «SMA Taxable Amount» для підсумовування.
  4. Повертає результат.

Функція 2005 — Сума зарплати з початку року (YTDPayrollAmount)

Що робить: Повертає суму нарахувань зарплати (Payroll Amount) з книги операцій за період від першого періоду року до попереднього періоду.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично
Тип елементаРядок документа ЗП (Element Type)Автоматично
Тип проведенняРядок документа ЗП (Posting Type)Автоматично
Код елементаРядок документа ЗП (Element Code)Автоматично

Результат:

  • Повертає: Decimal -- сума зарплати з початку року до попереднього періоду
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Фільтрує книгу операцій за працівником, типом елемента, типом проведення та кодом елемента.
  2. Встановлює фільтр зарплатного періоду від першого періоду року до попереднього періоду.
  3. Використовує FlowField «SMA Payroll Amount» для підсумовування.
  4. Повертає результат.

Функція 2036 — Скоригована сума за попередній період (YTDTypeAmount)

Що робить: Повертає скориговану суму (Corr. Amount) з книги операцій зарплати за попередній період. Використовується для отримання коригувальних сум, що потребують перенесення у поточний період.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично
Тип елементаРядок документа ЗП (Element Type)Автоматично
Код елементаРядок документа ЗП (Element Code)Автоматично

Результат:

  • Повертає: Decimal -- Скоригована сума за попередній період
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Фільтрує книгу операцій за працівником, типом елемента та кодом елемента.
  2. Встановлює фільтр зарплатного періоду точно на попередній період.
  3. Використовує FlowField «SMA Corr. Amount» для підсумовування.
  4. Повертає результат.

Функція 2070 — Початковий баланс (GetStartingBalance)

Що робить: Повертає заключне сальдо попереднього місяця, що відповідає залишку заборгованості або переплати працівника. Використовується для відстеження боргу/авансу працівника.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично

Результат:

  • Повертає: Decimal -- початковий баланс (з інвертованим знаком)
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Отримує картку працівника.
  2. Встановлює фільтр дати від початку до дня, що передує початку поточного зарплатного періоду.
  3. Розраховує FlowField «SMA Net Change (LCY)» (чисте сальдо у місцевій валюті).
  4. Повертає від'ємне значення сальдо (інвертує знак): -Employee."SMA Net Change (LCY)".

Функція 2100 — Години з табеля за групою часових активностей (ЗАСТАРІЛА)

ЗАСТАРІЛА. Замінена функцією 100 (CalcTimeMeasure) з типом «Фактичні години».

Що робить: Повертає кількість годин з табеля для зазначеної групи часових активностей за кодом періоду.

Параметри:

ПараметрДжерелоОпис
Група часових активностейРядок розрахунку (Time Activity Group)Група для фільтрації

Результат:

  • Повертає: Decimal -- кількість годин з табеля
  • Заповнює поля рядка ЗП документа: --

Функція 2101 — Дні з табеля за групою часових активностей (ЗАСТАРІЛА)

ЗАСТАРІЛА. Замінена функцією 100 (CalcTimeMeasure) з типом «Фактичні робочі дні».

Що робить: Повертає кількість днів з табеля для зазначеної групи часових активностей за кодом періоду.

Параметри:

ПараметрДжерелоОпис
Група часових активностейРядок розрахунку (Time Activity Group)Група для фільтрації

Результат:

  • Повертає: Decimal -- кількість днів з табеля
  • Заповнює поля рядка ЗП документа: --

Функція 2102 — Календарні дні у періоді (ЗАСТАРІЛА)

ЗАСТАРІЛА. Замінена функцією 100 (CalcTimeMeasure) з типом «Планові календарні дні» та фільтром «За кодом періоду».

Що робить: Повертає кількість календарних днів у зарплатному періоді з виробничого календаря.

Параметри:

ПараметрДжерелоОпис
--АвтоматичноБере календар працівника та дати зарплатного періоду

Результат:

  • Повертає: Decimal -- кількість календарних днів у періоді
  • Заповнює поля рядка ЗП документа: --

Функція 2103 — Робочі дні у році (ЗАСТАРІЛА)

ЗАСТАРІЛА. Замінена функцією 100 (CalcTimeMeasure) з типом «Планові робочі дні» та фільтром «В поточному році».

Що робить: Повертає кількість робочих днів з виробничого календаря за цілий рік.

Параметри:

ПараметрДжерелоОпис
--АвтоматичноБере календар працівника, дати від першого періоду року до кінця року

Результат:

  • Повертає: Decimal -- кількість робочих днів у році
  • Заповнює поля рядка ЗП документа: --

Функція 2104 — Робочі дні у періоді (ЗАСТАРІЛА)

ЗАСТАРІЛА. Замінена функцією 100 (CalcTimeMeasure) з типом «Планові робочі дні» та фільтром «За кодом періоду».

Що робить: Повертає кількість робочих днів з виробничого календаря за зарплатний період.

Параметри:

ПараметрДжерелоОпис
--АвтоматичноБере календар працівника та дати зарплатного періоду

Результат:

  • Повертає: Decimal -- кількість робочих днів у періоді
  • Заповнює поля рядка ЗП документа: --

Функція 2105 — Робочі години у періоді (ЗАСТАРІЛА)

ЗАСТАРІЛА. Замінена функцією 100 (CalcTimeMeasure) з типом «Планові робочі години» та фільтром «За кодом періоду».

Що робить: Повертає кількість робочих годин з виробничого календаря за зарплатний період.

Параметри:

ПараметрДжерелоОпис
--АвтоматичноБере календар працівника та дати зарплатного періоду

Результат:

  • Повертає: Decimal -- кількість робочих годин у періоді
  • Заповнює поля рядка ЗП документа: --

Функція 2106 — Робочі години у році (ЗАСТАРІЛА)

ЗАСТАРІЛА. Замінена функцією 100 (CalcTimeMeasure) з типом «Планові робочі години» та фільтром «В поточному році».

Що робить: Повертає кількість робочих годин з виробничого календаря за цілий рік.

Параметри:

ПараметрДжерелоОпис
--АвтоматичноБере календар працівника, дати від першого періоду року до кінця року

Результат:

  • Повертає: Decimal -- кількість робочих годин у році
  • Заповнює поля рядка ЗП документа: --

Функція 2107 — Календарні дні на перетині дат дії та періоду (ЗАСТАРІЛА)

ЗАСТАРІЛА. Замінена функцією 100 (CalcTimeMeasure) з типом «Планові календарні дні» та фільтром «За датами входження».

Що робить: Повертає кількість календарних днів на перетині дат дії рядка документа та дат зарплатного періоду.

Параметри:

ПараметрДжерелоОпис
Дата початку діїРядок документа ЗП (Action Starting Date)Автоматично
Дата закінчення діїРядок документа ЗП (Action Ending Date)Автоматично

Результат:

  • Повертає: Decimal -- кількість календарних днів на перетині
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Визначає початкову дату як максимум із дати початку дії та початку періоду.
  2. Визначає кінцеву дату як мінімум із дати закінчення дії та закінчення періоду.
  3. Повертає кількість календарних днів за цей діапазон.

Функція 2108 — Робочі години на перетині дат дії та періоду (ЗАСТАРІЛА)

ЗАСТАРІЛА. Замінена функцією 100 (CalcTimeMeasure) з типом «Планові робочі години» та фільтром «За датами входження».

Що робить: Повертає кількість робочих годин на перетині дат дії рядка документа та дат зарплатного періоду.

Параметри:

ПараметрДжерелоОпис
Дата початку діїРядок документа ЗП (Action Starting Date)Автоматично
Дата закінчення діїРядок документа ЗП (Action Ending Date)Автоматично

Результат:

  • Повертає: Decimal -- кількість робочих годин на перетині
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Визначає початкову дату як максимум із дати початку дії та початку періоду.
  2. Визначає кінцеву дату як мінімум із дати закінчення дії та закінчення періоду.
  3. Повертає кількість робочих годин за цей діапазон (CalendarMgt.GetPeriodInfo, What=3).

Функція 2110 — Заповнення даних середнього заробітку (FillDocLineAEData)

Що робить: Головна точка входу для розрахунку середнього заробітку. Заповнює таблиці «Середній заробіток рядка документа ЗП» та «Період середнього заробітку ЗП». Визначає налаштування розрахунку СЗ залежно від типу документа (відпустка, лікарняний, відрядження тощо).

Параметри:

ПараметрДжерелоОпис
Код налаштування СЗРядок розрахунку (AE Setup Code)Необов'язковий. Код конкретного налаштування СЗ. Якщо не задано, визначається автоматично за типом документа

Результат:

  • Повертає: Decimal -- розрахований середній заробіток
  • Заповнює поля рядка ЗП документа: Дані середнього заробітку (AE Daily Earnings, AE Hourly Earnings), Період СЗ (AE Period From, AE Period To)

Логіка розрахунку:

  1. Перевіряє обов'язковість дати початку дії та коду елемента.
  2. Видаляє попередні записи середнього заробітку та періодів СЗ для цього рядка.
  3. Визначає тип розрахунку СЗ за типом документа:
    • Відпустка -- «Vacation» (або «Vacation Compensation» для компенсації).
    • Лікарняний -- «Sick Leave», «Child Care 1», «Child Care 2» або «Pregnancy Leave» залежно від типу лікарняного.
    • Інша відсутність або відрядження -- «Others».
  4. Знаходить останнє актуальне налаштування СЗ за типом та періодом.
  5. Заповнює періоди та суми середнього заробітку відповідно до налаштувань.
  6. Повертає розрахований середній заробіток.

Функція 2111 — Максимальний середній заробіток лікарняного (GetMaxDailyPayment)

Що робить: Повертає максимальне значення денного середнього заробітку для розрахунку лікарняного. Значення береться з налаштувань лікарняних.

Параметри:

ПараметрДжерелоОпис
Рядок документа ЗПАвтоматичноВикористовується тип лікарняного та дата початку дії

Результат:

  • Повертає: Decimal -- максимальний середній заробіток
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Шукає в таблиці «Налаштування лікарняних» записи з типом «Salary Limits».
  2. Фільтрує за типом лікарняного та датою початку дії.
  3. Повертає значення поля «Maximal Average Earning».

Функція 2112 — Мінімальна сума нарахування лікарняного (GetMinWageAmount)

Що робить: Повертає максимальну суму нарахування лікарняного з урахуванням страхового стажу працівника. Значення береться з налаштувань лікарняних.

Параметри:

ПараметрДжерелоОпис
Рядок документа ЗПАвтоматичноВикористовується тип лікарняного та тривалість стажу

Результат:

  • Повертає: Decimal -- максимальна (обмежувальна) сума нарахування
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Шукає в таблиці «Налаштування лікарняних» відповідний запис.
  2. Враховує страховий стаж працівника для визначення порога.
  3. Повертає значення поля «Maximal Wage Amount» (максимальна сума зарплати для лікарняного).

Функція 2113 — Оклад за попередній період (GetSalaryPrevPeriod)

Що робить: Повертає суму нарахувань за елементами окладу з попереднього зарплатного періоду. Використовується для порівняння або розрахунку індексації.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично

Результат:

  • Повертає: Decimal -- сума окладу за попередній період
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Визначає попередній зарплатний період (зсув на -1 від поточного).
  2. Фільтрує книгу операцій за працівником, попереднім періодом та фільтром елементів окладу.
  3. Фільтр елементів формується з налаштувань кадрів: «Код елемента оклад за днями» + «Код елемента оклад за годинами» + «Код елемента оклад сумою» + «Код елемента погодинна ставка» + «Код елемента денна ставка».
  4. Використовує FlowField «SMA Payroll Amount» для підсумовування.
  5. Повертає суму. Якщо попередній період не існує, повертає 0.

Функція 2114 — Календарні дні у періоді нарахування (ЗАСТАРІЛА)

ЗАСТАРІЛА. Замінена функцією 100 (CalcTimeMeasure) з типом «Планові календарні дні» та фільтром «За кодом періоду нарахування».

Що робить: Повертає кількість календарних днів у періоді нарахування (Wage Period) з виробничого календаря.

Параметри:

ПараметрДжерелоОпис
--АвтоматичноБере календар працівника та дати періоду нарахування

Результат:

  • Повертає: Decimal -- кількість календарних днів у періоді нарахування
  • Заповнює поля рядка ЗП документа: --

Функція 2220 — Базовий оклад за період (GetBaseSalary)

Що робить: Повертає середньозважений базовий оклад працівника за зарплатний період з урахуванням змін ставки протягом періоду. Якщо оклад змінювався в межах періоду, розраховує пропорційно робочим дням.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично
Зарплатний періодСистемна змінна (PayrollPeriod)Поточний зарплатний період

Результат:

  • Повертає: Decimal -- середньозважений оклад за період
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Формує фільтр елементів окладу з налаштувань кадрів: «Код елемента оклад за днями», «Код елемента оклад за годинами», «Код елемента оклад сумою».
  2. Знаходить усі записи книги операцій елементів зарплати, чинні протягом періоду.
  3. Для кожного запису визначає фактичний діапазон дат у межах періоду (бере максимум із дати початку дії та початку періоду; мінімум із дати закінчення дії та закінчення періоду).
  4. Розраховує кількість робочих днів для кожного запису (CalendarMgt.GetPeriodInfo, What=2).
  5. Підсумовує загальну кількість робочих днів.
  6. Формула: Оклад = Sum(Сума запису * Робочі дні запису / Загальні робочі дні)
  7. Повертає середньозважену суму окладу.

Функція 2221 — Додаткова зарплата за період (GetExtraSalary)

Що робить: Повертає середньозважену суму додаткових виплат (надбавок), які залежать від елемента окладу, за зарплатний період. Аналогічна функції 2220, але для елементів із полем «Залежить від елемента окладу».

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично
Зарплатний періодСистемна змінна (PayrollPeriod)Поточний зарплатний період

Результат:

  • Повертає: Decimal -- середньозважена сума надбавок за період
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Формує фільтр елементів окладу (аналогічно функції 2220).
  2. Знаходить усі зарплатні елементи, у яких поле «Залежить від елемента окладу» посилається на один із елементів окладу.
  3. Для кожного знайденого елемента-надбавки шукає чинні записи в книзі операцій.
  4. Розраховує середньозважену суму за робочими днями аналогічно функції 2220.
  5. Повертає результат.

Функція 2230 — Оклад пропорційно годинам (GetSalaryPay by Hours)

Що робить: Розраховує суму нарахування як місячний оклад, помножений на відношення фактично відпрацьованих годин до планових. Основна функція для нарахування погодинної зарплати.

Параметри:

ПараметрДжерелоОпис
Група часових активностейРядок розрахунку (Time Activity Group)Група для визначення фактичних годин з табеля
Код параметраРядок розрахунку (Parameter Code)Необов'язковий. Якщо задано, може активувати фільтрацію за вимірами

Результат:

  • Повертає: Decimal -- сума нарахування = Оклад * Фактичні години / Планові години
  • Заповнює поля рядка ЗП документа: Планові години (Planned Hours), Фактичні години (Actual Hours)

Логіка розрахунку:

  1. Отримує суму окладу з книги операцій елементів зарплати за номером запису рядка.
  2. Розраховує планові години з виробничого календаря за період (CalendarMgt.GetPeriodInfo, What=3).
  3. Розраховує фактичні години з табеля за групою часових активностей та за датами дії рядка:
    • Якщо увімкнено фільтр вимірів (Use Dimensions Filter) -- фільтрує за скороченими вимірами.
  4. Записує планові та фактичні години на рядок документа.
  5. Формула: Результат = Сума окладу * Фактичні години / Планові години
  6. Повертає розраховану суму.

Функція 2232 — Аванс пропорційно годинам (GetAdvancePay by Hours)

Що робить: Розраховує суму авансу як оклад, помножений на відношення фактичних годин до планових, але лише до дати авансу. Відрізняється від функції 2230 тим, що використовує дату авансу як верхню межу.

Параметри:

ПараметрДжерелоОпис
Група часових активностейРядок розрахунку (Time Activity Group)Група для визначення фактичних годин з табеля

Результат:

  • Повертає: Decimal -- сума авансу = Оклад * Фактичні години / Планові години
  • Заповнює поля рядка ЗП документа: Дата початку дії (Action Starting Date), Дата закінчення дії (Action Ending Date), Фактичні дні (Actual Days), Фактичні години (Actual Hours)

Логіка розрахунку:

  1. Формує фільтр елементів окладу за годинами з налаштувань кадрів.
  2. Знаходить усі записи окладу, чинні протягом зарплатного періоду.
  3. Перевіряє наявність дати авансу в періоді (Advance Date).
  4. Для кожного запису визначає діапазон дат від початку дії (або початку періоду) до дати авансу (або дати закінчення дії).
  5. Розраховує фактичні години з табеля за цей діапазон.
  6. Розраховує планові години з календаря за повний період.
  7. Формула: Аванс = Sum(Сума окладу * Фактичні години / Планові години)
  8. Оновлює дати дії та фактичні часові показники на рядку документа.
  9. Повертає суму авансу.

Функція 2239 — Оклад пропорційно календарю (SalaryProRataCalendar)

Що робить: Розраховує суму нарахування з урахуванням змін ставки протягом періоду, пропорційно календарним годинам. Обробляє перекриття записів окладу, коригуючи дати закінчення.

Параметри:

ПараметрДжерелоОпис
--АвтоматичноВикористовує код елемента, код працівника та дати зарплатного періоду

Результат:

  • Повертає: Decimal -- сума нарахування, розподілена за календарними годинами
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Знаходить усі записи окладу з книги операцій елементів зарплати, чинні протягом періоду.
  2. Обробляє перекриття записів: якщо попередній запис має дату закінчення >= дати початку наступного, коригує дату закінчення на день до початку наступного.
  3. Розраховує загальну кількість робочих годин за період з виробничого календаря (HoursWork).
  4. Для кожного запису у тимчасовому наборі:
    • Визначає діапазон дат у межах періоду.
    • Розраховує календарні години для цього діапазону (CalendarHours).
    • Формула: Частка = (Сума запису / Загальні години) * Календарні години запису.
  5. Підсумовує всі частки та повертає результат.

Функція 2240 — Оклад пропорційно дням (GetSalaryPay by Days)

Що робить: Розраховує суму нарахування як місячний оклад, помножений на відношення фактично відпрацьованих днів до планових. Аналогічна функції 2230, але використовує дні замість годин.

Параметри:

ПараметрДжерелоОпис
Група часових активностейРядок розрахунку (Time Activity Group)Група для визначення фактичних днів з табеля
Код параметраРядок розрахунку (Parameter Code)Необов'язковий. Може активувати фільтрацію за вимірами

Результат:

  • Повертає: Decimal -- сума нарахування = Оклад * Фактичні дні / Планові дні
  • Заповнює поля рядка ЗП документа: Планові дні (Planned Days), Фактичні дні (Actual Days)

Логіка розрахунку:

  1. Отримує суму окладу з книги операцій.
  2. Розраховує планові дні з виробничого календаря (CalendarMgt.GetPeriodInfo, What=2).
  3. Розраховує фактичні дні з табеля за групою часових активностей та за датами дії:
    • Якщо увімкнено фільтр вимірів -- фільтрує за скороченими вимірами.
  4. Записує планові та фактичні дні на рядок документа.
  5. Формула: Результат = Сума окладу * Фактичні дні / Планові дні
  6. Повертає розраховану суму.

Функція 2241 — Доплата за часовою групою (GetExtraPay)

Що робить: Розраховує суму доплати на основі ставки окладу та фактично відпрацьованих годин у заданій групі часових активностей. Використовується для нічних, вечірніх, святкових та інших доплат.

Параметри:

ПараметрДжерелоОпис
Група часових активностейРядок розрахунку (Time Activity Group)Група для визначення фактичних годин (наприклад, нічні години)

Результат:

  • Повертає: Decimal -- сума доплати = Оклад * Фактичні години групи / Загальні планові години
  • Заповнює поля рядка ЗП документа: Планові години (Planned Hours), Фактичні години (Actual Hours)

Логіка розрахунку:

  1. Розраховує загальні планові години з табеля за групою робочого часу з налаштувань кадрів (Work Time Group Code).
  2. Записує планові години на рядок документа.
  3. Для кожного запису окладу, чинного протягом періоду:
    • Визначає діапазон дат у межах періоду.
    • Розраховує фактичні години з табеля за вказаною групою часових активностей (наприклад, нічні).
    • Формула: Доплата += Сума окладу * Фактичні години групи / Планові години.
    • Накопичує фактичні години групи.
  4. Записує фактичні години на рядок документа.
  5. Повертає підсумкову суму доплати.

Функція 2242 — Аванс пропорційно дням (GetAdvancePay by Days)

Що робить: Розраховує суму авансу пропорційно фактично відпрацьованим дням до дати авансу. Аналогічна функції 2232, але використовує дні замість годин.

Параметри:

ПараметрДжерелоОпис
Група часових активностейРядок розрахунку (Time Activity Group)Група для визначення фактичних днів з табеля

Результат:

  • Повертає: Decimal -- сума авансу = Оклад * Фактичні дні / Планові дні
  • Заповнює поля рядка ЗП документа: Дата початку дії (Action Starting Date), Дата закінчення дії (Action Ending Date), Фактичні дні (Actual Days), Фактичні години (Actual Hours)

Логіка розрахунку:

  1. Формує фільтр елементів окладу за днями з налаштувань кадрів.
  2. Знаходить усі записи окладу, чинні протягом зарплатного періоду.
  3. Для кожного запису визначає діапазон дат від початку до дати авансу.
  4. Розраховує фактичні дні з табеля за цей діапазон.
  5. Розраховує планові дні з календаря за повний період.
  6. Формула: Аванс = Sum(Сума окладу * Фактичні дні / Планові дні)
  7. Оновлює дати дії та фактичні часові показники на рядку документа.
  8. Повертає суму авансу.

Функція 2300 — Стаж роботи (ServiceYears)

Що робить: Повертає кількість повних років стажу працівника від дати працевлаштування до робочої дати. Якщо стаж менше 5 років, повертає 0.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично

Результат:

  • Повертає: Decimal -- кількість повних років стажу (або 0, якщо менше 5 років)
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Отримує картку працівника та перевіряє наявність дати працевлаштування (Employment Date).
  2. Розраховує різницю між робочою датою (WorkDate) та датою працевлаштування:
    • Кількість років = Рік робочої дати - Рік працевлаштування.
    • Кількість місяців = Місяць робочої дати - Місяць працевлаштування.
    • Кількість днів = День робочої дати - День працевлаштування.
  3. Коригує від'ємні значення місяців та днів (з переносом у попередню одиницю).
  4. Якщо кількість повних років < 5 -- повертає 0.
  5. Інакше повертає кількість повних років.

Функція 2301 — Тип трудового договору (LaborContractType)

Що робить: Перевіряє тип трудового договору працівника. Повертає 1 для цивільно-правового договору (ЦПД / ГПХ) або 0 для трудового договору.

Параметри:

ПараметрДжерелоОпис
Код працівникаРядок документа ЗП (Employee No.)Автоматично

Результат:

  • Повертає: Decimal -- 1, якщо тип договору «Цивільно-правовий» (Civil Contract); 0 -- якщо трудовий договір
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Отримує картку працівника та зчитує номер трудового договору (Contract No.).
  2. Знаходить запис трудового договору.
  3. Перевіряє поле «Тип договору» (Contract Type).
  4. Якщо тип = «Civil Contract» -- повертає 1.
  5. Інакше повертає 0.

Функції розрахунку зарплати (Частина 2): Оклади, лікарняні, індексація (21094000–21094050)

Детальний опис функцій розрахунку зарплати для окладів, лікарняних, індексації та валютних операцій. Ці функції використовуються у налаштуваннях розрахункових типів зарплатних елементів.

Кодуніт: PayrollDocumentCalculate Діапазон номерів: 21094000 -- 21094050


Зміст


Функція 21094000 -- Оклад на дату

Що робить: Повертає суму місячного окладу співробітника, актуальну на дату початку документа. Знаходить діючий запис у Книзі операцій по зарплатних елементах (Payroll Element Ledger Entry) для елементів окладу, визначених у Налаштуваннях модуля персонал та зарплата.

Параметри:

ПараметрДжерелоОпис
Код співробітникаРядок ЗП документа: «Код співробітника»Код співробітника, для якого шукається оклад
Дата початкуРядок ЗП документа: «Дата початку документа» (Document Starting Date)Дата, на яку визначається актуальний оклад

Результат:

  • Повертає: Суму окладу (Decimal). Для погодинної ставки - суму, помножену на кількість планових годин за місяць. Для поденної ставки - суму, помножену на кількість робочих днів за місяць.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Зчитує налаштування модуля персонал та зарплата (HR Setup).
  2. У таблиці «Книга операцій по зарплатних елементах» шукає запис для співробітника з фільтром по елементах окладу (код елемента окладу по днях / по годинах / сумою / ставка погодинна / ставка поденна з HR Setup).
  3. Фільтрує записи: «Дата початку дії» <= параметр дати, «Дата закінчення дії» >= параметр дати або не заповнена.
  4. Повертає поле «Сума» (Amount) зі знайденого запису.
  5. Якщо елемент є погодинною ставкою, множить суму на кількість планових робочих годин місяця за Державним календарем.
  6. Якщо елемент є поденною ставкою, множить суму на кількість робочих днів місяця за Державним календарем.

Функція 21094001 -- Середній оклад за період

Що робить: Розраховує середній оклад за вказаний діапазон дат. Для кожного робочого дня за виробничим календарем викликає функцію GetSalaryByDate та обчислює середнє арифметичне.

Параметри:

ПараметрДжерелоОпис
Код співробітникаРядок ЗП документа: «Код співробітника»Код співробітника
Дата початкуРядок ЗП документа: «Актуальна дата початку» (Action Starting Date)Початок діапазону дат
Дата закінченняРядок ЗП документа: «Актуальна дата закінчення» (Action Ending Date)Кінець діапазону дат

Результат:

  • Повертає: Середній оклад за період (Decimal). Формула: сума окладів за всі робочі дні / кількість робочих днів.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Визначає виробничий календар співробітника через таблицю «Трудова книжка співробітника» (Employee Job Entry).
  2. Фільтрує рядки календаря (Payroll Calendar Line) у діапазоні дат, тільки робочі дні (Nonworking = false).
  3. Для кожного робочого дня викликає GetSalaryByDate (функція 21094000) та підсумовує суми окладів.
  4. Якщо робочих днів = 0, повертає 0.
  5. Повертає: загальна сума / кількість робочих днів.

Функція 21094002 -- Середній оклад на дату (для СЗ)

Що робить: Повертає середньоденний оклад на зазначену дату для розрахунку середнього заробітку. Ділить місячний оклад на кількість робочих днів місяця за виробничим календарем співробітника.

Параметри:

ПараметрДжерелоОпис
Код співробітникаРядок ЗП документа: «Код співробітника»Код співробітника
Дата початкуРядок ЗП документа: «Актуальна дата початку» (Action Starting Date)Дата, на яку розраховується середньоденний оклад

Результат:

  • Повертає: Середньоденний оклад (Decimal). Формула: Сума окладу / Кількість робочих днів місяця за календарем співробітника.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Зчитує HR Setup та знаходить актуальний запис окладу з Книги операцій по зарплатних елементах.
  2. Ділить суму окладу на кількість робочих днів місяця за виробничим календарем співробітника (CalendarMgt.GetPeriodInfo з типом 2 -- робочі дні).
  3. Для погодинної ставки: множить результат на кількість планових годин за Державним календарем.
  4. Для поденної ставки: множить результат на кількість робочих днів за Державним календарем.

Функція 21094003 -- Середня додаткова зарплата на дату

Що робить: Повертає суму середньоденних додаткових виплат (надбавок), які залежать від основного окладу, на зазначену дату. Використовується для розрахунку середнього заробітку.

Параметри:

ПараметрДжерелоОпис
Код співробітникаРядок ЗП документа: «Код співробітника»Код співробітника
Дата початкуРядок ЗП документа: «Актуальна дата початку» (Action Starting Date)Дата, на яку визначаються надбавки

Результат:

  • Повертає: Сума додаткових виплат (надбавок) у перерахунку на один робочий день (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Зчитує HR Setup та формує фільтр елементів окладу.
  2. У таблиці «Зарплатні елементи» (Payroll Element) знаходить усі елементи, у яких заповнено поле «Залежить від елемента окладу» (Depends on Salary Element) з кодами елементів окладу.
  3. Формує фільтр зі знайдених кодів елементів.
  4. У таблиці «Книга операцій по зарплатних елементах» знаходить актуальні записи для цих елементів на дату.
  5. Для кожного знайденого запису: ділить суму на кількість робочих днів місяця за виробничим календарем.
  6. Підсумовує всі середньоденні суми та повертає результат.

Функція 21094004 -- Заробіток на дату

Що робить: Повертає загальний середньоденний заробіток на зазначену дату -- сума середнього окладу та середніх додаткових виплат. Еквівалент суми функцій 21094002 + 21094003.

Параметри:

ПараметрДжерелоОпис
Код співробітникаРядок ЗП документа: «Код співробітника»Код співробітника
Дата початкуРядок ЗП документа: «Актуальна дата початку» (Action Starting Date)Дата, на яку визначається заробіток

Результат:

  • Повертає: Загальний середньоденний заробіток (Decimal) = середньоденний оклад + середньоденні надбавки.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Викликає GetAESalaryByDate (функція 21094002) для отримання середньоденного окладу.
  2. Викликає GetAEExtraSalaryByDate (функція 21094003) для отримання середньоденних надбавок.
  3. Повертає суму двох значень.

Функція 21094005 -- Планові робочі дні

Що робить: Розраховує кількість планових робочих днів за вказаний період з урахуванням періодів працевлаштування співробітника.

Параметри:

ПараметрДжерелоОпис
Код співробітникаРядок ЗП документа: «Код співробітника»Код співробітника
Дата початкуРядок ЗП документа: «Актуальна дата початку» (Action Starting Date)Початок діапазону дат
Дата закінченняРядок ЗП документа: «Актуальна дата закінчення» (Action Ending Date)Кінець діапазону дат

Результат:

  • Повертає: Кількість планових робочих днів (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. У таблиці «Трудова книжка співробітника» (Employee Job Entry) шукає записи для співробітника з фільтром «Позиція змінена» (Position Changed = true).
  2. Фільтрує за датами: «Дата початку» <= кінець діапазону, «Дата закінчення» >= початок діапазону або не заповнена.
  3. Для кожного знайденого запису визначає перетин дат із заданим діапазоном.
  4. Зчитує кількість робочих днів за виробничим календарем (CalendarMgt.GetPeriodInfo, тип 2) для кожного перетину.
  5. Підсумовує та повертає загальну кількість робочих днів.

Функція 21094006 -- Середньомісячна кількість днів

Що робить: Повертає значення «Середня кількість календарних днів у місяці» з таблиці «Налаштування лікарняного» (Sick Leave Setup). Використовується при розрахунку лікарняних.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовується «Актуальна дата початку» (Action Starting Date) для пошуку актуального налаштування

Результат:

  • Повертає: Середня кількість календарних днів у місяці (Decimal), наприклад 30.44.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. У таблиці «Налаштування лікарняного» (Sick Leave Setup) фільтрує записи: Тип = «Ліміти зарплати» (Salary Limits), «Тип лікарняного» = Усі (All).
  2. Фільтрує за «Дата початку» <= «Актуальна дата початку» з рядка документа.
  3. Знаходить останній актуальний запис.
  4. Повертає значення поля «Середня кількість календарних днів» (Average Calendar Days).

Функція 21094007 -- МРОТ за датою документа (DEPRECATED)

Увага: Ця функція є застарілою (DEPRECATED). Рекомендується використовувати функцію 150 з відповідним параметром.

Що робить: Повертає розмір мінімальної заробітної плати (МРОТ) з таблиці «Ліміти зарплати» на дату початку документа.

Параметри:

ПараметрДжерелоОпис
Код періодуВизначається автоматично за датою початку документа (Document Starting Date)Код зарплатного періоду, на який шукається ліміт
Тип лімітуФіксований: MROTТип ліміту зарплати

Результат:

  • Повертає: Суму МРОТ (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Визначає код зарплатного періоду за датою початку документа з рядка.
  2. У таблиці «Ліміти зарплати» (Payroll Limit) фільтрує записи: Тип = MROT, «Зарплатний період» <= код періоду.
  3. Знаходить останній актуальний запис та повертає поле «Сума» (Amount).

Функція 21094008 -- Макс. середній заробіток лікарняного

Що робить: Повертає максимальний розмір середнього заробітку для лікарняного з таблиці «Налаштування лікарняного» з урахуванням типу лікарняного.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовується «Номер операції ЗП елемента» для визначення типу лікарняного та дати початку документа

Результат:

  • Повертає: Максимальний середній заробіток (Decimal) з поля «Макс. середній заробіток» (Maximal Average Earning).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Зчитує запис із Книги операцій по зарплатних елементах за номером операції з рядка документа.
  2. У таблиці «Налаштування лікарняного» фільтрує: Тип = «Ліміти зарплати», «Тип лікарняного» = тип з операції, «Дата початку» <= дата початку документа з операції.
  3. Знаходить останній актуальний запис та повертає «Макс. середній заробіток».
  4. Якщо за конкретним типом лікарняного не знайдено, шукає з фільтром «Тип лікарняного» = Усі (All).

Функція 21094009 -- Макс. сума нарахування за стажем

Що робить: Повертає максимальну суму нарахування для лікарняного з таблиці «Налаштування лікарняного» з урахуванням типу лікарняного та страхового стажу співробітника.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовується «Номер операції ЗП елемента», «Код співробітника»

Результат:

  • Повертає: Максимальну суму нарахування (Decimal) з поля «Макс. сума нарахування» (Maximal Wage Amount).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Зчитує запис із Книги операцій по зарплатних елементах за номером операції з рядка документа.
  2. Визначає операцію з працевлаштування та розраховує страховий стаж співробітника на дату початку документа з операції (через CalcEmplInsuredService).
  3. Якщо стаж у роках = 0, бере стаж у місяцях / 12.
  4. У таблиці «Налаштування лікарняного» фільтрує: Тип = «Ліміти зарплати», «Тип лікарняного» = тип з операції, «Дата початку» <= дата, «Страховий стаж (роки)» <= розрахований стаж.
  5. Знаходить останній запис та повертає «Макс. сума нарахування».
  6. Якщо за конкретним типом лікарняного не знайдено, шукає з фільтром «Тип лікарняного» = Усі.

Функція 21094010 -- Страховий стаж за місяцями

Що робить: Розраховує кількість місяців страхового стажу за останні 12 місяців перед датою початку документа. Використовується для визначення відсотка оплати лікарняного.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовується «Код співробітника», «Дата початку документа» (Document Starting Date)

Результат:

  • Повертає: Кількість місяців страхового стажу (Decimal), максимум 12, округлене до цілого вниз.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Визначає діапазон розрахунку: від початку місяця, що на 13 місяців раніше за дату початку документа, до останнього дня місяця, що передує місяцю дати початку документа.
  2. Якщо у співробітника встановлено ознаку «Використовувати дані для розрахунку страхового стажу», викликає CalcEmplInsServInsByInsPeriod (розрахунок із урахуванням таблиці «Дані про страховий стаж»).
  3. В іншому випадку викликає CalcEmplInsServByPeriod (розрахунок за трудовою книжкою).
  4. Додатково викликає CalcEmplInsServInsData для загального стажу від початку до дати документа.
  5. Обмежує результат: не більше 12 місяців.
  6. Якщо розрахований стаж за 12 місяців перевищує загальний стаж, використовує загальний стаж.
  7. Округлює результат до цілого вниз (Round, <).

Функція 21094011 -- 31 для лікарняного

Що робить: Повертає 31, якщо актуальна дата закінчення припадає на 31-й день місяця, інакше повертає 0. Використовується в розрахунку середньоденного заробітку для лікарняного (коригування на довжину місяця).

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовується «Актуальна дата закінчення» (Action Ending Date)

Результат:

  • Повертає: 31 або 0 (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Перевіряє, чи день місяця у полі «Актуальна дата закінчення» (Action Ending Date) дорівнює 31.
  2. Якщо так -- повертає 31.
  3. Якщо ні -- повертає 0.

Функція 21094012 -- Коефіцієнт індексації (за зміною окладу)

Що робить: Розраховує середньозважений коефіцієнт індексації для періоду з урахуванням змін окладу за трудовим договором. Знаходить рядки трудового договору з типом «Переведення» та обчислює коефіцієнт на основі зміни окладу.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код співробітника», «Дата початку документа» (Document Starting Date), «Актуальна дата закінчення» (Action Ending Date)

Результат:

  • Повертає: Середньозважений коефіцієнт індексації (Decimal). За замовчуванням = 1 (без індексації).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Початкове значення коефіцієнта = 1.
  2. Знаходить трудовий договір співробітника.
  3. Шукає рядки трудового договору (Labor Contract Line) зі статусом «Затверджений» у діапазоні від дати початку документа до актуальної дати закінчення.
  4. Якщо останній рядок має тип операції «Переведення» (Transfer):
    • Знаходить умови договору (Labor Contract Terms) для елементів окладу.
    • Якщо обмеження коефіцієнта підвищення увімкнено та значення коефіцієнта = 0, повертає 1.
    • Якщо значення коефіцієнта заповнено, використовує його напряму.
    • В іншому випадку розраховує коефіцієнт індексації за формулою зміни окладу.
  5. Розраховує середньозважений коефіцієнт для періоду: ((дні до зміни) + (дні після зміни * коефіцієнт)) / (загальна кількість днів періоду).

Функція 21094013 -- Курс валюти

Що робить: Повертає курс валюти з Книги операцій по зарплатних елементах на актуальну дату закінчення рядка ЗП документа.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Номер операції ЗП елемента», «Актуальна дата закінчення» (Action Ending Date)

Результат:

  • Повертає: Курс валюти (Decimal). Якщо операція не знайдена, повертає 1.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Зчитує запис із Книги операцій по зарплатних елементах (Payroll Element Ledger Entry) за номером операції з рядка документа.
  2. Якщо запис не знайдено, повертає 1 (без конвертації).
  3. Повертає курс обміну валюти (ExchangeRate) на «Актуальну дату закінчення» для валюти з операції.

Функція 21094014 -- Оклад за період нарахування (погодинно)

Що робить: Розраховує суму окладу пропорційно відпрацьованим годинам. Аналогічна функції 2230, але використовує дати ЗП періоду (Wage Period) замість коду періоду. Оновлює планові та фактичні години на рядку документа.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «ЗП період» (Wage Period From), «Код співробітника», «Номер операції ЗП елемента»
Група часових активностейРозрахунок рядка ЗП документа: «Група часових активностей» (Time Activity Group)Фільтр часових активностей для табеля

Результат:

  • Повертає: Суму окладу, пропорційну відпрацьованим годинам (Decimal). Формула: Сума * Фактичні години / Планові години.
  • Заповнює поля рядка ЗП документа: «Планові години» (Planned Hours), «Фактичні години» (Actual Hours).

Логіка розрахунку:

  1. Визначає дати початку та закінчення ЗП періоду за кодом Wage Period From.
  2. Зчитує запис із Книги операцій по зарплатних елементах за номером операції.
  3. Планові години = кількість робочих годин за виробничим календарем у ЗП періоді.
  4. Фактичні години = кількість годин із табеля обліку робочого часу за фільтром групи часових активностей у діапазоні актуальних дат.
  5. Записує значення «Планові години» та «Фактичні години» у рядок документа.
  6. Якщо планові години = 0, видає помилку.
  7. Зчитує суму з початкової операції зарплати (Orig. Payroll Ledger Entry No.) та повертає: Сума * Фактичні години / Планові години.

Функція 21094015 -- Оклад за період нарахування (поденно)

Що робить: Розраховує суму окладу пропорційно відпрацьованим дням. Аналогічна функції 2240, але використовує дати ЗП періоду (Wage Period) замість коду періоду. Оновлює планові та фактичні дні на рядку документа.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «ЗП період» (Wage Period From), «Код співробітника», «Номер операції ЗП елемента»
Група часових активностейРозрахунок рядка ЗП документа: «Група часових активностей» (Time Activity Group)Фільтр часових активностей для табеля

Результат:

  • Повертає: Суму окладу, пропорційну відпрацьованим дням (Decimal). Формула: Сума * Фактичні дні / Планові дні.
  • Заповнює поля рядка ЗП документа: «Планові дні» (Planned Days), «Фактичні дні» (Actual Days).

Логіка розрахунку:

  1. Визначає дати початку та закінчення ЗП періоду за кодом Wage Period From.
  2. Зчитує запис із Книги операцій по зарплатних елементах за номером операції.
  3. Планові дні = кількість робочих днів за виробничим календарем у ЗП періоді.
  4. Фактичні дні = кількість днів із табеля обліку робочого часу за фільтром групи часових активностей у діапазоні актуальних дат.
  5. Записує значення «Планові дні» та «Фактичні дні» у рядок документа.
  6. Якщо планові дні = 0, видає помилку.
  7. Зчитує суму з початкової операції зарплати та повертає: Сума * Фактичні дні / Планові дні.

Функція 21094016 -- Години з табелю за період нарахування (DEPRECATED)

Увага: Ця функція є застарілою (DEPRECATED). Замінена на функцію 100 з відповідним кодом параметру.

Що робить: Повертає кількість годин з табеля обліку робочого часу за фільтром групи часових активностей у діапазоні ЗП періоду.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються дати ЗП періоду
Група часових активностейРозрахунок рядка ЗП документа: «Група часових активностей»Фільтр часових активностей

Результат:

  • Повертає: Кількість годин із табеля (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Викликає TimesheetMgt.GetTimeSheetData з параметрами: рядок документа, тип = 1 (години), група часових активностей, використання ЗП періоду = true.

Функція 21094017 -- Дні з табелю за період нарахування (DEPRECATED)

Увага: Ця функція є застарілою (DEPRECATED). Замінена на функцію 100 з відповідним кодом параметру.

Що робить: Повертає кількість днів з табеля обліку робочого часу за фільтром групи часових активностей у діапазоні ЗП періоду.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються дати ЗП періоду
Група часових активностейРозрахунок рядка ЗП документа: «Група часових активностей»Фільтр часових активностей

Результат:

  • Повертає: Кількість днів із табеля (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Викликає TimesheetMgt.GetTimeSheetData з параметрами: рядок документа, тип = 0 (дні), група часових активностей, використання ЗП періоду = true.

Функція 21094018 -- Оподатковувана сума з початку року за ЗП періодом

Що робить: Повертає накопичену оподатковувану суму (Taxable Amount) з початку року для зазначеного елемента. Використовує ЗП період (Wage Period) для фільтрації. Може розраховувати як для співробітника, так і для фізичної особи.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код співробітника», «Тип елемента», «Тип обліку», «Код елемента», «ЗП період» (Wage Period From)

Результат:

  • Повертає: Оподатковувану суму (Decimal) з Книги операцій по зарплаті з початку року.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. На таблиці «Співробітник» (Employee) встановлює фільтри: за кодом співробітника (або «Код фіз. особи» для розрахунку по фізичній особі), типом елемента, типом обліку, кодом елемента.
  2. Встановлює фільтр «ЗП період» (Wage Period Filter) = значенню Wage Period From з рядка документа.
  3. Обчислює FlowField «Оподатковувана сума» (Taxable Amount) та повертає результат.

Функція 21094019 -- Сума зарплати з початку року за ЗП періодом

Що робить: Повертає накопичену суму зарплати (Payroll Amount) з початку року для зазначеного елемента. Використовує ЗП період (Wage Period) для фільтрації.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код співробітника», «Тип елемента», «Тип обліку», «Код елемента», «ЗП період» (Wage Period From)

Результат:

  • Повертає: Суму зарплати (Decimal) з Книги операцій по зарплаті з початку року.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. На таблиці «Співробітник» встановлює фільтри: за кодом співробітника, типом елемента, типом обліку, кодом елемента.
  2. Встановлює фільтр «ЗП період» (Wage Period Filter) = значенню Wage Period From з рядка документа.
  3. Обчислює FlowField «Сума зарплати» (Payroll Amount) та повертає результат.

Функція 21094020 -- Утримання за шкалою по коду періоду

Що робить: Розраховує суму утримання (податку) за шкалою зарплатного діапазону з використанням коду періоду (Period Code) для пошуку заголовка діапазону. Розширена версія функції 2002 з пошуком діапазону за кодом періоду.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код елемента», «Корр. сума» (Corr. Amount), «Код співробітника», «Код періоду» (Period Code)
Заголовок діапазонуВизначається автоматичноЗаголовок зарплатного діапазону за кодом елемента та періодом

Результат:

  • Повертає: Суму утримання зі знаком мінус (Decimal). Формула: -(Сума податку + (Корр. сума - Понад суму) * Податкова ставка / 100).
  • Заповнює поля рядка ЗП документа: «Ставка» (Rate) = податкова ставка %, «Код довідника» (Directory Code), «Набір вимірів» (Dimension Set ID) -- об'єднується з вимірами з рядка діапазону.

Логіка розрахунку:

  1. Знаходить заголовок зарплатного діапазону (Range Header) за кодом елемента та кодом періоду.
  2. Фільтрує рядки діапазону (Range Line) за кодом елемента, кодом діапазону, кодом періоду із заголовка.
  3. За налаштуваннями заголовка додатково фільтрує: за статтю співробітника, за датою народження, за ознакою інвалідності на дату закінчення ЗП періоду.
  4. Фільтрує «Понад суму» (Over Amount) < абсолютне значення Корр. суми з рядка документа.
  5. Якщо не знайдено -- послідовно скидає фільтри по інвалідності та «Понад суму».
  6. Розраховує: Сума податку + (Корр. сума - Знак * Понад суму) * Податкова ставка / 100.
  7. Якщо є «Макс. утримання» (Max Deduction) і результат перевищує його -- обмежує.
  8. Записує ставку в поле «Rate» рядка документа.
  9. Якщо в рядку діапазону заповнено «Код довідника», оновлює поле на рядку документа.
  10. Якщо в рядку діапазону є набір вимірів, об'єднує його з набором вимірів рядка документа.
  11. Повертає результат зі знаком мінус.

Функція 21094021 -- Утримання за шкалою по ЗП періоду

Що робить: Те саме, що й функція 21094020, але для пошуку заголовка зарплатного діапазону використовує код ЗП періоду (Wage Period From) замість коду періоду.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код елемента», «Корр. сума», «Код співробітника», «ЗП період» (Wage Period From)

Результат:

  • Повертає: Суму утримання зі знаком мінус (Decimal).
  • Заповнює поля рядка ЗП документа: «Ставка» (Rate), «Код довідника», «Набір вимірів».

Логіка розрахунку:

  1. Аналогічна функції 21094020, але заголовок діапазону фільтрується за «Код періоду» в діапазоні від першого зарплатного періоду до Wage Period From з рядка документа.

Функція 21094022 -- Сума з діапазону по коду періоду

Що робить: Повертає суму з рядка зарплатного діапазону, відфільтрованого за кодом періоду. На відміну від функцій утримання (21094020/21094021), просто повертає поле «Сума» (Amount) зі знайденого рядка діапазону без розрахунку формули податку.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код елемента», «Код періоду» (Period Code), «Код співробітника»
Код параметруРозрахунок рядка ЗП документа: «Код параметру» (Parameter Code)Визначає тип фільтру за періодом (за кодом періоду, за ЗП періодом, за періодом оплати)

Результат:

  • Повертає: Суму з рядка діапазону (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Знаходить заголовок зарплатного діапазону (Range Header) за кодом елемента.
  2. Якщо вказано «Код параметру», визначає тип фільтру за періодом з таблиці «Параметри розрахункових функцій» (Calc. Function Parameter):
    • За кодом періоду (By Period Code)
    • За ЗП періодом (By Wage Period Code)
    • За періодом оплати (By Payment Period)
  3. Знаходить останній актуальний заголовок діапазону.
  4. Фільтрує рядки діапазону за статтю, датою народження та інвалідністю співробітника.
  5. Знаходить останній рядок та повертає поле «Сума» (Amount).

Функція 21094023 -- Сума з діапазону по ЗП періоду

Що робить: Те саме, що й функція 21094022, але використовує ЗП період (Wage Period From) для фільтрації заголовка діапазону.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код елемента», «ЗП період» (Wage Period From), «Код співробітника»
Код параметруРозрахунок рядка ЗП документа: «Код параметру»Визначає тип фільтру за періодом

Результат:

  • Повертає: Суму з рядка діапазону (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Аналогічна функції 21094022, але заголовок діапазону фільтрується за «Код періоду» в діапазоні від першого зарплатного періоду до Wage Period From з рядка документа.

Функція 21094024 -- Оподатковувана сума з документа (DEPRECATED)

Увага: Ця функція є застарілою (DEPRECATED). Рекомендується використовувати функцію 220 або 21094030.

Що робить: Повертає базову суму (оподатковувану) з рядків поточного ЗП документа за налаштуваннями базової суми.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код елемента», «Номер документа»
Код базової сумиРозрахунок рядка ЗП документа: «Код базової суми» (Base Amount Code)Код для пошуку у таблиці «Базова сума зарплати»

Результат:

  • Повертає: Суму з рядків поточного документа (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Викликає стандартну функцію BaseAmount з параметрами: рядок документа, код базової суми.
  2. Фільтри накладаються за налаштуваннями таблиці «Базова сума зарплати» (Payroll Base Amount).

Функція 21094025 -- Встановити джерело оплати ПФУ

Що робить: Встановлює поле «Джерело оплати» (Payment Source) у значення «ПФУ» (PFU -- Пенсійний фонд Украіни ) на рядку ЗП документа. Це функція з побічним ефектом, вона завжди повертає 0.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаМодифікується поле «Джерело оплати»

Результат:

  • Повертає: 0 (завжди).
  • Заповнює поля рядка ЗП документа: «Джерело оплати» (Payment Source) = ПФУ (PFU).

Логіка розрахунку:

  1. Встановлює PayrollDocLine."Payment Source" := PFU.
  2. Повертає 0.

Функція 21094026 -- МРОТ за ЗП періодом (DEPRECATED)

Увага: Ця функція є застарілою (DEPRECATED). Рекомендується використовувати функцію 150 з відповідним параметром.

Що робить: Повертає розмір мінімальної заробітної плати (МРОТ) з таблиці «Ліміти зарплати» за кодом ЗП періоду.

Параметри:

ПараметрДжерелоОпис
ЗП періодРядок ЗП документа: «ЗП період» (Wage Period From)Код ЗП періоду для фільтрації
Тип лімітуФіксований: MROTТип ліміту зарплати

Результат:

  • Повертає: Суму МРОТ (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. У таблиці «Ліміти зарплати» (Payroll Limit) фільтрує записи: Тип = MROT, «Зарплатний період» <= Wage Period From.
  2. Знаходить останній актуальний запис та повертає поле «Сума» (Amount).

Функція 21094027 -- Ліміт ПФУ за ЗП періодом (DEPRECATED)

Увага: Ця функція є застарілою (DEPRECATED). Рекомендується використовувати функцію 150 з відповідним параметром.

Що робить: Повертає максимальну базу нарахування ЄСВ (Ліміт ПФУ / PFU Limit) з таблиці «Ліміти зарплати» за кодом ЗП періоду.

Параметри:

ПараметрДжерелоОпис
ЗП періодРядок ЗП документа: «ЗП період» (Wage Period From)Код ЗП періоду для фільтрації
Тип лімітуФіксований: SSC LimitТип ліміту зарплати

Результат:

  • Повертає: Суму ліміту ПФУ (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. У таблиці «Ліміти зарплати» фільтрує записи: Тип = «Ліміт ЄСВ» (SSC Limit), «Зарплатний період» <= Wage Period From.
  2. Знаходить останній актуальний запис та повертає поле «Сума».

Функція 21094028 -- Зміна окладу

Що робить: Розраховує різницю між поточним і попереднім окладом (з урахуванням надбавок, що залежать від окладу) за рядками трудового договору. Використовується для нарахування індексації.

Параметри:

ПараметрДжерелоОпис
Код елементаРядок ЗП документа: «Код елемента» (Element Code)Код зарплатного елемента
Код базової сумиРозрахунок рядка ЗП документа: «Код базової суми» (Base Amount Code)Для визначення фільтру дат
Код співробітникаРядок ЗП документа: «Код співробітника»Код співробітника
Дата початкуРядок ЗП документа: «Актуальна дата початку» (Action Starting Date)Дата для пошуку рядка договору
Код періодуРядок ЗП документа: «Код періоду» (Period Code)Код періоду

Результат:

  • Повертає: Суму збільшення окладу (Decimal) = Поточний оклад - Попередній оклад. Якщо зменшення або зміна позиції -- повертає 0.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Знаходить трудовий договір співробітника.
  2. Шукає рядки трудового договору з типом «Прийом» (Hire) або «Переведення» (Transfer), статус = «Затверджений».
  3. Фільтрує за актуальною датою (визначається через базову суму та код періоду).
  4. Для знайденого рядка визначає поточну позицію.
  5. Знаходить умови трудового договору (Contract Terms) для елементів окладу -- отримує поточний оклад, ділить на ставку позиції.
  6. Для погодинної/поденної ставки перераховує на місячний еквівалент.
  7. Додає суми надбавок з Книги операцій по зарплатних елементах, що залежать від окладу.
  8. Переходить до попереднього рядка договору (попереднє призначення).
  9. Порівнює позиції: якщо дата >= 01.12.2015 і код посади (Job Title Code) змінився, повертає 0.
  10. Розраховує попередній оклад аналогічно до п. 5-7.
  11. Якщо попередній оклад < поточного, повертає різницю. Інакше повертає 0.

Функція 21094029 -- Коефіцієнт індексації

Що робить: Повертає відсоток індексації з таблиці «Індекси для проведення індексації» (Indexation Indices). Знаходить запис за ЗП періодом та базовим місяцем для індексації зі зв'язаної операції зарплатного елемента.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Номер операції ЗП елемента» (Payroll Elem. Ledger Entry No.)
ЗП періодРядок ЗП документа: «ЗП період» (Wage Period From)Код ЗП періоду для пошуку індексу

Результат:

  • Повертає: Відсоток індексації (Decimal), округлений до 0.1.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Зчитує запис із Книги операцій по зарплатних елементах за номером операції з рядка документа.
  2. Визначає «Базовий місяць для індексації» (Indexation Base Month) з операції.
  3. У таблиці «Індекси для проведення індексації» (Indexes) знаходить запис за кодом ЗП періоду та базовим місяцем.
  4. Повертає значення поля «Відсоток» (Percent), округлене до 0.1.

Функція 21094030 -- Базова сума з деталізацією

Що робить: Аналогічна функції 220 (BaseAmount), але додатково створює записи деталізації у таблиці «Деталізована база для податку» (Detailed Base for Tax). Використовується для розрахунку податків, де потрібно знати з яких саме рядків (елементів) сформована база.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код елемента», «Номер документа», «ЗП період» (Wage Period From)
Код базової сумиРозрахунок рядка ЗП документа: «Код базової суми» (Base Amount Code)Код для пошуку у таблиці «Базова сума зарплати». Обов'язкове поле.

Результат:

  • Повертає: Базову суму (Decimal) з рядків поточного документа.
  • Заповнює поля рядка ЗП документа: --
  • Створює записи: у таблиці «Деталізована база для податку» (Detailed Base for Tax) для кожного рядка, який потрапив у базу.

Логіка розрахунку:

  1. Перевіряє обов'язковість поля «Код базової суми».
  2. Фільтрує рядки поточного документа за налаштуваннями «Базова сума зарплати»: фільтр типу елемента, фільтр коду елемента, фільтр по ПДФО базі, фільтр по ЄСВ базі.
  3. За «Фільтром по періоду» з базової суми:
    • За кодом періоду (By Period Code) -- фільтрує за Period Code.
    • За ЗП періодом (By Wage Period Code) -- фільтрує за Wage Period From.
    • За датами дії (By Action Dates / By Fit Dates) -- фільтрує за актуальними датами.
  4. Для кожного знайденого рядка документа:
    • Перевіряє, що рядок не повністю оплачений (Payroll Amount - Paid Amount > 0).
    • Перевіряє, що база по ПДФО/ЄСВ відповідає ЗП періоду.
    • Додає суму до результату.
    • Створює запис у таблиці «Деталізована база для податку» з інформацією про базовий документ, код елемента, тип податку, суму.

Функція 21094031 -- Оновлення коду податкового відрахування

Що робить: Аналогічна функції 21094030, але додатково оновлює поле «Код податкового відрахування» (Tax Deduction Code) у рядку ЗП документа, беручи значення з першого знайденого рядка бази.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаМодифікується поле «Код податкового відрахування» (Tax Deduction Code)
Код базової сумиРозрахунок рядка ЗП документа: «Код базової суми» (Base Amount Code)Код для пошуку у таблиці «Базова сума зарплати». Обов'язкове поле.

Результат:

  • Повертає: -- (процедура без повернення значення).
  • Заповнює поля рядка ЗП документа: «Код податкового відрахування» (Tax Deduction Code) = значення «Код довідника» (Directory Code) з першого рядка бази.

Логіка розрахунку:

  1. Перевіряє обов'язковість поля «Код базової суми».
  2. Фільтрує рядки поточного документа за налаштуваннями «Базова сума зарплати» (аналогічно функції 21094030).
  3. Знаходить перший рядок, що відповідає фільтрам.
  4. Записує значення поля «Код довідника» (Directory Code) з цього рядка у поле «Код податкового відрахування» рядка ЗП документа.

Функція 21094032 -- Розподіл суми податку (Payroll Amount)

Що робить: Розподіляє суму зарплати (Payroll Amount) з рядка ЗП документа пропорційно між записами таблиці «Деталізована база для податку». Використовується після розрахунку податку (функціями 21094020/21094021) для визначення, яка частина податку припадає на кожен рядок бази.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Номер документа», «Номер рядка», «Сума зарплати» (Payroll Amount)

Результат:

  • Повертає: 0 (завжди).
  • Заповнює поля рядка ЗП документа: --
  • Оновлює записи: у таблиці «Деталізована база для податку» -- поле «Сума утримання» (Deduction Amount).

Логіка розрахунку:

  1. Знаходить усі записи «Деталізована база для податку» для цього рядка документа.
  2. Фільтрує записи з ненульовою «Сумою зарплати».
  3. Підраховує загальну базу (WholeBaseForTax) -- суму поля «Payroll Amount» по всіх записах.
  4. Якщо загальна база = 0, повертає 0.
  5. Для кожного запису розраховує: «Сума утримання» = округлення (Загальна сума податку * Сума бази рядка / Загальна база).
  6. Для останнього запису присвоює залишок суми (для уникнення помилок округлення).

Функція 21094033 -- Розподіл корр. суми (Corr. Amount)

Що робить: Аналогічна функції 21094032, але розподіляє корр. суму (Corr. Amount) замість суми зарплати.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Номер документа», «Номер рядка», «Корр. сума» (Corr. Amount)

Результат:

  • Повертає: 0 (завжди).
  • Заповнює поля рядка ЗП документа: --
  • Оновлює записи: у таблиці «Деталізована база для податку» -- поле «Корр. сума» (Corr. Amount).

Логіка розрахунку:

  1. Знаходить усі записи «Деталізована база для податку» для цього рядка документа.
  2. Підраховує загальну базу.
  3. Для кожного запису: «Корр. сума» = округлення (Загальна корр. сума * Сума бази рядка / Загальна база).
  4. Для останнього запису присвоює залишок суми.

Функція 21094034 -- Заповнення страхового стажу

Що робить: Створює записи у таблиці «Дані про страховий стаж» (Data on Insurance Period) для подальшого використання при розрахунку страхового стажу та формуванні звітності.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код співробітника», «ЗП період», «Номер документа», «Номер рядка», «Корр. сума», «Актуальна дата початку», «Актуальна дата закінчення»

Результат:

  • Повертає: -- (процедура без повернення значення).
  • Заповнює поля рядка ЗП документа: --
  • Створює записи: у таблиці «Дані про страховий стаж» (Data on Insurance Period).

Логіка розрахунку:

  1. Перевіряє, що група розрахунку не є міжперіодною (тип = Between); якщо так -- виходить без дії.
  2. Створює новий запис у таблиці «Дані про страховий стаж» з полями:
    • «Код співробітника», «ЗП період», «Номер документа», «Номер рядка».
    • «Базова сума» = Корр. сума з рядка документа.
    • «Сума МРОТ» = МРОТ за ЗП період (через GetFSILimit).
    • «Коефіцієнт включення періоду» = Базова сума / Сума МРОТ, округлено до 0.01 (максимум 1).
    • «Актуальна дата початку», «Актуальна дата закінчення» з рядка документа.
    • Ознака «Розрахунок» = true.

Функція 21094035 -- Стаж з урахуванням страхових даних

Що робить: Розраховує кількість місяців страхового стажу за період (аналогічно функції 21094010), але з урахуванням коефіцієнтів включення з таблиці «Дані про страховий стаж» (Data on Insurance Period). Розширена версія розрахунку стажу.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код співробітника», «Дата початку документа» (Document Starting Date)

Результат:

  • Повертає: Кількість місяців страхового стажу (Decimal) з урахуванням коефіцієнтів включення.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Зчитує запис співробітника.
  2. Визначає діапазон розрахунку: від початку місяця, що на рік раніше за дату початку документа, до останнього дня попереднього місяця.
  3. Викликає RecOfServiceMgt.CalcEmplInsServInsData -- розрахунок стажу з урахуванням фактора включення періоду з таблиці «Дані про страховий стаж».
  4. Повертає розрахований стаж.

Функція 21094036 -- Оподатковувана сума для фіз. особи за ЗП періодом

Що робить: Повертає накопичену оподатковувану суму (Taxable Amount) з початку року для фізичної особи (Person No.) замість співробітника. Використовується, коли одна фізична особа працює на кількох робочих місцях, і потрібно визначити загальну суму по всіх місцях роботи.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код фіз. особи» (Person No.), «Тип елемента», «Тип обліку», «Код елемента», «ЗП період» (Wage Period From)

Результат:

  • Повертає: Оподатковувану суму для фізичної особи (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Аналогічна функції 21094018, але замість фільтру за «Кодом співробітника» встановлює фільтр за «Кодом фіз. особи» (Person No. Filter).
  2. Це означає, що у результат потрапляють суми по всіх робочих місцях цієї фізичної особи.

Функція 21094037 -- Стаж за даними страхового періоду (DEPRECATED)

Увага: Ця функція є застарілою (DEPRECATED). Рекомендується використовувати функцію 21094035.

Що робить: Повертає суму бази з поточного документа (YTD Base Amount).

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаРядок ЗП документа
Код базової сумиРозрахунок рядка ЗП документа: «Код базової суми»Код для фільтрації

Результат:

  • Повертає: Суму (Decimal).
  • Заповнює поля рядка ЗП документа: --

Функція 21094038 -- Перевірка дат працевлаштування

Що робить: Перевіряє, чи дата прийому співробітника потрапляє в межі зазначеного періоду (і чи не звільнений до закінчення періоду). Повертає 1 або 0. Тип фільтру за періодом визначається параметром функції.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код співробітника»
Код параметруРозрахунок рядка ЗП документа: «Код параметру» (Parameter Code)Визначає тип фільтру за періодом (за ЗП періодом, за кодом періоду, за датами дії, за датою потрапляння, за періодом оплати, за періодом премій, за поточний рік)

Результат:

  • Повертає: 1, якщо дата прийому потрапляє у початок періоду, і дата звільнення (або нескінченність) >= кінець періоду; 0 -- інакше.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Зчитує запис співробітника.
  2. Якщо вказано «Код параметру», зчитує тип фільтру за періодом з таблиці «Параметри розрахункових функцій»:
    • За кодом періоду (By Period Code): дати з зарплатного періоду (Period Code).
    • За ЗП періодом (By Wage Period Code): перший і останній робочий день ЗП періоду за виробничим календарем.
    • За датами дії (By Action Dates): Action Starting Date.
    • За датою потрапляння (By Fit Dates): Action Starting Date та Action Starting Date + 1.
    • За періодом оплати (By Payment Period): дати з періоду оплати документа.
    • За преміальним періодом (By Bonus Period): дати з поля «Преміальний період».
    • За поточний рік (In Current Year): з початку до кінця поточного року.
  3. Якщо «Код параметру» не заповнено, за замовчуванням використовується ЗП період.
  4. Якщо дата звільнення не заповнена, встановлює 31.12.9999.
  5. Повертає 1, якщо: Дата початку >= Дата прийому, і Дата закінчення <= Дата звільнення.

Функція 21094039 -- Перевірка типу договору

Що робить: Перевіряє, чи трудовий договір співробітника є трудовим договором (не цивільно-правовим) і чи це основне місце роботи (не сумісництво). Повертає 1 або 0.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовується «Код співробітника»

Результат:

  • Повертає: 1, якщо «Тип договору» = «Трудовий договір» (Labor Contract) ТА «Характер роботи» = «Основна робота» (Primary Job); 0 -- інакше.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Зчитує запис співробітника.
  2. За номером трудового договору з картки співробітника зчитує трудовий договір.
  3. Перевіряє два поля:
    • «Тип договору» (Contract Type) = «Трудовий договір» (Labor Contract).
    • «Характер роботи» (Work Mode) = «Основна робота» (Primary Job).
  4. Якщо обидві умови виконуються, повертає 1. Інакше -- 0.

Функція 21094040 -- Перевірка медичної інформації

Що робить: Перевіряє, чи має співробітник статус інваліда на дату закінчення ЗП періоду. Повертає 1, якщо співробітник НЕ є інвалідом, і 0, якщо є. Використовується для визначення ставки ЄСВ.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код співробітника», «ЗП період» (Wage Period From)

Результат:

  • Повертає: 1, якщо співробітник НЕ є інвалідом на дату закінчення ЗП періоду; 0, якщо є інвалідом.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Зчитує запис співробітника.
  2. Визначає дату закінчення ЗП періоду за кодом Wage Period From.
  3. Перевіряє статус інвалідності на цю дату (Employee.SMAIsInvalid).
  4. Якщо НЕ інвалід -- повертає 1. Якщо інвалід -- повертає 0.

Функція 21094041 -- Корр. сума для фіз. особи з початку року (DEPRECATED)

Увага: Ця функція є застарілою (DEPRECATED).

Що робить: Повертає суму з Книги операцій по зарплаті з початку року для фізичної особи.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаРядок ЗП документа
Код базової сумиРозрахунок рядка ЗП документа: «Код базової суми» (Base Amount Code)Обов'язкове поле

Результат:

  • Повертає: Суму з Книги операцій (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Перевіряє обов'язковість поля «Код базової суми».
  2. Викликає функцію YTDBaseAmount з параметрами: рядок документа, код базової суми.

Функція 21094042 -- Корр. сума з документа (DEPRECATED)

Увага: Ця функція є застарілою (DEPRECATED). Рекомендується використовувати функцію 220.

Що робить: Повертає базову суму з рядків поточного ЗП документа за налаштуваннями базової суми.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаРядок ЗП документа
Код базової сумиРозрахунок рядка ЗП документа: «Код базової суми»Код для фільтрації

Результат:

  • Повертає: Суму з рядків документа (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Викликає стандартну функцію BaseAmount з параметрами: рядок документа, код базової суми.

Функція 21094043 -- Порівняння періодів

Що робить: Порівнює код ЗП періоду (Wage Period From) з кодом періоду (Period Code) рядка документа. Використовується в умовних конструкціях (IF) для визначення, чи поточний ЗП період не пізніший за період обліку.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «ЗП період» (Wage Period From), «Код періоду» (Period Code)

Результат:

  • Повертає: 1, якщо Wage Period From <= Period Code; 0 -- інакше.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Порівнює значення коду ЗП періоду (Wage Period From) з кодом періоду (Period Code).
  2. Якщо ЗП період <= код періоду, повертає 1.
  3. Інакше повертає 0.

Функція 21094044 -- Поріг індексації (DEPRECATED)

Увага: Ця функція є застарілою (DEPRECATED). Рекомендується використовувати функцію 150 з відповідним параметром.

Що робить: Повертає поріг індексації (максимальну суму окладу, що підлягає індексації) з таблиці «Ліміти зарплати».

Параметри:

ПараметрДжерелоОпис
Код періодуРядок ЗП документа: «Код періоду» (Period Code)Код зарплатного періоду
Тип лімітуФіксований: Indexation ThresholdТип ліміту зарплати

Результат:

  • Повертає: Суму порогу індексації (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. У таблиці «Ліміти зарплати» фільтрує записи: Тип = «Поріг індексації» (Indexation Threshold), «Зарплатний період» <= Period Code.
  2. Знаходить останній актуальний запис та повертає поле «Сума».

Функція 21094045 -- Прожитковий мінімум

Що робить: Повертає розмір прожиткового мінімуму з таблиці «Ліміти зарплати» за кодом ЗП періоду. Використовується для розрахунку мінімальних гарантій та індексації.

Параметри:

ПараметрДжерелоОпис
ЗП періодРядок ЗП документа: «ЗП період» (Wage Period From)Код ЗП періоду для фільтрації
Тип лімітуФіксований: Survival MinimumТип ліміту зарплати

Результат:

  • Повертає: Суму прожиткового мінімуму (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. У таблиці «Ліміти зарплати» фільтрує записи: Тип = «Прожитковий мінімум» (Survival Minimum), «Зарплатний період» <= Wage Period From.
  2. Знаходить останній актуальний запис та повертає поле «Сума».

Функція 21094046 -- Ставка позиції

Що робить: Повертає ставку позиції (Position Rate) з рядка трудового договору, актуального на дату дії рядка ЗП документа. Ставка позиції визначає, на яку частку ставки працює співробітник (1, 0.5, 0.25 тощо).

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код співробітника», «Актуальна дата початку» (Action Starting Date), «Актуальна дата закінчення» (Action Ending Date)

Результат:

  • Повертає: Ставку позиції (Decimal), наприклад 1.0, 0.5, 0.25.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Знаходить трудовий договір (Labor Contract) співробітника.
  2. Фільтрує рядки трудового договору (Labor Contract Line):
    • Тип операції = «Прийом» (Hire) або «Переведення» (Transfer).
    • «Дата початку» <= «Актуальна дата закінчення» з рядка документа.
    • «Дата закінчення» >= «Актуальна дата початку» або не заповнена.
  3. Знаходить останній запис та повертає поле «Ставка позиції» (Position Rate).

Функція 21094047 -- Сума індексації погодинно

Що робить: Розраховує коефіцієнт для пропорційного нарахування індексації на основі відпрацьованих годин. Формула: 100 * Фактичні години / Планові години. Оновлює поля планових та фактичних годин на рядку документа.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код співробітника», «Актуальна дата початку», «Актуальна дата закінчення», «Код виробничого календаря»
Група часових активностейРозрахунок рядка ЗП документа: «Група часових активностей»Фільтр часових активностей для табеля

Результат:

  • Повертає: Коефіцієнт пропорції (Decimal). Формула: 100 * Фактичні години / Планові години.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Перевіряє обов'язковість полів «Актуальна дата початку» та «Актуальна дата закінчення».
  2. Планові години = кількість робочих годин за виробничим календарем рядка документа у поточному зарплатному періоді.
  3. Якщо планові години = 0, видає помилку.
  4. Фактичні години = кількість годин з табеля обліку робочого часу за фільтром групи часових активностей у діапазоні актуальних дат.
  5. Повертає: 100 * Фактичні години / Планові години.

Функція 21094048 -- Сума індексації поденно

Що робить: Розраховує коефіцієнт для пропорційного нарахування індексації на основі відпрацьованих днів. Формула: 100 * Фактичні дні / Планові дні.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Код співробітника», «Актуальна дата початку», «Актуальна дата закінчення», «Код виробничого календаря»
Група часових активностейРозрахунок рядка ЗП документа: «Група часових активностей»Фільтр часових активностей для табеля

Результат:

  • Повертає: Коефіцієнт пропорції (Decimal). Формула: 100 * Фактичні дні / Планові дні.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Перевіряє обов'язковість полів «Актуальна дата початку» та «Актуальна дата закінчення».
  2. Планові дні = кількість робочих днів за виробничим календарем рядка документа у поточному зарплатному періоді.
  3. Якщо планові дні = 0, видає помилку.
  4. Фактичні дні = кількість днів з табеля обліку робочого часу за фільтром групи часових активностей у діапазоні актуальних дат.
  5. Повертає: 100 * Фактичні дні / Планові дні.

Функція 21094049 -- Фіксований коефіцієнт індексації

Що робить: Повертає фіксований коефіцієнт індексації з таблиці «Індекси для проведення індексації» (Indexation Indices). На відміну від функції 21094029, додатково перевіряє, чи не змінилася посада (Job Title) при переведенні.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаРядок ЗП документаВикористовуються: «Номер операції ЗП елемента», «Код співробітника», «Код елемента»

Результат:

  • Повертає: Коефіцієнт індексації (Decimal), округлений до 0.1. Повертає 0, якщо посада змінилася.
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Зчитує запис із Книги операцій по зарплатних елементах за номером операції.
  2. Знаходить рядок трудового договору (Labor Contract Line) для цього номера договору з типом «Прийом» або «Переведення», статус = «Затверджений», з датою початку = дата початку дії операції.
  3. Визначає поточну позицію з рядка договору.
  4. Переходить до попереднього рядка трудового договору.
  5. Визначає попередню позицію.
  6. Якщо дата >= 01.12.2015 і код посади (Job Title Code) поточної позиції не дорівнює коду посади попередньої позиції, повертає 0 (індексація не застосовується при зміні посади).
  7. Знаходить попередню операцію зарплатного елемента (з меншим Entry No.).
  8. У таблиці «Індекси для проведення індексації» знаходить запис за кодом періоду операції та базовим місяцем для індексації попередньої операції.
  9. Повертає значення «Відсоток» (Percent), округлене до 0.1.

Функція 21094050 -- Оклад на кінець періоду

Що робить: Аналогічна функції 21094000, але повертає оклад на дату закінчення зарплатного періоду (Period Ending Date) замість дати початку документа.

Параметри:

ПараметрДжерелоОпис
Код співробітникаРядок ЗП документа: «Код співробітника»Код співробітника
ДатаКінцева дата зарплатного періоду за «Кодом періоду» (Period Code) рядка документаДата, на яку визначається оклад

Результат:

  • Повертає: Суму окладу на кінець зарплатного періоду (Decimal).
  • Заповнює поля рядка ЗП документа: --

Логіка розрахунку:

  1. Визначає кінцеву дату зарплатного періоду за кодом періоду з рядка документа (PayrollPeriod.PeriodEndDateByPeriodCode).
  2. Викликає GetSalaryByDate (функція 21094000) з цією датою.
  3. Повертає результат.

Довідка по таблицях

ТаблицяОпис
Рядок ЗП документа (Payroll Document Line)Основний рядок зарплатного документа з параметрами розрахунку
Розрахунок рядка ЗП документа (Payroll Document Line Calc)Налаштування розрахунку рядка: функція, код базової суми, група часових активностей
Книга операцій по зарплатних елементах (Payroll Element Ledger Entry)Облікові операції зарплатних елементів (оклади, ставки)
Операції з працевлаштування (Employee Job Entry)Записи про прийом, переведення, звільнення
Рядок виробничого календаря (Payroll Calendar Line)Дні виробничого календаря з ознаками робочий/неробочий
Трудовий договір (Labor Contract)Трудовий договір співробітника
Рядок трудового договору (Labor Contract Line)Рядки операцій трудового договору (прийом, переведення)
Умови трудового договору (Labor Contract Terms)Зарплатні елементи у рамках операції трудового договору
Налаштування лікарняного (Sick Leave Setup)Налаштування лімітів та параметрів лікарняних
Ліміти зарплати (Payroll Limit)МРОТ, ліміт ЄСВ, прожитковий мінімум, поріг індексації
Зарплатний діапазон (Payroll Range Header/Line)Шкали для розрахунку податків та утримань
Базова сума зарплати (Payroll Base Amount)Налаштування фільтрів для формування бази розрахунку
Деталізована база для податку (Detailed Base for Tax)Деталізація складу податкової бази
Дані про страховий стаж (Data on Insurance Period)Дані для розрахунку страхового стажу з коефіцієнтами включення
Індекси для проведення індексації (Indexation Indices / Indexes)Відсотки індексації за періодами та базовими місяцями
Табель обліку робочого часу (Timesheet)Фактичні дані про відпрацьований час
Зарплатний елемент (Payroll Element)Довідник зарплатних елементів
Налаштування модуля персонал та зарплата (Human Resources Setup)Загальні налаштування системи

Функції розрахунку зарплати (Частина 3): Відпустки, резерви, перевірки, баланси (21094051–21094112)

Детальний опис функцій для розрахунку відпусток, резервів, перевірок даних працівників та балансів.

Шлях: Адміністрування / Функція розрахунку зарплати


Функція 21094051 — GetFSILimit (Прожитковий мiнiмум)

Що робить: Повертає значення прожиткового мінімуму з таблиці лімітів зарплати, прив'язане до періоду операції по зарплатному елементу.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineВикористовується для отримання номера операції по зарплатному елементу
Номер операціїPayroll Elem. Ledger Entry No.Номер операції з книги операцій по зарплатному елементу, з якої береться код періоду

Результат:

  • Повертає: Decimal — суму прожиткового мінімуму, актуальну на період операції
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Знаходить операцію по зарплатному елементу (Payroll Element Ledger Entry) за номером операції з рядка документа.
  2. Шукає у таблиці «Ліміти зарплати» (Payroll Limit) запис із типом «Прожитковий мінімум» (Survival Minimum) та фільтром по зарплатному періоду до коду періоду знайденої операції включно.
  3. Повертає суму (Amount) останнього знайденого запису, тобто актуальне значення прожиткового мінімуму.
  4. Якщо запис не знайдено, повертає 0.

Примітка: Обов'язковою умовою є наявність запису операції по зарплатному елементу (Payroll Elem. Ledger Entry No. повинен бути заповнений у рядку документа).


Функція 21094052 — BaseAmount (Кор. сума фіз. особи)

[ЗАСТАРIЛА]

Що робить: Повертає суму з рядків поточного зарплатного документа для фізичної особи. Фільтри накладаються відповідно до налаштувань таблиці «Базова сума зарплати».

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineПоточний рядок зарплатного документа
Код базової сумиBase Amount Code з розрахунку рядкаКод базової суми для отримання налаштувань фільтрації

Результат:

  • Повертає: Decimal — суму з рядків документа за фільтрами базової суми
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Зчитує налаштування базової суми (Payroll Base Amount) за кодом елемента та кодом базової суми.
  2. Залежно від фільтру працівника (Employee Filter):
    • «По співробітнику» — фільтрує рядки поточного документа.
    • «По фіз. особі» або «Для інших співробітників» — шукає рядки по коду фізичної особи в інших документах поточного розрахунку, включаючи обліковані міжперіодні документи.
  3. Накладає фільтри по періоду (код періоду, період нарахування, преміальний період, дати дії, дати вкладання або період оплати).
  4. Повертає суму відповідно до налаштованого типу суми (Payroll Amount, Taxable Amount, Corr. Amount тощо).

Функція 21094053 — CalcByLedger Tax (Сума податків з книги операцій)

Що робить: Повертає суму зарплати (Payroll Amount) з книги операцій по зарплаті (Payroll Ledger Entry), що пов'язана з конкретною операцією по зарплатному елементу.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, коду елемента, номера операції
Тип сумиФіксований = 1 (Taxable)Внутрішній параметр AmountType = Payroll (повертає Payroll Amount)
Код періодуФіксований = '' (порожній)Не фільтрується за кодом періоду

Результат:

  • Повертає: Decimal — суму з поля «Сума зарплати» (Payroll Amount) з книги операцій по зарплаті
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Фільтрує таблицю «Книга операцій по зарплаті» (Payroll Ledger Entry) за:
    • Номером операції по зарплатному елементу (Payroll Elem. Ledger Entry No.).
    • Кодом співробітника (Employee No.).
    • Кодом елемента (Element Code).
  2. Оскільки код періоду не передається (порожній рядок), фільтр за періодом не застосовується.
  3. Підсумовує та повертає значення поля «Payroll Amount» з усіх знайдених записів.

Функція 21094054 — GetTimesheetActionData Hours (Години з табелю за датою дії)

[ЗАСТАРIЛА]

Що робить: Повертає кількість годин з табелю обліку робочого часу, відфільтрованих за групою часових активностей та датами дії рядка документа.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника та дат дії
Група часових активностейTime Activity Group з розрахунку рядкаКод групи часових активностей для фільтрації
Тип данихФіксований = 3Години

Результат:

  • Повертає: Decimal — кількість годин з табелю
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Делегує виклик до TimesheetMgt.GetTimesheetActionData.
  2. Фільтрує записи табелю за кодом співробітника та групою часових активностей.
  3. Використовує дати дії рядка (Action Starting Date, Action Ending Date) для визначення діапазону.
  4. Повертає суму годин (What = 3).

Функція 21094055 — GetAdvancePay Hourly (Аванс погодинна оплата)

Що робить: Розраховує суму авансу для погодинної оплати. Використовує дату авансу як дату відсікання для розрахунку відпрацьованого часу. Оновлює дати дії та фактичні години на рядку документа.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, дат дії
Тип часуФіксований = HourR (Погодинна ставка)Визначає елемент окладу з налаштувань HR та спосіб розрахунку
Група часових активностейTime Activity Group з розрахунку рядкаКод групи для фільтрації табелю

Результат:

  • Повертає: Decimal — суму авансу (погодинна оплата)
  • Заповнює поля рядка ЗП документа:
    • Action Starting Date — мінімальна дата початку серед знайдених операцій або початок періоду
    • Action Ending Date — максимальна дата закінчення серед знайдених операцій або дата авансу
    • Actual Hours — фактичні години з табелю за період до дати авансу

Логіка розрахунку:

  1. Зчитує налаштування HR Setup для визначення коду елемента погодинної ставки (Element Code Hourly Rate).
  2. Якщо код елемента для суми окладу також налаштований, додає його до фільтра.
  3. Знаходить операції по зарплатному елементу (Payroll Element Ledger Entry) для співробітника з фільтрами:
    • Код елемента відповідає фільтру елементів окладу.
    • Дата початку дії до кінця поточного зарплатного періоду.
    • Дата закінчення дії від початку поточного зарплатного періоду (або порожня).
  4. Для кожної знайденої операції:
    • Визначає StartDate (максимум між датою початку дії та початком періоду).
    • Визначає EndDate (мінімум між датою закінчення дії та датою авансу).
    • Зчитує робочий час з табелю (TimesheetMgt) за групою часових активностей для діапазону StartDate..EndDate.
    • PeriodWorkTime = 1 (для типу HourR, нормативний час не враховується).
    • Накопичує суму: Amount * WorkTime / PeriodWorkTime.
  5. Оновлює Action Starting Date, Action Ending Date та Actual Hours на рядку документа.
  6. Повертає загальну суму авансу.

Примітка: Обов'язкова умова — дата авансу (Advance Date) повинна бути заповнена в зарплатному періоді.


Функція 21094056 — CalcIndexationFactor (Коефіцієнт підвищення для середнього заробітку)

Що робить: Розраховує коефіцієнт підвищення (індексації) окладу для коригування середнього заробітку. Це найскладніша функція — виконує ітерацію по зарплатних періодах, враховує зміни окладу та пропорційно розподіляє коефіцієнт при зміні окладу всередині періоду.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, типу документа, дат документа та дій
Код налаштування СЗAE Setup Code з розрахунку рядкаКод налаштування розрахунку середнього заробітку

Результат:

  • Повертає: Decimal — коефіцієнт підвищення (>=1.0; за замовчуванням = 1.0)
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Ініціалізує Result = 1.
  2. Визначає тип розрахунку середнього заробітку залежно від типу документа:
    • Відпустка — AE Calc Type = Vacation.
    • Лікарняний — залежно від типу лікарняного (Sick Leave, Child Care 1.5, Child Care 3, Pregnancy Leave).
    • Відрядження або Інша відсутність — AE Calc Type = Others.
  3. Знаходить актуальне налаштування розрахунку СЗ (AE Calculation Setup) з типом «Розрахунок», фільтром за кодом періоду до поточного та, за наявності, за кодом налаштування СЗ.
  4. Якщо в налаштуванні не ввімкнений прапорець «Використовувати коефіцієнт підвищення» (Use Increase Coefficient), повертає 1 та виходить.
  5. Встановлює режим індексації через PayrollStatus.
  6. Ітерує по зарплатних періодах від дати початку документа до дати закінчення дії:
    • Для кожного періоду отримує PayrollStatus для співробітника.
    • Шукає індексацію окладу (FindSalaryIndexation) — знаходить рядок трудового договору з підвищенням.
    • Якщо знайдено та дата початку рядка договору <= дата закінчення дії:
      • Якщо включено обмеження індексації (LimitSalaryIndexation) — Result = 1.
      • Якщо є прямо вказаний коефіцієнт (IndexationFactor <> 0) — Result *= IndexationFactor.
      • Інакше — розраховує коефіцієнт через PayrollStatus.CalcIndexationFactor.
      • Обмеження: якщо Result < 1, встановлює Result = 1.
    • Якщо дата початку рядка договору > дата початку дії (зміна окладу всередині періоду):
      • Пропорційно коригує коефіцієнт: (Result - 1) * (робочі дні після зміни / всього робочих днів) + 1.
  7. Повертає обчислений коефіцієнт.

Примітка: Функція враховує тип документа для вибору правильного налаштування СЗ. Пропорційний перерахунок при зміні всередині періоду базується на робочих днях з виробничого календаря.


Функція 21094057 — CalcPaymDaysFromAbsenceOrder (Оплачувані дні з наказу відсутності)

Що робить: Перераховує кількість оплачуваних днів із рядка наказу про відсутність і записує результат у поле «Оплачувані дні» (Payment Days) рядка зарплатного документа.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання типу документа, номера операції, коду елемента, дат дії

Результат:

  • Повертає: Integer — кількість оплачуваних днів
  • Заповнює поля рядка ЗП документа:
    • Payment Days — оплачувані дні з наказу відсутності (з від'ємним знаком для коригувань)

Логіка розрахунку:

  1. Перевіряє тип документа: функція працює тільки для типів «Відрядження» (Travel) та «Інша відсутність» (Other Absence). Для інших типів повертає 0.
  2. Знаходить обліковану операцію по зарплатному елементу (Payroll Element Ledger Entry) за номером операції з рядка.
  3. Шукає обліковану рядок наказу відсутності (Posted Absence Line) за:
    • Номером документа операції.
    • Кодом елемента з рядка документа.
    • Типом документа (Travel або Other Absence).
  4. Створює тимчасовий рядок наказу відсутності та заповнює його даними:
    • Переносить дати з рядка ЗП документа (Action Starting Date, Action Ending Date).
    • Викликає CalcDays() для перерахунку кількості оплачуваних днів.
  5. Якщо рядок є коригуванням (Correction = true), значення Payment Days записується зі знаком мінус.

Функція 21094058 — RateTime Hours (Норма годин)

Що робить: Повертає нормативну кількість робочих годин з офіційного (виробничого) календаря за період нарахування.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду періоду нарахування (Wage Period From)
Тип часуФіксований = 0 (Hours)Визначає, що повертаються години

Результат:

  • Повертає: Decimal — кількість нормативних робочих годин
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Зчитує налаштування HR Setup для отримання коду офіційного (виробничого) календаря (Official Calendar Code).
  2. Визначає дату початку та дату закінчення періоду нарахування (Wage Period From).
  3. Викликає CalendarMgt.GetPeriodInfo з параметром What = 3 (робочі години) для офіційного календаря та дат періоду.
  4. Повертає кількість робочих годин.

Функція 21094059 — RateTime Days (Норма днів)

Що робить: Повертає нормативну кількість робочих днів з офіційного (виробничого) календаря за період нарахування.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду періоду нарахування (Wage Period From)
Тип часуФіксований = 1 (Days)Визначає, що повертаються дні

Результат:

  • Повертає: Decimal — кількість нормативних робочих днів
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Зчитує налаштування HR Setup для отримання коду офіційного (виробничого) календаря (Official Calendar Code).
  2. Визначає дату початку та дату закінчення періоду нарахування (Wage Period From).
  3. Викликає CalendarMgt.GetPeriodInfo з параметром What = 2 (робочі дні) для офіційного календаря та дат періоду.
  4. Повертає кількість робочих днів.

Функція 21094060 — JobBalance (Баланс робіт)

Що робить: Повертає суму з книги операцій по роботах (Job Ledger Entry) для відповідного ресурсу співробітника за вказаний період.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника та дат дії
Код набору данихData Set Code з розрахунку рядкаКод набору даних зарплати (Payroll Data Sets) для отримання фільтрів по роботі

Результат:

  • Повертає: Decimal — суму по рядках (Line Amount) з книги операцій по роботах
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Знаходить налаштування набору даних (Payroll Data Sets) за кодом елемента та кодом набору даних.
  2. Отримує номер ресурсу (Resource No.) зі картки співробітника.
  3. Фільтрує книгу операцій по роботах (Job Ledger Entry):
    • No. = номер ресурсу співробітника.
    • Entry Type = тип операції з набору даних.
    • Posting Date = діапазон від Action Starting Date до Action Ending Date.
    • Якщо вказано Job No. або Job Task No. у наборі даних, додає відповідні фільтри.
  4. Підсумовує та повертає суму поля «Line Amount».

Функція 21094061 — FillVacResAEPeriods "+1" (Заповнення періодів СЗ для резерву відпустки)

Що робить: Заповнює періоди середнього заробітку (СЗ) для розрахунку резерву відпустки. Розраховує період СЗ на дату, що дорівнює «кінець поточного періоду + 1 день» (тобто на перший день наступного місяця), що забезпечує додатковий період порівняно зі стандартним розрахунком.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду періоду, коду співробітника
Група часових активностейTime Activity Group з розрахунку рядкаДля визначення фільтрів часових активностей

Результат:

  • Повертає: — (функція не повертає числового значення)
  • Заповнює поля рядка ЗП документа:
    • AE Period From — початок періоду СЗ
    • AE Period To — кінець періоду СЗ
    • Action Starting Date — дата = кінець поточного періоду + 1 день
    • Action Ending Date — дата = кінець поточного періоду + 1 день
    • Document Starting Date — те саме
    • Document Ending Date — те саме
    • Document Type — Vacation
    • Time Activity Code — код активності з групи часових активностей
    • Wage Period From — період за датою дії
    • Wage Period To — період за датою дії

Логіка розрахунку:

  1. Створює тимчасовий рядок наказу відсутності (Absence Line) з типом «Відпустка».
  2. Встановлює дату початку = кінець поточного зарплатного періоду + 1 день.
  3. Викликає AEMgt.FillAbsenceLineAEDates для автоматичного розрахунку періодів СЗ.
  4. Переносить розраховані дати та періоди СЗ на рядок зарплатного документа.
  5. Заповнює код часової активності та період нарахування.
  6. Якщо розрахований період нарахування відрізняється від поточного, ініціалізує зарплатний період.

Функція 21094062 — CalcVacDays (Дні відпустки для резерву)

Що робить: Розраховує баланс (залишок) днів відпустки для формування резерву відпустки. Формула: Нараховані дні - Використані дні - Компенсовані дні + Коригувальні дні.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, коду періоду
Група часових активностейTime Activity Group з розрахунку рядкаДля фільтрації за типом відпустки
Майбутнє використанняФіксований = falseНе враховувати майбутнє використання

Результат:

  • Повертає: Decimal — баланс (залишок) днів відпустки
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Визначає дату розрахунку: кінець поточного зарплатного періоду + 1 день.
  2. Отримує фільтр часових активностей за групою та датою.
  3. Знаходить записи нарахувань відпустки (Employee Absence Entry) для співробітника:
    • Тип запису = Accrual (нарахування).
    • Дата початку < дата розрахунку.
    • Код часової активності відповідає фільтру.
  4. Для кожного запису нарахування:
    • Підраховує нараховані дні через VacationDaysCalculation.CalcVacDays.
    • Знаходить записи використання (Usage): віднімає календарні дні.
    • Знаходить записи компенсації (Compensation): віднімає календарні дні.
    • Знаходить записи коригування (Correction): додає календарні дні.
  5. Повертає підсумковий баланс.

Примітка: Параметр FutureUsedDays = false означає, що всі записи використання враховуються незалежно від їх дати.


Функція 21094063 — PrevBaseAmount (Кор. сума за попередній період)

Що робить: Повертає суму з облікованих (posted) рядків зарплатних документів за попередній або поточний період. Використовує налаштування базової суми для фільтрації.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, фіз. особи, коду періоду
Код базової сумиBase Amount Code з розрахунку рядка (обов'язковий)Код базової суми для отримання фільтрів
Розрахунок по документуФіксований = falseНе обмежує пошук одним документом

Результат:

  • Повертає: Decimal — суму з облікованих рядків зарплатних документів
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Перевіряє обов'язковість коду базової суми (TestField).
  2. Зчитує налаштування базової суми.
  3. Залежно від фільтра по працівнику фільтрує обліковані рядки по:
    • Співробітнику та фіз. особі (By Employee).
    • Фіз. особі (By Person).
    • Фіз. особі, виключаючи поточного співробітника (For other employees).
  4. Накладає фільтри за періодом відповідно до налаштувань:
    • «За кодом періоду» — якщо «Використовувати попередній період» = Так, то шукає за попереднім кодом періоду; інакше — за поточним.
    • «За періодом нарахування» — аналогічно.
    • «За періодом премій», «За датами дії», «За датами вкладання», «За періодом оплати».
  5. Підсумовує суму за налаштованим типом суми, враховуючи фільтри по базі ПДФО та ЄСВ (Impose).

Функція 21094064 — UpdateTypeOfCharges (Оновлення коду нарахування)

Що робить: Оновлює код типу нарахування (Type Code of Charges) на рядку зарплатного документа. Функція не повертає числового значення, а має побічний ефект — модифікує рядок документа.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineРядок, на якому оновлюється код нарахування

Результат:

  • Повертає: — (функція не повертає значення)
  • Заповнює поля рядка ЗП документа:
    • Type Code of Charges — встановлюється значення '14', якщо виконуються умови

Логіка розрахунку:

  1. Перевіряє умову: період нарахування (Wage Period From) менший за код періоду (Period Code) та сума зарплати (Payroll Amount) більше 0.
  2. Якщо обидві умови виконуються, встановлює код типу нарахування = '14' (нарахування за попередній період).
  3. Якщо умови не виконуються, значення залишається без змін.

Функція 21094065 — FillVacResAEPeriodsOnDate (Заповнення періодів СЗ на дату)

Що робить: Заповнює періоди середнього заробітку для розрахунку резерву відпустки станом на кінець поточного зарплатного періоду (без додаткового "+1" дня, на відміну від функції 21094061).

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду періоду, коду співробітника
Група часових активностейTime Activity Group з розрахунку рядкаДля визначення фільтрів часових активностей

Результат:

  • Повертає: — (функція не повертає числового значення)
  • Заповнює поля рядка ЗП документа:
    • AE Period From — початок періоду СЗ
    • AE Period To — кінець періоду СЗ
    • Action Starting Date — дата кінця поточного періоду
    • Action Ending Date — дата кінця поточного періоду
    • Document Starting Date — те саме
    • Document Ending Date — те саме
    • Document Type — Vacation
    • Time Activity Code — код активності з групи часових активностей
    • Wage Period From — період за датою дії
    • Wage Period To — період за датою дії

Логіка розрахунку:

  1. Створює тимчасовий рядок наказу відсутності з типом «Відпустка».
  2. Встановлює дату початку = останній день поточного зарплатного періоду (без "+1", на відміну від 21094061).
  3. Викликає AEMgt.FillAbsenceLineAEDates для автоматичного розрахунку періодів СЗ.
  4. Переносить розраховані значення на рядок зарплатного документа.

Примітка: Головна відмінність від функції 21094061 — дата розрахунку = кінець поточного періоду (а не +1 день), що не додає зайвого місяця до періоду СЗ.


Функція 21094066 — CalcVacDaysByWagePeriod (Дні відпустки за ЗП період)

Що робить: Розраховує баланс днів відпустки, аналогічно до функції 21094062, але фільтрує за конкретним зарплатним періодом (Wage Period) та враховує дати працевлаштування/звільнення.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, періоду нарахування
Група часових активностейTime Activity Group з розрахунку рядкаДля фільтрації за типом відпустки

Результат:

  • Повертає: Decimal — баланс днів відпустки за зарплатний період
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Визначає діапазон дат за зарплатним періодом (Wage Period From).
  2. Коригує діапазон з урахуванням дат працевлаштування та звільнення:
    • Якщо дата прийому пізніша за початок періоду — бере дату прийому.
    • Якщо дата звільнення раніша за кінець періоду — бере дату звільнення.
  3. Знаходить записи нарахувань відпустки з фільтрами:
    • Дата початку <= кінець періоду.
    • Дата закінчення >= початок періоду або порожня.
    • Тип записи = Accrual.
    • Код часової активності за фільтром.
  4. Для кожного запису нарахування рахує баланс через VacationDaysCalculation.CalcVacDays.
  5. Повертає підсумковий баланс.

Функція 21094067 — IsInvalid (Ознака інвалідності)

Що робить: Перевіряє, чи має співробітник статус інваліда на дату закінчення поточного зарплатного періоду.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду фіз. особи та періоду нарахування

Результат:

  • Повертає: Integer — 1, якщо співробітник є інвалідом; 0 — якщо ні
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Визначає дату перевірки — кінець періоду нарахування (PeriodEndDate за Wage Period From).
  2. Фільтрує записи медичної інформації фізичної особи (Person Medical Info):
    • Person No. = код фіз. особи з рядка.
    • Type = Disability (Інвалідність).
    • Starting Date <= дата перевірки.
    • Ending Date >= дата перевірки або порожня.
    • Disability Group <> 0 (група інвалідності встановлена).
  3. Якщо знайдено хоча б один запис — повертає 1.
  4. Якщо записів не знайдено — повертає 0.

Функція 21094068 — IsDisabled (Позиція для інвалідів)

Що робить: Перевіряє, чи є позиція співробітника позначеною як «Позиція для інваліда».

Параметри:

ПараметрДжерелоОпис
Код співробітникаEmployee No. з рядка документаДля знаходження позиції

Результат:

  • Повертає: Integer — 1, якщо позиція призначена для інвалідів; 0 — якщо ні
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Знаходить картку співробітника за кодом.
  2. Знаходить позицію (Position) за кодом позиції зі картки співробітника.
  3. Перевіряє прапорець «Position for Disabled Person» на позиції.
  4. Якщо прапорець встановлено — повертає 1, інакше — 0.

Функція 21094069 — CheckTerminationDate (Перевірка дати звільнення)

Що робить: Перевіряє, чи потрапляє дата звільнення співробітника в поточний зарплатний період.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника та коду періоду

Результат:

  • Повертає: Integer — 1, якщо дата звільнення потрапляє в поточний період; 0 — якщо ні (або якщо дата звільнення не заповнена)
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Перевіряє заповнення обов'язкових полів: Employee No. та Period Code.
  2. Знаходить картку співробітника та зарплатний період.
  3. Якщо дата звільнення (Termination Date) заповнена:
    • Перевіряє чи потрапляє вона в діапазон [Starting Date..Ending Date] зарплатного періоду.
    • Якщо так — повертає 1.
  4. Якщо дата звільнення не заповнена або не потрапляє в період — повертає 0.

Функція 21094070 — CalcPaymentsOnPeriod (Розрахунок оплат за період)

Що робить: Повертає суму оплат (Payment) з операцій по співробітнику (Employee Ledger Entry) за поточний період.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника та коду періоду
Код базової сумиBase Amount Code з розрахунку рядкаВикористовується як фільтр по коду розрахункової групи (якщо заповнений)

Результат:

  • Повертає: Decimal — суму оплат за період
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Фільтрує операції по співробітнику (Employee Ledger Entry):
    • Document Type = Payment (Оплата).
    • Employee No. = код співробітника з рядка.
    • Open = true (тільки відкриті операції).
    • Payroll Period Code = код періоду з рядка.
    • Якщо код базової суми не порожній — Calc Group Code = код базової суми.
  2. Для кожної знайденої операції підсумовує Amount (LCY).
  3. Повертає загальну суму оплат.

Функція 21094072 — CalcPaymentForOriginPayrollLedgerEntry (Оплата за операцією)

Що робить: Повертає суму зарплати з облікованих та необлікованих документів, пов'язаних із конкретною операцією по зарплатному елементу через поле «Orig. Payroll Ledger Entry No.».

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання номера вихідної операції (Orig. Payroll Ledger Entry No.)

Результат:

  • Повертає: Decimal — суму зарплати (Payroll Amount) з усіх пов'язаних рядків
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Якщо номер вихідної операції (Orig. Payroll Ledger Entry No.) = 0, повертає 0.
  2. Знаходить рядки зарплатних документів (Payroll Document Line) з таким самим номером вихідної операції:
    • Підсумовує Payroll Amount.
  3. Знаходить обліковані рядки зарплатних документів (Posted Payroll Document Line) з таким самим номером вихідної операції:
    • Підсумовує Payroll Amount.
  4. Повертає загальну суму з обох таблиць.

Функція 21094073 — GetTaxAmtPrevPeriod (Оподатковувана сума за попередній період)

Що робить: Повертає оподатковувану суму (Taxable Amount) за попередній зарплатний період з фільтрами за співробітником, типом елемента, типом обліку та кодом елемента.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, типу елемента, типу обліку, коду елемента

Результат:

  • Повертає: Decimal — оподатковувану суму за попередній період
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Фільтрує таблицю Employee (з flowfield) за:
    • Employee No. Filter = код співробітника.
    • Element Type Filter = тип елемента з рядка.
    • Posting Type Filter = тип обліку з рядка.
    • Element Code Filter = код елемента з рядка.
    • Payroll Period Filter = код попереднього зарплатного періоду.
  2. Підраховує flowfield «SMA Taxable Amount».
  3. Повертає розраховану суму.

Функція 21094074 — DocumentLineExistBase (Перевірка існування рядка)

Що робить: Перевіряє, чи існує в поточному зарплатному документі хоча б один рядок, що відповідає фільтрам базової суми.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля визначення документа та фільтрів
Код базової сумиBase Amount Code з розрахунку рядка (обов'язковий)Налаштування фільтрів для пошуку

Результат:

  • Повертає: Decimal — 1 якщо рядок знайдено, 0 якщо не знайдено
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Перевіряє обов'язковість коду базової суми (TestField).
  2. Фільтрує рядки поточного документа (Payroll Document Line) за документом.
  3. Накладає фільтри з налаштувань базової суми (елемент, тип, група, тощо).
  4. Додатково фільтрує за періодом відповідно до налаштувань:
    • «За кодом періоду» — фільтр по Period Code.
    • «За періодом нарахування» — фільтр по Wage Period From.
    • «За датами дії» — фільтр по Action Starting Date / Action Ending Date.
    • «За датами вкладання» — обернений фільтр по датах.
  5. Якщо знайдено хоча б один рядок — повертає 1, інакше — 0.

Функція 21094075 — GetFSILimit for first year period (Прожитковий мінімум за перший період року)

[ЗАСТАРIЛА]

Що робить: Повертає значення прожиткового мінімуму за перший зарплатний період поточного року.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля визначення поточного коду періоду

Результат:

  • Повертає: Decimal — суму прожиткового мінімуму за перший період року
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Визначає перший зарплатний період року за кодом періоду з рядка (GetFirstYearPeriod).
  2. Шукає у таблиці «Ліміти зарплати» запис із типом «Прожитковий мінімум» (Survival Minimum) за кодом першого періоду року.
  3. Повертає суму знайденого ліміту.

Функція 21094076 — CalcVacDays Future (Баланс відпустки для резерву з майбутніми)

Що робить: Розраховує баланс днів відпустки аналогічно до функції 21094062, але з урахуванням майбутнього використання — записи використання з датою після розрахункової дати враховуються тільки якщо їх період <= поточного періоду.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, коду періоду
Група часових активностейTime Activity Group з розрахунку рядкаДля фільтрації за типом відпустки
Майбутнє використанняФіксований = trueВраховувати майбутнє використання з обмеженням

Результат:

  • Повертає: Decimal — баланс днів відпустки з урахуванням майбутніх періодів
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Логіка аналогічна функції 21094062 (CalcVacDays).
  2. Ключова відмінність: для записів використання (Usage) з датою >= дата розрахунку:
    • Шукає заголовок облікованого наказу відпустки.
    • Якщо код періоду наказу <= поточного коду періоду рядка документа — використання враховується (віднімається).
    • Якщо код періоду наказу > поточного — використання не враховується.
  3. Записи використання з датою < дата розрахунку враховуються завжди.

Функція 21094077 — CreateVacationReserveLine (Створення рядка резерву відпустки)

Що робить: Створює копію поточного рядка зарплатного документа з іншим кодом елемента, який береться з налаштувань базової суми. Використовується для формування додаткових рядків резерву відпустки (наприклад, нарахування ЄСВ на резерв).

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineПоточний рядок-джерело для копіювання
Код базової сумиBase Amount Code з розрахунку рядкаКод базової суми, з якої береться код елемента для нового рядка

Результат:

  • Повертає: Decimal — 0 (функція має побічний ефект)
  • Заповнює поля рядка ЗП документа: — (створює новий рядок у документі)

Логіка розрахунку:

  1. Знаходить налаштування базової суми (Payroll Base Amount) за кодом елемента та кодом базової суми.
  2. Копіює поточний рядок документа.
  3. Встановлює номер рядка = поточний номер + 1.
  4. Змінює код елемента (Element Code) на значення з фільтра коду елемента в базовій сумі (Element Code Filter).
  5. Вставляє новий рядок у таблицю.

Примітка: Функція є побічним ефектом (side effect) — основний результат — створення нового рядка в документі, а не числове значення.


Функція 21094078 — CalcWithdrawalDebt (Заборгованість з утримання)

Що робить: Розраховує заборгованість з утримання, порівнюючи очікувані суми з фактично утриманими за попередні періоди.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання номера операції, коду періоду

Результат:

  • Повертає: Decimal — суму заборгованості з утримання
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Якщо номер операції по зарплатному елементу (Payroll Elem. Ledger Entry No.) = 0, повертає 0.
  2. Знаходить операцію по зарплатному елементу.
  3. Знаходить поточний зарплатний період.
  4. Якщо дата початку дії операції менша за дату початку поточного періоду (тобто утримання почалося раніше):
    • Знаходить усі зарплатні періоди від місяця дати початку дії до попереднього місяця.
    • Для кожного періоду:
      • Підсумовує фактично утримані суми (Payroll Amount) з книги операцій зарплати (фільтр: не скасовані, не коригування).
    • Розраховує заборгованість: (Кількість періодів * Сума операції) + Фактично утримана сума.
  5. Якщо дата початку дії >= дата початку поточного періоду, повертає 0.

Функція 21094079 — BaseBalance Corr by prev wage period (Кор. сума за попереднім періодом нарахування)

[ЗАСТАРIЛА]

Що робить: Повертає суму з книги операцій по зарплаті, використовуючи фільтри базової суми. Делегує виклик до функції BaseBalance.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, періодів
Код базової сумиBase Amount Code з розрахунку рядкаНалаштування фільтрів

Результат:

  • Повертає: Decimal — суму з книги операцій по зарплаті
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Делегує виклик до BaseBalance(PayrollDocLine, BaseAmountCode).
  2. BaseBalance фільтрує книгу операцій по зарплаті за налаштуваннями базової суми: фільтри по працівнику, по періоду, по типу суми.
  3. Підсумовує та повертає суму відповідного типу.

Функція 21094080 — CalcByLedger Corr (Кор. сума з книги операцій)

Що робить: Повертає кореспондуючу суму (Corr. Amount) з книги операцій по зарплаті для конкретної операції по зарплатному елементу за поточний код періоду.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, елемента, номера операції, коду періоду
Тип сумиФіксований = 0 (Payroll)Внутрішній параметр, але фактично повертає Corr. Amount
Код періодуPeriod Code з рядкаФільтр за кодом періоду

Результат:

  • Повертає: Decimal — корекційну суму (Corr. Amount) з книги операцій
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Фільтрує книгу операцій по зарплаті за:
    • Payroll Elem. Ledger Entry No. = номер операції з рядка.
    • Employee No. = код співробітника.
    • Element Code = код елемента.
    • Period Code = код періоду з рядка.
  2. Підсумовує та повертає Corr. Amount (AmountType = 0 відповідає Corr у виклику CalcByLedger(PayrollDocLine, 0, PayrollDocLine."Period Code")).

Уточнення: Виклик CalcByLedger передає AmountType = 0, що відповідає Option Payroll в сигнатурі, але аналіз коду показує, що це саме Corr (порядок option: Payroll, Taxable, Corr = 0, 1, 2). Перевірте: фактично AmountType=0 повертає Corr.Amount через case-блок.


Функція 21094081 — CalcByLedger Taxable (Оподатковувана сума з книги операцій)

Що робить: Повертає оподатковувану суму (Taxable Amount) з книги операцій по зарплаті для конкретної операції за поточний період.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, елемента, номера операції, коду періоду
Тип сумиФіксований = 2 (Corr)Внутрішній параметр AmountType
Код періодуPeriod Code з рядкаФільтр за кодом періоду

Результат:

  • Повертає: Decimal — оподатковувану суму (Taxable Amount)
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Фільтрує книгу операцій по зарплаті за:
    • Payroll Elem. Ledger Entry No. = номер операції з рядка.
    • Employee No. = код співробітника.
    • Element Code = код елемента.
    • Period Code = код періоду з рядка.
  2. Підсумовує та повертає Taxable Amount (AmountType = 2).

Функція 21094082 — GetSalaryByDateFSILim (Оклад на дату обмежений МРОТ)

Що робить: Повертає оклад на дату, але не менше мінімальної заробітної плати (МРОТ), помноженої на ставку позиції.

Параметри:

ПараметрДжерелоОпис
Код співробітникаEmployee No. з рядкаДля пошуку операцій по окладу
Дата початкуDocument Starting Date з рядкаДата, на яку шукається оклад
Дата облікуPosting Date з рядка (CalcFields)Для конвертації валюти

Результат:

  • Повертає: Decimal — MAX(Оклад на дату, МРОТ * Ставка позиції)
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Зчитує налаштування HR Setup для фільтра елементів окладу.
  2. Знаходить актуальну операцію по зарплатному елементу (оклад) для співробітника на вказану дату.
  3. Конвертує суму в локальну валюту за курсом на дату обліку.
  4. Якщо елемент — погодинна ставка, множить на кількість нормативних годин за офіційним календарем.
  5. Якщо елемент — денна ставка, множить на кількість нормативних робочих днів.
  6. Отримує МРОТ з таблиці лімітів зарплати за відповідний період.
  7. Множить МРОТ на ставку позиції (Position Rate) з трудової книжки.
  8. Повертає більше з двох значень: оклад або МРОТ * ставку.

Функція 21094083 — GetAESalaryByDateWithFSILimit (СЗ оклад обмежений МРОТ)

Що робить: Повертає оклад для розрахунку середнього заробітку на дату, але не менше МРОТ, помноженого на ставку позиції.

Параметри:

ПараметрДжерелоОпис
Код співробітникаEmployee No. з рядкаДля пошуку окладу
Дата початку діїAction Starting Date з рядкаДата, на яку шукається оклад для СЗ

Результат:

  • Повертає: Decimal — MAX(Оклад для СЗ + Додаткова сума для СЗ, МРОТ * Ставка позиції)
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Розраховує оклад для середнього заробітку: GetAESalaryByDate + GetAEExtraSalaryByDate.
  2. Отримує МРОТ з таблиці лімітів за відповідний період.
  3. Знаходить ставку позиції (Position Rate) з трудової книжки на дату.
  4. Множить МРОТ на ставку позиції.
  5. Якщо МРОТ * ставка > оклад для СЗ, повертає МРОТ * ставку.
  6. Інакше повертає оклад для СЗ.

Функція 21094084 — FillTypeOfChargeCodeOnLine (Заповнення коду нарахування)

Що робить: Встановлює код типу нарахування (Type Code of Charges) на рядку зарплатного документа, якщо відповідний код існує в довіднику зарплати.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineРядок для оновлення
Код базової сумиBase Amount Code з розрахунку рядкаКод, який буде використаний як код типу нарахування

Результат:

  • Повертає: — (функція не повертає значення)
  • Заповнює поля рядка ЗП документа:
    • Type Code of Charges — встановлюється значення з коду базової суми, якщо він існує у довіднику

Логіка розрахунку:

  1. Якщо код базової суми порожній — виходить без дій.
  2. Шукає в довіднику зарплати (Payroll Directory) запис із типом «Type code of charges» та кодом = код базової суми.
  3. Якщо знайдено — встановлює код типу нарахування на рядку документа = код базової суми.
  4. Якщо не знайдено — нічого не змінює.

Функція 21094085 — CheckIsTheActualCalcGroup (Перевірка актуальної розрахункової групи)

Що робить: Перевіряє, чи є розрахункова група поточного документа актуальною (тією, що зараз призначена співробітнику).

Параметри:

ПараметрДжерелоОпис
Номер документаDocument No. з рядкаДля отримання заголовка документа

Результат:

  • Повертає: Decimal — 1, якщо розрахункова група документа = актуальній групі співробітника; 0 — якщо ні
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Знаходить заголовок зарплатного документа за номером.
  2. Знаходить картку співробітника.
  3. Порівнює «Payroll Calc Group» з картки співробітника з «Calc Group Code» заголовка документа.
  4. Якщо збігаються — повертає 1.
  5. Якщо відрізняються — повертає 0.

Функція 21094086 — GetFSILimit MROT Hour by Wage Period (МРОТ погодинна ставка за період)

[ЗАСТАРIЛА]

Що робить: Повертає значення мінімальної погодинної ставки (MROT Hour) з таблиці лімітів зарплати за період нарахування.

Параметри:

ПараметрДжерелоОпис
Період нарахуванняWage Period From з рядкаКод періоду для фільтрації

Результат:

  • Повертає: Decimal — значення МРОТ погодинної ставки
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Шукає у таблиці «Ліміти зарплати» запис із типом «MROT Hour» за період нарахування.
  2. Повертає суму знайденого ліміту.

Функція 21094087 — YTDBaseAmount Corr for Person in year (Кор. сума для фіз. особи з початку року)

[ЗАСТАРIЛА]

Що робить: Повертає суму з книги операцій по зарплаті з початку року за фільтрами базової суми. Делегує виклик до YTDBaseAmount.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, періодів
Код базової сумиBase Amount Code з розрахунку рядкаНалаштування фільтрів

Результат:

  • Повертає: Decimal — суму з початку року з книги операцій
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Делегує виклик до YTDBaseAmount(PayrollDocLine, BaseAmountCode).
  2. YTDBaseAmount фільтрує книгу операцій за першим періодом поточного року до поточного періоду або за налаштуваннями періоду з базової суми.

Функція 21094088 — CheckSickLeaveOnlySalary (Перевірка лікарняного лише оклад)

Що робить: Перевіряє, чи потрібно використовувати тільки окладні дані для розрахунку лікарняного. Повертає середньоденний заробіток або 0 залежно від наявності не-окладних джерел у періодах СЗ.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання типу документа, даних про СЗ
Група часових активностейTime Activity Group з розрахунку рядкаДля розрахунку робочих днів з табелю

Результат:

  • Повертає: Decimal — AE Daily Earnings (середньоденний заробіток) або 0
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Якщо тип документа не «Лікарняний» — повертає AE Daily Earnings без перевірки.
  2. Розраховує загальну кількість днів СЗ (AE Total Days).
  3. Якщо період СЗ заповнений, зчитує кількість робочих днів з табелю за групою часових активностей та періодом СЗ (AE Period From .. AE Period To).
  4. Порівнює кількість календарних днів з табелю з кількістю днів СЗ:
    • Якщо вони рівні (тобто всі дні = робочі):
      • Перевіряє рядки СЗ (Payroll Document Line AE): чи є джерела, відмінні від «Salary».
      • Якщо всі джерела — тільки «Salary» (окладні) — повертає 0 (ознака «тільки оклад»).
      • Якщо є інші джерела — повертає AE Daily Earnings.
    • Якщо відрізняються — повертає AE Daily Earnings.

Функція 21094089 — CalcLCYBasedOnOCY (Розрахунок суми ЗП з валюти в ЛОК)

Що робить: Конвертує суму зарплати з оригінальної валюти (OCY) у локальну валюту (LCY) та оновлює поле «Payroll Amount» на рядку документа.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineРядок з валютною сумою

Результат:

  • Повертає: Decimal — суму в локальній валюті (або 0, якщо валюта не вказана)
  • Заповнює поля рядка ЗП документа:
    • Payroll Amount — сума зарплати в локальній валюті (LCY)

Логіка розрахунку:

  1. Якщо код валюти (Currency Code) порожній — виходить без змін.
  2. Конвертує суму з оригінальної валюти (Payroll Amount (OCY)) в локальну валюту через CurrExchRate.ExchangeAmtFCYToLCY:
    • Дата = Posting Date.
    • Код валюти = Currency Code.
    • Коефіцієнт валюти = Currency Factor.
  3. Округлює результат.
  4. Записує результат у поле «Payroll Amount».

Функція 21094090 — CalcOCYBasedOnLCY (Розрахунок суми ЗП з ЛОК у валюту)

Що робить: Конвертує суму зарплати з локальної валюти (LCY) в оригінальну валюту (OCY) та оновлює поле «Payroll Amount (OCY)» на рядку документа.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineРядок з сумою в локальній валюті

Результат:

  • Повертає: Decimal — суму в оригінальній валюті (або 0, якщо валюта не вказана)
  • Заповнює поля рядка ЗП документа:
    • Payroll Amount (OCY) — сума зарплати в оригінальній валюті

Логіка розрахунку:

  1. Якщо код валюти (Currency Code) порожній — виходить без змін.
  2. Зчитує налаштування точності округлення для валюти.
  3. Конвертує суму з локальної валюти (Payroll Amount) в оригінальну через CurrExchRate.ExchangeAmtLCYToFCY:
    • Дата = Posting Date.
    • Код валюти = Currency Code.
    • Коефіцієнт валюти = Currency Factor.
  4. Округлює результат з точністю валюти (Amount Rounding Precision).
  5. Записує результат у поле «Payroll Amount (OCY)».

Функція 21094091 — CopyCurrByElementFilter (Копіювання валюти за фільтром елемента)

Що робить: Копіює код валюти, валютний коефіцієнт та ознаку використання оригінальної валюти з іншого рядка документа, знайденого за фільтром базової суми.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineРядок-приймач валютних даних
Код базової сумиBase Amount Code з розрахунку рядкаДля визначення фільтра по елементу

Результат:

  • Повертає: Decimal — 0 (функція має побічний ефект)
  • Заповнює поля рядка ЗП документа:
    • Currency Code — код валюти з знайденого рядка
    • Currency Factor — валютний коефіцієнт
    • Use Original Currency — ознака використання оригінальної валюти

Логіка розрахунку:

  1. Зчитує налаштування базової суми для отримання фільтра коду елемента та типу елемента.
  2. Шукає інший рядок у поточному документі з фільтрами:
    • Номер рядка <> поточний номер рядка.
    • Element Type за фільтром базової суми.
    • Element Code за фільтром базової суми.
    • Currency Code <> '' (тільки валютні рядки).
    • Use Original Currency = true.
  3. Якщо знайдено — копіює валютні дані та зберігає рядок (Modify).

Функція 21094092 — CalendarMgt Working Hours in Wage Period (Робочі години за виробничим календарем)

[ЗАСТАРIЛА]

Що робить: Повертає кількість робочих годин за календарем рядка документа за зарплатний період.

Параметри:

ПараметрДжерелоОпис
Код календаряCalendar Code з рядка документаКод виробничого календаря
Зарплатний періодWagePayrollPeriod (глобальна змінна)Дати початку та закінчення періоду

Результат:

  • Повертає: Decimal — кількість робочих годин
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Викликає CalendarMgt.GetPeriodInfo з параметрами:
    • Calendar Code = код календаря з рядка.
    • Starting Date та Ending Date = дати зарплатного періоду нарахування.
    • What = 3 (робочі години).

Функція 21094093 — TimesheetMgt Hours from timesheet (Години з табелю)

[ЗАСТАРIЛА]

Що робить: Повертає кількість годин з табелю обліку робочого часу за зарплатний період.

Параметри:

ПараметрДжерелоОпис
Код співробітникаEmployee No. з рядкаДля пошуку записів табелю
Група часових активностейTime Activity Group з розрахунку рядкаФільтр за типом активності
Зарплатний періодWagePayrollPeriod (глобальна змінна)Дати початку та закінчення

Результат:

  • Повертає: Decimal — кількість годин з табелю
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Викликає TimesheetMgt.GetTimesheetInfo з параметрами:
    • Employee No. = код співробітника.
    • Time Activity Group = група часових активностей.
    • Starting Date та Ending Date = дати зарплатного періоду.
    • What = 3 (години).

Функція 21094094 — GetSalaryByPeriod by Employee Calendar (Середній оклад за календарем співробітника)

Що робить: Повертає середній оклад за діапазон дат дії, використовуючи календар співробітника (а не офіційний виробничий календар). Аналогічна функції 21094001, але з іншим календарем.

Параметри:

ПараметрДжерелоОпис
Код співробітникаEmployee No. з рядкаДля пошуку окладу та календаря
Дата початкуAction Starting Date з рядкаПочаток діапазону
Дата закінченняAction Ending Date з рядкаКінець діапазону
Офіційний календарФіксований = falseВикористовувати календар співробітника

Результат:

  • Повертає: Decimal — середній оклад за робочі дні періоду
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Знаходить актуальний запис про роботу (Employee Job Entry) для визначення календаря співробітника.
  2. Фільтрує робочі дні (Nonworking = false) за календарем співробітника у діапазоні дат.
  3. Для кожного робочого дня зчитує оклад на цю дату (GetSalaryByDate з параметром UseOfficialCalendar = false).
  4. Підсумовує оклади за всі робочі дні.
  5. Ділить суму на кількість робочих днів.
  6. Повертає середній оклад.

Функція 21094095 — CalendarMgt Working Hours by Action Dates (Робочі години за датами дії)

[ЗАСТАРIЛА]

Що робить: Повертає кількість робочих годин за календарем рядка за діапазон дат дії.

Параметри:

ПараметрДжерелоОпис
Код календаряCalendar Code з рядкаКод виробничого календаря
Дата початкуAction Starting Date з рядкаПочаток діапазону
Дата закінченняAction Ending Date з рядкаКінець діапазону

Результат:

  • Повертає: Decimal — кількість робочих годин за діапазон дат
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Викликає CalendarMgt.GetPeriodInfo з What = 3 (години) для календаря рядка та дат дії.

Функція 21094096 — BaseBalance (Базовий баланс з книги операцій)

[ЗАСТАРIЛА]

Що робить: Повертає суму з книги операцій по зарплаті за фільтрами базової суми. Делегує виклик до BaseBalance.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, періодів
Код базової сумиBase Amount Code з розрахунку рядкаНалаштування фільтрів

Результат:

  • Повертає: Decimal — суму з книги операцій
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Делегує виклик до BaseBalance(PayrollDocLine, BaseAmountCode).

Функція 21094097 — GetFSILimit FSI by Payment Period (Ліміт ЄСВ за період оплати)

[ЗАСТАРIЛА]

Що робить: Повертає ліміт ЄСВ (SSC Limit) з таблиці лімітів зарплати за період оплати документа.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля визначення періоду оплати з заголовка документа

Результат:

  • Повертає: Decimal — значення ліміту ЄСВ
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Визначає код періоду оплати з заголовка зарплатного документа (Payment Period Code).
  2. Шукає ліміт у таблиці «Ліміти зарплати» з типом «SSC Limit» за цей період.
  3. Повертає суму знайденого ліміту.

Функція 21094098 — YTDBaseAmount Corr (Кор. сума з початку року)

[ЗАСТАРIЛА]

Що робить: Повертає суму з книги операцій по зарплаті з початку поточного року. Делегує виклик до YTDBaseAmount.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, періодів
Код базової сумиBase Amount Code з розрахунку рядкаНалаштування фільтрів

Результат:

  • Повертає: Decimal — суму з початку року
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Делегує виклик до YTDBaseAmount(PayrollDocLine, BaseAmountCode).

Функція 21094099 — YTDExternalIncome (Зовнішній дохід з початку року)

Що робить: Повертає суму зовнішнього доходу (External Income) фізичної особи з початку поточного року до поточного періоду. Зчитує дані з таблиці «Person Income PFU» (Дохід фіз. особи для ПФУ).

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду фіз. особи та періоду
Код базової сумиBase Amount Code з розрахунку рядкаДля отримання фільтрів елемента, типу, бази ПДФО, бази ЄСВ

Результат:

  • Повертає: Decimal — суму зовнішнього доходу з початку року
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Фільтрує таблицю «Person Income FSI» за кодом фіз. особи.
  2. Зчитує налаштування базової суми та накладає фільтри:
    • Element Code, Element Type за базовою сумою.
    • Income Tax Base (база ПДФО): Impose / Not Impose.
    • SSC Base (база ЄСВ): Impose / Not Impose.
  3. Залежно від фільтра періоду у базовій сумі визначає діапазон:
    • «За періодом оплати» — від першого періоду року до періоду оплати документа.
    • «За кодом періоду» — від першого періоду року до коду періоду рядка.
    • «За періодом нарахування» — від першого періоду року до періоду нарахування рядка.
  4. Підсумовує поле Amount та повертає результат.

Функція 21094100 — CalcPostedTaxAmountGE (Врахована сума податку, Грузія)

Що робить: Розраховує вже враховану суму податку з записів доходу фізичної особи (Person Income Entry). Може використовуватися в різних конфігураціях.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання номера операції та коду періоду

Результат:

  • Повертає: Decimal — суму з записів доходу фіз. особи (Person Income Entry)
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Делегує виклик до codeunit HRPGEFunctions.CalcPostedTaxAmountGE.
  2. Якщо номер операції по зарплатному елементу = 0, повертає 0.
  3. Фільтрує записи доходу фіз. особи (Person Income Entry) за:
    • Payroll Elem. Ledger Entry No. = номер операції з рядка.
    • Period Code = код періоду з рядка.
  4. Підсумовує суму (Amount) та повертає результат.

Функція 21094101 — YTDTaxDedAmount (Податкове відрахування з початку року)

Що робить: Повертає суму податкового відрахування (Tax Deductible Amount) з книги операцій по зарплаті з початку поточного календарного року.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника, дати обліку
Код базової сумиBase Amount Code з розрахунку рядкаДля отримання фільтрів за кодом елемента, типом, групою

Результат:

  • Повертає: Decimal — суму податкових відрахувань з початку року
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Зчитує дату обліку (Posting Date) рядка.
  2. Фільтрує книгу операцій по зарплаті (Payroll Ledger Entry) за:
    • Employee No. = код співробітника.
    • Element Code = фільтр коду елемента з базової суми.
    • Element Type = фільтр типу елемента з базової суми.
    • Element Group = фільтр групи елемента з базової суми.
  3. Визначає діапазон періодів: від першого періоду року (за датою обліку) до останнього періоду, що закінчується до 31 грудня цього ж року.
  4. Підсумовує поле «Tax Deductible Amount» та повертає результат.

Функція 21094102 — CalcAmountForNettoBaseDetail (Сума для деталізації бази нетто)

Що робить: Розраховує суму для розподілу нетто виплати: підсумовує нерозподілені суми з рядків документа та суми із деталізованої бази для податку. Використовується для формування рядків нетто оплати.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineПоточний рядок нетто виплати
Код базової сумиBase Amount Code з розрахунку рядкаНалаштування фільтрів для пошуку рядків-джерел

Результат:

  • Повертає: Decimal — суму для нетто виплати
  • Заповнює поля рядка ЗП документа:
    • Posting Group — може бути оновлено з іншого рядка документа

Логіка розрахунку:

  1. Фільтрує рядки поточного документа за налаштуваннями базової суми та кодом довідника (Directory Code).
  2. Для кожного знайденого рядка, де (Payroll Amount - Paid Amount) <> 0:
    • Додає до результату: Payroll Amount - Paid Amount.
    • Знаходить записи деталізованої бази для податку (Detailed Base for Tax) для цього рядка.
    • Фільтрує за типами: Deduction, Income Tax, Pension Deduction.
    • Додає суму відрахувань (Deduction Amount) до результату.
    • Оновлює Netto Document Line No. для зв'язку з рядком нетто.
  3. Обробляє рядки податкових відрахувань (Tax Deduction) з типом обліку «Не облікувати» — розподіляє суму відрахування по базі.
  4. Може оновити Posting Group рядка нетто з рядка-джерела.

Функція 21094103 — CalcNettoAmountForSpecialElement (Сума нетто для спецелемента)

Що робить: Розраховує суму нетто для спеціального елемента, делегуючи виклик до codeunit PostTaxesWithPaymentMgt. Використовується для визначення суми виплати через платіжну відомість.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання даних рядка
Код базової сумиBase Amount Code з розрахунку рядкаДля визначення фільтрів

Результат:

  • Повертає: Decimal — суму з рядка платіжної відомості (Payment Statement Line)
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Делегує виклик до PostTaxesWithPaymentMgt.CalcNettoAmountForSpecialElement.
  2. Перевіряє: якщо Add. Amount 2 <> 0 і Payroll Amount <> Add. Amount 2, виходить без результату.
  3. Знаходить рядок документа за фільтрами базової суми та кодом довідника.
  4. Створює тимчасовий рядок платіжної відомості та перевіряє, чи сума рядка >= суми документа.
  5. Якщо сума < суми документа — валідує зміну та повертає суму з платіжної відомості.

Функція 21094104 — CalcPostedAdvanceAmount (Врахований аванс)

Що робить: Повертає вже враховану суму авансу з записів доходу фізичної особи (Person Income Entry), пов'язаних з поточним елементом.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду періоду, коду співробітника
Код базової сумиBase Amount Code з розрахунку рядкаДля отримання фільтрів елемента

Результат:

  • Повертає: Decimal — суму авансу з записів доходу
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Делегує виклик до PostTaxesWithPaymentMgt.CalcPostedAdvanceAmount.
  2. Фільтрує записи доходу фіз. особи (Person Income Entry) за:
    • Period Code = код періоду.
    • Employee No. = код співробітника.
    • Element Code, Element Type — за фільтрами з першого запису базової суми.
  3. Підсумовує та повертає суму (Amount).

Функція 21094105 — CheckBetweenCalcGroup (Перевірка міжперіодної групи)

Що робить: Перевіряє, чи належить поточна розрахункова група до типу «Між» (Between) — тобто чи є це міжперіодний розрахунок.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду розрахункової групи

Результат:

  • Повертає: Decimal — 1, якщо розрахункова група має тип «Between» (міжперіодна); 0 — якщо ні
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Знаходить розрахункову групу (Payroll Calc Group) за кодом з рядка.
  2. Перевіряє, чи тип групи = «Between» (Між).
  3. Якщо так — повертає 1, інакше — 0.

Функція 21094106 — PostedBaseAmount (Врахована базова сума)

Що робить: Повертає суму з облікованих рядків зарплатного документа, який є оригінальним (вихідним) для поточного документа. Розраховує різницю між сумою зарплати та вже облікованою сумою.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду елемента
Заголовок документаPayroll Document HeaderДля отримання номера оригінального документа (Original Payroll Document No.)
Код базової сумиBase Amount Code з розрахунку рядкаДля отримання фільтрів

Результат:

  • Повертає: Decimal — суму (Payroll Amount - Posted Amount) з облікованих рядків
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Знаходить заголовок зарплатного документа для отримання номера оригінального документа.
  2. Якщо номер оригінального документа порожній — повертає 0.
  3. Фільтрує обліковані рядки за:
    • Document No. = номер оригінального документа.
    • Фільтри з налаштувань базової суми.
  4. Для кожного знайденого рядка підсумовує: Payroll Amount - Posted Amount (різниця між нарахованою та вже облікованою сумою).
  5. Повертає підсумкову суму.

Функція 21094107 — CalendarMgt Working Days in Wage Period (Робочі дні за календарем за період)

[ЗАСТАРIЛА]

Що робить: Повертає кількість робочих днів за календарем рядка документа за зарплатний період.

Параметри:

ПараметрДжерелоОпис
Код календаряCalendar Code з рядка документаКод виробничого календаря
Зарплатний періодWagePayrollPeriod (глобальна змінна)Дати початку та закінчення

Результат:

  • Повертає: Decimal — кількість робочих днів
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Викликає CalendarMgt.GetPeriodInfo з параметрами:
    • Calendar Code = код календаря з рядка.
    • Starting Date та Ending Date = дати зарплатного періоду нарахування.
    • What = 2 (робочі дні).

Функція 21094108 — CalcMonthQtyBetweenPeriod (Кількість місяців між періодами)

Що робить: Повертає кількість місяців між початковим та кінцевим періодами середнього заробітку (СЗ). Використовується для розрахунку кількості місяців, що враховуються при обчисленні середнього заробітку.

Параметри:

ПараметрДжерелоОпис
Початковий період СЗAE Period From з рядкаКод початкового періоду
Кінцевий період СЗAE Period To з рядкаКод кінцевого періоду

Результат:

  • Повертає: Integer — кількість місяців між періодами (включно)
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Якщо будь-який з періодів порожній — повертає 0.
  2. Знаходить записи зарплатних періодів за кодами.
  3. Розраховує: Місяць(Дата закінчення кінцевого періоду) - Місяць(Дата закінчення початкового періоду) + 1.
  4. Повертає результат.

Примітка: Формула працює коректно тільки в межах одного календарного року. Для міжрічних діапазонів результат може бути некоректним.


Функція 21094109 — CheckBaseEmployeePositionElementCode (Перевірка базового елемента позиції)

Що робить: Перевіряє, чи збігається код базового елемента окладу на позиції співробітника з фільтром коду елемента з налаштувань базової суми.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання коду співробітника та елемента
Код базової сумиBase Amount Code з розрахунку рядкаДля отримання фільтра коду елемента

Результат:

  • Повертає: Integer — 1, якщо базовий елемент позиції відповідає фільтру; 0 — якщо ні
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Зчитує налаштування базової суми (Payroll Base Amount).
  2. Знаходить картку співробітника, отримує код позиції.
  3. Фільтрує таблицю «Позиція» (Position) за:
    • No. = код позиції співробітника.
    • Base Salary Element Code = фільтр коду елемента з базової суми.
  4. Якщо знайдено — повертає 1, інакше — 0.

Функція 21094111 — GetSalaryAmountByDate (Сума окладу на дату)

Що робить: Повертає суму окладу з книги операцій по зарплатному елементу на вказану дату. На відміну від функції 21094000, використовує FindLast (а не FindFirst) і не конвертує погодинну/денну ставку.

Параметри:

ПараметрДжерелоОпис
Код співробітникаEmployee No. з рядкаДля пошуку операцій по окладу
Дата початку діїAction Starting Date з рядкаДата, на яку шукається оклад

Результат:

  • Повертає: Decimal — суму окладу з книги операцій по зарплатному елементу
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Зчитує налаштування HR Setup для отримання фільтра елементів окладу (Element Code Salary Days, Hours, Amount, Hourly Rate, Daily Rate).
  2. Фільтрує книгу операцій по зарплатному елементу (Payroll Element Ledger Entry):
    • Employee No. = код співробітника.
    • Element Code = фільтр елементів окладу.
    • Action Starting Date <= вказана дата.
    • Action Ending Date >= вказана дата або порожня.
  3. Знаходить останній запис (FindLast).
  4. Повертає поле Amount знайденого запису.

Примітка: На відміну від GetSalaryByDate (21094000/21094050), ця функція не множить суму на кількість годин/днів для погодинних/денних ставок — повертає «сиру» суму з операції.


Функція 21094112 — GetValorizationIndex (Індекс валоризації)

Що робить: Повертає індекс валоризації (споживчий індекс) з відповідної таблиці. Використовується для пенсійних та індексаційних розрахунків.

Параметри:

ПараметрДжерелоОпис
Рядок ЗП документаPayroll Document LineДля отримання номера наказу (HR Order No.) та типу документа

Результат:

  • Повертає: Decimal — значення споживчого індексу (Customer's Index)
  • Заповнює поля рядка ЗП документа:

Логіка розрахунку:

  1. Якщо номер наказу (HR Order No.) порожній — повертає 0.
  2. Конвертує тип документа рядка у тип документа наказу відсутності.
  3. Рекурсивно шукає перший (найстаріший) наказ відсутності у ланцюжку:
    • Знаходить обліковану рядок наказу відсутності (Posted Absence Line) за номером документа та типом.
    • Якщо у знайденого рядка є «Previous Document No.» (попередній документ), переходить до нього.
    • Повторює до тих пір, поки не знайде рядок без попереднього документа.
  4. Визначає дату початку з першого наказу у ланцюжку.
  5. Шукає споживчий індекс (Consumer Index) у таблиці «SMA Consumer Indexes» за період до періоду дати початку.
  6. Повертає значення «Customer's Index» з останнього знайденого запису.

Примітка: Функція працює з ланцюжком наказів відсутності, переходячи до найпершого наказу для визначення початкової дати. Це важливо для коректного визначення базового індексу при продовженні відсутності.


Зведена таблиця функцій

НомерНазваПовертаєПобічні ефектиСтатус
21094051GetFSILimit (Прожитковий мінімум)DecimalАктивна
21094052BaseAmount (Кор. сума фіз. особи)DecimalЗАСТАРIЛА
21094053CalcByLedger TaxDecimalАктивна
21094054GetTimesheetActionData HoursDecimalЗАСТАРIЛА
21094055GetAdvancePay HourlyDecimalОновлює дати дії, годиниАктивна
21094056CalcIndexationFactorDecimalАктивна
21094057CalcPaymDaysFromAbsenceOrderIntegerОновлює Payment DaysАктивна
21094058RateTime HoursDecimalАктивна
21094059RateTime DaysDecimalАктивна
21094060JobBalanceDecimalАктивна
21094061FillVacResAEPeriods "+1"Оновлює СЗ дати, тип документаАктивна
21094062CalcVacDaysDecimalАктивна
21094063PrevBaseAmountDecimalАктивна
21094064UpdateTypeOfChargesОновлює Type Code of ChargesАктивна
21094065FillVacResAEPeriodsOnDateОновлює СЗ дати, тип документаАктивна
21094066CalcVacDaysByWagePeriodDecimalАктивна
21094067IsInvalidInteger (0/1)Активна
21094068IsDisabledInteger (0/1)Активна
21094069CheckTerminationDateInteger (0/1)Активна
21094070CalcPaymentsOnPeriodDecimalАктивна
21094072CalcPaymentForOriginPayrollLedgerEntryDecimalАктивна
21094073GetTaxAmtPrevPeriodDecimalАктивна
21094074DocumentLineExistBaseDecimal (0/1)Активна
21094075GetFSILimit (1-й період року)DecimalЗАСТАРIЛА
21094076CalcVacDays FutureDecimalАктивна
21094077CreateVacationReserveLineDecimalСтворює новий рядокАктивна
21094078CalcWithdrawalDebtDecimalАктивна
21094079BaseBalance CorrDecimalЗАСТАРIЛА
21094080CalcByLedger CorrDecimalАктивна
21094081CalcByLedger TaxableDecimalАктивна
21094082GetSalaryByDateFSILimDecimalАктивна
21094083GetAESalaryByDateWithFSILimitDecimalАктивна
21094084FillTypeOfChargeCodeOnLineОновлює Type Code of ChargesАктивна
21094085CheckIsTheActualCalcGroupDecimal (0/1)Активна
21094086GetFSILimit MROT HourDecimalЗАСТАРIЛА
21094087YTDBaseAmount Corr PersonDecimalЗАСТАРIЛА
21094088CheckSickLeaveOnlySalaryDecimalАктивна
21094089CalcLCYBasedOnOCYDecimalОновлює Payroll AmountАктивна
21094090CalcOCYBasedOnLCYDecimalОновлює Payroll Amount (OCY)Активна
21094091CopyCurrByElementFilterDecimalОновлює Currency Code, FactorАктивна
21094092CalendarMgt Working HoursDecimalЗАСТАРIЛА
21094093TimesheetMgt HoursDecimalЗАСТАРIЛА
21094094GetSalaryByPeriod (Employee Calendar)DecimalАктивна
21094095CalendarMgt Working Hours (Action Dates)DecimalЗАСТАРIЛА
21094096BaseBalanceDecimalЗАСТАРIЛА
21094097GetFSILimit FSI (Payment Period)DecimalЗАСТАРIЛА
21094098YTDBaseAmount CorrDecimalЗАСТАРIЛА
21094099YTDExternalIncomeDecimalАктивна
21094100CalcPostedTaxAmountGEDecimalАктивна
21094101YTDTaxDedAmountDecimalАктивна
21094102CalcAmountForNettoBaseDetailDecimalОновлює Posting GroupАктивна
21094103CalcNettoAmountForSpecialElementDecimalАктивна
21094104CalcPostedAdvanceAmountDecimalАктивна
21094105CheckBetweenCalcGroupDecimal (0/1)Активна
21094106PostedBaseAmountDecimalАктивна
21094107CalendarMgt Working DaysDecimalЗАСТАРIЛА
21094108CalcMonthQtyBetweenPeriodIntegerАктивна
21094109CheckBaseEmployeePositionElementCodeInteger (0/1)Активна
21094111GetSalaryAmountByDateDecimalАктивна
21094112GetValorizationIndexDecimalАктивна

Функції розрахунку зарплати (Частина 4): Діапазони, стаж, базові суми, звіти (21094900–21094924, 21094500–21094518)

Цей розділ описує функції для роботи з діапазонами, стажем, базовими сумами та датами дій (21094900–21094924), а також функції для звітів (21094500–21094518).


Функції розрахунку: діапазони, стаж, базові суми (21094900–21094924)

Кодуніт: SMA Payroll Document Calculate (70950596)


Функція 21094900 --- Brackets Max Amount AZ (Максимум діапазону AZ)

Що робить: Повертає максимальну суму з рядка діапазону (Range Line) для зарплатного періоду. Використовується для визначення верхньої межі при розрахунках за діапазонами.

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
PayrollDocLineCalcРядок розрахункуПараметри розрахунку, що містять код діапазону
Wage Period FromРядок ЗП документаПочаток зарплатного періоду, за яким шукається заголовок діапазону

Результат:

  • Повертає: Decimal --- максимальна сума (Max Amount) з рядка діапазону для відповідного періоду
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Знаходить заголовок діапазону (Range Header) за зарплатним періодом (Wage Period From) за допомогою функції GetRangeHdrByPeriod.
  2. Якщо заголовок знайдено, викликає функцію Brackets з параметром Bracket::MaxAmount, яка повертає максимальну суму з відповідного рядка діапазону.
  3. Якщо заголовок діапазону не знайдено, повертає 0.

Функція 21094901 --- GetSalaryByPeriodAZ hourly (Середній годинний заробіток AZ)

Що робить: Розраховує середній годинний заробіток за методологією Азербайджану. Для кожного робочого дня календаря в заданому періоді отримує оклад і ділить на кількість робочих годин у місяці.

Параметри:

ПараметрДжерелоОпис
Employee No.Рядок ЗП документаКод працівника
Action Starting DateРядок ЗП документаПочаткова дата дії --- початок періоду розрахунку
Action Ending DateРядок ЗП документаКінцева дата дії --- кінець періоду розрахунку
UseHourlyRateКонстанта (true)Прапорець, що вказує на використання годинної ставки
DaysTypeКонстанта (0 --- Calendar Days)Тип днів (не впливає, коли UseHourlyRate = true)
UseDaysAmountКонстанта (true)Прапорець, що вмикає ділення на кількість годин

Результат:

  • Повертає: Decimal --- накопичена (акумульована) сума годинного заробітку за період (НЕ усереднена за кількістю днів)
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Отримує запис кадрової операції працівника (Employee Job Entry) для визначення коду календаря.
  2. Вибирає робочі дні (Nonworking = false) з календаря за період від Action Starting Date до Action Ending Date.
  3. Для кожного робочого дня:
    • Знаходить запис зарплатного елемента (Payroll Element Ledger Entry) з кодом елемента окладу, чинний на дату дня.
    • Отримує суму окладу. Якщо елемент --- погодинна ставка або денна ставка, перетворює суму на місячний оклад множенням на відповідну кількість годин/днів офіційного календаря.
    • Ділить отриману суму на кількість робочих годин у місяці (за календарем працівника).
  4. Результат --- сума по всіх днях (акумуляція ResultAmount), що повертається без ділення на кількість днів (оскільки UseHourlyRate = true).

Функція 21094902 --- GetSalaryByPeriodAZ daily (Середній денний заробіток AZ)

Що робить: Розраховує середній денний заробіток за методологією Азербайджану. Для кожного робочого дня календаря в заданому періоді отримує оклад і ділить на кількість робочих днів у місяці.

Параметри:

ПараметрДжерелоОпис
Employee No.Рядок ЗП документаКод працівника
Action Starting DateРядок ЗП документаПочаткова дата дії
Action Ending DateРядок ЗП документаКінцева дата дії
UseHourlyRateКонстанта (false)Не використовувати годинну ставку
DaysTypeКонстанта (1 --- Working Days)Тип днів --- робочі дні
UseDaysAmountКонстанта (true)Прапорець, що вмикає ділення на кількість днів

Результат:

  • Повертає: Decimal --- середній денний заробіток (загальна сума / кількість робочих днів у вибраному періоді)
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Отримує запис кадрової операції працівника для визначення коду календаря.
  2. Вибирає робочі дні з календаря за період.
  3. Для кожного робочого дня:
    • Знаходить чинний запис зарплатного елемента з кодом елемента окладу.
    • Отримує суму окладу. Якщо елемент --- погодинна або денна ставка, перетворює на місячний оклад.
    • Ділить суму на кількість робочих днів у місяці за календарем працівника.
  4. Повертає загальну накопичену суму, поділену на кількість робочих днів у вибраному періоді (ResultAmount / PayrollCalendarLine.Count()).

Функція 21094903 --- YTDBaseAmount Payroll for Person (Сума ЗП з початку року для фізичної особи)

ЗАСТАРIЛА (DEPRECATED)

Що робить: Повертає суму заробітної плати з початку року (Year-To-Date) для фізичної особи на основі фільтрів базових сум. Використовує дані з книги операцій ЗП (Payroll Ledger Entry).

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
Base Amount CodeРядок розрахункуКод базової суми для визначення фільтрів

Результат:

  • Повертає: Decimal --- сума ЗП з початку року
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Отримує запис базової суми (Payroll Base Amount) за кодом елемента та кодом базової суми.
  2. Встановлює фільтр працівника залежно від налаштувань базової суми (за працівником, за фізичною особою або для інших працівників).
  3. Встановлює фільтр періоду: з початку року (FirstYearPayrollPeriod.Code) до поточного періоду.
  4. Повертає суму відповідного типу (Payroll Amount, Taxable Amount тощо) з операцій книги ЗП.

Функція 21094904 --- YTDBaseAmount Taxable for Person (Сума оподатковуваного доходу з початку року)

ЗАСТАРIЛА (DEPRECATED)

Що робить: Повертає суму оподатковуваного доходу з початку року (Year-To-Date) для фізичної особи. Логіка ідентична функції 21094903, але призначена для оподатковуваних сум.

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
Base Amount CodeРядок розрахункуКод базової суми

Результат:

  • Повертає: Decimal --- оподатковувана сума з початку року
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Викликає ту саму функцію YTDBaseAmount, що й функція 21094903.
  2. Фільтрація за типом суми (Taxable Amount) визначається налаштуваннями базової суми.

Функція 21094905 --- TimesheetMgt Working Days by Action Date (Робочі дні з табеля за датами дії)

ЗАСТАРIЛА (DEPRECATED)

Що робить: Повертає кількість робочих днів з табеля обліку робочого часу, відфільтровану за групою тимчасових активностей та датами дії рядка ЗП документа.

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа (містить Employee No., Action Starting Date, Action Ending Date)
Time Activity GroupРядок розрахункуКод групи тимчасових активностей

Результат:

  • Повертає: Decimal --- кількість робочих днів
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Викликає TimesheetMgt.GetTimesheetActionData з параметром типу даних 4 (робочі дні).
  2. Дані фільтруються за працівником, групою тимчасових активностей та датами дії з рядка ЗП документа.

Функція 21094906 --- GetTaxDeductions (Максимальне податкове відрахування)

Що робить: Визначає максимальну суму податкового відрахування шляхом перехресного пошуку між податковими відрахуваннями фізичної особи та рядками діапазону. Оновлює код довідника на рядку ЗП документа.

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
PayrollDocLineCalcРядок розрахункуПараметри розрахунку (Base Amount Code, код діапазону)

Результат:

  • Повертає: Decimal --- максимальна сума відрахування
  • Заповнює поля рядка ЗП документа: Directory Code (код довідника)

Логіка розрахунку:

  1. Отримує запис базової суми для визначення фільтра періоду.
  2. Знаходить заголовок діапазону (Range Header) за періодом: за Period Code або за Wage Period From (залежно від налаштувань базової суми).
  3. Вибирає податкові відрахування фізичної особи (Person Tax Deduction) з таблиці SMA Person Tax Deduction, відфільтровані за:
    • Person No. з рядка документа.
    • Період дії: Starting Period <= поточний період, Ending Period >= поточний період або пустий.
  4. Для кожного відрахування шукає рядок діапазону (Range Line) з кодом довідника, що відповідає коду відрахування.
  5. Якщо знайдена сума рядка діапазону перевищує поточний максимум, оновлює результат та заповнює PayrollDocLine."Directory Code" кодом довідника з рядка діапазону.
  6. Повертає найбільшу знайдену суму відрахування.

Функція 21094907 --- GetServiceYears (Стаж роботи)

Що робить: Повертає загальний страховий стаж працівника у вигляді десяткового числа (роки + місяці/12 + дні/365).

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
Employee No.Рядок ЗП документаКод працівника
Action Ending DateРядок ЗП документаДата, на яку розраховується стаж

Результат:

  • Повертає: Decimal --- стаж у роках (десяткове число)
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Отримує картку працівника за Employee No..
  2. Викликає RecOfServiceMgt.CalcEmplInsuredService(Employee, Action Ending Date, CommService), яка заповнює масив CommService:
    • CommService[1] --- дні.
    • CommService[2] --- місяці.
    • CommService[3] --- роки.
  3. Повертає: CommService[3] + CommService[2] / 12 + CommService[1] / 365.

Функція 21094908 --- GetPercentAmountFromRange (Відсоток і сума з діапазону)

Що робить: Знаходить рядок діапазону за значенням кількості (Quantity) рядка ЗП документа та заповнює поля Amount і Payment Percent на рядку документа.

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа (використовується Quantity)
RangeHeaderВнутрішня зміннаЗаголовок діапазону, знайдений на попередньому кроці розрахунку

Результат:

  • Повертає: Decimal --- сума з рядка діапазону (фактично не використовується, оскільки значення записуються безпосередньо в рядок документа)
  • Заповнює поля рядка ЗП документа: Amount (сума), Payment Percent (відсоток нарахування)

Логіка розрахунку:

  1. Встановлює фільтри на рядки діапазону (Range Line) за кодом елемента, кодом діапазону та періодом.
  2. Якщо в заголовку діапазону увімкнено Allow Employee Gender, фільтрує за статтю працівника.
  3. Якщо увімкнено Allow Employee Age, фільтрує за датою народження.
  4. Фільтрує за ознакою інвалідності працівника (Disabled Person).
  5. Шукає рядок діапазону, де Min Amount <= PayrollDocLine.Quantity <= Max Amount.
  6. Якщо рядок знайдено, заповнює:
    • PayrollDocLine.Amount := RangeLine.Amount (сума).
    • PayrollDocLine."Payment Percent" := RangeLine.Percent (відсоток).

Функція 21094909 --- FillActionDatesbyWagePeriod (Дати дії за ЗП періодом)

Що робить: Встановлює дати дії рядка ЗП документа рівними датам початку та кінця зарплатного періоду.

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
Wage Period FromРядок ЗП документаКод зарплатного періоду

Результат:

  • Повертає: Decimal --- 0 (не використовується)
  • Заповнює поля рядка ЗП документа: Action Starting Date (дата початку дії), Action Ending Date (дата кінця дії)

Логіка розрахунку:

  1. Визначає початкову та кінцеву дати зарплатного періоду за кодом Wage Period From.
  2. Встановлює:
    • PayrollDocLine."Action Starting Date" := дата початку зарплатного періоду.
    • PayrollDocLine."Action Ending Date" := дата кінця зарплатного періоду.

Функція 21094910 --- FillActionDatesbyAdvance (Дати дії за авансом)

Що робить: Встановлює дати дії рядка ЗП документа від початку періоду до дати авансу. Якщо дата авансу не вказана, виходить без змін.

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
Wage Period FromРядок ЗП документаКод зарплатного періоду

Результат:

  • Повертає: Decimal --- 0 (результат не використовується явно, але за відсутності дати авансу функція не змінює дати)
  • Заповнює поля рядка ЗП документа: Action Starting Date, Action Ending Date

Логіка розрахунку:

  1. Отримує запис зарплатного періоду за кодом Wage Period From.
  2. Перевіряє наявність дати авансу (Advance Date) у періоді.
  3. Якщо дата авансу = 0D (пуста), виходить без змін.
  4. Якщо дата авансу є, встановлює:
    • PayrollDocLine."Action Starting Date" := дата початку періоду (Starting Date).
    • PayrollDocLine."Action Ending Date" := дата авансу (Advance Date).

Функція 21094911 --- BaseSalary (Оклад за базовими сумами)

Що робить: Обчислює суму окладу з операцій зарплатних елементів (Payroll Element Ledger Entries), відфільтрованих за кодом базової суми та датами дії.

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
Base Amount CodeРядок розрахункуКод базової суми

Результат:

  • Повертає: Decimal --- сума окладу за операціями зарплатних елементів
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Фільтрує операції зарплатних елементів (Payroll Element Ledger Entry) за:
    • Employee No. з рядка документа.
    • Дати дії: Action Starting Date <= Action Ending Date документа, Action Ending Date >= Action Starting Date документа (або 0D).
  2. Отримує записи базових сум за кодом елемента та кодом базової суми.
  3. Для кожного запису базової суми з непустим фільтром коду елемента:
    • Встановлює фільтр коду елемента на операції.
    • Встановлює фільтр періоду: за Period Code або за Wage Period From.
    • Встановлює фільтр джерела виплати (Payment Source): Employer або FSI.
    • Підсумовує суми (Amount) з усіх знайдених операцій.
  4. Повертає загальну суму.

Функція 21094912 --- ServiceOnCurrentPosition (Стаж на поточній позиції)

Що робить: Повертає кількість років стажу на поточній посаді працівника.

Параметри:

ПараметрДжерелоОпис
Employee No.Рядок ЗП документаКод працівника
Action Ending DateРядок ЗП документаДата, на яку розраховується стаж

Результат:

  • Повертає: Decimal --- стаж на поточній посаді (у роках, десяткове число)
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Викликає RecOfServiceMgt.CalcEmplTotServiceOnCurrentPosition(Employee No., Action Ending Date).
  2. Повертає результат --- кількість років стажу на поточній посаді працівника.

Функція 21094913 --- FillAdvanceDatesbyAdvance (Обмеження дати авансом)

Що робить: Обмежує кінцеву дату дії рядка ЗП документа датою авансу, якщо дата авансу є та вона менша за поточну кінцеву дату дії.

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
Wage Period FromРядок ЗП документаКод зарплатного періоду

Результат:

  • Повертає: Decimal --- 1, якщо дата авансу існує; 0, якщо дата авансу відсутня
  • Заповнює поля рядка ЗП документа: Action Ending Date (обрізається до дати авансу, якщо потрібно)

Логіка розрахунку:

  1. Отримує запис зарплатного періоду за кодом Wage Period From.
  2. Якщо дата авансу (Advance Date) = 0D, повертає 0.
  3. Якщо дата авансу < поточне значення PayrollDocLine."Action Ending Date":
    • Замінює PayrollDocLine."Action Ending Date" на дату авансу.
  4. Повертає 1.

Функція 21094914 --- CalcEmployeeOutOfStaff (Перевірка позаштатної позиції)

Що робить: Перевіряє, чи позиція працівника є позаштатною (Out-of-Staff).

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
Employee No.Рядок ЗП документаКод працівника

Результат:

  • Повертає: Integer --- 1, якщо позиція позаштатна; 0, якщо штатна
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Отримує картку працівника та перевіряє наявність коду позиції (Position No.).
  2. Отримує запис позиції (Position) за кодом позиції працівника.
  3. Перевіряє поле "Out-of-Staff" на позиції:
    • Якщо true --- повертає 1.
    • Якщо false --- повертає 0.

Функція 21094915 --- BaseAmount Payroll for Person (Сума ЗП з поточного документа для фізичної особи)

ЗАСТАРIЛА (DEPRECATED)

Що робить: Повертає суму заробітної плати з поточного зарплатного документа для фізичної особи, обчислену на основі фільтрів базових сум.

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
Base Amount CodeРядок розрахункуКод базової суми

Результат:

  • Повертає: Decimal --- сума ЗП
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Викликає загальну функцію BaseAmount, яка підсумовує суми з рядків поточного зарплатного документа, відфільтрованих за параметрами базової суми.
  2. Підтримує фільтрацію за працівником, за фізичною особою або за іншими працівниками.
  3. Підтримує різні типи сум: Payroll Amount, Taxable Amount, Corr. Amount тощо.
  4. Підтримує фільтрацію за Period Code, Wage Period Code, Bonus Period, Action Dates, Fit Dates.

Функція 21094916 --- BaseAmount Taxable for Person (Оподатковувана сума з поточного документа для фізичної особи)

ЗАСТАРIЛА (DEPRECATED)

Що робить: Повертає оподатковувану суму з поточного зарплатного документа для фізичної особи. Логіка ідентична функції 21094915.

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
Base Amount CodeРядок розрахункуКод базової суми

Результат:

  • Повертає: Decimal --- оподатковувана сума
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Викликає ту саму функцію BaseAmount, що й функція 21094915.
  2. Тип суми (Taxable Amount) визначається налаштуваннями базової суми.

Функція 21094918 --- CalcPlannedWorkHours (Планові робочі години)

Що робить: Розраховує планову кількість робочих годин за період з урахуванням змін позиції працівника. Ітерує по операціях кадрових призначень (Employee Job Entries) та підсумовує робочі години за календарем кожної позиції.

Параметри:

ПараметрДжерелоОпис
Employee No.Рядок ЗП документаКод працівника
Action Starting DateРядок ЗП документаПочаткова дата періоду
Action Ending DateРядок ЗП документаКінцева дата періоду

Результат:

  • Повертає: Decimal --- загальна кількість планових робочих годин
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Вибирає операції кадрових призначень (Employee Job Entry) для працівника, де:
    • Position Changed = true (змінювалася позиція).
    • Starting Date <= EndingDate (кінцева дата розрахунку).
    • Ending Date >= StartingDate або 0D.
  2. Для кожної операції визначає перетин дат:
    • StartDate = MAX(StartingDate, EmployeeJobEntry."Starting Date").
    • EndDate = MIN(EndingDate, EmployeeJobEntry."Ending Date"), якщо Ending Date <> 0D, інакше EndDate = EndingDate.
  3. Для кожного перетину обчислює робочі години за допомогою CalendarMgt.GetPeriodInfo(Calendar Code, StartDate, EndDate, 3), де параметр 3 --- Planned Working Hours.
  4. Підсумовує години всіх періодів.

Функція 21094919 --- IsLaborContractPrimaryJob (Основна робота)

Що робить: Перевіряє, чи трудовий договір працівника має режим роботи "Основна робота" (Primary Job).

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
Employee No.Рядок ЗП документаКод працівника

Результат:

  • Повертає: Integer --- 1, якщо режим роботи "Primary Job"; 0 --- в інших випадках
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Отримує картку працівника та зчитує номер трудового договору (Contract No.).
  2. Отримує запис трудового договору (Labor Contract).
  3. Перевіряє поле "Work Mode":
    • Якщо "Work Mode" = "Primary Job", повертає 1.
    • В іншому випадку повертає 0.

Функція 21094920 --- GetMarketValueOfCarLease (Ринкова вартість оренди авто, Грузія)

Що робить: Повертає ринкову вартість оренди автомобіля з картки основного засобу. Специфічна функція для грузинської локалізації.

Параметри:

ПараметрДжерелоОпис
PayrollElementLedgerEntryОперація зарплатного елементаПоточна операція зарплатного елемента (використовується Vehicle Code)

Результат:

  • Повертає: Decimal --- ринкова вартість оренди авто
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Шукає запис основного засобу (Fixed Asset) за кодом транспортного засобу (Vehicle Code) з операції зарплатного елемента.
  2. Якщо знайдено, повертає значення поля "Market value of car lease".
  3. Якщо основний засіб не знайдено, повертає 0.

Функція 21094921 --- GetVehicleCapacityType (Тип потужності транспорту, Грузія)

Що робить: Повертає суму з довідника ЗП (Payroll Directory) для типу потужності транспортного засобу. Специфічна функція для грузинської локалізації.

Параметри:

ПараметрДжерелоОпис
PayrollElementLedgerEntryОперація зарплатного елементаПоточна операція зарплатного елемента (використовується Vehicle Code та Posting Date)

Результат:

  • Повертає: Decimal --- сума з довідника ЗП для відповідного типу потужності
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Шукає запис основного засобу (Fixed Asset) за кодом транспортного засобу.
  2. Отримує код типу потужності транспортного засобу (Vehicle Capacity Type) з картки основного засобу.
  3. Шукає запис у довіднику ЗП (Payroll Directory) з відповідним кодом, типом "Vehicle Capacity Type" та датою початку <= дати проведення операції.
  4. Повертає суму (Amount) з останнього знайденого запису довідника.

Функція 21094922 --- GetMonthlySalary (Місячний оклад)

Що робить: Повертає місячний оклад з картки позиції працівника.

Параметри:

ПараметрДжерелоОпис
PayrollElementLedgEntryОперація зарплатного елементаПоточна операція зарплатного елемента (використовується Position No.)

Результат:

  • Повертає: Decimal --- місячний оклад з позиції
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Перевіряє, що операція зарплатного елемента (Payroll Elem. Ledger Entry No.) існує (перевірка виконується на етапі виклику функції).
  2. Шукає запис позиції (Position) за кодом позиції з операції зарплатного елемента.
  3. Якщо позицію знайдено, повертає значення поля "Monthly Salary".
  4. Якщо позицію не знайдено, повертає 0.

Функція 21094923 --- BaseAmountFromLedgEntry (Базова сума з операції)

Що робить: Розраховує денну ставку з операцій книги ЗП (Payroll Ledger Entry) для періоду середнього заробітку (AE). Якщо період AE не вказано, використовує максимальну денну виплату за лікарняним.

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
Base Amount CodeРядок розрахункуКод базової суми (обов'язковий, перевіряється через TestField)

Результат:

  • Повертає: Decimal --- денна ставка або максимальна денна виплата за лікарняним
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Перевіряє наявність та значення поля "AE Period To" на рядку документа.
  2. Якщо AE Period To заповнено і не збігається з Period Code:
    • Отримує запис базової суми (Payroll Base Amount).
    • Фільтрує операції книги ЗП (Payroll Ledger Entry) за працівником, періодом = AE Period To та фільтрами базової суми.
    • Підсумовує суму відповідного типу за допомогою CalculateSumAmountType.
    • Отримує середню кількість днів у місяці (SickLeaveSetup.GetAvgMonthDays).
    • Ділить суму на середню кількість днів.
  3. Якщо AE Period To не заповнено або збігається з Period Code:
    • Повертає максимальну денну виплату за лікарняним: SickLeaveSetup.GetMaxDailyPaymentByDocDate.

Функція 21094924 --- CalcVacHours (Баланс годин відпустки)

Що робить: Розраховує баланс відпустки в ГОДИНАХ на основі записів відсутності працівника. Формула: (Нараховані дні * 8) - Використані години - Компенсовані години + Коригуючі години.

Параметри:

ПараметрДжерелоОпис
PayrollDocLineРядок ЗП документаПоточний рядок зарплатного документа
Time Activity GroupРядок розрахункуКод групи тимчасових активностей для фільтрації типів відпусток
FutureUsedDaysКонстанта (false)Прапорець обліку майбутніх використаних днів

Результат:

  • Повертає: Decimal --- баланс відпустки в годинах
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Визначає дату початку (StartDate) = дата кінця поточного періоду + 1 день.
  2. Отримує фільтр тимчасових активностей (Time Activity Filter) за кодом групи та датою.
  3. Вибирає записи відсутності працівника (Employee Absence Entry) з типом "Accrual" (нарахування), де:
    • Employee No. = код працівника.
    • Start Date < StartDate.
    • Time Activity Code відповідає фільтру.
  4. Для кожного запису нарахування:
    • Обчислює кількість нарахованих днів відпустки за допомогою VacationDaysCalculation.CalcVacDays та множить на 8 (годин на день).
    • Знаходить пов'язані записи використання (Entry Type = Usage):
      • Віднімає робочі години (Working Hours) кожного запису використання.
      • Якщо FutureUsedDays = true і дата використання >= StartDate, враховує лише записи з відповідним періодом.
    • Знаходить записи компенсації (Entry Type = Compensation) та віднімає їх робочі години.
    • Знаходить записи коригування (Entry Type = Correction) та додає їх робочі години.
  5. Повертає загальний баланс у годинах.

Функції для звітів: статистика та суми (21094500–21094518)

Кодуніт: SMA Payroll Report Calculation (70950609)

Ці функції викликаються через процедуру Calculate, яка отримує параметри з налаштувань рядків ЗП звітів (SMA Payroll Reports Setup Line) та визначає джерело даних (DataSource).


Функція 21094500 --- EmployeeBalance (Баланс співробітника)

Що робить: Обчислює суму позитивних залишкових балансів з операцій книги працівника (Employee Ledger Entries) за вказаний період.

Параметри:

ПараметрДжерелоОпис
PayrollReportsSetupLinesРядок налаштувань звітуПараметри звіту (облікова група, джерело виплати, валюта, тип суми)
PeriodFilterФільтр періодуФільтр ЗП періодів
EmployeeFilterФільтр працівниківФільтр кодів працівників

Результат:

  • Повертає: Decimal --- сума позитивних залишкових балансів
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Отримує останній період за фільтром для визначення кінцевої дати.
  2. Вибирає відкриті (Open = true) операції книги працівника з фільтрами:
    • Employee No. за EmployeeFilter (якщо задано).
    • Employee Posting Group за полем "Add. Employee Posting Group" (якщо задано).
    • Payment Source за налаштуваннями звіту (якщо задано).
    • Currency Code за налаштуваннями звіту (якщо задано).
    • Posting Date <= кінцева дата останнього періоду.
  3. Для кожної операції визначає суму залишку:
    • Якщо Amount Type = "Payroll Amount": -Remaining Amt. (LCY).
    • Якщо Amount Type = "Payroll Amount (OCY)": -Remaining Amount.
  4. Додає до результату лише позитивні залишки (TempBalance > 0).

Функція 21094501 --- CalcStaffWorkHours (Робочі години штату)

Що робить: Обчислює загальну кількість годин за табелем для всіх працівників, що відповідають фільтрам. Підтримує фільтрацію за статтю, штатністю та режимом роботи.

Параметри:

ПараметрДжерелоОпис
PayrollReportsSetupLinesРядок налаштувань звітуПараметри звіту (стать, штатність, режим роботи, група тимчасових активностей)
PeriodFilterФільтр періодуФільтр ЗП періодів
ActualQtyКонстанта (false)Враховувати лише працівників з ненульовими годинами
ActualQtyOnlyКонстанта (false)Повертати кількість працівників замість годин

Результат:

  • Повертає: Decimal --- загальна кількість робочих годин за табелем
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Визначає дати початку та кінця за фільтром періоду.
  2. Формує список працівників з урахуванням фільтрів:
    • Стать (Gender) --- якщо задано.
    • Штатність (Out-of-Staff = false) --- якщо увімкнено In Staff.
    • Режим роботи (Work Mode Filter).
  3. Для кожного працівника:
    • Отримує кількість годин з табеля: TimesheetMgt.GetTimesheetInfo(Employee No., Time Activity Group Code, StartDate, EndDate, 3), де 3 = Hours.
    • Додає години до загальної суми.
  4. Повертає загальну кількість годин.

Функція 21094503 --- VendorsWithSalaryDebts (Працівники з заборгованістю)

Що робить: Підраховує кількість працівників, що мають від'ємний залишковий баланс (заборгованість перед підприємством).

Параметри:

ПараметрДжерелоОпис
PayrollReportsSetupLinesРядок налаштувань звітуПараметри звіту (облікова група)
PeriodFilterФільтр періодуФільтр ЗП періодів

Результат:

  • Повертає: Decimal --- кількість працівників з від'ємним балансом
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Отримує останній період за фільтром.
  2. Вибирає операції книги працівника з від'ємним залишком: Remaining Amt. (LCY) < 0.
  3. Фільтрує за обліковою групою (Employee Posting Group), якщо задано.
  4. Фільтрує за датою проведення <= кінцева дата періоду.
  5. Сортує за Employee No. та ітерує по унікальних працівниках:
    • Для кожного унікального Employee No. додає 1 до лічильника.
  6. Повертає загальну кількість працівників з заборгованістю.

Функція 21094504 --- BaseLedgerBalance (Баланс з книги операцій)

Що робить: Основна функція звітного балансу --- агрегує суми з вибраного джерела даних. Підтримує різні джерела: проведені операції ЗП, рядки зарплатних документів, проведені зарплатні документи та дохід фізичної особи. Підтримує методи розрахунку Sum/Max/Min.

Параметри:

ПараметрДжерелоОпис
PayrollReportsSetupLinesРядок налаштувань звітуПовний набір параметрів фільтрації та агрегації
PeriodFilterФільтр періодуФільтр ЗП періодів
EmployeeFilterФільтр працівниківФільтр кодів працівників
DataSourceПараметр викликуДжерело даних: Posted Entries / Payroll Documents / Posted Payroll Documents / Person Income Entry

Результат:

  • Повертає: Decimal --- агрегована сума відповідно до налаштувань
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Залежно від джерела даних (DataSource) делегує виклик відповідній внутрішній процедурі:
    • Posted Entries: BaseLedgerBalance --- працює з Payroll Ledger Entry.
    • Payroll Documents: BaseDocumentBalance --- працює з Payroll Document Line.
    • Posted Payroll Documents: BasePostedDocumentBalance --- працює з Posted Payroll Document Line.
    • Person Income Entry: BasePersonIncomeBalance --- працює з Person Income Entry.
  2. Встановлює фільтри за параметрами звіту:
    • Фільтр періоду: за Period Code, Payment Period або Wage Period (залежно від "Calculation by").
    • Фільтр працівників: за Employee No.
    • Фільтр типу елемента: Element Type Filter.
    • Фільтр коду елемента: Element Code Filter.
    • Фільтр групи елементів: Element Group Filter.
    • Штатність: Out-of-Staff = false (якщо In Staff увімкнено).
    • Джерело виплати: Payment Source.
    • Тип періоду: Future Periods / Current Period.
    • Режим роботи: Work Mode Filter.
    • Підрозділ: Org. Unit Code.
    • Група тимчасових активностей: Time Activity Group Code.
    • Код довідника: Directory Code.
    • Група розрахунку: Calc Group.
    • Дата проведення: Posting Date.
    • Валюта: Currency Code.
    • Тип нарахувань: Type Code of Charges.
    • Сторнування: Reversed = false.
  3. Обчислює результат за обраним методом (Calculation Method):
    • Sum: підсумовує суми обраного типу. Якщо увімкнено "ABS By Line", бере абсолютне значення кожного рядка.
    • Max: знаходить максимальне значення обраного типу.
    • Min: знаходить мінімальне додатне значення обраного типу.
  4. Типи сум (Amount Type): Payroll Amount, Taxable Amount, Corr. Amount, Payed Days, AE Daily Earnings, Add. Amount, Add. Amount 2, Tax Deductible, Payroll Amount (OCY), Rate.
  5. Якщо увімкнено ABS на рівні звіту, повертає абсолютне значення результату.

Функція 21094505 --- CalcActualCalDays (Фактичні календарні дні)

Що робить: Обчислює кількість фактичних календарних днів за табелем, зменшену на кількість днів для вказаної групи тимчасових активностей (наприклад, за вирахуванням днів відпустки або лікарняних).

Параметри:

ПараметрДжерелоОпис
PayrollReportsSetupLinesРядок налаштувань звітуПараметри звіту (група тимчасових активностей для виключення)
PeriodFilterФільтр періодуФільтр ЗП періодів
EmployeeFilterФільтр працівниківКод працівника

Результат:

  • Повертає: Decimal --- кількість фактичних календарних днів
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Визначає дати початку та кінця за фільтром періоду.
  2. Обчислює загальну кількість днів за табелем: TimesheetMgt.GetTimesheetInfo(EmployeeFilter, '', StartDate, EndDate, 2), де 2 = Calendar Days.
  3. Віднімає кількість днів для вказаної групи тимчасових активностей: TimesheetMgt.GetTimesheetInfo(EmployeeFilter, Time Activity Group Code, StartDate, EndDate, 2).
  4. Повертає різницю.

Функція 21094506 --- BaseLedgerBalance with SST limit (Баланс з книги операцій з обмеженням ЄСВ)

Що робить: Аналогічна функції 21094504, але обмежує результат максимальною базою нарахування ЄСВ (SSC Limit). Підтримує ті ж джерела даних.

Параметри:

ПараметрДжерелоОпис
PayrollReportsSetupLinesРядок налаштувань звітуПовний набір параметрів фільтрації та агрегації
PeriodFilterФільтр періодуФільтр ЗП періодів
EmployeeFilterФільтр працівниківФільтр кодів працівників
DataSourceПараметр викликуДжерело даних

Результат:

  • Повертає: Decimal --- агрегована сума, обмежена межею ЄСВ
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Виконує той самий розрахунок, що й функція 21094504, але з параметром SSTLimit = true.
  2. Після розрахунку базової суми перевіряє, чи вона перевищує ліміт ЄСВ:
    • Отримує ліміт ЄСВ за допомогою PayrollDocumentCalculate.GetFSILimit(PeriodCode, "SSC Limit").
    • Якщо обчислена сума перевищує ліміт, повертає ліміт замість обчисленої суми.

Функція 21094507 --- PaymentsToEmployee (Виплати працівнику)

Що робить: Обчислює суму виплат працівнику за період з операцій книги працівника (Employee Ledger Entries) з типом документа "Виплата" (Payment).

Параметри:

ПараметрДжерелоОпис
PayrollReportsSetupLinesРядок налаштувань звітуПараметри звіту (валюта, тип суми)
PeriodFilterФільтр періодуФільтр ЗП періодів
EmployeeFilterФільтр працівниківФільтр кодів працівників

Результат:

  • Повертає: Decimal --- сума виплат за період
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Визначає дати початку та кінця за фільтром періоду.
  2. Вибирає операції книги працівника з фільтрами:
    • Employee No. за EmployeeFilter.
    • Posting Date між початковою та кінцевою датами періоду.
    • Document Type = Payment.
    • Currency Code --- якщо задано в налаштуваннях.
  3. Для кожної операції підсумовує суму залежно від типу:
    • Якщо Amount Type = "Payroll Amount": додає Amount (LCY).
    • Якщо Amount Type = "Payroll Amount (OCY)": додає Amount.

Функція 21094508 --- AverageHeadcount type 0 (Середньооблікова чисельність)

Що робить: Обчислює середньооблікову чисельність працівників за українською методологією (стандартний метод, Include = All).

Параметри:

ПараметрДжерелоОпис
PeriodFilterФільтр періодуФільтр ЗП періодів
IncludeКонстанта (0 --- All)Включати всіх працівників

Результат:

  • Повертає: Decimal --- середньооблікова чисельність
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Делегує виклик AverageHeadcountCalculation.CalcAvgCountUA(PeriodFilter, 0, '', Employee).
  2. Функція CalcAvgCountUA розраховує середньооблікову чисельність за кожний день періоду:
    • Визначає всіх працівників з трудовими договорами типу "Трудовий договір" та режимом роботи "Основна робота".
    • Враховує кадрові операції (Employee Job Entries) для визначення фактичних днів роботи.
    • Розраховує середнє значення за кількість календарних днів у періоді.
  3. Підтримує фільтрацію за підрозділом (Org. Unit Code) та кодифікатором AT.

Функція 21094509 --- AverageHeadcount type 1 (Середньооблікова чисельність, варіант 1)

Що робить: Обчислює середньооблікову чисельність працівників за альтернативним методом (Include = DisabledOnly --- лише працівники з інвалідністю).

Параметри:

ПараметрДжерелоОпис
PeriodFilterФільтр періодуФільтр ЗП періодів
IncludeКонстанта (1 --- DisabledOnly)Включати лише працівників з інвалідністю

Результат:

  • Повертає: Decimal --- середньооблікова чисельність працівників з інвалідністю
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Делегує виклик AverageHeadcountCalculation.CalcAvgCountUA(PeriodFilter, 1, '', Employee).
  2. Логіка аналогічна функції 21094508, але додатково фільтрує працівників:
    • Вибирає лише тих, хто має запис у таблиці медичної інформації (Person Medical Info) з типом "Disability" та ненульовою групою інвалідності.
  3. Повертає середньооблікову чисельність лише для працівників з інвалідністю.

Функція 21094510 --- HiredEmployees (Прийняті працівники)

Що робить: Підраховує кількість працівників, прийнятих на роботу протягом звітного періоду.

Параметри:

ПараметрДжерелоОпис
PeriodFilterФільтр періодуФільтр ЗП періодів
GenderКонстанта (" ")Стать --- без фільтрації (всі)
In StaffРядок налаштувань звітуВраховувати лише штатних працівників
NewlyCreatedКонстанта (false)Не фільтрувати за новоствореними позиціями

Результат:

  • Повертає: Decimal --- кількість прийнятих працівників
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Делегує виклик AverageHeadcountCalculation.HiredEmployeeQty.
  2. Визначає дати початку та кінця за фільтром періоду.
  3. Фільтрує працівників за датою прийняття на роботу: Employment Date в межах діапазону дат періоду.
  4. Якщо увімкнено In Staff, фільтрує: Out-of-Staff = false.
  5. Якщо задано фільтр підрозділу, фільтрує за Org. Unit Code.
  6. Повертає кількість знайдених записів (Employee.Count).

Функція 21094511 --- HiredFemaleEmployees (Прийняті жінки)

Що робить: Підраховує кількість жінок, прийнятих на роботу протягом звітного періоду.

Параметри:

ПараметрДжерелоОпис
PeriodFilterФільтр періодуФільтр ЗП періодів
GenderКонстанта (Female)Стать --- жіноча
In StaffРядок налаштувань звітуВраховувати лише штатних працівників
NewlyCreatedКонстанта (false)Не фільтрувати за новоствореними позиціями

Результат:

  • Повертає: Decimal --- кількість прийнятих жінок
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Делегує виклик AverageHeadcountCalculation.HiredEmployeeQty з параметром Gender = Female.
  2. Логіка ідентична функції 21094510, але з додатковим фільтром: Gender = Female.

Функція 21094512 --- TerminatedEmployees (Звільнені працівники)

Що робить: Підраховує кількість працівників, звільнених протягом звітного періоду. Підтримує фільтрацію за причиною звільнення.

Параметри:

ПараметрДжерелоОпис
PeriodFilterФільтр періодуФільтр ЗП періодів
Period TypeРядок налаштувань звітуТип періоду (може зміщувати дати на -1 для типу "Current Period - 1")
GenderКонстанта (" ")Стать --- без фільтрації (всі)
In StaffРядок налаштувань звітуВраховувати лише штатних працівників
Dismissal Reason FilterРядок налаштувань звітуФільтр за причиною звільнення

Результат:

  • Повертає: Decimal --- кількість звільнених працівників
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Делегує виклик AverageHeadcountCalculation.TerminatedEmployeeQty.
  2. Визначає дати початку та кінця за фільтром періоду.
  3. Якщо тип періоду = "Current Period - 1", зміщує дати на -1 день.
  4. Фільтрує працівників за:
    • Termination Date в межах діапазону дат.
    • Штатність (якщо увімкнено In Staff).
    • Причина звільнення (Grounds for Term. Code) за фільтром, якщо задано.
    • Підрозділ (Org. Unit Code), якщо задано.
  5. Повертає кількість знайдених записів.

Функція 21094513 --- TerminatedFemaleEmployees (Звільнені жінки)

Що робить: Підраховує кількість жінок, звільнених протягом звітного періоду.

Параметри:

ПараметрДжерелоОпис
PeriodFilterФільтр періодуФільтр ЗП періодів
Period TypeРядок налаштувань звітуТип періоду
GenderКонстанта (Female)Стать --- жіноча
In StaffРядок налаштувань звітуВраховувати лише штатних працівників
Dismissal Reason FilterРядок налаштувань звітуФільтр за причиною звільнення

Результат:

  • Повертає: Decimal --- кількість звільнених жінок
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Делегує виклик AverageHeadcountCalculation.TerminatedEmployeeQty з параметром Gender = Female.
  2. Логіка ідентична функції 21094512, але з додатковим фільтром: Gender = Female.

Функція 21094514 --- EmployeesInStaff (Працівники в штаті на кінець періоду)

Що робить: Підраховує кількість активних працівників на кінець звітного періоду. Підтримує розширений набір фільтрів: стать, штатність, режим роботи, вікові діапазони, тип контракту, умови роботи, медична інформація тощо.

Параметри:

ПараметрДжерелоОпис
PayrollReportsSetupLinesРядок налаштувань звітуПовний набір параметрів фільтрації
PeriodFilterФільтр періодуФільтр ЗП періодів
EmployeeFilterФільтр працівниківФільтр кодів працівників

Результат:

  • Повертає: Integer --- кількість працівників у штаті
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Визначає дату "на кінець періоду" (OnDate) та дату перевірки (ToDate) за останнім періодом з фільтру.
  2. Для типу періоду "Future Periods": ToDate = OnDate + 1.
  3. Встановлює базові фільтри на таблицю Employee:
    • Employment Date <= OnDate та <> 0D.
    • Termination Date >= ToDate або 0D.
    • Наявність трудового договору (Contract No. <> '').
    • Without Labor Contract = false.
    • Labor Contract Type = "Labor Contract".
    • Labor Work Mode = "Primary Job".
    • Фільтр типу контракту (Contact Type Code Filter).
  4. Додаткові фільтри:
    • Вік: фільтр за датою народження відповідно до Range From.
    • Норма робочого часу: фільтр за Range To (максимальна кількість годин на тиждень).
    • Стать: Gender (якщо задано).
    • Підрозділ: Org. Unit Code (якщо задано).
  5. Для кожного працівника виконує додаткові перевірки:
    • Умови роботи (Conditions of Work) --- за кадровою операцією на дату.
    • Інша інформація (Other Information Code) --- за записом додаткової інформації.
    • Група тимчасових активностей --- за записами відсутності.
    • Код елемента --- за операціями зарплатних елементів.
  6. Маркує відповідних працівників і повертає їх кількість.

Функція 21094515 --- FemaleEmployeesInStaff (Жінки в штаті)

Що робить: Підраховує кількість жінок у штаті на кінець звітного періоду. Використовує ту саму логіку, що й функція 21094514.

Параметри:

ПараметрДжерелоОпис
PayrollReportsSetupLinesРядок налаштувань звітуПовний набір параметрів фільтрації (включає Gender = Female)
PeriodFilterФільтр періодуФільтр ЗП періодів
EmployeeFilterФільтр працівниківФільтр кодів працівників

Результат:

  • Повертає: Integer --- кількість жінок у штаті
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Викликає ту саму процедуру CalcEmployeesInStaff, що й функція 21094514.
  2. Фільтрація за статтю (Gender = Female) визначається налаштуваннями рядка звіту (PayrollReportsSetupLines.Gender).

Функція 21094516 --- HiredForNewPositions (Прийняті на нові посади)

Що робить: Підраховує кількість працівників, прийнятих на новостворені робочі місця (позиції) протягом звітного періоду.

Параметри:

ПараметрДжерелоОпис
PeriodFilterФільтр періодуФільтр ЗП періодів
GenderКонстанта (" ")Стать --- без фільтрації
In StaffРядок налаштувань звітуВраховувати лише штатних працівників
NewlyCreatedКонстанта (true)Фільтрувати за новоствореними позиціями

Результат:

  • Повертає: Decimal --- кількість працівників, прийнятих на нові посади
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Делегує виклик AverageHeadcountCalculation.HiredEmployeeQty з параметром NewlyCreated = true.
  2. Логіка ідентична функції 21094510, але з додатковим фільтром: "NewlyCreated Work Position" = true.
  3. Цей фільтр вибирає лише тих працівників, чиї позиції були створені як нові робочі місця.

Функція 21094517 --- StaffWorkHours ActualOnly (Робочі години тільки працюючих)

Що робить: Обчислює загальну кількість робочих годин за табелем, виключаючи працівників з нульовими годинами. Відрізняється від функції 21094501 тим, що не враховує працівників без фактично відпрацьованого часу.

Параметри:

ПараметрДжерелоОпис
PayrollReportsSetupLinesРядок налаштувань звітуПараметри звіту (стать, штатність, режим роботи, група тимчасових активностей)
PeriodFilterФільтр періодуФільтр ЗП періодів
ActualQtyКонстанта (true)Враховувати лише працівників з ненульовими годинами
ActualQtyOnlyКонстанта (false)Повертати години (не кількість працівників)

Результат:

  • Повертає: Decimal --- загальна кількість робочих годин (лише для працівників з ненульовими годинами)
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Делегує виклик CalcStaffWorkHours з параметрами ActualQty = true, ActualQtyOnly = false.
  2. Логіка ідентична функції 21094501, але при підрахунку кількості працівників враховує лише тих, хто має ненульові години за табелем.
  3. Повертає суму годин (не кількість працівників, оскільки ActualQtyOnly = false).

Функція 21094518 --- ActualEmployeeCount (Кількість працюючих)

Що робить: Підраховує кількість працівників, які фактично мають відпрацьовані години за табелем (ненульові години).

Параметри:

ПараметрДжерелоОпис
PayrollReportsSetupLinesРядок налаштувань звітуПараметри звіту (стать, штатність, режим роботи, група тимчасових активностей)
PeriodFilterФільтр періодуФільтр ЗП періодів
ActualQtyКонстанта (true)Враховувати лише працівників з ненульовими годинами
ActualQtyOnlyКонстанта (true)Повертати кількість працівників (замість годин)

Результат:

  • Повертає: Decimal --- кількість працівників з фактично відпрацьованими годинами
  • Заповнює поля рядка ЗП документа: ---

Логіка розрахунку:

  1. Делегує виклик CalcStaffWorkHours з параметрами ActualQty = true, ActualQtyOnly = true.
  2. Перебирає всіх працівників відповідно до фільтрів (стать, штатність, режим роботи).
  3. Для кожного працівника перевіряє кількість годин за табелем.
  4. Якщо кількість годин > 0, збільшує лічильник працівників на 1.
  5. Повертає кількість працівників (завдяки ActualQtyOnly = true), а не суму годин.
In this article
© 2008 - 2026 SMART business