Функції розрахунку зарплати
Шлях: Адміністрування / Функція розрахунку зарплати
Цей документ містить детальний опис усіх функцій розрахунку зарплати, які використовуються в налаштуваннях зарплатних елементів та звітів у системі SMART Payroll. Кожна функція має унікальний номер і виконує конкретну розрахункову операцію під час обчислення зарплатного документа.
Як читати цей документ
Кожна функція описана за єдиною структурою:
- Що робить — загальний опис призначення функції
- Параметри — які дані функція приймає та з яких таблиць
- Результат — що повертає функція та які поля рядка зарплатного документа заповнює
- Логіка розрахунку — покроковий алгоритм обчислення
Групи функцій
| Діапазон номерів | Опис | Кодуніт |
|---|---|---|
| 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 -- кількість днів або годин відповідно до обраного типу міри часу
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Завантажує параметр функції за кодом параметра з рядка розрахунку.
- Перевіряє обов'язковість полів «Тип тривалості часу» та «Фільтр періоду».
- Визначає діапазон дат (FromDate, ToDate) залежно від фільтра періоду:
- «За датами дії» -- бере дати дії з рядка документа.
- «За періодом оплати» -- бере початок та кінець періоду оплати документа.
- «За кодом періоду нарахування» -- бере дати періоду нарахування.
- «За кодом періоду» -- бере дати поточного зарплатного періоду.
- «За періодом премій» -- бере дати преміального періоду.
- «За датами входження» -- бере перетин дат дії з датами періоду.
- «В поточному році» -- від початку першого періоду року до кінця року.
- «За періодом СЗ» -- бере дати періоду середнього заробітку.
- Залежно від типу тривалості часу:
- Для планових значень -- викликає CalendarMgt.GetPeriodInfo() з календарем працівника або офіційним календарем (для типів «Off.»).
- Для фактичних значень -- викликає TimesheetMgt.GetTimesheetInfo() або TimesheetMgt.GetTimesheetInfoWithDimension() (якщо увімкнено фільтр вимірів).
- Повертає отримане числове значення.
Функція 150 — Отримання ліміту зарплати (GetPayrollLimit)
Що робить: Повертає значення зарплатного ліміту із таблиці «Ліміти зарплати» за заданим типом ліміту та періодом.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код параметра | Рядок розрахунку (Parameter Code) | Обов'язковий. Визначає налаштування функції |
| Тип ліміту зарплати | Параметр функції розрахунку (Payroll Limit Type) | Визначає, який ліміт повертати. Можливі значення: МРОТ, Ліміт ЄСВ, Поріг індексації, Прожитковий мінімум, МРОТ погодинний, Компенсаційний коефіцієнт, Норма добових, Норма добових за кордоном |
| Фільтр періоду | Параметр функції розрахунку (Period Filter) | Обов'язковий. Визначає, який період використовувати для пошуку ліміту. Можливі значення: За кодом періоду, За кодом періоду нарахування, За періодом оплати, В поточному році, За датами дії, За датами входження, За періодом премій |
Результат:
- Повертає: Decimal -- сума ліміту з таблиці «Ліміти зарплати»
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Завантажує параметр функції та перевіряє обов'язковість фільтра періоду.
- Визначає код періоду залежно від фільтра:
- «За кодом періоду» -- бере Period Code рядка документа.
- «За кодом періоду нарахування» -- бере Wage Period From.
- «За періодом опла ти» -- бере період оплати документа.
- «В поточному році» -- бере код першого періоду року.
- «За датами дії» -- знаходить період за датою початку дії.
- «За датами входження» -- знаходить період за датою початку документа.
- «За періодом премій» -- бере код періоду премій.
- Шукає в таблиці «Ліміти зарплати» останній запис з типом ліміту та кодом періоду
<=визначеного. - Повертає поле 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 -- сума відповід но до налаштованого типу суми
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Завантажує налаштування базової суми за кодом елемента та кодом базової суми.
- Перевіряє обов'язковість поля «Тип суми».
- Визначає фільтр по працівнику:
- «За працівником» -- фільтрує за номером документа поточного рядка.
- «За особою» -- фільтрує за кодом особи серед усіх документів. Якщо група розрахунку має тип «Міжрозрахунковий» (Between), додатково агрегує дані з проведених документів інших розрахункових груп.
- «За іншими працівниками» -- фільтрує за кодом особи, виключаючи поточного працівника.
- Встановлює фільтри за базовою сумою (коди елементів, типи, групи тощо).
- Встановлює фільтр періоду згідно з налаштуванням.
- Підсумовує відповідний тип суми з відфільтрованих рядків документа.
- Повертає результат.
Функція 230 — Деталізована базова сума (DetailedBaseAmount)
Що робить: Повертає деталізовану базову суму для податків. На відміну від функції 220, працює з таблицею «Деталізована база для податку» та створює в ній записи для подальшого розподілу суми податку між джерелами.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код базової суми | Рядок розрахунку (Base Amount Code) | Обов'язковий. Визначає фільтри у таблиці «Базова сума зарплати» |
Результат:
- Повертає: Decimal -- деталізована базова сума відповідно до типу суми (Сума зарплати, Корег. сума або Податковий відрахунок)
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Завантажує налаштування базової суми та перевіряє обов'язковість типу суми.
- Фільтрує таблицю «Деталізована база для податку» за номером документа бази та номером документа податку.
- Встановлює фільтр за кодом елемента зарплати та кодом елемента податку.
- Залежно від типу суми підсумовує відповідне поле (Корег. сума, Сума зарплати або Сума відрахування).
- Повертає підсумок.
Функція 247 — Базовий баланс з книги операцій (BaseBalance)
Що робить: Повертає суму з проведених операцій зарплати (таблиця «Книга операцій зарплати»). На відміну від функції 220, яка працює з поточним документом, ця функція читає дані з уже проведених документів.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код базової суми | Рядок розрахунку (Base Amount Code) | Обов'язковий. Визначає фільтри у таблиці «Базова сума зарплати» |
Фільтри аналогічні функції 220, але застосовуються до таблиці «Книга операцій зарплати».
Результат:
- Повертає: Decimal -- сума з проведених операцій зарплати
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Завантажує налаштування базової суми та перевіряє обов'язковість типу суми.
- Встановлює фільтри базової суми на таблицю «Книга операцій зарплати».
- Визначає фільтр по працівнику (За працівником / За особою / За іншими працівниками).
- Визначає фільтр періоду:
- «За кодом періоду» -- може використовувати попередній період (якщо увімкнено прапорець «Використовувати попередній період»).
- «За кодом періоду нарахування» -- фільтрує за Wage Period From.
- Інші фільтри аналогічні функції 220.
- Підсумовує відповідний тип суми з відфільтрованих операцій.
- Повертає результат.
Функція 249 — Утримання за діапазоном (Deduction)
Що робить: Розраховує суму утримання на основі рядків діапазону (шкали). Функція використовується для розрахунку утримань, що залежать від суми та мають прогресивну або табличну структуру.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Заголовок діапазону | Визначається автоматично (GetRangeHeader) | Завантажується за кодом елемента, типом діапазону та кодом діапазону з рядка розрахунку |
| Тип діапазону | Рядок розрахунку (Range Type) | Тип діапазону зарплати |
| Код діапазону | Рядок розрахунку (Range Code) | Код конкретного діапазону |
Результат:
- Повертає: Decimal -- сума утримання, розрахована за рядками діапазону
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Отримує кількість пільг із книги операцій елементів зарплати працівника.
- Фільтрує рядки діапазону за кодом елемента, кодом діапазону, кодом періоду.
- Додатково фільтрує за статтю працівника (якщо дозволено в заголовку), датою народження та статусом інвалідності.
- Перебирає рядки діапазону (від найбільшого до найменшого):
- Якщо рядок містить «Суму понад» -- перевіряє, чи перевищено цей поріг.
- Розраховує суму утримання = Сума + (Річна база * Відсоток / 100).
- Якщо увімкнено «На пільгу» -- множить на кількість пільг.
- Перевіряє мінімальну та максимальну суми рядка.
- Приводить результат до місячного значення (ділить на 12).
- Повертає підсумкову суму утримання.
Функція 250 — Базова сума з початку року (YTDBaseAmount)
Що робить: Повертає суму з книги операцій зарплати (проведених документів) з початку календарного року. Використовує ті ж самі фільтри базової суми, що і функція 220, але читає з проведених даних за період від першого періоду року.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код базової суми | Рядок розрахунку (Base Amount Code) | Обов'язковий. Визначає фільтри у таблиці «Базова сума зарплати» |
Результат:
- Повертає: Decimal -- сума з початку року з книги операцій зарплати
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Завантажує налаштування базової суми та перевіряє тип суми.
- Встановлює фільтри базової суми на таблицю «Книга операцій зарплати».
- Визначає фільтр по працівнику (За працівником / За особою / За іншими).
- Визначає фільтр періоду:
- «За кодом періоду» -- від першого періоду року до поточного (або попереднього, якщо увімкнено).
- «За кодом періоду нарахування» -- аналогічно.
- «За періодом премій» -- фільтрує за преміальним періодом.
- «За датами дії» -- за діапазоном дат дії.
- «За датами входження» -- за вкладеними датами.
- «За періодом оплати» -- від першого періоду року до періоду оплати.
- Підсумовує відповідний тип суми та повертає результат.
Функція 252 — Мінімальне значення діапазону (Brackets Min)
Що робить: Повертає мінімальну суму з першого відповідного рядка діапазону зарплати. Використовується для отримання порогових значень з довідника діапазонів.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Заголовок діапазону | Визначається автоматично (GetRangeHeader) | Завантажується за кодом елемента, типом та кодом діапазону |
| Тип діапазону | Рядок розрахунку (Range Type) | Тип діапазону |
| Код діапазону | Рядок розрахунку (Range Code) | Код діапазону |
Результат:
- Повертає: Decimal -- значення поля «Мін. сума» першого відповідного рядка діапазону
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Отримує заголовок діапазону (GetRangeHeader).
- Фільтрує рядки діапазону за кодом діапазону, кодом елемента, кодом періоду.
- Додатково фільтрує за статтю (якщо дозволено) та датою народження працівника.
- Знаходить перший рядок та повертає значення поля «Min Amount».
- Якщо рядок не знайдено, повертає 0.
Функція 253 — Максимальне значення діапазону (Brackets Max)
Що робить: Повертає максимальну суму з першого відповідного рядка діапазону зарплати. Аналогічна функції 252, але повертає інше поле.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Заголовок діапазону | Визначається автоматично (GetRangeHeader) | Завантажується за кодом елемента, типом та кодом діапазону |
| Тип діапазону | Рядок розрахунку (Range Type) | Тип діапазону |
| Код діапазону | Рядок розрахунку (Range Code) | Код діапазону |
Результат:
- Повертає: Decimal -- значення поля «Макс. сума» першого відповідного рядка діапазону
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Отримує заголовок діапазону (GetRangeHeader).
- Фільтрує рядки діапазону за кодом діапазону, кодом елемента, кодом періоду.
- Додатково фільтрує за статтю та датою народження працівника.
- Знах одить перший рядок та повертає значення поля «Max Amount».
- Якщо рядок не знайдено, повертає 0.
Функція 255 — Кількість з діапазону (Brackets Quantity)
Що робить: Повертає значення поля «Кількість» з першого відповідного рядка діапазону зарплати.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Заголовок діапазону | Визначається автоматично (GetRangeHeader) | Завантажується за кодом елемента, типом та кодом діапазону |
| Тип діапазону | Рядок розрахунку (Range Type) | Тип діапазону |
| Код діапазону | Рядок розрахунку (Range Code) | Код діапазону |
Результат:
- Повертає: Decimal -- значення поля «Quantity» першого відповідного рядка діапазону
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Отримує заголовок діапазону (GetRangeHeader).
- Фільтрує рядки діапа зону аналогічно функціям 252/253.
- Знаходить перший рядок та повертає значення поля «Quantity».
- Якщо рядок не знайдено, повертає 0.
Функція 261 — Баланс до дати (BalanceToDate)
Що робить: Повертає суму нарахувань зарплати з книги операцій для працівника та елемента з початку року до поточного періоду включно.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код працівника | Рядок документа ЗП (Employee No.) | Автоматично з поточного рядка |
| Тип елемента | Рядок документа ЗП (Element Type) | Автоматично з поточного рядка |
| Код елемента | Рядок документа ЗП (Element Code) | Автоматично з поточного рядка |
| Код періоду | Рядок документа ЗП (Period Code) | Автоматично з поточного рядка |
Результат:
- Повертає: Decimal -- сума зарплати (Payroll Amount) з книги операцій
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Фільтрує книгу операцій за кодом працівника, типом та кодом елемента.
- Встановлює фільтр періоду від першого періоду року до поточного періоду рядка.
- Використовує FlowField «SMA Payroll Amount» картки працівника для підсумовування.
- Повертає підсумкову суму.
Функція 263 — Сума оподатковуваного податку з початку року (YTDTaxableIncomeTax)
Що робить: Повертає суму оподатковуваного доходу (Taxable Amount) з книги операцій зарплати для працівника, елемента та типу проведення з початку року до поточного періоду включно.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код працівника | Рядок документа ЗП (Employee No.) | Автоматично з поточного рядка |
| Тип елемента | Рядок документа ЗП (Element Type) | Автоматично |
| Тип проведення | Рядок документа ЗП (Posting Type) | Автоматично |
| Код елемента | Рядок документа ЗП (Element Code) | Автоматично |
| Код періоду | Рядок документа ЗП (Period Code) | Автоматично |
Результат:
- Повертає: Decimal -- оподатковувана сума з початку року
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Фільтрує книгу операцій за працівником, типом елемента, типом проведення та кодом елемента.
- Встановлює фільтр періоду від першого періоду року до поточного періоду рядка (включно).
- Використовує FlowField «SMA Taxable Amount» для підсумовування.
- Повертає суму оподатковуваного доходу.
Функція 270 — Отримання ліміту МРОТ (GetFSILimit MROT)
ЗАСТАРІЛА. Замінена функцією 150 (GetPayrollLimit) з відповідним типом ліміту.
Що робить: Повертає значення МРОТ (мінімального розміру оплати праці) з таблиці «Ліміти зарплати» за поточний період.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код періоду | Рядок документа ЗП (Period Code) | Автоматично з поточного рядка |
Результат:
- Повертає: Decimal -- значення МРОТ
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Шукає в таблиці «Ліміти зарплати» запис з типом MROT та кодом періоду
<=поточного. - Повертає поле Amount або 0.
Функція 271 — Отримання ліміту ЄСВ (GetFSILimit SSC)
ЗАСТАРІЛА. Замінена функцією 150 (GetPayrollLimit) з відповідним типом ліміту.
Що робить: Повертає граничне значення бази нарахування ЄСВ з таблиці «Ліміти зарплати».
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код періоду | Рядок документа ЗП (Period Code) | Автоматично з поточного рядка |
Результат:
- Повертає: Decimal -- гранична сума для ЄСВ
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Шукає в таблиці «Ліміти зарплати» запис з типом SSC Limit та кодом періоду
<=поточного. - Повертає поле Amount або 0.
Функція 280 — Оновлення коду елемента (UpdatePayrollElementCode)
Що робить: Замінює код елемента зарплати, код базової суми та групу часових активностей на рядку зарплатного документа. Нові значення беруться з налаштувань базової суми та часової групи параметра функції.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код базової суми | Рядок розрахунку (Base Amount Code) | Визначає новий код елемента через фільтр кодів елементів базової суми |
| Група часових активностей | Рядок розрахунку (Time Activity Group) | Визначає нову часову активність |
Результат:
- Повертає: Integer (0)
- Заповнює поля рядка ЗП документа: Код елемента (Element Code), Код часової активності (Time Activity Code)
Логіка розрахунку:
- Завантажує налаштування базової суми за кодом елемента та кодом базової суми.
- Визначає новий код елемента з фільтра кодів елементів базової суми (бере перший до символу «|»).
- Визначає нову часову активність з фільтра часових активностей групи.
- Якщо код елемента відрізняється від поточного -- оновлює його через Validate.
- Якщо код часової активності відрізняється -- оновлює його.
- Оновлює записи табеля, замінюючи код часової активності в деталях табеля.
Функція 290 — Створення повідомлення (CreateAttention)
Що робить: Створює запис повідомлення (увага) у панелі фактів зарплатного документа. Текст повідомлення береться з поля «Текст повідомлення» рядка розрахунку. Зазвичай використовується після оператора IF для попередження про особливі умови.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Текст повідомлення | Рядок розрахунку зарплати (Attention Text) | Текст, що відображатиметься у панелі фактів. Підтримує підстановку коду елемента та номера рядка |
Результат:
- Повертає: Integer (0)
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Знаходить актуальний рядок розрахунку елемента з текстом повідомлення.
- Перевіряє, чи вже існує аналогічне повідомлення для цього рядка документа.
- Якщо повідомлення ще немає, створює новий запис у таблиці «Повідомлення документа» з відформатованим текстом.
Функція 300 — Група інвалідності (GetPersonGroupDisability)
Що робить: Повертає номер групи інвалідності працівника (1, 2 або 3) на визначену дату. Якщо працівник не має інвалідності, повертає 0.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код параметра | Рядок розрахунку (Parameter Code) | Обов'язковий. Визначає, яку дату використовувати для перевірки інвалідності |
| Фільтр періоду | Параметр функції розрахунк у (Period Filter) | Визначає дату перевірки: За кодом періоду нарахування, За кодом періоду, За періодом оплати, В поточному році або За датами дії |
Результат:
- Повертає: Integer -- номер групи інвалідності (1, 2, 3) або 0
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Завантажує параметр функції та визначає дату перевірки залежно від фільтра періоду.
- Шукає в таблиці «Медична інформація особи» запис з типом «Інвалідність».
- Фільтрує за кодом особи, датою початку
<=поточної дати, датою закінчення>=поточної дати (або порожньою). - Фільтрує за непорожньою групою інвалідності.
- Повертає номер групи інвалідності або 0.
Функція 310 — Перерахунок рядка (RecalculateLine)
Що робить: Перераховує інші рядки в поточному документі. Використовується, коли зміна одного елем ента потребує перерахунку інших залежних елементів.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код базової суми | Рядок розрахунку (Base Amount Code) | Обов'язковий. Визначає, які рядки документа потрібно перерахувати через фільтри базової суми |
Результат:
- Повертає: Integer (0)
- Заповнює поля рядка ЗП документа: Перераховує залежні рядки (обнуляє та перераховує їхні суми)
Логіка розрахунку:
- Зберігає поточний рядок документа (Modify).
- Завантажує налаштування базової суми.
- Знаходить рядки документа, що відповідають фільтрам базової суми та мають номер рядка менший за поточний.
- Для кожного знайденого рядка:
- Видаляє пов'язані записи середнього заробітку та страхового стажу.
- Обнуляє всі суми та часові показники рядка.
- Запускає повний перерахунок рядка через codeunit «SMA Payroll Document Calculate».
- Зберігає перерахований рядок.
Функція 320 — Чиста сума (GetNetAmount)
Що робить: Повертає ознаку, чи є рядок нетто-сумою (чиста сума до виплати). Фактично перевіряє прапорець «Net Amount» на рядку документа.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| -- | Рядок документа ЗП | Автоматично |
Результат:
- Повертає: Integer -- 1, якщо рядок має ознаку «Net Amount» (нетто), 0 в іншому випадку
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Перевіряє поле «Net Amount» рядка документа.
- Якщо true, повертає 1; інакше -- 0.
Функція 330 — Суми з проведених міжперіодних документів (GetAmountsFromPostedInterperiodPayrollDocuments)
Що робить: Повертає суми з проведених міжперіодних зарплатних документів, які мають створену виплату. Використовується для врахування сум, нарахованих в інших розрахункових групах типу «Між».
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код базової суми | Рядок розрахунку (Base Amount Code) | Обов'язковий. Визначає фільтри |
Результат:
- Повертає: Decimal -- сума з проведених міжперіодних документів
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Завантажує налаштування базової суми.
- Знаходить усі проведені документи з групами розрахунку типу «Між» (Between).
- Фільтрує за працівником, кодом періоду, ознакою створеної виплати.
- Виключає коригувальні та сторнувальні документи.
- Фільтрує рядки проведених документів за налаштуваннями базової суми та фільтром періоду.
- Підсумовує відповідний тип суми та повертає результат.
Функція 340 — Норма годин поточного місяця (SumOfNormHours current month)
Що робить: Повертає норму робочих годин для поточного місяця з нормативного календаря. Використовується для підсумованого обліку робочого часу.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код працівника | Рядок документа ЗП (Employee No.) | Автоматично |
| Дата закінчення дії | Рядок документа ЗП (Action Ending Date) | Визначає поточний місяць |
Результат:
- Повертає: Decimal -- норма робочих годин з нормативного календаря
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Отримує календар працівника на дату закінчення дії.
- Перевіряє, чи увімкнено підсумований облік робочого часу.
- Визначає діапазон дат згідно з типом облікового періоду (місяць, квартал, півріччя, рік, тижде нь).
- Розраховує норму годин з нормативного календаря за допомогою CalendarMgt.GetPeriodInfo (робочі години).
- Повертає норму годин без усереднення.
Функція 345 — Норма годин за рік (SumOfNormHours entire year)
Що робить: Аналогічна функції 340, але повертає середньомісячну норму годин за обліковий період. Використовує той самий механізм підсумованого обліку робочого часу.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код працівника | Рядок документа ЗП (Employee No.) | Автоматично |
| Дата закінчення дії | Рядок документа ЗП (Action Ending Date) | Визначає поточний місяць |
Результат:
- Повертає: Decimal -- середньомісячна норма годин за обліковий період
- Заповнює поля рядка ЗП документа: --
Логі ка розрахунку:
- Виконує кроки 1--4 функції 340.
- Додатково ділить результат на кількість місяців в обліковому періоді (3 для кварталу, 6 для півріччя, 12 для року).
- Повертає округлену середньомісячну норму.
Функція 400 — Розподіл суми при обліку (AllocatePEPayrollAmount)
Що робить: Розподіляє суму нарахування зарплати за вимірами проведення. Створює рядки розподілу для подальшого проведення відповідно до групи розподілу працівника.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код базової суми | Рядок розрахунку (Base Amount Code) | Необов'язковий. Якщо задано, визначає фільтр елемента через базову суму |
Результат:
- Повертає: Integer (0)
- Заповнює поля рядка ЗП документа: Створює записи у таблиці «Розподіл рядка ЗП документа» (SMA Payroll Doc. Line PE Alloc)
Логіка розрахунку:
- Видаляє існуючі рядки розподілу для цього рядка документа.
- Отримує код групи розподілу з картки працівника.
- Якщо група не задана -- виходить без дій.
- Знаходить тип групи розподілу за кодом елемента та періодом.
- Для кожного рядка групи розподілу створює запис розподілу з відсотком, групою проведення та набором вимірів.
Функція 500 — Середній оклад на дату (погодинний) (GetAESalaryByDate hourly)
Що робить: Повертає базовий оклад працівника на задану дату, перерахований у погодинну ставку.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код працівника | Рядок документа ЗП (Employee No.) | Автоматично |
| Дата початку дії | Рядок документа ЗП (Action Starting Date) | Дата, на яку визначається оклад |
Р езультат:
- Повертає: Decimal -- погодинна ставка базового окладу
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Знаходить останній запис окладу в книзі операцій елементів зарплати, чинний на задану дату.
- Використовує фільтр елементів окладу з налаштувань кадрів (Код елемента оклад за днями, Код елемента оклад за годинами, Код елемента оклад сумою).
- Ділить суму окладу на кількість робочих годин за місяць із календаря працівника.
- Для елемента погодинної ставки множить на кількість годин з офіційного календаря.
- Для елемента денної ставки множить на кількість днів з офіційного календаря.
- Повертає погодинну ставку.
Функція 501 — Середня додаткова зарплата на дату (погодинна) (GetAEExtraSalaryByDate hourly)
Що робить: Повертає суму додаткових виплат (надбавок), які залежать від базового окладу, перерахованих у погодинну ставку.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код працівника | Рядок документа ЗП (Employee No.) | Автоматично |
| Дата початку дії | Рядок документа ЗП (Action Starting Date) | Дата, на яку визначаються надбавки |
Результат:
- Повертає: Decimal -- погодинна ставка додаткових виплат
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Знаходить усі зарплатні елементи, у яких поле «Залежить від елемента окладу» посилається на елемент окладу.
- Для кожного такого елемента знаходить чинний запис у книзі операцій на задану дату.
- Ділить суму кожного елемента на кількість робочих годин за місяць із календаря.
- Підсумовує та повертає загальну погодинну ставку надбавок.
Функція 502 — Загальний заробіток на дату (погодинний) (Sum of 500+501)
Що робить: Повертає повний заробіток (базовий оклад + додаткові виплати) у вигляді погодинної ставки. Це сума результатів функцій 500 та 501.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код працівника | Рядок документа ЗП (Employee No.) | Автоматично |
| Дата початку дії | Рядок документа ЗП (Action Starting Date) | Дата |
Результат:
- Повертає: Decimal -- сума погодинних ставок окладу та надбавок
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Викликає GetAESalaryByDate (з прапорцем ByHours = true) -- отримує погодинну ставку окладу.
- Викликає GetAEExtraSalaryByDate (з прапорцем ByHours = true) -- отримує погодинну ставку надбавок.
- Повертає суму двох значень.
Функція 550 — Базовий оклад на дату у місцевій валюті (GetSalaryByDateLCY)
Що робить: Повертає базовий оклад працівника на задану дату, конвертований у місцеву валюту. Підтримує оклади у іноземних валютах з автоматичним перерахунком за курсом.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Код працівника | Рядок документа ЗП (Employee No.) | Автоматично |
| Дата початку документа | Рядок документа ЗП (Document Starting Date) | Дата, на яку визначається оклад |
| Дата проведення | Рядок документа ЗП (Posting Date) | Дата для конвертації валюти |
Результат:
- Повертає: Decimal -- сума окладу у місцевій валюті
- Заповнює поля рядка ЗП документа: --
Логіка розрахунку:
- Знаходить чинний запис окладу в книзі операцій елементів зарплати на задану дату.
- Якщо оклад у іноземній валюті -- перераховує через курс валют на дату проведення.
- Для елемента погодинної ставки -- множить на кількість робочих годин з офіційного календаря за місяць.
- Для елемента денної ставки -- множить на кількість робочих днів з офіційного календаря за місяць.
- Повертає суму у місцевій валюті.
Оподаткування, утримання, оклади за період, стаж, аванси (2002–2301)
Функція 2002 — Утримання податку за шкалою (Withholding)
Що робить: Розраховує суму утримання податку за прогресивною шкалою (рядки діапазону зарплати). Основна функція для розрахунку ПДФО та інших податків, що використовують шкалу ставок.
Параметри:
| Параметр | Джерело | Опис |
|---|---|---|
| Заголовок діапазону | Визначається автоматично (GetRangeHeader) | Завантажується за кодом елемента, типом та кодом діапазону |
| Тип діапазону | Рядок розрахунку (Range Type) | Тип діапазону |
| Код діапазону | Рядок розрахунку (Range Code) | Код діапазону |
| Оподатковувана база | Рядок документа ЗП (Corr. Amount) | Корегована сума для розрахунку податку |
Результат:
- Повертає: Decimal -- сума утримання (повертається з від'ємним знаком; виклик функції інвертує знак)
- Заповнює поля рядка ЗП документа: Код довідника (Directory Code) -- якщо рядок діапазону містить код довідника
Логіка розрахунку:
- Визначає знак оподатковуваної бази (додатна чи від'ємна).
- Перевіряє, чи є елемент типом «Фонд» (SSC) -- впливає на порядок сортування.
- Фільтрує рядки діапазону за кодом е лемента, кодом діапазону, кодом періоду.
- Додатково фільтрує за:
- Статтю працівника (якщо дозволено в заголовку діапазону).
- Датою народження (якщо дозволено фільтр за віком).
- Статусом інвалідності на дату початку дії.
- Знаходить останній рядок, де «Сума понад» менша за абсолютне значення бази.
- Якщо рядок не знайдено для інвалідів -- знімає фільтр інвалідності та шукає повторно.
- Якщо жодного рядка не знайдено -- повертає 0.
- Формула: Сума податку = Сума фіксованого податку + (Оподатковувана база - Знак Сума понад) Відсоток податку / 100
- Якщо результат < 0 і документ не є коригувальним -- повертає 0.
- Якщо задано максимальне утримання і результат його перевищує -- обмежує результат.
- Якщо рядок діапазону має код довідника -- оновлює поле «Код довідника» на рядку документа.
- Повертає суму утримання.