Sayfayı Yazdır | Pencereyi Kapat

e-faturada yazı ile dövizli tutarın yazılması

Nereden Yazdırıldığı: ERP Nedir? | Türkiye'nin ERP Forum Platformu
Kategori: ERP Temel Paketler
Forum Adı: ERP Fatura Modülü
Forum Tanımlaması: Fatura Modülü İle İlgili Bilgiler ve Sorular İçin...
URL: http://www.erpne.org/forum_posts.asp?TID=4584
Tarih: 18 Nisan 2024 Saat 19:44
Program Versiyonu: Web Wiz Forums 11.10 - http://www.webwizforums.com


Konu: e-faturada yazı ile dövizli tutarın yazılması
Mesajı Yazan: aykuty
Konu: e-faturada yazı ile dövizli tutarın yazılması
Mesaj Tarihi: 18 Şubat 2020 Saat 13:56
Merhaba,
e-fatura  tasarımında yazı ile tl tutarı getiriyoruz fakat dövizli tutarı yazabilecek bir etiket bulamadım.


Yanlız: Yüz USD oniki CENT şeklinde usd/ euro için yazdırmak istiyoruz.

bunun için bir etiket var mı?  

hazır taglar dışında ekranda fonksiyon ve sql kullanımınada ezin verilmiş ama bu alanların nasıl kullanılacağının çözemedim.

faturanın inckeyini parametre olarak verebileceğim bir fonksiyu burada kullanabiirsem  bu yazdırma işlemini orada yapabilirim.

yardımcı olursanız sevinirim.
teşekkürler





Cevaplar:
Mesajı Yazan: mbaykan
Mesaj Tarihi: 18 Şubat 2020 Saat 19:49
1085 veya 1086 yazı ile döviz tutarı alanı olacaktı
---------------
12.345,67 usd diyelim, sonuç (2 ondalığa göre)
ONİKİMİLYONBİNÜÇYÜZKIRKBEŞ,ALTMIŞYEDİ
şeklinde dönüyor
SQL REPLACE(x,'MİLYON','') fonksiyonu ile fazlalık MİLYON'u silersiniz

 


-------------
Mehmet Baykan


Mesajı Yazan: Conari
Mesaj Tarihi: 20 Şubat 2020 Saat 17:06
sql seçip,
"DÖVİZ TUTARI/ YALNIZ, "+VT_Karekter({1098})
araya para birimi eklemek için sonucu parçalamanız lazım.


-------------
Netsisden vazgeçemiyorum. Beni engelliyor..


Mesajı Yazan: aykuty
Mesaj Tarihi: 26 Şubat 2020 Saat 11:14
teşekkürler.
sql tipini kullanıp aşağıdaki şekilde hazırladığımız fonksiyonu çağırdım. Bu arada efatura dizayn kısmında koşulları hiç bir şekilde çalıştıramadım. o yüzden koşuluda sql den yaptım. Yanlız bu işlem faturanın dövizli olup olmamasına göre çalışıyor. yani dövizli bir faturayı tl almak isterseniz bile aşağıda döviz tutarı yazacaktır. 

Eğer sistemin başta sorduğu sorunun cevabını test edebilirsem çok daha sağlıklı çalışacaktı ama yöntemini bulamadım. şimdilik döviz için ayrı bir tasarım oluşturup aşağıdaki şekilde yazdırdım.

Dövizli mi tl mi almak istiyorsunuz sorunun cevabını nasıl kontrol edebileceğimi bilen varsa paylaşırsa sevinirim.


Tasarımdaki SQL:
case when isnull( VT_Sayisal({1039}),0) > 0 then    
XXX2020.DBO.XXX_AY_YAZIYA_CEVIR( VT_Sayisal({1040}),  VT_Karekter({1053})  )  
else
XXX2020.DBO.XXX_AY_YAZIYA_CEVIR( VT_Sayisal({1035}),  'TL'  ) 
end



tutarı para birimine göre yazı ile yazan fonksiyom:
CREATE FUNCTION [dbo].[XXX_AY_YAZIYA_CEVIR] (@sayi Nvarchar(20), @KUR Nvarchar(20) = 'TL' ) RETURNS VARCHAR(250)
AS
BEGIN


declare @yazi Nvarchar(250) = ''
declare @yazi1 Nvarchar(250) = ''
declare @index tinyint
declare @indexVirgul tinyint
declare @indexNokta tinyint

declare @kurAna Nvarchar(16) = ''
declare @kurKusur Nvarchar(16) = ''

begin
select @indexVirgul = CHARINDEX(',',@sayi)
end


begin
 select @indexNokta = CHARINDEX('.',@sayi)
end


if @indexVirgul > 0 and @indexNokta > 0
begin
return ('HATA! Virgül ve noktanın birlikte kullanımı desteklenmiyor!')

end 


select @index =
(case
when @indexVirgul > 0  then  @indexVirgul
when @indexNokta > 0 then @indexNokta
else 0
end)


if upper(@KUR) = 'TL' OR upper(@KUR) = 'YTL' 
begin
SET @kurAna = 'TL'
SET @kurKusur = 'KURUŞ'


end else if upper(@KUR) = 'USD' 
begin
SET @kurAna = 'DOLAR'
SET @kurKusur = 'CENT'


end else if upper(@KUR) = 'EUR' OR upper(@KUR) = 'EURO' 
begin
SET @kurAna = 'EURO'
SET @kurKusur = 'CENT'


end else if upper(@KUR) = 'GBP' 
begin
SET @kurAna = 'STERLIN'
SET @kurKusur = 'POUND'

end






if @index > 0
begin
 set @sayi += '0000000'
 select @yazi = dbo.XXX_AY_YAZIYA_CEVIR_ISLEM(CONVERT(INT,SUBSTRING(@sayi,0,@index)),1)+' '+@kurAna
 
 --print CONVERT(INT,SUBSTRING(@sayi,0,@index))

 --if CONVERT(INT,SUBSTRING(@sayi,0,@index)) > 0
 --begin
 select @yazi1 = dbo.XXX_AY_YAZIYA_CEVIR_ISLEM(CONVERT(INT,SUBSTRING(@sayi,@index+1,2)),1)+' '+@kurKusur
 --end
 
end else begin
  select @yazi = dbo.XXX_AY_YAZIYA_CEVIR_ISLEM(CONVERT(INT,@sayi),1)+' '+@kurAna
end

if (ltrim(rtrim(@yazi)) = @kurAna) set @yazi = 'SIFIR '+ltrim(@yazi)
if (ltrim(rtrim(@yazi1)) = @kurKusur) set @yazi1 = ''/*'SIFIR '+ltrim(@yazi1)*/

set @yazi = ltrim(rtrim(@yazi+' '+@yazi1))


return (@yazi)

END








Sayıyı yazıya çeviren foksiyon.db de tanımlı:
CREATE function [dbo].[XXX_AY_YAZIYA_CEVIR_ISLEM](
  @sayi bigint
 ,@buyukharf INT = 1
)
returns nvarchar(max)

begin

declare @yaziilesayi nvarchar(max)
set @yaziilesayi = N''

declare @sayivarchar varchar(100)
set @sayivarchar = cast(@sayi as varchar(100))

declare @toplambasamak smallint
set @toplambasamak = len(@sayivarchar)

declare @basamak smallint
declare @rakam tinyint

declare @i smallint
set @i = 0

while @i < @toplambasamak
begin
 set @basamak = @toplambasamak - @i
 set @i = @i + 1
-- sıra ile soldan başlayarak rakamları oku
 set @rakam = substring(@sayivarchar, @i, 1)

 select
  @yaziilesayi = @yaziilesayi +
-- rakamın basamak değeri gözönüne alınarak metin oluşturuluyor
  case @rakam
  when 0 then N''
  when 1 then
   case @basamak % 3 when 0 then N'yüz' when 2 then N'on' when 1 then
    case when @toplambasamak = 4 and @i = 1 then N'' else
     case when @i = @toplambasamak then N'bir' else
      case when substring(@sayivarchar, @i-2, 2) = '00'
       then N'' else N'bir'
      end
     end
    end
   end
  when 2 then
   case @basamak % 3
    when 0 then N'iki yüz' when 2 then N'yirmi' when 1 then N'iki' end
  when 3 then
   case @basamak % 3
    when 0 then N'üç yüz' when 2 then N'otuz' when 1 then N'üç' end
  when 4 then
   case @basamak % 3
    when 0 then N'dört yüz' when 2 then N'kırk' when 1 then N'dört' end
  when 5 then
   case @basamak % 3
    when 0 then N'beş yüz' when 2 then N'elli' when 1 then N'beş' end
  when 6 then
   case @basamak % 3
    when 0 then N'altı yüz' when 2 then N'altmış' when 1 then N'altı' end
  when 7 then
   case @basamak % 3
    when 0 then N'yedi yüz' when 2 then N'yetmiş' when 1 then N'yedi' end
  when 8 then
   case @basamak % 3
    when 0 then N'sekiz yüz' when 2 then N'seksen' when 1 then N'sekiz' end
  when 9 then
   case @basamak % 3
    when 0 then N'dokuz yüz' when 2 then N'doksan' when 1 then N'dokuz' end
  end + space(1) +
  case @basamak
   when 4 then
    case when substring(reverse(@sayivarchar), @basamak, 3) = '000' then N'' else N'bin' end
   when 7 then
    case when substring(reverse(@sayivarchar), @basamak, 3) = '000' then N'' else N'milyon' end
   when 10 then
    case when substring(reverse(@sayivarchar), @basamak, 3) = '000' then N'' else N'milyar' end
   when 13 then
    case when substring(reverse(@sayivarchar), @basamak, 3) = '000' then N'' else N'trilyon' end
   when 16 then
    case when substring(reverse(@sayivarchar), @basamak, 3) = '000' then N'' else N'katrilyon' end
   else N''
  end + space(1)
end

-- Çevrim sırasında oluşabilecek fazla SPACE karakterleri temizleniyor
set @yaziilesayi = ltrim(rtrim(@yaziilesayi))

WHILE REPLACE(@yaziilesayi, space(2), space(1)) <> @yaziilesayi
BEGIN
 SELECT @yaziilesayi = DBO.TRK(REPLACE(@yaziilesayi, space(2), space(1)))
END

-- Metin büyük harflerle isteniyorsa UPPER fonksiyonu kullanılıyor
if @buyukharf = 1 set @yaziilesayi = DBO.TRK(UPPER(@yaziilesayi collate turkish_ci_as))

-- sayının yazı ile ifadesini içeren değişken döndürülüyor
return @yaziilesayi

end




Sayfayı Yazdır | Pencereyi Kapat

Forum Software by Web Wiz Forums® version 11.10 - http://www.webwizforums.com
Copyright ©2001-2017 Web Wiz Ltd. - https://www.webwiz.net