'Description: WAWI: Warenwirtschaftsbelege in EDI/XML exportieren
'Usedby: WAWI

dim erg as long
dim personenkontoart as string
dim fw_einheiten as double
dim fw_berechnung as string
dim fibupersonenkonto as string
dim skiped as long
dim belegnummer as long
dim hilf_double as double
dim edi_konverter as string
dim wnd_erg as string
dim dateiname as string
dim edi_xmldatei as string
dim text as string
dim zeilenzaehler as long
dim betragnetto, betragbrutto as double
dim i as long
dim exportiert as long

dim runddiffbeleg(5), betrbrutto(5), betrnetto(5), mwst_satz(5) as double
dim letztegeholtenummer as string

dim idateiname as string
dim is as string
dim izeile as long
dim itrennzeichen as string
dim iansi as long
dim ipos as long
dim iidateiname as string
dim iis as string
dim iizeile as long
dim iitrennzeichen as string
dim iiansi as long
dim iipos as long

  opentable( "WBELSTM", "BELSTAMM")
  erg = linktable( "BELSTAMM", "BELEGERF.WBELSTM.STM_NUMMER")
  if erg = 1 then 
    if check_beldef( hole_beldef_filter( "BE", ""), &BELSTAMM.BELDEF_NUM) = 0 then
      valid = 0
    end if
  
    @beleg_von = &BELSTAMM.BEL_NUMMER
    @beleg_bis = &BELSTAMM.BEL_NUMMER
  else
    @datum_von = belegzeitraum_anfang
    @datum_bis = belegzeitraum_ende
    @belegdef = hole_erste_beldef( hole_beldef_filter( "BE", ""))
    gosub belegdef_onexit
  end if
end


@belegdef.onselect:
  writeglobal( "WBELDEFWLINK", "BE")
return 


belegdef_onexit:
@belegdef.onexit:
  @beleg = hole_text_beldef( @belegdef)
return


@belegdef_neu.onexitchanged:
  if check_beldef( hole_beldef_filter( "BE", ""), @belegdef) = 0 then
    valid = 0
  end if
return


@ok.onpress:
  edi_konverter = upper$(readentry("\apps.ini", "EDI KONVERTER", ""))
  wnd_erg = readentry("\apps.ini", "", "")
  if edi_konverter = "TRANSDATIX" then
    edi_export
    edi_konvertierung(0)
    return
  end if
  if edi_konverter = "AVENUM" then
    edi_export
    edi_konvertierung_av(0)
    return
  end if
  if edi_konverter = "EBINTERFACE" then
    edi_xmldatei = upper$(readentry("\apps.ini", "EDI XMLDATEI", ""))
    wnd_erg = readentry("\apps.ini", "", "")
    edi_export
    return
  end if
return


sub edi_export
dim records as long
dim akt_record as long
dim abbruch as long
dim asciidatei as string

  records = 0
  akt_record = 0
  erg = 1
  abbruch = 0
  exportiert = 0

  if edi_konverter <> "EBINTERFACE" then
    asciidatei = "\verb\wedi_exp.txt"
    ianfang( asciidatei, 0, "", 0)
  end if
    
  opentable("wbelstm")
  opentable("wbelzeil")
  setindex("wbelzeil", "stm_posnummer")
  opentable("xadresse")
  opentable("wbeldef")
  opentable("wartikel")
  opentable("xstmdat")
  opentable("XLKZ")
  opentable("WVERTRET")

  opentable("XHAUSBNK")
  gotofirst("XHAUSBNK")
  if (&XHAUSBNK.SWIFT_BIC = "") or (&XHAUSBNK.IBAN = "") then
    erg = messagebox("In der angegebenen Hausbank fehlen Zahlungsverkehr Informationen.", 0)
    end
  end if

  if (@beleg_von <> "") and (@beleg_bis <> "") then
    setindex("WBELSTM", "belnummer")
  else
    setindex("WBELSTM", "DATUM_I")
  end if
  setrangestart("WBELSTM")
  if (@beleg_von <> "") and (@beleg_bis <> "") then
    setrangestart("WBELSTM", "bel_nummer", @beleg_von)
    setrangeend("WBELSTM", "bel_nummer", @beleg_bis)
  end if
  if (@datum_von <> 0) and (@datum_bis <> 0) then
    setrangestart("WBELSTM", "datum", @datum_von)
    setrangeend("WBELSTM", "datum", @datum_bis)
  end if
  if @belegdef <> 0 then
    setfilter("WBELSTM", "BELDEF_NUM = " + @belegdef)
  end if
  if (@adresse_von <> "") and (@adresse_bis <> "") then
    setfilter("WBELSTM", "ADR_NUMM_R >= " + str$(@adresse_von) + " AND ADR_NUMM_R <= " + str$(@adresse_bis))
  end if
  records = reccount("WBELSTM")
  if edi_konverter <> "EBINTERFACE" then
    firmenstamm_export
  end if

  gotofirst("WBELSTM")
  do while (eof("WBELSTM") = 0) and (abbruch = 0)
    if findkey("wbeldef", "beldef_num", &WBELSTM.beldef_num) = 0 then
      erg = messagebox("Belegdefinition: %1 in Beleg: %2 nicht gefunden!", 2, str$(&WBELSTM.beldef_num), &WBELSTM.bel_nummer)
      goto belstamm_weiter_skip
    end if
    if edi_konverter = "EBINTERFACE" then
      if (&WBELSTM.FW_ISOCODE <> "") and (&WBELSTM.FW_ISOCODE <> "EUR") then
        erg = messagebox("Es können nur Belege in EUR exportiert werden. Fehler in Beleg: %1!", 2, &WBELSTM.bel_nummer)
        goto belstamm_weiter_skip
      end if
      findkey("WVERTRET", "VTR_NUMMER", &WBELSTM.BEARBEITER)
      if (&WBELSTM.BEARBEITER = "") or (&WVERTRET.E_MAIL = "") or (&WVERTRET.TELEFON = "") then
        erg = messagebox("Es muss ein Bearbeiter mit E-Mail und Telefon angegeben werden. Fehler in Beleg: %1!", 2, &WBELSTM.bel_nummer)
        goto belstamm_weiter_skip
      end if
      if findkey("XADRESSE", "adr_nummer", &WBELSTM.adr_numm_r) = 0 then
        erg = messagebox("Adresse: %1 nicht gefunden!", 2, &WBELSTM.adr_numm_r)
        goto belstamm_weiter_skip
      end if
      if &XADRESSE.PARTNER_NR = "" then 
        erg = messagebox("Die Rechnungsadresse %1 muss die Lieferantennummer im Feld Unsere Nummer enthalten. Fehler in Beleg: %2!", 2, &WBELSTM.adr_numm_r, &WBELSTM.bel_nummer)
        goto belstamm_weiter_skip
      end if
      if (&WBELSTM.REFERENZ = "") then
        erg = messagebox("Es muss eine Referenz angegeben werden. Fehler in Beleg: %1!", 2, &WBELSTM.bel_nummer)
        goto belstamm_weiter_skip
      end if
'PLZ prüfen auf ISO
      findkey( "XLKZ", "LAND_KZ", &WBELSTM.LKZ_L)
      if (&XLKZ.ISO_LKZ = "") then
        erg = messagebox("Es muss ein ISO Landeskennzeichen bei Land %1 angegeben werden. Fehler in Beleg: %2!", 2, &WBELSTM.LKZ_L, &WBELSTM.bel_nummer)
        goto belstamm_weiter_skip
      end if
      findkey( "XLKZ", "LAND_KZ", &WBELSTM.LKZ_A)
      if (&XLKZ.ISO_LKZ = "") then
        erg = messagebox("Es muss ein ISO Landeskennzeichen bei Land %1 angegeben werden. Fehler in Beleg: %2!", 2, &WBELSTM.LKZ_A, &WBELSTM.bel_nummer)
        goto belstamm_weiter_skip
      end if
      findkey( "XLKZ", "LAND_KZ", &WBELSTM.LKZ_R)
      if (&XLKZ.ISO_LKZ = "") then
        erg = messagebox("Es muss ein ISO Landeskennzeichen bei Land %1 angegeben werden. Fehler in Beleg: %2!", 2, &WBELSTM.LKZ_R, &WBELSTM.bel_nummer)
        goto belstamm_weiter_skip
      end if
      findkey( "XLKZ", "LAND_KZ", &XSTMDAT.LKZ)
      if (&XLKZ.ISO_LKZ = "") then
        erg = messagebox("Es muss ein ISO Landeskennzeichen bei Land %1 angegeben werden. Fehler in Beleg: %2!", 2, &XSTMDAT.LKZ, &WBELSTM.bel_nummer)
        goto belstamm_weiter_skip
      end if
'Derzeit keine Rabattfelder im Portal
      if (&WBELSTM.SUM_RAB <> 0) or (&WBELSTM.SUM_RRAB <> 0) then
        erg = messagebox("Dezeit unterstützt das Portal des Bundes keine Rabatte, bitte Beleg mit Nettopreisen erfassen. Fehler in Beleg: %1!", 2, &WBELSTM.bel_nummer)
        goto belstamm_weiter_skip
      end if 
      if (&WBELDEF.BELDEF_NUM <> 4) and (&WBELDEF.BELDEF_NUM <> 5) and (&WBELDEF.BELDEF_NUM <> 21) and (&WBELDEF.BELDEF_NUM <> 22) and (&WBELDEF.BELDEF_NUM <> 23) and (&WBELDEF.BELDEF_NUM <> 24) then
        erg = messagebox("Dezeit unterstützt das Portal des Bundes nur Rechnungen und Gutschriften. Fehler in Beleg: %1!", 2, &WBELSTM.bel_nummer)
        goto belstamm_weiter_skip
      end if
    end if
    if (&WBELDEF.VST_UST = "I") then goto belstamm_weiter_skip
    if (&WBELSTM.ARCHIVART = "M") then goto belstamm_weiter_skip
    if (&WBELSTM.adr_numm_r = "") then goto belstamm_weiter_skip
    akt_record = akt_record + 1
    abbruch = screeninfo( replace("Beleg: %1 wird exportiert!", &WBELSTM.bel_nummer), records, akt_record, 1)
    export_wawibeleg
    belstamm_weiter_skip:
    skip("WBELSTM", 1)
  loop
  if edi_konverter <> "EBINTERFACE" then
    iende
    copy( asciidatei, "\verb\backup\wedi_exp_" + str$(date) + "_" + str$(time) + ".txt")
  end if
  erg = screeninfo("", 0, 0, 0)
  if exportiert > 0 then
    erg = messagebox("Datei erzeugt. Sie finden die Datei im Verzeichnis: %1", 2, edi_xmldatei)
  end if
end sub


sub export_wawibeleg
  fibupersonenkonto = ""
  personenkontoart = ""
  skiped = 0
  belegnummer = 0
  hilf_double = 0.0
  setrangestart("WBELZEIL")
  setrangestart("WBELZEIL", "stm_nummer", &WBELSTM.stm_nummer)
  setrangeend("WBELZEIL", "stm_nummer", &WBELSTM.stm_nummer)

  korrigiere_mwst( "WBELSTM", "WBELZEIL")

  if edi_konverter = "EBINTERFACE" then
    kopf_export_eb
  else
    kopf_export
  end if
  gotofirst("WBELZEIL")
  do while eof("WBELZEIL") = 0
    skiped = 0
    if ((&WBELZEIL.ART <> "A") and (&WBELZEIL.ART <> "K") and (&WBELZEIL.ART <> "H") and (&WBELZEIL.ART <> "P") and (&WBELZEIL.ART <> "R")) or (&WBELZEIL.netto = 0) or (&WBELZEIL.BELDEF_ZUS > 0) or (upper$(&WBELZEIL.fibumodell)="DUMMY") then
      skiped = 1
      goto bz_weiter_skip
    end if
    if edi_konverter = "EBINTERFACE" then
      zeilen_export_eb
    else
      zeilen_export
    end if   
  bz_weiter_skip:
    skip("WBELZEIL", 1)
  loop
  if edi_konverter = "EBINTERFACE" then
    fuss_export_eb
  end if
  &WBELSTM.GEDRUCKT = &WBELSTM.GEDRUCKT + 1
  store( "WBELSTM")
end sub


sub kopf_export
dim hilf as string
  hilf = "BS"  
  hilf = hilf + fillstrright$( &WBELSTM.BEL_NUMMER,  25)
  hilf = hilf + fillstrright$( &WBELSTM.ADR_NUMM_A, 25)
  hilf = hilf + fillstrright$( &WBELSTM.NAME1_A, 50)
  hilf = hilf + fillstrright$( &WBELSTM.NAME2_A, 50)
  hilf = hilf + fillstrright$( &WBELSTM.NAME3_A, 50)
  hilf = hilf + fillstrright$( &WBELSTM.STRASSE_A, 50)
  hilf = hilf + fillstrright$( &WBELSTM.LKZ_A, 3)
  hilf = hilf + fillstrright$( &WBELSTM.PLZ_A, 15)
  hilf = hilf + fillstrright$( &WBELSTM.ORT_A, 30)
  hilf = hilf + fillstrright$( &WBELSTM.PARTNER_A, 30)
  hilf = hilf + fillstrright$( &WBELSTM.ADR_NUMM_R, 25)
  hilf = hilf + fillstrright$( &WBELSTM.NAME1_R, 50)
  hilf = hilf + fillstrright$( &WBELSTM.NAME2_R, 50)
  hilf = hilf + fillstrright$( &WBELSTM.NAME3_R, 50)
  hilf = hilf + fillstrright$( &WBELSTM.STRASSE_R, 50)
  hilf = hilf + fillstrright$( &WBELSTM.LKZ_R, 3)
  hilf = hilf + fillstrright$( &WBELSTM.PLZ_R, 15)
  hilf = hilf + fillstrright$( &WBELSTM.ORT_R, 30)
  hilf = hilf + fillstrright$( &WBELSTM.PARTNER_R, 30)
  hilf = hilf + fillstrright$( &WBELSTM.ADR_NUMM_L, 25)
  hilf = hilf + fillstrright$( &WBELSTM.NAME1_L, 50)
  hilf = hilf + fillstrright$( &WBELSTM.NAME2_L, 50)
  hilf = hilf + fillstrright$( &WBELSTM.NAME3_L, 50)
  hilf = hilf + fillstrright$( &WBELSTM.STRASSE_L, 50)
  hilf = hilf + fillstrright$( &WBELSTM.LKZ_L, 3)
  hilf = hilf + fillstrright$( &WBELSTM.PLZ_L, 15)
  hilf = hilf + fillstrright$( &WBELSTM.ORT_L, 30)
  hilf = hilf + fillstrright$( &WBELSTM.PARTNER_L, 30)
  hilf = hilf + str$(&WBELSTM.DATUM, 10)
  hilf = hilf + str$(&WBELSTM.LIEFDATUM, 10)
  hilf = hilf + fillstrright$( &WBELSTM.REFERENZ, 30)
  hilf = hilf + fillstrright$( &WBELSTM.ERTEILUNG, 30)
  hilf = hilf + str$(&WBELSTM.SKONTOPRZ1, 20, 2)
  hilf = hilf + str$(&WBELSTM.SKONTOTGE1, 10)
  hilf = hilf + str$(&WBELSTM.SKONTOPRZ2, 10, 2)
  hilf = hilf + str$(&WBELSTM.SKONTOTGE2, 10)
  hilf = hilf + str$(&WBELSTM.ZAHL_ZIEL, 10)
  hilf = hilf + str$(&WBELSTM.RECHRABATT, 20, 2)
  hilf = hilf + fillstrright$( &WBELSTM.STEUERBER, 1)
  hilf = hilf + fillstrright$( &WBELSTM.ART, 15)
  hilf = hilf + fillstrright$( &WBELSTM.FW_ISOCODE, 3)
  hilf = hilf + str$(&WBELSTM.FW_EHT, 20, 2)
  hilf = hilf + str$(&WBELSTM.FW_KURS, 20, 2)
  hilf = hilf + fillstrright$( &WBELSTM.VERSANDART, 10)
  hilf = hilf + str$(&WBELSTM.VERSANDTAR, 10)
  hilf = hilf + fillstrright$( &WBELSTM.ZAHLART, 10)
  hilf = hilf + fillstrright$( &WBELSTM.BELEGLIEF, 20)
  hilf = hilf + fillstrright$( &WBELSTM.PROJEKT_NR, 25)
  hilf = hilf + fillstrright$( &WBELSTM.K_STL, 10)
  hilf = hilf + fillstrright$( &WBELSTM.K_TRG, 10)
  hilf = hilf + fillstrright$( &WBELSTM.BEARBEITER, 25)
  hilf = hilf + fillstrright$( &XADRESSE.EAN_CODE, 25)
  hilf = hilf + str$(&WBELSTM.BELDEF_NUM, 10)
  hilf = hilf + fillstrright$( &XADRESSE.EU_UST_ID, 10)
  ifeld_s( hilf, len(hilf))
  idatensatz

  exportiert = exportiert + 1
end sub

sub firmenstamm_export
dim hilf as string
  hilf = "FS"  
  hilf = hilf + fillstrright$( &XSTMDAT.NAME1, 50)
  hilf = hilf + fillstrright$( &XSTMDAT.NAME2, 50)
  hilf = hilf + fillstrright$( &XSTMDAT.NAME3, 50)
  hilf = hilf + fillstrright$( &XSTMDAT.STRASSE, 50)
  hilf = hilf + fillstrright$( &XSTMDAT.LKZ, 3)
  hilf = hilf + fillstrright$( &XSTMDAT.PLZ, 15)
  hilf = hilf + fillstrright$( &XSTMDAT.ORT, 50)
  hilf = hilf + fillstrright$( &XSTMDAT.TELEFON1, 30)
  hilf = hilf + fillstrright$( &XSTMDAT.TELEFON2, 30)
  hilf = hilf + fillstrright$( &XSTMDAT.TELEFON3, 30)
  hilf = hilf + fillstrright$( &XSTMDAT.TELEFAX, 30)
  hilf = hilf + fillstrright$( &XSTMDAT.E_MAIL, 50)
  hilf = hilf + fillstrright$( &XSTMDAT.HOMEPAGE, 80)
  hilf = hilf + fillstrright$( &XSTMDAT.EU_UST_ID, 15)
  hilf = hilf + fillstrright$( &XSTMDAT.STR_NUMMER, 20)
  hilf = hilf + fillstrright$( &XSTMDAT.REFERAT, 5)
  hilf = hilf + fillstrright$( &XSTMDAT.HRB_NR, 30)
  hilf = hilf + fillstrright$( &XSTMDAT.ARA_NR, 20)
  hilf = hilf + fillstrright$( &XSTMDAT.DVR_NR, 20)
  hilf = hilf + fillstrright$( &XSTMDAT.EAN_CODE, 25)
  hilf = hilf + fillstrright$( &XSTMDAT.ZV_KONTAKT, 30)
  hilf = hilf + fillstrright$( &XSTMDAT.ZV_PERSON, 30)
  hilf = hilf + fillstrright$( &XSTMDAT.ZV_TELEFON, 30)
  hilf = hilf + fillstrright$( &XSTMDAT.ZV_EXPO_NR, 30)
  hilf = hilf + fillstrright$( &XSTMDAT.STA_EXPO_NR, 30)
  hilf = hilf + fillstrright$( &XSTMDAT.STA_AUT_NR, 8)
  hilf = hilf + fillstrright$( &XSTMDAT.STA_PERSON, 30)
  hilf = hilf + fillstrright$( &XSTMDAT.STA_TEL, 30)
  ifeld_s( hilf, len(hilf))
  idatensatz
end sub

sub zeilen_export
dim hilf as string
  hilf = "BZ"  
  hilf = hilf + fillstrright$(&WBELZEIL.POS_NUMMER, 10)
  hilf = hilf + fillstrright$(&WBELZEIL.ART_NUMMER, 25)
  hilf = hilf + fillstrright$(&WBELZEIL.ART_NUMMER, 25)
  hilf = hilf + fillstrright$(&WARTIKEL.EAN_CODE, 25)
'      hilf = hilf + fillstrright$(&WARTIKEL.BEST_NUMMER, 25)  'Derzeit außer Kraft gesetzt, da keine Bestellnummer im Artikelstamm.
  hilf = hilf + fillstrright$(&WBELZEIL.ART_TEXT, 60)
  hilf = hilf + fillstrright$(&WBELZEIL.IHR_TEXT, 50)
  hilf = hilf + str$(&WBELZEIL.MENGE, 20, 2)
  hilf = hilf + fillstrright$(&WBELZEIL.EINHEIT, 10)
  hilf = hilf + str$(&WBELZEIL.AUFMASS1, 20, 2)
  hilf = hilf + str$(&WBELZEIL.AUFMASS2, 20, 2)
  hilf = hilf + str$(&WBELZEIL.AUFMASS3, 20, 2)
  hilf = hilf + str$(&WBELZEIL.PREIS, 20, 2)
  hilf = hilf + str$(&WBELZEIL.RABATT, 20, 2)
  hilf = hilf + str$(&WBELZEIL.MWST_SATZ, 20, 2)
  hilf = hilf + str$(&WBELZEIL.LIEFDATUM, 10)
  hilf = hilf + fillstrright$(&WBELZEIL.PROJEKT_NR, 25)
  hilf = hilf + fillstrright$(&WBELZEIL.K_STL, 10)
  hilf = hilf + fillstrright$(&WBELZEIL.K_ART, 10)
  hilf = hilf + fillstrright$(&WBELZEIL.K_TRG, 10)
  ifeld_s( hilf, len(hilf))
  idatensatz
end sub


sub kopf_export_eb
dim doktyp as string
dim kop as string

  betragnetto = 0.0
  betragbrutto = 0.0

  for i = 1 to 5
    mwst_satz(i) = -1.0
    betrnetto(i) = 0.0
    betrbrutto(i) = 0.0
  next

  dateiname = replace( edi_xmldatei, gendateiname( &WBELSTM.BEL_NUMMER))

'<https://test.erb.gv.at/index.jsp?p=info_channel_explanation&ebi41>
'
'DocumentType: Dient der Angabe des Rechnungstyps. MUSS einer der folgenden Strings sein: 
'  Invoice (Rechnung)
'  InvoiceForAdvancePayment (Vorauszahlung)
'  InvoiceForPartialDelivery (Teilrechnung) 
'  FinalSettlement (Endabrechnung)
'  CreditMemo (Gutschrift)
'
'ManualProcessing: ist dieses optionale Attribut auf true gesetzt, signalisiert der Rechnungssteller, dass die Rechnung beim Empfänger manuell überprüft werden 
'soll bevor eine automatische Verarbeitung erfolgt. Ülicherweise ist dies der Fall, wenn in Textfeldern Nebenabsprachen gemacht werden. Beispielsweise sollte 
'auch im Falle einer Dauerrechnung dieses Attribut auf true gesetzt
'  wird derzeit nicht verwendet
'
'IsDuplicate: zeigt an, ob es sich um eine Rechnungskopie handelt oder nicht.

  if (&WBELDEF.BELDEF_NUM = 4) then
    doktyp = "Invoice"       
  end if
  if (&WBELDEF.BELDEF_NUM = 5) then
    doktyp = "CreditMemo"
  end if
  if (&WBELDEF.BELDEF_NUM = 21) then
    doktyp = "InvoiceForAdvancePayment"       
  end if
  if (&WBELDEF.BELDEF_NUM = 22) or (&WBELDEF.BELDEF_NUM = 23) then
    doktyp = "InvoiceForPartialDelivery"       
  end if
  if (&WBELDEF.BELDEF_NUM = 24) then
    doktyp = "FinalSettlement"       
  end if

  kop = "false"
  if (&WBELSTM.GEDRUCKT > 0) and (@kopietext = 1) then 
    kop = "true"
  end if

  schreibezeile( "<?xml version=" + chr$(34) + "1.0" + chr$(34) + "?>")
'  schreibezeile( "<Invoice xmlns:xsi=" + chr$(34) + "http://www.w3.org/2001/XMLSchema-instance" + chr$(34) + " xmlns:xsd=" + chr$(34) + "http://www.w3.org/2001/XMLSchema" + chr$(34) + " eb:GeneratingSystem=" + chr$(34) + "GPE AS/1 Amparo" + chr$(34) + " eb:DocumentType=" + chr$(34) + doktyp + chr$(34) + " eb:InvoiceCurrency=" + chr$(34) + "EUR" + chr$(34) + " xmlns:eb=" + chr$(34) + "http://www.ebinterface.at/schema/4p1/" + chr$(34) + " xmlns=" + chr$(34) + "http://www.ebinterface.at/schema/4p1/" + chr$(34) + ">")
  schreibezeile( "<eb:Invoice xmlns:eb=" + chr$(34) + "http://www.ebinterface.at/schema/4p1/" + chr$(34) + " eb:GeneratingSystem=" + chr$(34) + "GPE AS/1 Amparo" + chr$(34) + " eb:DocumentType=" + chr$(34) + doktyp + chr$(34) + " eb:InvoiceCurrency=" + chr$(34) + "EUR" + chr$(34) + " eb:Language=" + chr$(34) + "ger" + chr$(34) + " eb:IsDuplicate=" + chr$(34) + kop + chr$(34) + ">")
  schreibezeile( "  <eb:InvoiceNumber>" + fxmltext( &WBELSTM.BEL_NUMMER, 0) + "</eb:InvoiceNumber>")
  schreibezeile( "  <eb:InvoiceDate>" + fxmldatum( &WBELSTM.DATUM) + "</eb:InvoiceDate>")
  schreibezeile( "  <eb:Delivery>")
  schreibezeile( "    <eb:DeliveryID>" + fxmltext( &WBELSTM.BEL_NUMMER, 0) + "</eb:DeliveryID>")
  if &WBELSTM.LIEFDATUMB <> 0 then 
    schreibezeile( "    <eb:Period>")
    schreibezeile( "      <eb:FromDate>" + fxmldatum(&WBELSTM.LIEFDATUM) + "</eb:FromDate>")
    schreibezeile( "      <eb:ToDate>" + fxmldatum(&WBELSTM.LIEFDATUMB) + "</eb:ToDate>")
    schreibezeile( "    </eb:Period>")
  else
    schreibezeile( "    <eb:Date>" + fxmldatum(&WBELSTM.LIEFDATUM) + "</eb:Date>")
  end if
  if &WBELSTM.NAME1_L <> "" then 
    schreibezeile( "    <eb:Address>")
    schreibezeile( "      <eb:Name>" + fxmltext( &WBELSTM.NAME1_L + " " + &WBELSTM.NAME2_L + " " + &WBELSTM.NAME3_L, 0) + "</eb:Name>")
    schreibezeile( "      <eb:Street>" + fxmltext( &WBELSTM.STRASSE_L, 0) + "</eb:Street>")
    schreibezeile( "      <eb:Town>" + fxmltext( &WBELSTM.ORT_L, 0) + "</eb:Town>")
    schreibezeile( "      <eb:ZIP>" + fxmltext( &WBELSTM.PLZ_L, 0) + "</eb:ZIP>")
    findkey( "XLKZ", "LAND_KZ", &WBELSTM.LKZ_L)
    schreibezeile( "      <eb:Country eb:CountryCode=" + chr$(34) + &XLKZ.ISO_LKZ + chr$(34) + ">" + fxmltext( &XLKZ.LAND, 0) + "</eb:Country>")
    schreibezeile( "      <eb:Contact>" + fxmltext( &WBELSTM.PARTNER_L, 0) + "</eb:Contact>")
    schreibezeile( "    </eb:Address>")
  else
    schreibezeile( "    <eb:Address>")
    schreibezeile( "      <eb:Name>" + fxmltext( &WBELSTM.NAME1_A + " " + &WBELSTM.NAME2_A + " " + &WBELSTM.NAME3_A, 0) + "</eb:Name>")
    schreibezeile( "      <eb:Street>" + fxmltext( &WBELSTM.STRASSE_A, 0) + "</eb:Street>")
    schreibezeile( "      <eb:Town>" + fxmltext( &WBELSTM.ORT_A, 0) + "</eb:Town>")
    schreibezeile( "      <eb:ZIP>" + fxmltext( &WBELSTM.PLZ_A, 0) + "</eb:ZIP>")
    findkey( "XLKZ", "LAND_KZ", &WBELSTM.LKZ_A)
    schreibezeile( "      <eb:Country eb:CountryCode=" + chr$(34) + &XLKZ.ISO_LKZ + chr$(34) + ">" + fxmltext( &XLKZ.LAND, 0) + "</eb:Country>")
    schreibezeile( "      <eb:Contact>" + fxmltext( &WBELSTM.PARTNER_A, 0) + "</eb:Contact>")
    schreibezeile( "    </eb:Address>")
  end if
  schreibezeile( "  </eb:Delivery>")
  schreibezeile( "  <eb:Biller>")
  schreibezeile( "    <eb:VATIdentificationNumber>" + fxmltext( &XSTMDAT.EU_UST_ID, 0) + "</eb:VATIdentificationNumber>")
  schreibezeile( "    <eb:Address>")
  schreibezeile( "      <eb:Name>" + fxmltext( &XSTMDAT.NAME1 + " " + &XSTMDAT.NAME2 + " " + &XSTMDAT.NAME3, 0) + "</eb:Name>")
  schreibezeile( "      <eb:Street>" + fxmltext( &XSTMDAT.STRASSE, 0) + "</eb:Street>")
  schreibezeile( "      <eb:Town>" + fxmltext( &XSTMDAT.ORT, 0) + "</eb:Town>")
  schreibezeile( "      <eb:ZIP>" + fxmltext( &XSTMDAT.PLZ, 0) + "</eb:ZIP>")
  findkey( "XLKZ", "LAND_KZ", &XSTMDAT.LKZ)
  schreibezeile( "      <eb:Country eb:CountryCode=" + chr$(34) + &XLKZ.ISO_LKZ + chr$(34) + ">" + fxmltext( &XLKZ.LAND, 0) + "</eb:Country>")
  schreibezeile( "      <eb:Phone>" + fxmltext( &WVERTRET.TELEFON, 0) + "</eb:Phone>")
  schreibezeile( "      <eb:Email>" + fxmltext( &WVERTRET.E_MAIL, 0) + "</eb:Email>")
  schreibezeile( "      <eb:Contact>" + fxmltext( &WVERTRET.VTR_NUMMER, 0) + "</eb:Contact>")
  schreibezeile( "    </eb:Address>")
  schreibezeile( "    <eb:InvoiceRecipientsBillerID>" + fxmltext( &XADRESSE.PARTNER_NR, 0) + "</eb:InvoiceRecipientsBillerID>")    
  schreibezeile( "  </eb:Biller>")
  schreibezeile( "  <eb:InvoiceRecipient>")
  if &XADRESSE.EU_UST_ID <> "" then
    schreibezeile( "    <eb:VATIdentificationNumber>" + fxmltext( &XADRESSE.EU_UST_ID, 0) + "</eb:VATIdentificationNumber>")
  else
    schreibezeile( "    <eb:VATIdentificationNumber>" + fxmltext( "ATU00000000", 0) + "</eb:VATIdentificationNumber>")
  end if
  schreibezeile( "    <eb:OrderReference>")
  schreibezeile( "      <eb:OrderID>" + fxmltext( &WBELSTM.REFERENZ, 50) + "</eb:OrderID>")
'  schreibezeile( "      <eb:ReferenceDate>2013-11-04</eb:ReferenceDate>")              
  schreibezeile( "    </eb:OrderReference>")
  schreibezeile( "    <eb:Address>")
  schreibezeile( "      <eb:Name>" + fxmltext( &WBELSTM.NAME1_R + " " + &WBELSTM.NAME2_R + " " + &WBELSTM.NAME3_R, 0) + "</eb:Name>")
  schreibezeile( "      <eb:Street>" + fxmltext( &XSTMDAT.STRASSE, 0) + "</eb:Street>")
  schreibezeile( "      <eb:Town>" + fxmltext( &WBELSTM.ORT_R, 0) + "</eb:Town>")
  schreibezeile( "      <eb:ZIP>" + fxmltext( &WBELSTM.PLZ_R, 0) + "</eb:ZIP>")
  findkey( "XLKZ", "LAND_KZ", &WBELSTM.LKZ_R)
  schreibezeile( "      <eb:Country eb:CountryCode=" + chr$(34) + &XLKZ.ISO_LKZ + chr$(34) + ">" + fxmltext( &XLKZ.LAND, 0) + "</eb:Country>")
  schreibezeile( "      <eb:Email>" + fxmltext( &XADRESSE.E_MAIL, 0) + "</eb:Email>")
  schreibezeile( "      <eb:Contact>" + fxmltext( &WBELSTM.PARTNER_R, 0) + "</eb:Contact>")
  schreibezeile( "    </eb:Address>")
  schreibezeile( "    <eb:BillersInvoiceRecipientID>" + fxmltext( &WBELSTM.ADR_NUMM_R, 0) + "</eb:BillersInvoiceRecipientID>")
  schreibezeile( "  </eb:InvoiceRecipient>")

  schreibezeile( "  <eb:Details>")
'  schreibezeile( "    <eb:HeaderDescription></eb:HeaderDescription>")   
  schreibezeile( "    <eb:ItemList>")
end sub


sub zeilen_export_eb
  i = 1
  do
    if (&WBELZEIL.MWST_SATZ > 0) and ((mwst_satz(i) = &WBELZEIL.MWST_SATZ) or (mwst_satz(i) < 0)) then
      mwst_satz(i) = &WBELZEIL.MWST_SATZ
      betrnetto(i) = betrnetto(i) + &WBELZEIL.BETRNETTO
      betrbrutto(i) = betrbrutto(i) + &WBELZEIL.BETRBRUTTO
      i = 5 
    end if 
    i = i + 1
  loop while i <= 5
  betragnetto = betragnetto + &WBELZEIL.BETRNETTO
  betragbrutto = betragbrutto + &WBELZEIL.BETRBRUTTO

  schreibezeile( "      <eb:ListLineItem>")
  schreibezeile( "        <eb:PositionNumber>" + posnr( &WBELZEIL.POS_NUMMER) + "</eb:PositionNumber>")
  schreibezeile( "        <eb:Description>" + fxmltext( &WBELZEIL.ART_TEXT, 0) + "</eb:Description>")
  schreibezeile( "        <eb:ArticleNumber eb:ArticleNumberType=" + chr$(34) + "BillersArticleNumber" + chr$(34) + ">" + fxmltext( &WBELZEIL.ART_NUMMER, 0) + "</eb:ArticleNumber>")
  schreibezeile( "        <eb:Quantity eb:Unit=" + chr$(34) + fxmltext( &WBELZEIL.EINHEIT, 0) + chr$(34) + ">" + fxmldez(&WBELZEIL.MENGE) + "</eb:Quantity>")
  schreibezeile( "        <eb:UnitPrice>" + fxmldez(&WBELZEIL.PREIS) + "</eb:UnitPrice>")
'  schreibezeile( "        <eb:TaxRate eb:TaxCode=" + chr$(34) + ustcode(&WBELZEIL.MWST_SATZ) + chr$(34) + ">" + str$(&WBELZEIL.MWST_SATZ) + "</eb:TaxRate>")     
  schreibezeile( "        <eb:VATRate>" + str$(&WBELZEIL.MWST_SATZ) + "</eb:VATRate>")
  if (&WBELZEIL.BETRRAB <> 0) or (&WBELZEIL.BETRRRAB <> 0) then
    schreibezeile( "        <eb:ReductionAndSurchargeListLineItemDetails>")
    if (&WBELZEIL.BETRRAB <> 0) then
      schreibezeile( "          <eb:ReductionListLineItem xsi:type=" + chr$(34) + "eb:ReductionAndSurchargeType" + chr$(34) + ">")
      schreibezeile( "            <eb:BaseAmount>" + fxmldez(&WBELZEIL.BETRNETTO + &WBELZEIL.BETRRAB + &WBELZEIL.BETRRRAB) + "</eb:BaseAmount>")
      schreibezeile( "            <eb:Amount>" + fxmldez(&WBELZEIL.BETRRAB) + "</eb:Amount>")
'      schreibezeile( "            <eb:TaxRate eb:TaxCode=" + chr$(34) + ustcode(&WBELZEIL.MWST_SATZ) + chr$(34) + ">" + str$(&WBELZEIL.MWST_SATZ) + "</eb:TaxRate>")
      schreibezeile( "            <eb:VATRate>" + str$(&WBELZEIL.MWST_SATZ) + "</eb:VATRate>")
      schreibezeile( "          </eb:ReductionListLineItem>")
    end if
    if (&WBELZEIL.BETRRRAB <> 0) then
      schreibezeile( "          <eb:ReductionListLineItem xsi:type=" + chr$(34) + "eb:ReductionAndSurchargeType" + chr$(34) + ">")
      schreibezeile( "            <eb:BaseAmount>" + fxmldez(&WBELZEIL.BETRNETTO + &WBELZEIL.BETRRAB + &WBELZEIL.BETRRRAB) + "</eb:BaseAmount>")
      schreibezeile( "            <eb:Amount>" + fxmldez(&WBELZEIL.BETRRRAB) + "</eb:Amount>")
'      schreibezeile( "            <eb:TaxRate eb:TaxCode=" + chr$(34) + ustcode(&WBELZEIL.MWST_SATZ) + chr$(34) + ">" + str$(&WBELZEIL.MWST_SATZ) + "</eb:TaxRate>")
      schreibezeile( "            <eb:VATRate>" + str$(&WBELZEIL.MWST_SATZ) + "</eb:VATRate>")
      schreibezeile( "          </eb:ReductionListLineItem>")
    end if
    schreibezeile( "        </eb:ReductionAndSurchargeListLineItemDetails>")
  end if
  schreibezeile( "        <eb:LineItemAmount>" + fxmldez(&WBELZEIL.BETRNETTO) + "</eb:LineItemAmount>")
  schreibezeile( "      </eb:ListLineItem>")
end sub


sub fuss_export_eb
  schreibezeile( "    </eb:ItemList>")
  schreibezeile( "  </eb:Details>")

  schreibezeile( "  <eb:Tax>")
  schreibezeile( "    <eb:VAT>")
  for i = 1 to 5 
    if mwst_satz(i) > 0 then
      schreibezeile( "      <eb:VATItem>")
      schreibezeile( "        <eb:TaxedAmount>" + fxmldez( betrnetto(i)) + "</eb:TaxedAmount>")                        
'      schreibezeile( "        <eb:TaxRate eb:TaxCode=" + chr$(34) + ustcode(mwst_satz(i)) + chr$(34) + ">" + str$(mwst_satz(i)) + "</eb:TaxRate>")
      schreibezeile( "        <eb:VATRate>" + str$(mwst_satz(i)) + "</eb:VATRate>")
      schreibezeile( "        <eb:Amount>" + fxmldez( betrbrutto(i)-betrnetto(i)) + "</eb:Amount>")                    
      schreibezeile( "      </eb:VATItem>")
    end if
  next
  schreibezeile( "    </eb:VAT>")
  schreibezeile( "  </eb:Tax>")
  schreibezeile( "  <eb:TotalGrossAmount>" + fxmldez(betragbrutto) + "</eb:TotalGrossAmount>")
  schreibezeile( "  <eb:PayableAmount>" + fxmldez(betragbrutto) + "</eb:PayableAmount>")
'  schreibezeile( "  <eb:PaymentMethod xsi:type=" + chr$(34) + "eb:UniversalBankTransactionType" + chr$(34) + ">")
  schreibezeile( "  <eb:PaymentMethod>")
  schreibezeile( "    <eb:UniversalBankTransaction>")
  schreibezeile( "      <eb:BeneficiaryAccount>")
  schreibezeile( "        <eb:BankName>" + fxmltext( &XHAUSBNK.NAME, 0) + "</eb:BankName>")
  schreibezeile( "        <eb:BIC>" + ltrim$(rtrim$( &XHAUSBNK.SWIFT_BIC)) + "</eb:BIC>")
  schreibezeile( "        <eb:IBAN>" + ltrim$(rtrim$( &XHAUSBNK.IBAN)) + "</eb:IBAN>")
  schreibezeile( "      </eb:BeneficiaryAccount>")
  schreibezeile( "      <eb:PaymentReference>" + fxmltext( &WBELSTM.BEL_NUMMER, 0) + "</eb:PaymentReference>")
  schreibezeile( "    </eb:UniversalBankTransaction>")
  schreibezeile( "  </eb:PaymentMethod>")
  schreibezeile( "  <eb:PaymentConditions>")
  schreibezeile( "    <eb:DueDate>" + fxmldatum(dateafter( &WBELSTM.DATUM, &WBELSTM.ZAHL_ZIEL)) + "</eb:DueDate>")
  if &WBELSTM.SKONTOPRZ1 <> 0 then
    schreibezeile( "    <eb:Discount>")
    schreibezeile( "    <eb:PaymentDate>" + fxmldatum(dateafter( &WBELSTM.DATUM, &WBELSTM.SKONTOTGE1)) + "</eb:PaymentDate>")
    schreibezeile( "    <eb:Percentage>" + fxmldez(&WBELSTM.SKONTOPRZ1) + "</eb:Percentage>")
    schreibezeile( "    </eb:Discount>")
  end if
  if &WBELSTM.SKONTOPRZ2 <> 0 then
    schreibezeile( "    <eb:Discount>")
    schreibezeile( "    <eb:PaymentDate>" + fxmldatum(dateafter( &WBELSTM.DATUM, &WBELSTM.SKONTOTGE2)) + "</eb:PaymentDate>")
    schreibezeile( "    <eb:Percentage>" + fxmldez(&WBELSTM.SKONTOPRZ2) + "</eb:Percentage>")
    schreibezeile( "    </eb:Discount>")
  end if
  schreibezeile( "  </eb:PaymentConditions>")
  schreibezeile( "</eb:Invoice>")

  text = "EOF"
  zeilenzaehler = zeilenzaehler + 1
  writetext( dateiname, zeilenzaehler, text)
  writetext( dateiname, 0, "")

  exportiert = exportiert + 1
end sub


sub schreibezeile( s as string)
  zeilenzaehler = zeilenzaehler + 1
  writetext( dateiname, zeilenzaehler, s)
end sub


function posnr( p as string) as string
dim i as long
  i = trunc( val( p))
  posnr = str$( i)
end function


'function ustcode( proz as long) as string
'  ustcode = "AT"
'  if proz = 20 then ustcode = ustcode + "022"
'  if proz = 10 then ustcode = ustcode + "029"
'  if proz = 12 then ustcode = ustcode + "025"
'  if proz = 16 then ustcode = ustcode + "035"
'end function

'auch in \BAS\BIMSDAT
function gendateiname( text as string) as string
dim i, laenge as long
dim text2 as string
dim ch as string
  text = ltrim$(rtrim$(text))
  text2 = ""
  laenge = len(text)
  for i = 1 to laenge
    ch = mid$(text, i, 1)
    if ch = "[" then ch = "_"
    if ch = "\" then ch = "_"
    if ch = "/" then ch = "_"
    if ch = ":" then ch = "_"
    if ch = "?" then ch = "_"
    if ch = "*" then ch = "_"
    if ch = "^" then ch = "_"
    if ch = "<" then ch = "_"
    if ch = ">" then ch = "_"
    if ch = "|" then ch = "_"
    if ch = "]" then ch = "_"
    if ch = chr$(34) then ch = "_"
    if (asc(ch) < 32) or (asc(ch) > 127) then ch = "_"
    text2 = text2 + ch
  next
  gendateiname = text2
end function

'$INCLUDE \BAS\XADR_ART
'$INCLUDE \BAS\XFWPRC
'$INCLUDE \BAS\WIBELDEF
'$INCLUDE \BAS\WIBELEG
'$INCLUDE \BAS\WEDI_TRX
'$INCLUDE \BAS\WEDI_AVE
'$INCLUDE \BAS\XIIMPEXP
'$INCLUDE \BAS\XIXML
