Hosted by uCoz
Изменение способа округления итоговых сумм

Автор: 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