Сложные периодические расчеты
Условие задачи
Начисление зарплаты сотрудникам предприятия осуществляется ежемесячно. Все сотрудники работают по пятидневному графику работы, однако в решении необходимо предусмотреть возможность работы по нескольким различным графикам.
За проведение занятий по основному месту работы сотрудники учебного предприятия получают оплату по часовому тарифу. Сумма начисления по тарифу рассчитывается как тарифная ставка, умноженная на количество фактически отработанных часов. Первоначальное значение тарифной ставки может изменяться не чаще, чем один раз в день, но берется на начало расчетного периода
Сотрудники могут проводить выездные обучения. В этом случае начисление по тарифу за период выездного обучения не происходит, а начисления
сотрудника складываются из двух частей:
• Некоторой фиксированной суммы, компенсирующей его транспортные расходы;
• Начисления непосредственно за обучение в виде вознаграждения, рассчитываемого как общая сумма оплат, произведенных слушателями в текущем расчетном периоде, умноженная на определенный процент. Значение процента может быть задано в документе «Начисление зарплаты.
В декабре, по итогам года, сотрудникам предприятия может быть начислена премия процентом от суммы всех начислений, произведенных за прошедший год. Процент премии один для всех сотрудников предприятия. Значение процента определяется в момент занесения информации о начислении в информационную базу.
Механизм перерасчетов в рамках данной задачи использовать не надо.
Ввод всех начислений происходит документом «Начисление зарплаты». Считать, что все данные вводятся только в пределах одного месяца, например, можно указать начисление по тарифу с 10.01 по 31.01, а запись: тариф с 10.01 по 03.02 вводить нельзя.
Для анализа сделанных сотрудникам предприятия начислений в конфигурации необходимо предусмотреть отчет следующего вида:
Отчет может быть построен за любой расчетный период. Для анализа сделанных начислений за обучение слушателей на выезде в конфигурации необходимо предусмотреть отчет следующего вида:
Отчет может быть построен за любой расчетный период.
Решение
1. Решение расчетной задачи начнем с определения того, какие виды начислений и удержаний необходимо создать в конфигурации и по каким формулам должен быть получен результат каждого вида расчета. Согласно заданию нам будет необходимо создать четыре вида расчета:
· Начисление за обучение слушателей по основному месту работы Результат = ТарифнаяСтавка * КоличествоОтработанныхЧасов;
Обратите внимание, для годовой премии сразу указан способ расчета общей суммы всех начислений, сделанных за прошедший год - «Получение базы».
2. На следующем этапе для вышеперечисленных видов расчета укажем зависимости между ними.
Таблица №5.1. Настройка зависимостей по вытеснению и по базе между видами расчетов, необходимых для решения задачи
Вид расчета | Вытесняющий | Базовый |
ТРФ | КМД | - |
ТРН | - | - |
КМД | - | - |
ПРМ | - | ТРФ, ТРН, КМД |
3. Создадим вышеперечисленные виды расчетов в конфигурации. Настроим раздел «Расчет» для каждого используемого плана расчетов;
4. Создадим регистры расчетов;
5. Внесем необходимые изменения в структуру документа «Начисление зарплаты»;
6. Перейдем к проведению документа «Начисление зарплаты»:
a. Добавим в регистр необходимое количество записей:
i. Определим границы интервалов всех существующих периодов у каждой записи;
ii. Укажем значения измерений и реквизитов регистра;
b. Проведем расчет записей сформированных наборов для первичных видов расчета:
i. Если введены транспортные расходы - результат начисления
определим сразу, по данным документа;
ii. Расчет по тарифу на основном месте работы
1. Используя механизм запросов, по каждой записи с указанным видом расчета получим данные по отработанному времени и актуальную тарифную ставку;
2. Организуем цикл по записям набора. Для каждой записи реализуем прямое позиционирование на нужную строку в выборке запроса. Рассчитаем результат начисления;
3. Запишем набор, без пересчета фактического периода действия;
iii. Расчет начисления за выезд
1. Создадим оборотный регистр накопления «Оплаты
слушателей»;
2. Внесем изменения в алгоритм проведения документа «Приход денег», при выполнении которого должен заполняться данный регистр;
3. Используя механизм запросов, по каждому сотруднику, работавшего на выезде и указанного в документе, получим данные по оплатам слушателей;
4. Организуем цикл по записям набора. Для каждой записи реализуем прямое позиционирование на нужную строку в выборке запроса. Рассчитаем результат начисления;
5. Запишем набор, без пересчета фактического периода действия;
d. Повторим действия, описанные в п.4 для записей вторичных видов расчета каждого уровня:
i. Расчет годовой премии
1. Создадим константу для хранения процента премии. Включим режим использования основной формы констант по умолчанию;
2. Используя механизм запросов, по каждой записи с указанным видом расчета получим данные по базе;
3. Организуем цикл по записям набора. Для каждой записи реализуем прямое позиционирование на нужную строку в выборке запроса. Рассчитаем результат начисления;
4. Запишем набор;
e. Перенесем программный код, связанный с расчетом, в общий модуль;
7. Построим требуемые в задании отчеты по данным регистров расчета, используя механизм компоновки данных.
Управляемые формы
Условие задачи
В формы всех документов, использующихся в задании, необходимо добавить возможность просмотра движений в регистрах, связанных с тем документом, чья форма открыта на данный момент времени.
В форме выбора сотрудника, вызываемой из формы документа «Начисление зарплаты», список выбираемых сотрудников должен быть дополнен информацией об их тарифных ставках. При выборе сотрудника, информация о соответствующей ставке должна попадать в колонку «Размер». Для документа «Начисление зарплаты» необходимо создать основную форму списка, в которой для текущего документа должны быть отражены записи, сделанные им в регистрах расчета.
Решение
1. Создадим основные формы документов. Откроем каждую форму в окне редактораформы. На закладке «Командный интерфейс» раскроем ветвь «Панель навигации - Перейти». Установим флажки «Видимость» для регистров.
2. Создадим не основную форму выбора справочника «Физические лица»;
a. Внесем необходимые изменения в структуру регистра «Сведения о сотрудниках»;
b. Создадим новую форму;
c. Откроем палитру свойств основного реквизита формы;
d. В разделе «Объект» установим флаг «Произвольный запрос»;
e. Откроем настройку списка;
f. Внесем необходимые изменения в текст запроса;
g. При создании формы на сервере определим значения внешних параметров запроса;
h. Определим собственную обработку выбора значения из формы справочника;
3. Организуем вызов формы справочника из формы документа
a. Создадим основную форму документа «Начисление зарплаты»;
b. Укажем созданную форму справочника в качестве значения свойства «Форма выбора» элемента формы документа «ОсновныеНачисленияСотрудник »;
c. Настроим свойство «Связи параметров выбора» для вышеуказанного элемента;
d. Напишем свою обработку выбора сотрудника в документе;
4. Создадим основную форму документа
a. Откроем форму в окне редактора формы;
b. Добавим два новых реквизита формы типа «Динамический список». В качестве основных таблиц реквизитов укажем таблицы регистров расчета;
c. В теле обработчика события «При активизации строки» элемента «Список» программно сформируем отборы по полю «Регистратор».