Xml Eylemi ile Fatura Gönderimi

<< Click to Display Table of Contents >>

Navigation:  Likom Gusto Olay Yönetimi > Örnekler >

Xml Eylemi ile Fatura Gönderimi

Previous pageReturn to chapter overviewNext page
Show/Hide Hidden Text

Bu örnekteki amacımız Gusto'da oluşturulan faturalardan cariye göre gruplayıp XML dosyası oluşturarak her cari ye kendisi için oluşan xml i göndereceğiz.

 

Kullanılacak XML dosyasının örneği aşağıdaki gibidir. Örnekte sadece bir tane faturanın gösterimi yapılmıştır. FIS düğümü faturayı göstermektedir. Birden çok fatura için FISLER düğümü altında birden çok FIS oluşacaktır. oluşturulacak xml dökümanının xsd dosyası için tıklayınız.

<?xml version="1.0" encoding="utf-8"?>

<FISLER>

<FIS>

  <FATURANO>58

  </FATURANO>

  <TARIH>10.04.2012</TARIH>

  <VADETARIHI>10.05.2012</VADETARIHI>

  <ACIKLAMA>TEMİZLENMİŞ PİLİÇ ETİ SATIŞI</ACIKLAMA>

  <TUTAR>28.598,60</TUTAR>

  <ISKONTO1>0,00</ISKONTO1>

  <ISKONTO2>0,00</ISKONTO2>

  <KALEMLER>

    <KALEM>

      <KOD>152.15.06.13823</KOD>

      <MIKTAR>77,155000</MIKTAR>

      <FIYAT>4,47</FIYAT>

      <AMB>10,000000</AMB>

      <KDV>1,00</KDV>

      <ISKONTO1>0,00</ISKONTO1>

      <ISKONTO2>0,00</ISKONTO2>

      <ISKONTO3>0,00</ISKONTO3>

    </KALEM>

    <KALEM>

      <KOD>152.15.12.17153</KOD>

      <MIKTAR>288,978000</MIKTAR>

      <FIYAT>4,62</FIYAT>

      <AMB>20,000000</AMB>

      <KDV>1,00</KDV>

      <ISKONTO1>0,00</ISKONTO1>

      <ISKONTO2>0,00</ISKONTO2>

      <ISKONTO3>0,00</ISKONTO3>

    </KALEM>

  </KALEMLER>

 </FIS>

</FISLER>

 

tog_minusKoşul Oluşturma

 

Örnek XML dökümanında fatura (fiş) düğümünün altında iskonto bilgileri bulunmaktadır.  FIS düğümünün alt düğümlerinden FATURANO, TARIH,VADETARIHI,ACIKLAMA ve TUTAR  verilerini Fatura tablosundan alabiliriz. Fakat, iskonto  bilgilerinin Fatura tablosunda değil FaturaAltiIskonto tablosunda bulunmasından dolayı basit bir sorguyla tüm verileri tek bir satırda toplayamayız . Bu işlem için SQL fonksiyonu tanımlayacağız.

KALEMLER düğümünün verilerini StokHareket tablosundan elde edeceğiz.

Oluşturacağımız koşulda Fatura tablosunda bulunan fatura_rowid alanını indeksleyecek ve fonksiyona parametre olarak göndereceğiz. Fonksiyonun görevi parametre olarak girilen değerden büyük değere sahip fatura satırlarını iskonto bilgileri ile döndürmek olacaktır.

 

tog_minus_sev2Fonksiyonu yaratma sorgusu

-- Gusto00038 örnekte kullanılan firma şemasıdır.

CREATE function [GUSTO00038].[FaturaXmlKosul] (@PR_Rowid int)

-- Döndürülecek tablo

RETURNS @FaturaXmlBilgileri TABLE

(

    FaturaNo int,

    FaturaTarihi smalldatetime,

    VadeTarihi smalldatetime,

    Aciklama varchar(120),

    GenelToplam decimal(22,6),

    Iskonto1 decimal(22,6),

    Iskonto2 decimal(22,6),

    FaturaRowid int ,

    Ad varchar(60)

)

as

begin

 

DECLARE @lFaturaNo int

DECLARE @lFaturaTarihi smalldatetime

DECLARE @lVadeTarihi smalldatetime

DECLARE @lAciklama varchar(120)

DECLARE @lGenelToplam decimal(22,6)

DECLARE @lIskonto1 decimal(22,6)

DECLARE @lIskonto2 decimal(22,6)

DECLARE @lFaturaRowid int

DECLARE @lFaturaTutari decimal(22,6)

DECLARE @lSatirIskontoTutari decimal(22,6)

DECLARE @lAd varchar(60)

 

 

DECLARE db_cursor CURSOR FOR

-- Parametre olarak girilen deðerden büyük fatura satýrlarýný alýyoruz

-- ek koþullar da eklenmiþtir

select lFaturaNo,dtFaturaTarih,dtVadeTarihi,sAciklama,ldFaturaGenToplam,Fatura_rowid,ldFaturaTutari, ldSatirIskontoTutari,Bayi.sAd from Gusto00038.Fatura, gusto00038.MusteriSaticiKodu Bayi where FATURA_ROWiD > @PR_Rowid and  cCarituru= 'C' and nFaturaTuru=4 and Bayi.MusteriSaticiKodu_rowid = pCari

and exists (select * from Gusto00038.CariIsaret where cSahibinTuru='CK' and pOwnerID= pCari and pIsaretTanimi = 25 and pIsaretDegeri=87 )

 

 

OPEN db_cursor

FETCH NEXT FROM db_cursor INTO @lFaturaNo ,@lFaturaTarihi ,@lVadeTarihi ,@lAciklama ,@lGenelToplam ,@lFaturaRowid,@lFaturaTutari,@lSatirIskontoTutari,@lAd

 

WHILE @@FETCH_STATUS = 0

BEGIN

DECLARE @Tutar decimal(22,6)

 

DECLARE @Tutar2 decimal(22,6)

--Faturanýn iskonto deðerleri alýnýyor

set @Tutar = isnull((select ldIskontoTutari from gusto00038.faturaaltiIskonto where dsira = 0 and pFatura = @PR_Rowid),0)

 

set @lIskonto1 = (@Tutar / (@lFaturaTutari- @lSatirIskontoTutari))*100

 

set @Tutar2 = isnull((select ldIskontoTutari from gusto00038.faturaaltiIskonto where dsira = 1 and pFatura = @PR_Rowid),0)

 

set @lIskonto2 = (@Tutar2/ (@lFaturaTutari- @lSatirIskontoTutari-@Tutar))*100

 

insert into @FaturaXmlBilgileri (FaturaNo,FaturaTarihi,VadeTarihi,Aciklama,GenelToplam,FaturaRowid,Iskonto1,Iskonto2,Ad) values (@lFaturaNo,@lFaturaTarihi,@lVadeTarihi,@lAciklama,@lGenelToplam,@lFaturaRowid,@lIskonto1,@lIskonto2,@lAd)

 

FETCH NEXT FROM db_cursor INTO @lFaturaNo ,@lFaturaTarihi ,@lVadeTarihi ,@lAciklama ,@lGenelToplam ,@lFaturaRowid,@lFaturaTutari,@lSatirIskontoTutari ,@lAd  

END

 

CLOSE db_cursor

DEALLOCATE db_cursor

 

RETURN;

end ;

 

      Fonksiyon yaratıldıltan sonra Olay Yönetimi'nde veri tabanı bağlantısı faturaların okunacağı bağlantı olacak şekilde yeni bir koşul oluşturulupp sorgusunu aşağıdaki gibi belirlenir. (İlk olarak sorguda {FaturaRowid} kısmına 0 yazılıp çalıştırılır. Parametreler yüklendikten sonra {FaturaRowid}  eklenir.)

XML fatura koşulu

XML fatura koşulu

fauta_rowid parametresinin indeksle seçeneği işaretlenir.

 

 

Koşul yaratıldıktan sonra olay tanımının koşul sağlandığında gerçekleştirilecek eylemler sayfasında yeni bir XML eylemi oluşturulur. Tanım adı belirlendikten sonra veri tabanı bağlantı bilgisi faturaların okunacağı veri tabanı ile aynı seçilir. Kayıt parametreleri belirlenir.

Kaynak satır gruplandırmasayfasında Ad (Cari adı)parametresine göre gruplandırma seçilir.

 

Düğüm değerleri şu şekilde belirlenir.

Düğüm Adı

Seçilen Değer

Format

FIS

Kaynak Satırları

FATURANO

Kaynak Satır-Fatura No

-

TARIH

Kaynak Satır-Fatura Tarihi

Tarih - "d"

VADETARIHI

Kaynak Satır- VadeTarihi

Tarih - "d"

GenelToplam

Kaynak Satır - GenelToplam

Sayısal- "N2"

ISKONTO1

Kayak Satır - Iskonto1

Sayısal- "N2"

ISKONTO2

Kayak Satır - Iskonto2

Sayısal- "N2"

KALEMLER

KALEM

SQL

KOD

Üst Düğüm - sKod

-

MIKTAR

Üst Düğüm - ldMalMiktari1Birim

Sayısal "N6"

FIYAT

Üst Düğüm - ldBirimFiyatKDVsiz

Sayısal "N2"

KDV

Üst Düğüm -ldKDVOrani

Sayısal "N2"

ISKONTO1

Üst Düğüm -BirinciIskonto

Sayısal "N2"

ISKONTO2

Üst Düğüm -IkinciIskonto

Sayısal "N2"

ISKONTO3

Üst Düğüm -UcuncuIskonto

Sayısal "N2"

 

Değerler bu şekilde belirlendiğinde her bir kaynak satırı verisi için FIS oluşacaktır.  KALEM düğümünde ilgili kaynak satırının faturaRowid değeri kullanılarak StokHareket tablosundan SQL sorgusu ile veri çekilmektedir.  KALEM düğümü, bu tablodaki satır sayısı kadar tekrar edip her satırın verileri KALEM düğümünün alt düğüm değerlerini oluşturacaktır.

Oluşan XML dökümanlarını carilere göndermek için XML Oluşturma Eylem Sihirbazının E-posta Gönderimi sayfasında "Oluşan XML Dosyaları Mail ile Gönderilsin"  seçeneği işaretlenir. Diğer e-posta ayarları yapılır.  Dinamik göndericiler kısmında carinin e-posta bilgisi alınarak carilere e-posta gönderimi sağlanır. Dinamik alıcılar SQL sorgusu:

 

select sEmail from Gusto00038.MusteriSaticiDetayi where pMusteriSaticiKodu

=(select pCari from Gusto00038.Fatura where fatura_rowid={FaturaRowid})

şeklindedir.