Немного предыстории отчета: это отчет о продуктивности наших сотрудников, работающих в нашем бизнесе. Мы определяем их продуктивность исходя из продолжительности визитов к клиентам. Некоторые из наших сотрудников предлагают групповые занятия. Они взимают плату с каждого клиента в группе, даже если они дают, например, только один час обслуживания, они могут выставить счет за 10 часов, если в группе 10 человек. Определяем какую услугу они оказали по сервисным кодам.
Итак, у меня есть два поля в этой формуле: поле кода услуги и поле продолжительности.
Поле длительности изначально является полем STRING из базы данных, хотя оно дает только числовые данные, поэтому я изменил его на numberVar. Поле сервисного кода также является строковым полем и иногда содержит символы и цифры.
Мне нужно, чтобы Crystal Reports взял сумму продолжительности. Однако, если сервисный код, скажем, «1000», он должен сначала разделить продолжительность на 3, прежде чем суммировать ее. Вот тут меня зацепило.
Вот мой код на время:
local numbervar num1;
If GroupName ({billing_tx_charge_detail.v_SERVICE_CODE})="1530" then
num1 := ToNumber({billing_tx_charge_detail.v_duration})/3
else num1 := ToNumber({billing_tx_charge_detail.v_duration})
Затем я делаю отдельную формулу для суммы с именем sumDuration:
Sum(@duration)
Я получаю сообщение об ошибке, что это поле не может быть суммировано. После двухдневного поиска в Google я обнаружил, что Crystal не может суммировать поля или формулы, содержащие константы. Если я просто скажу:
local numbervar num1;
num1 := ToNumber({billing_tx_charge_detail.v_duration})
тогда я могу обобщить @duration. Что мне не хватает? Это должно быть что-то простое, но я просто не вижу этого. Есть ли способ создать пользовательскую функцию для выполнения того, что я пытаюсь здесь получить? Или все еще проще?
Один человек предложил создать SQL-команду для проведения расчетов до того, как данные попадут в отчет. Я новичок в SQL, поэтому понятия не имел, с чего начать.