Forum
Merhabalar ;
c# kullanarak crystal reportta bir fatura raporu yapmam lazım. Bu raporun en altına faturanın tutarını yazı ile yazdırmam gerekiyor. Hepimiz biliriz YALNIZ ile başlayan satırdan bahsediyorum.
Yardımcı olanlara şimdiden teşekkür ederim.
Merhaba Bununla ilgili vb.net teki bu function işine yarar. C# a çevirmede problem yaşarsan çevirebiliriz.
YTL olarak Rakamı Yazıya Çeviren Fonksyon
Function Yaziyla(Sayi)
Dim birler$(10), onlar$(10), basamak$(5)
Dim virgul%, cevap$, virgul2$, say, x%, i%, uclu$, y%, o%, B%, yazi$
birler$(0) = "": birler$(1) = "Bir"
birler$(2) = "İki": birler$(3) = "Üç"
birler$(4) = "Dört": birler$(5) = "Beş"
birler$(6) = "Altı": birler$(7) = "Yedi"
birler$(8) = "Sekiz": birler$(9) = "Dokuz"
onlar$(0) = "": onlar$(1) = "On"
onlar$(2) = "Yirmi": onlar$(3) = "Otuz"
onlar$(4) = "Kırk": onlar$(5) = "Elli"
onlar$(6) = "Altmış": onlar$(7) = "Yetmiş"
onlar$(8) = "Seksen": onlar$(9) = "Doksan"
basamak$(1) = "": basamak$(2) = "Bin"
basamak$(3) = "Milyon": basamak$(4) = "Milyar"
basamak$(5) = "Trilyon"
virgul2$ = "": cevap$ = "":
say = Sayi
virgul% = InStr(1, say, ".")
If virgul% Then
say = Right$(say, Len(say) - virgul%)
GoSub cevir
virgul2$ = cevap$
cevap$ = ""
say = Sayi
say = Left(say, virgul% - 1)
End If
GoSub cevir
If (Trim(cevap$) = "") And Trim(virgul2$) = "" Then
Yaziyla = ""
ElseIf Trim(virgul2$) = "" Then
Yaziyla = "Yalnız" & cevap$ & "TL."
ElseIf Trim(cevap$) = "" Then
Yaziyla = "Yalnız" & virgul2$ & "Kr."
Else
Yaziyla = "Yalnız" & cevap$ & "TL" & virgul2$ & "Kr."
End If
Exit Function
cevir:
x% = Len(say)
say = String$(3 - (x% - Int(x% / 3) * 3), 48) + say
x% = Len(say) / 3
For i% = 1 To x%
uclu$ = Mid$(say, Len(say) - i% * 3 + 1, 3)
y% = Val(Mid$(uclu$, 1, 1))
o% = Val(Mid$(uclu$, 2, 1))
B% = Val(Mid$(uclu$, 3, 1))
yazi$ = ""
If y% <> 0 Then
If y% > 1 Then yazi$ = birler$(y%)
yazi$ = yazi$ + "Yüz"
End If
yazi$ = yazi$ + onlar$(o%) + birler$(B%)
If yazi$ <> "" Then
If LCase(yazi$) = "bir" And i% = 2 Then yazi$ = ""
cevap$ = yazi$ + basamak$(i%) + cevap$
End If
Next i%
Return
End Function
Size yıllar önce yazdığım slq sp yi vereyim.
Örnek kullanım
declare @HKelimeler varchar(100)
execute [kslRakamdanKelimeler_sp] 2032340, @HKelimeler out
Select @HKelimeler
----------------------------------------------------------------------------------------------------
IkiMilyonOtuzIkiBinÜçYuzKirk
(1 row(s) affected)
ALTER PROCEDURE [dbo].[kslRakamdanKelimeler_sp] @Sayi as varchar(100),@HKelimeler as varchar(100) OUTPUT
/*
Written by :ismail özer
Date:14.06.2005
*/
AS
DECLARE
@FlagHata as int,
@rakamla as varchar (100)
SELECT @FlagHata = 0
SELECT @rakamla = ''
--SELECT @Sayi = '1215544'
CREATE TABLE #v
(ID int,
Deger varchar (10)
)
CREATE TABLE #c
(ID int,
Deger varchar (10)
)
CREATE TABLE #b
(ID int,
Deger varchar (10)
)
insert into #b (ID,Deger)
values (0 ,' ')
insert into #b (ID,Deger)
values (1 ,'Bir')
insert into #b (ID,Deger)
values (2 ,'İki')
insert into #b (ID,Deger)
values (3 ,'Üç')
insert into #b (ID,Deger)
values (4 ,'Dört')
insert into #b (ID,Deger)
values (5 ,'Bes')
insert into #b (ID,Deger)
values (6 ,'Alti')
insert into #b (ID,Deger)
values (7 ,'Yedi')
insert into #b (ID,Deger)
values (8 ,'Sekiz')
insert into #b (ID,Deger)
values (9 ,'Dokuz')
CREATE TABLE #y
(ID int,
Deger varchar (10)
)
insert into #y (ID,Deger)
values (0 ,' ')
insert into #y (ID,Deger)
values (1 ,'On')
insert into #y (ID,Deger)
values (2 ,'Yirmi')
insert into #y (ID,Deger)
values (3 ,'Otuz')
insert into #y (ID,Deger)
values (4 ,'Kirk')
insert into #y (ID,Deger)
values (5 ,'Elli')
insert into #y (ID,Deger)
values (6 ,'Altmis')
insert into #y (ID,Deger)
values (7 ,'Yetmis')
insert into #y (ID,Deger)
values (8 ,'Seksen')
insert into #y (ID,Deger)
values (9 ,'Doksan')
CREATE TABLE #m
(ID int,
Deger varchar (10)
)
insert into #m (ID,Deger)
values (0 ,'Tirilyon')
insert into #m (ID,Deger)
values (1 ,'Milyar')
insert into #m (ID,Deger)
values (2 ,'Milyon')
insert into #m (ID,Deger)
values (3 ,'Bin')
insert into #m (ID,Deger)
values (4 ,' ')
Declare @a as varchar (15),
@pozitif as int,
@x as int
SELECT @a = LTrim(@Sayi)
IF Left(@a,1) = ' '
SELECT @pozitif = 1
ELSE
SELECT @pozitif = 0
--SELECT @a = RIGHT(@a , LEN(@a) - 1 )
SELECT @x = 1
WHILE @x <= LEN(@a)
BEGIN
If (Ascii(SubString(@a, @x, 1)) > Ascii('9')) Or (Ascii(Substring(@a, @x, 1)) < Ascii('0'))
BEGIN
print 'Hata'
SELECT @FlagHata = 1
END -- end if
SELECT @x = @x + 1
END -- end while
If Len(@a) > 15
SELECT @FlagHata = 1
print @a
SELECT @a = SubString('000000000000000',1,15 - Len(@a)) + @a
print @a
---------------------------------------------------------
SELECT @x = 1
WHILE @x <= 15 -- wa
BEGIN
insert into #v (ID,Deger)
SELECT @x ,substring(@a,@x,1)
SELECT @x = @x + 1
END --end while wa
---------------------------------------------------------
Declare @s as varchar (100),
@e as varchar(100)
SELECT @s = '' , @e = ''
---------------------------------------------------------
SELECT @x = 0
WHILE @x <= 4
BEGIN
DELETE FROM #c
insert into #c (ID,Deger)
SELECT 1,Deger FROM #v WHERE ID = (@x * 3) + 1
insert into #c (ID,Deger)
SELECT 2,Deger FROM #v WHERE ID = (@x * 3) + 2
insert into #c (ID,Deger)
SELECT 3,Deger FROM #v WHERE ID = (@x * 3) + 3
IF (SELECT deger FROM #c WHERE ID = 1) = '0'
SELECT @e = ''
ELSE
IF (SELECT deger FROM #c WHERE ID = 1) = '1'
SELECT @e = 'Yuz'
ELSE
SELECT @e = (SELECT Deger FROM #b WHERE ID =
(SELECT Deger FROM #c WHERE ID = 1) ) + 'Yuz'
print @e + ' ddddddddd'
SELECT @e = @e + (SELECT Deger FROM #y WHERE ID =
(SELECT Deger FROM #c WHERE ID = 2) ) +
(SELECT Deger FROM #b WHERE ID =
(SELECT Deger FROM #c WHERE ID = 3) )
print @e + ' ddddddddd'
If @e <> ''
SELECT @e = @e + (SELECT Deger FROM #m WHERE ID = @x)
If (@x = 3) And (@e = 'BirBin')
SELECT @e = 'Bin'
SELECT @s = @s + @e
SELECT @x = @x + 1
SELECT @rakamla = @rakamla + @e
END
print @rakamla + ' ------------------------'
---------------------------------------------------------
If @s = ''
SELECT @s = 'Sıfır'
If @pozitif = 0
SELECT @s = 'Eksi' + @s
--SELECT * from #c
DROP TABLE #b
DROP TABLE #y
DROP TABLE #m
DROP TABLE #v
DROP TABLE #c
SELECT @HKelimeler = @rakamla
Arkadaşlar yazmış olduğumuz bu kodların içirisinde written by kısmını değiştirmeniz durumunda hakkımı helal etmem ona göre. Bu kodları ticari (commercial use is forbidden. Please contact me or site manager to use) amaçlı kullanımlarınızda lütfen bilgi veriniz.
İyi çalışmalar.
Arkadaşlar yazmış olduğumuz bu kodların içirisinde written by kısmını değiştirmeniz durumunda hakkımı helal etmem ona göre. Bu kodları ticari (commercialy use is forbidden. Please contact me or site manager to use) amaçlı kullanımlarınızda lütfen bilgi veriniz.
İyi çalışmalar.
Merhabalar,
Crstall Report da yeni birformül oluştur (adınıda yaziile yap misal),
içeriğine aşağıda kodları yapıştır,
tek yapmanız gereken formüldeki tutar geçen yerleri kendi toplam fieldinin adı ile değiştirmek
, sonra bu formulü forma bırak hepsi bu. ticari micari her türlü kullanabilirsiniz 😀
//Formül içerisinde {tabloadi.Toplam} görülen yerlere
//form içerisinde yazı ile yazdırılmak istenen field eklenilecek.
Local stringvar array Birler := ["BİR", "İKİ", "ÜÇ", "DÖRT", "BEŞ", "ALTI", "YEDİ", "SEKİZ", "DOKUZ"];
Local stringvar array Onlar := ["ON", "YİRMİ", "OTUZ", "KIRK", "ELLİ", "ALTMIŞ", "YETMİŞ", "SEKSEN", "DOKSAN"];
Local stringvar array Yuzler := ["BİN", "MİLYON", "MİLYAR", "TRİLYON", "TRİLYAR"];
Stringvar YaziIle;
numbervar deger;
numbervar deger000;
Numbervar Uzunluk;
Numbervar I;
Numbervar K;
Numbervar j;
stringvar ssayi;
Numbervar lSayi;
sSayi := sSayi := CStr (abs(int({tabloadi.Toplam})), 0 , "");
YaziIle := "";
Uzunluk := Len(sSayi);
For I := 1 To Uzunluk do
(
deger := cdbl(Mid(sSayi, I, 1));
J := Uzunluk - I + 1;
K := J Mod 3 ;
Select K
Case 1:
(
If deger <> 0 Then
YaziIle := YaziIle + Birler[deger];
If J > 3 Then
(
K := J / 3;
YaziIle := YaziIle + Yuzler[K];
)
)
Case 2 :
If deger <> 0 Then
YaziIle := YaziIle + Onlar[deger]
Case 0 :
(
deger000 := cdbl(Mid(sSayi, I, 3));
If deger000 = 0 Then
I := I + 2;
//Else
If deger <> 0 and deger000 <> 0 Then
If deger = 1 Then
YaziIle := YaziIle + "YÜZ"
Else
YaziIle := YaziIle + Birler[deger] + "YÜZ"
);
);
YaziIle := YaziIle & ".TL.";
lSayi := 100 * ({tabloadi.Toplam} - round({tabloadi.Toplam},0));
if lSayi < 0 then
lSayi := 100 - (-1 * lSayi);
sSayi := CSTR(lSayi, 0,"");
Uzunluk := Len(sSayi);
For I := 1 To Uzunluk do
(
deger := cdbl(Mid(sSayi, I, 1));
J := Uzunluk - I + 1;
K := J Mod 3 ;
Select K
Case 1:
(
If deger <> 0 Then
YaziIle := YaziIle + Birler[deger];
If J > 3 Then
(
K := J / 3;
YaziIle := YaziIle + Yuzler[K];
)
)
Case 2 :
If deger <> 0 Then
YaziIle := YaziIle + Onlar[deger]
Case 0 :
(
deger000 := cdbl(Mid(sSayi, I, 3));
If deger000 = 0 Then
I := I + 2;
//Else
If deger <> 0 and deger000 <> 0 Then
If deger = 1 Then
YaziIle := YaziIle + "YÜZ"
Else
YaziIle := YaziIle + Birler[deger] + "YÜZ"
);
);
YaziIle := YaziIle & ".kr.";
Teşekkürler Orhan Bey,
formülünüz işime yaradı.
Arkadaşlar bunun reporting tools için olanı var mı
Crystal Rapor ile verdiğiniz örnek çok başarılı fakat rapor çıktısı alırken 1500 rakamını girdiğimizde birbinbeşyüz olarak bize yansıtmakta bu hatayı nasıl düzeltebiliriz, başında bir ile birlikte gelen binli sayılarda sadece binbeşyüz yazmasını istiyorum.
Cevaplarınız için şimdiden teşekkür ederim.
kolay gelsin kodları kopyalayıp yapıştırdım ama "case" hatası veriyor.
bununla ilgili yapmam gereken bi değişiklik varmı acaba.
Bulabildiğim tek kaynak burası olduğu için konuyu hortlatsamda ÇÖZÜM bulduğum için yazıyorum.
yukarıdaki ilk case 1 deki
If J > 3 Then
(
K := J / 3;
YaziIle := YaziIle + Yuzler[K];
)
kırmızı ile yazdığım yere şunu yazın ben sorunumu bu şekilde çözdüm.
(if deger = 1 then "" else yaziIle)
Anlamı: eğer 1 görürsen boş bırak sonrası için "İKİ" "ÜÇ" "DÖRT" yazmaya devam ediyor.
Yani son hali şu şekilde olacak. Parantezler dahil.
Case 1:
(
If deger <> 0 Then
YaziIle := YaziIle + Birler[deger];
If J > 3 Then
(
K := J / 3;
YaziIle := (if deger = 1 then "" else yaziIle) + Yuzler[K];
)
)
Case 2 :
If deger <> 0 Then
YaziIle := YaziIle + Onlar[deger]
Ben çok uğraştım ve ilk defa bir foruma yazıyorum. Çünkü başka yerde cevap yok.
Orhan Beye teşekkür ederim.