Заявка от Unit.
Задача: установить взаимосвязь между сотрудником, выполняемым им заказом, и ролью, в которой он выступает в заказе. Всего 3 менеджера и две роли (операционный и по продажам), которые они могут выполнять в заказе.
В существующем проекте для заказа назначался один менеджер, который выполнял обе роли и определялся процент для каждой из них. Сейчас возникла необходимость определять для заказа нескольких менеджеров, где для каждого назначается роль и процент.
Изначально был предложен такой вариант: ведение заказа и назначение процентов в разных формах. Сначала формируется заказ (в котором определяются доходы и расходы), а после его завершения в другой форме заказу назначается один или несколько менеджеров со своими ролями и процентами. Но в силу того, что заказов много и менеджеры включаются в работу в процессе исполнения заказа, данный вариант был отвергнут.
Второй вариант проекта включает дополнительный блок в заказе, где для каждого менеджера, в случае его участия, сразу назначается исполняемая им роль и определяется процент, который можно впоследствии изменить. Вариант с назначением дополнительной премии сохранён и включён в общий расчёт.
Случай с участием одного менеджера в двух ролях не включён, так как он уже был реализован. Также не добавлялись з/п и НДФЛ.
Элементы программы:
- Объект сотрудников: должен быть недоступен при сетевом использовании для изменения самими сотрудниками, так как в заказе жёстко определяется их список. В случае изменения необходимо менять и форму заказа.
- Объект года: необходим для выборки в форме отчёта, так как формируется отчёт-таблица для всего года целиком по месяцам. Для следующего года необходимо делать аналогичную форму.
- Объект заказов: не имеет ничего лишнего кроме того, что требуется для реализации поставленной задачи.
- Объект дополнительных премий.
- Форма итога для расчёта начисленных премий за год по месяцам.
В объекте заказа определён список менеджеров организации, который может быть размещён на другой вкладке. На 8-ую вкладку вынесены служебные поля, участвующие в расчётах.
При задании роли менеджеру, открывается группа полей: процент и расчётная сумма премии.
Скрытие неиспользуемых данных производится при помощи поля группы, для которого задаётся условие на отображение полей группы
Для обнуления суммы премии при отсутствии роли используется составное поле с формулой
В объекте дополнительной премии указывается заказ, менеджер, его роль и рассчитывается процент премии. Выборка месяца и года производится также как и в объекте заказа: при помощи формул в составном поле
В форме итогов, в результирующих полях, определены формулы для каждого месяца:
Для каждого месяца задаётся четыре расчёта:
- один из объекта доп. премии;
- три из объекта заказа для каждого менеджера.
Небольшое пояснение работы расчёта в результирующем поле:
Программа обходит все записи объекта "Заказ" и проверяет поле "1_Менеджер". Если его значение совпадает с записью объекта "Сотрудник" (на базе которого создана форма), то берётся значение из поля "1_Премия" и прибавляется/отнимается от общего результата. Дополнительные условия по значению фильтруют значения для участия в расчётах.
Конечный расчёт начислений по каждому сотруднику за год содержит формулу
Результат работы формы итогов по начисленным премиям за год:
Отображается сумма премии для каждого сотрудника помесячно, а также сумма премий для всех за месяц и за год.
Примечание: форму итогов можно было упростить, определив максимум два менеджера, участвующих в заказе (при этом можно назначать одному менеджеру две роли). Но так как в будущем планируется участие всех трёх менеджеров, то выбран вариант определения сразу всех сотрудников для уменьшения операций назначения их участия в заказе.
См. также:
Задача: установить взаимосвязь между сотрудником, выполняемым им заказом, и ролью, в которой он выступает в заказе. Всего 3 менеджера и две роли (операционный и по продажам), которые они могут выполнять в заказе.
В существующем проекте для заказа назначался один менеджер, который выполнял обе роли и определялся процент для каждой из них. Сейчас возникла необходимость определять для заказа нескольких менеджеров, где для каждого назначается роль и процент.
Изначально был предложен такой вариант: ведение заказа и назначение процентов в разных формах. Сначала формируется заказ (в котором определяются доходы и расходы), а после его завершения в другой форме заказу назначается один или несколько менеджеров со своими ролями и процентами. Но в силу того, что заказов много и менеджеры включаются в работу в процессе исполнения заказа, данный вариант был отвергнут.
Второй вариант проекта включает дополнительный блок в заказе, где для каждого менеджера, в случае его участия, сразу назначается исполняемая им роль и определяется процент, который можно впоследствии изменить. Вариант с назначением дополнительной премии сохранён и включён в общий расчёт.
Случай с участием одного менеджера в двух ролях не включён, так как он уже был реализован. Также не добавлялись з/п и НДФЛ.
Элементы программы:
- Объект сотрудников: должен быть недоступен при сетевом использовании для изменения самими сотрудниками, так как в заказе жёстко определяется их список. В случае изменения необходимо менять и форму заказа.
- Объект года: необходим для выборки в форме отчёта, так как формируется отчёт-таблица для всего года целиком по месяцам. Для следующего года необходимо делать аналогичную форму.
- Объект заказов: не имеет ничего лишнего кроме того, что требуется для реализации поставленной задачи.
- Объект дополнительных премий.
- Форма итога для расчёта начисленных премий за год по месяцам.
В объекте заказа определён список менеджеров организации, который может быть размещён на другой вкладке. На 8-ую вкладку вынесены служебные поля, участвующие в расчётах.
При задании роли менеджеру, открывается группа полей: процент и расчётная сумма премии.
Скрытие неиспользуемых данных производится при помощи поля группы, для которого задаётся условие на отображение полей группы
[1_Роль]=нет
. Поле группы назначается нужным полям процента и суммы премии.Для обнуления суммы премии при отсутствии роли используется составное поле с формулой
[String(1_Роль=нет?0:1)]
, значение которого передаётся в дополнительное числовое поле "1_Значение роли". Это поле используется в расчёте премии по формуле [Сумма]*[1_процент]/100*[1_Значение роли]
.В объекте дополнительной премии указывается заказ, менеджер, его роль и рассчитывается процент премии. Выборка месяца и года производится также как и в объекте заказа: при помощи формул в составном поле
[monthW(Дата)]
и [Year(Дата)]
.В форме итогов, в результирующих полях, определены формулы для каждого месяца:
Для каждого месяца задаётся четыре расчёта:
- один из объекта доп. премии;
- три из объекта заказа для каждого менеджера.
Небольшое пояснение работы расчёта в результирующем поле:
Программа обходит все записи объекта "Заказ" и проверяет поле "1_Менеджер". Если его значение совпадает с записью объекта "Сотрудник" (на базе которого создана форма), то берётся значение из поля "1_Премия" и прибавляется/отнимается от общего результата. Дополнительные условия по значению фильтруют значения для участия в расчётах.
Конечный расчёт начислений по каждому сотруднику за год содержит формулу
[январь]+[февраль]+[март]+[апрель]+[май]+[июнь]+[июль]+[август]+[сентябрь]+[октябрь]+[ноябрь]+[декабрь]
.Результат работы формы итогов по начисленным премиям за год:
Отображается сумма премии для каждого сотрудника помесячно, а также сумма премий для всех за месяц и за год.
Примечание: форму итогов можно было упростить, определив максимум два менеджера, участвующих в заказе (при этом можно назначать одному менеджеру две роли). Но так как в будущем планируется участие всех трёх менеджеров, то выбран вариант определения сразу всех сотрудников для уменьшения операций назначения их участия в заказе.
См. также: