Автор: yvik@mail.ru
// Если Ваши заказчики мучают Вас частым изменением бизнес логики,
//в частности - изменением способа округления итоговых сумм, можно
//иcпользовать эту функцию. Позаботьтесть, чтобы
//переменные gi_scale и gb_buh_round_regim были изменяемы в режиме настройки
//Вашего приложения
////Функция buhround(dec_sum, 10000/100/10/1/, TRUE/FALSE)
////---------Примерный вызов-------------------
//// decimal{4} ld_mysum
//// ...
//// ld_mysum = buhround(ld_mysum, gi_scale, gb_buh_round_regim)
////-----------------------------------------
////Округление в большую сторону или по обычным правилам до заданной точности
////d_summ - исходная сумма >= 0
////i_scale - точность округления
//// = 10000 - до 0.0001 копейки, цента, пфенинга ...
//// 100 - до 0.01 ...
//// 10 - до 10 ....
//// 1 -до рубля, доллара, марки ...
////b_buhregim - режим округления
//// false - по обычным правилам
//// true - в большую сторону
////округленную сумму - возвращает или (-1 - ошибка)
IF (i_scale100 AND i_scale1)
OR d_summ
decimal{4} ld_sumstore
CHOOSE CASE b_buhregim
CASE TRUE
ld_sumstore = d_summ * i_scale
d_summ = Truncate(ld_sumstore, 0)
IF ld_sumstore - d_summ > 0 THEN
d_summ = d_summ + 1
END IF
d_summ = d_summ / i_scale
CASE FALSE
d_summ = Round(d_summ * i_scale, 0)/i_scale
CASE ELSE
END CHOOSE
return d_summ