1.5. регістри розрахунку
Створимо новий регістр розрахунку. дамо йому ім'я НачісленіяІУдержанія. На вкладці вікна настройки регістра розрахунку Основні задамо ще деякі параметри, специфічні для регістрів розрахунку. Мал. 1.10.
Мал. 1.10. Налаштування вкладки Основні вікна властивостей регістра розрахунку
В поле План видів розрахунку задамо недавно створений план видів розрахунку Основний.
Встановимо прапорець Період дії - це означає, що в регістрі можуть бути присутніми види розрахунку. для яких може бути заданий період дії. Після установки цього прапорця ми зможемо налаштувати параметри графіка.
В поле Графік нам потрібно буде вказати регістр відомостей. який буде містити графік. використовуваний при розрахунку. У нашому випадку це регістр РабочіеДніПоГрафіку. У полі Значення графіка виберемо РабочійДень - саме в цьому ресурсі регістра відомостей буде зберігатися 1, якщо день є робочим. В поле Дата графіка виберемо вимір регістра Дата.
Встановимо прапор Базовий період.
Задамо в групі параметрів Періодичність параметр Місяць.
Перейдемо на вкладку Дані. Задамо тут такі параметри, рис. 1.11:
Мал. 1.11. Налаштування вкладки Дані вікна властивостей регістра розрахунку
Ресурс Результат - тип Число. довжина 10, точність 2. Саме цей ресурс буде містити обчислене значення виду розрахунку. заданого для співробітника. Результат буде містити значення в рублях, саме це визначило параметри типу даних, використаного для нього.
Реквізит ІсходниеДанние - тип число, довжина 10, точність 2. В цей реквізит ми будемо записувати вихідні дані для розрахунку. Наприклад, про людське око розрахунку Оклад ми запишемо сюди вихідний розмір окладу, про людське око розрахунку Премія - відсоток. який повинен братися від розрахункової бази, про людське око розрахунку Утримання - розмір утримання в рублях.
Перш ніж продовжувати настройку параметрів регістра розрахунку. нам знадобиться створити документ, який буде створювати руху по регістру розрахунку.
1.6. Документ Нарахування зарплати
Створимо новий документ, дамо йому ім'я НачісленіеЗарплати. Цей документ повинен мати наступну функціональність:
- Можливість ручного введення нарахувань;
- Формування рухів за регістром розрахунку;
Перейдемо на вкладку Дані вікна настройки властивостей документа НачісленіеЗарплати. Мал. 1.12. Створимо реквізит документа ПеріодРегістраціі - тип Дата. склад дати - Дата.
Мал. 1.12. Налаштування вкладки Дані вікна властивостей документа
Створимо табличну частину НачісленіяІУдержанія. Створимо в ній такі реквізити:
Очевидно, що для кожного рядка табличної частини створюється новий елемент колекції документа Двіженія.НачісленіяІУдержанія. після чого заповнюються властивості нового елемента.
Модифікуємо цей код таким чином, щоб задати параметри базового періоду для виду нарахування Премія. Для цього будемо перевіряти вид розрахунку. присутній в оброблюваної рядку, якщо це - Премія - задаємо параметри базового періоду. Помістимо в цикл обробки рядків табличної частини такий код:
Тепер трохи змінимо ту частину коду, яка задає початок і кінець періоду дії нарахування. У нашому випадку лише один вид нарахування потрібно "оснастити" періодом дії. який в явному вигляді буде задавати користувач. Це - Прогул. У всіх інших період дії буде дорівнювати одному місяцю - початок періоду буде збігатися з початком місяця, за який проводиться нарахування заробітної плати, кінець періоду дії буде збігатися з кінцем місяця. Тому ми, для того, щоб позбавити користувача документа НачісленіеЗарплати від введення непотрібних значень, додамо в наш модуль наступний код, помістивши його в цикл обробки рядків табличної частини:
Цей код замінить рядки
Після всіх цих дій документ при проведенні буде додавати в регістр розрахунку дані для розрахунку. Перевіримо це. Запустимо нашу конфігурацію в режимі 1С: Підприємство, створимо новий документ Нарахування зарплати. заповнимо його даними і перевіримо, як ці дані відбилися в регістрі розрахунку після проведення документа.
Перш ніж створювати реальний документ по нарахуванню зарплати, потрібно ввести в довідник Графіки роботи хоча б пару графіків і заповнити для них регістр Робочі дні за графіком. Заповнимо цей регістр вручну, наприклад, для пари графіків за один місяць.
На рис. 1.14 ви можете бачити документ, який ми заповнили, і руху в регістрі розрахунку. які він зробив після проведення, після відпрацювання коду, який ми написали вище.
збільшити зображення
Мал. 1.14. Документ і руху в регістрі, які він зробив
Якщо все перенесено вірно, а в нашому випадку це саме так, ми можемо приступати до реалізації процедури розрахунку. Зробимо це в тому ж модулі, в якому здійснюється формування рухів.
Відразу хотілося б відзначити, що в існуючих конфігураціях зазвичай застосовуються дещо інші методи реалізації розрахункових процедур. Зокрема, для них характерна наступна послідовність дій. Після того, як документ сформував руху по регістру, відбувається запис даних в регістр. після чого управління передається в розрахункову процедуру загального модуля з встановленим властивістю Сервер. що актуально в тому випадку, якщо система працює в клієнт-серверному режимі. У процедурі, за допомогою запиту до таблиць регістра розрахунку. отримують записані дані і проводять маніпуляції з ними. Всі ці дії, в результаті, призводять до підвищення швидкодії прикладних рішень. які можуть використовуватися в різних режимах, працювати з великими обсягами даних. Сутність дії така ж, як в нашому прикладі, але реалізація відрізняється. Головна мета нашого навчального прикладу - показати принципи, за якими здійснюється рішення розрахункових завдань, тому тут ми концентруємося саме на основних принципах, не звертаючи увагу на оптимальність коду або його швидкодію.
Додамо в процедуру проведення документа команду записи сформованих рухів:
Ця команда повинна слідувати за командою закриття циклу формування рухів.
Додамо в код блок розрахунку утримання. Відповідно до логіки заданих раніше видів розрахунку. тут ми лише копіюємо ІсходниеДанние для Утримання в Результат.