Saturday, May 6, 2023

Convert Amount in Indian Format (INR Format) in Business Central

 Hello Friends,

Recently i have developed one small function which convert any amount in Indian Amount Format Style (Digit grouing of amount as Crore, Lakh and Thousand)

For example:

Amount: 999,999.23  will show as 9,99,999.23

Use below CAL Function which take input as Decimal Value and Return amount in INR Format:

procedure GetIndianFormat_gFnc(Amount_iDec: Decimal) RtnValue: Text[50]
    var
        AddMinuSIng_lBln: Boolean;
        i: Integer;
        FromAmt_lDec: Decimal;
        ToAmt_lDec: Decimal;
    begin
        if Amount_iDec < 0 then
            AddMinuSIng_lBln := true;

        Amount_iDec := Abs(ROUND(Amount_iDec, 0.01));
        if Amount_iDec <= 99999.99 then begin  // 1 Lakh
            if AddMinuSIng_lBln then
                RtnValue := '-' + Format(Amount_iDec, 0,
'<Precision,2><sign><Integer Thousand><Decimals,3>')
            else
                RtnValue := Format(Amount_iDec, 0,
'<Precision,2><sign><Integer Thousand><Decimals,3>');

            exit(RtnValue);
        end;

        if Amount_iDec <= 9999999.99 then begin
            for i := 1 to 99 do begin
                FromAmt_lDec := i * 100000;
                ToAmt_lDec := FromAmt_lDec + 99999.99;

                if (Amount_iDec >= FromAmt_lDec) and (Amount_iDec <= ToAmt_lDec) then begin
                    Amount_iDec := Amount_iDec - FromAmt_lDec;

                    if AddMinuSIng_lBln then
                        RtnValue := '-' + Format(i) + ',' + Format(Amount_iDec, 0,
'<Precision,2><sign><Integer Thousand><Decimals,3>')
                    else
                        RtnValue := Format(i) + ',' + Format(Amount_iDec, 0,
'<Precision,2><sign><Integer Thousand><Decimals,3>');

                    exit(RtnValue);
                end;
            end;
        end;

        if Amount_iDec > 9999999.99 then begin
            for i := 1 to 99 do begin
                FromAmt_lDec := i * 10000000;
                ToAmt_lDec := FromAmt_lDec + 9999999.99;

                if (Amount_iDec >= FromAmt_lDec) and (Amount_iDec <= ToAmt_lDec) then begin
                    Amount_iDec := Amount_iDec - FromAmt_lDec;

                    if AddMinuSIng_lBln then
                        RtnValue := '-' + Format(i) + ',' + GetIndianFormat_gFnc(Amount_iDec)
                    else
                        RtnValue := Format(i) + ',' + GetIndianFormat_gFnc(Amount_iDec);

                    exit(RtnValue);
                end;
            end;
        end;

        Error('Input Value %1 Invalid', Amount_iDec);
    end;