Wednesday, October 24, 2012

Function Terbilang untuk Rupiah (MS-SQL Server)


Function  Terbilang untuk Rupiah (MS-SQL Server)

Source : http://mamadh.wordpress.com/2007/03/05/fungsi-terbilang-di-sql-server/

CREATE FUNCTION [DBO].[TerbilangDetil] (@Nilai as decimal)  
RETURNS varchar(200) AS  
BEGIN 
declare @TS varchar(200), @ST varchar(200), @S integer, @p integer, @r1 integer, @Bil varchar(200), @TP varchar(200), @hasil varchar(200)
    set @ST = Right(rTrim(Str(@Nilai + 1000)), 3)
    set @S = cast(Right(@ST, 1) as integer)
    set @p = cast(substring(@ST, 2, 1) as integer)
    set @r1 = cast(Left(@ST, 1) as integer)
    set @Bil = 'Satu    Dua     Tiga    Empat   Lima    Enam    Tujuh   Delapan Sembilan'
  
    If @S = 0 
        set @TS = ''
    Else
        set @TS = rTrim(substring(@Bil, @S * 8 - 7, 8)) + ' '
        
    If @p = 0 
        set @TP = @TS
    Else
        If @p = 1 
            If @S = 0 
                set @TP = 'Sepuluh '
            Else
                If @S = 1 
                    set @TP = 'Sebelas '
                Else
                    set @TP = rTrim(substring(@Bil, @S * 8 - 7, 8)) + ' Belas '
        Else
            set @TP = rTrim(substring(@Bil, @p * 8 - 7, 8)) + ' Puluh ' + @TS
        
    If @r1 = 0 
        set @hasil = @TP
    Else
        If @r1 = 1 
            set @hasil = 'Seratus ' + @TP
        Else
            set @hasil = rTrim(substring(@Bil, @r1 * 8 - 7, 8)) + ' Ratus ' + @TP
return @hasil
END
GO

CREATE FUNCTION [dbo].[terbilang] (@angka as decimal(19,2))  
RETURNS varchar (200) AS  
BEGIN 
Declare @b Decimal, @r Decimal, @J Decimal, @M Decimal, @T1 Decimal, @koma1 Decimal, @koma2 Integer, @hasil varchar(200) 
Declare @s_t varchar(200), @z varchar(200), @ribu varchar(200), @Juta varchar(200), @Miliar varchar(200), @tx varchar(200), @angka1 varchar(200), @tx1 varchar(200)
set @s_t = case when Len(rTrim(cast(cast(@Angka as bigint) as varchar(20)))) < 15 
        then replicate('0',15 - Len(rTrim(cast(cast(@Angka as bigint) as varchar(20))))) + rTrim(cast(cast(@Angka as bigint) as varchar(20))) 
        else rTrim(cast(cast(@Angka as bigint) as varchar(20))) 
         end
set @z = cast(15 - Len(rTrim(cast(cast(@Angka as integer) as varchar(20)))) as varchar(20)) + rTrim(cast(cast(@Angka as integer) as varchar(20))) 
set @r = cast(Right(@s_t, 3) as integer)
set @b = cast(substring(@s_t, 10, 3)  as integer)
set @J = cast(substring(@s_t, 7, 3)  as integer)
set @M = cast(substring(@s_t, 4, 3)  as integer)
set @T1 = cast(Left(@s_t, 3)  as integer)
set @ribu = case when @b = 0 then ' ' else case when @b = 1 then 'Seribu' else [dbo].TerbilangDetil(@b) + 'Ribu' end end
set @Juta = case when @J = 0 then ' ' else [dbo].TerbilangDetil(@J) + 'Juta ' end
set @Miliar = case when @M = 0 then ' ' else [dbo].TerbilangDetil(@M) + 'Miliar' end
set @tx = Case 
    when @Angka < 1000 -- Ratusan
                then [dbo].TerbilangDetil(@r)
        when @Angka < 1000000 -- Ribuan
                then @ribu + ' ' + [dbo].TerbilangDetil(@r)
        when @Angka < 1000000000 -- Jutaan
                then [dbo].TerbilangDetil(@J) + '' + rTrim('Juta ' + @ribu) + ' ' + [dbo].TerbilangDetil(@r)
    when @Angka < 1000000000000 -- Miliaran
                then [dbo].TerbilangDetil(@M) + '' + rTrim('Miliar ' + @Juta + @ribu) + ' ' + [dbo].TerbilangDetil(@r)
        when @Angka >= 1000000000000 -- Trilliun
                then [dbo].TerbilangDetil(@T1) + '' + rTrim('Trilliun ' + @Miliar + @Juta + @ribu) + ' ' + [dbo].TerbilangDetil(@r)
End
set @angka1 = rTrim(cast(@Angka as varchar(20)))
set @koma1 = case when charindex('.', @angka1) = 0 then 0 else cast(rTrim(substring(@angka1, charindex('.',@angka1) + 1, 2)) as integer) end
set @koma2 = Len(case when charindex('.',@angka1) = 0 then '0' else rTrim(substring(@angka1, charindex('.',@angka1) + 1, 2)) end)
If @koma1 > 0
begin
    If @koma1 < 10 And @koma2 = 1
    set @koma1 = @koma1 * 10
    set @tx1 = [dbo].TerbilangDetil(@koma1)
    set @hasil = @tx + 'Rupiah ' + @tx1 + 'Sen'
end
Else
    set @hasil = @tx + 'Rupiah'
return (@hasil)
END
GO


Usage :

Select dbo.terbilang(1250000) as Terbilang
GO

Tuesday, January 31, 2012

Printing Directly to LPT port

'Open the port

Open "LPT1" For Output As #1

'Once opened, you can print directly to it
Print #1, "Your text"

'then, you have to close the port:

Close #1

for printing italics, bolds, etc, you must send special characters to the printer, according to the printer's ascii code. For example:

'To print small caps

print #1, chr(15) & "the text"

'to print Bold caps:

print #1, chr(27) & "E"

YOU CAN USE THE NEXT CODES FOR IBM PRINTERS:

Bold_on=27,69|27,71|27,73,1|27,73,2|27,95,1|27,95,49
Bold_off=27,70|27,72|27,120,0|27,120,48|27,95,0|27,95,48
Italics_on=27,52|27,73,11
Italics_off=27,53
Underline_on=27,45,1|27,45,49
Underline_off=27,45,0|27,45,48
Normal_Width=18|27,18|27,73,0|27,87,0|27,87,48|20
Condensed=15|27,15
Double_Width=27,87,1|27,87,49|14
Double_Height=27,119,1|27,119,49
Normal_Height=27,84|27,119,0|27,119,48
Ignore_Chars=27,120,0|27,120,48|27,80,1|27,80,0
Cpi12=27,58|27,73,1
Cpi14=27,16,2
Cpi15=27,103
Cpi20=27,16,4
Superscript=27,83,0|27,83,48
Subscript=27,83,1|27,83,49