'DESCRIPTION: Wawi: Dlg: Belegumwandlung
'USEDBY: WAWI

dim erg, bookmark, archivieren, alleliefern as long
dim wnderg as string
dim preis as double
dim neuepreise, oldcursor, abbruch1, zaehler, saetze as long
dim aktuelle_belegdef, aktuelle_stammdaten, aktuelle_loeschen, aktuelle_archiv, def as long
dim beldefnummer, direktsenden, schleifebeenden, referenztext_erzeugt as long
dim tempmenge, position, manposition as double
dim aktuelle_belegtext, erstererstellterbeleg as string
dim beleginfobox, von_inet, beldefnummer_auftrag as long
dim aktuelle_belegdef_neu as long
dim aktuelle_belegtext_neu as long 
dim serienwandlung, i, in_fremdwaehrung as long
dim s, chw, vst_ust as string
dim ungueltige_adresse, uebernahme_serie_charge, reduz_serie_charge as long
dim adressanschrift as string
dim senden_an_projekt_nr as long
dim senden_an_aufteilung as long
dim periodische_belege as long

dim ZPBeldefziel as long
dim ZPgefunden as long
dim sum_ZPBeleg, sum_ZPAbz, sum_ZPAnz, sum_ZPAnzkum as double
dim anz_ZPTR as long
dim zlr_TR, zlr_TSR as long
dim anz_kein_beleg as long
dim anz_SR, anz_SR2 as long
dim letzte_Beldef as long
dim letzte_Baupos as double

dim hilf as long

dim fw_einheiten, kurs as double
dim fw_berechnung as string

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

'eventuell hängende Tabellen speichern
  erg = rts( "refresh")

  opentable( "XADRESSE")
  openmis
  opentable( "WBELSTM", "WBELSTM_MARKE", "MEMORY")
  opentable( "WARTIKEL", "ARTIKEL")
  opentable( "WRESS", "RESS")
  openserien
  openchargen
  adressanschrift = "ADR_NUMM_A"
  fw_berechnung = fw_getberechnung
end

@senden_an_von_inet:
  beldefnummer_auftrag = trunc(val(global1))
  global1 = ""
  if beldefnummer_auftrag = 0 then beldefnummer_auftrag = 2

'eventuell hängende Tabellen speichern
  erg = rts( "refresh")

  beleginfobox = 1
  von_inet = 1
  direktsenden = 1

  beldefnummer = beldefnummer_auftrag

  opentable( "XADRESSE")
  openmis
  opentable( "WBELSTM", "WBELSTM_MARKE", "MEMORY")
  opentable( "WARTIKEL", "ARTIKEL")
  opentable( "WRESS", "RESS")

  opentable( "IBELSTM")

'alter Beleg, Vorschlag
  fw_berechnung = fw_getberechnung
  opentable( "IBELSTM", "BELSTAMM")
  linktablelocal( "BELSTAMM", "IBELSTM.STM_NUMMER")
  aktuelle_belegdef = 1
  def = belegdefinition( aktuelle_belegdef, 0)
  aktuelle_loeschen = 1
  aktuelle_belegtext = &BELEGDEF.BELDEF_TXT

  opentable( "IBELZEIL", "BELZEILE")
  setindex( "BELZEILE", "STM_POSNUMMER1")

  zaehler = 0 
  saetze = reccount( "IBELSTM")
  if saetze = 0 then 
    erg = messagebox( "Keine Belege vorhanden.", 2)
    return
  end if 

  gotofirst( "IBELSTM")
  do while eof( "IBELSTM") = 0

    setrangestart( "BELZEILE", "STM_NUMMER", &BELSTAMM.STM_NUMMER, "POS_NR", "")
    setrangeend( "BELZEILE", "STM_NUMMER", &BELSTAMM.STM_NUMMER, "POS_NR", chr$(255))
    if reccount("BELZEILE") > 0 then

'neuer Beleg
      opentable( "WBELSTM", "BELSTAMM1")
      setautofield( "BELSTAMM1", "STM_NUMMER", 0)
      appendblank( "BELSTAMM1")

      &BELSTAMM1.DATUM = DATE
      if checkdatum( &BELSTAMM1.DATUM) = 0 then 
        abbruch1 = screeninfo ( "", 0, 0, 0)
        return
      end if
      if &BELSTAMM.LIEFDATUM = 0 then 
        &BELSTAMM1.LIEFDATUM = &BELSTAMM1.DATUM
      else
        &BELSTAMM1.LIEFDATUM = &BELSTAMM.LIEFDATUM
      end if 

      def = belegdefinition( beldefnummer, 0)
      belegnummer( "BELSTAMM1", "BELEGDEF")
      if valid = 0 then return
      store( "BELSTAMM1")

      if erstererstellterbeleg = "" then
        erstererstellterbeleg = &BELSTAMM1.BEL_NUMMER
      end if  

      &BELSTAMM1.ADR_NUMM_A = &IBELSTM.ADR_NUMM_A
      auftragsadresse( "BELSTAMM1")
      if &BELSTAMM.ERTEILUNG = "" then
        &BELSTAMM1.ERTEILUNG = "per E-Mail"
      else
        &BELSTAMM1.ERTEILUNG = &BELSTAMM.ERTEILUNG
      end if
      if &BELSTAMM.REFERENZ = "" then
        &BELSTAMM1.REFERENZ = replace( "am &1", &IBELSTM.DATUM)
      else
        &BELSTAMM1.REFERENZ = &BELSTAMM.REFERENZ
      end if

      &BELSTAMM1.ZAHLART = &IBELSTM.ZAHLART

      if &IBELSTM.NAME1_L <> "" then
        &BELSTAMM1.NAME1_L = &IBELSTM.NAME1_L
        &BELSTAMM1.NAME2_L = &IBELSTM.NAME2_L
        &BELSTAMM1.NAME3_L = &IBELSTM.NAME3_L
        &BELSTAMM1.STRASSE_L = &IBELSTM.STRASSE_L
        &BELSTAMM1.PLZ_L = &IBELSTM.PLZ_L
        &BELSTAMM1.ORT_L = &IBELSTM.ORT_L
        &BELSTAMM1.LKZ_L = &IBELSTM.LKZ_L
      end if 

      aktuelle_stammdaten = 0
      aktuelle_archiv = 0
      schleifebeenden = 0 

      appendblank( "WBELSTM_MARKE")
      &WBELSTM_MARKE.STM_NUMMER = &BELSTAMM.STM_NUMMER
      &WBELSTM_MARKE.MARKE = "*"
      store( "WBELSTM_MARKE")

      gosub ok

      emptytable( "WBELSTM_MARKE")

      if valid = 0 then
        return 
      end if
    end if
  
    skip( "IBELSTM", 1)
  loop
  abbruch1 = screeninfo ( "", 0, 0, 0)
  if erstererstellterbeleg <> "" then
    erg = messagebox( "Belege von %1 bis %2 erstellt.|Übernahmezeilen werden gelöscht.", 2, erstererstellterbeleg, &BELSTAMM1.BEL_NUMMER)
  else
    erg = messagebox( "Es konnten keine Belege erstellt werden.|Es sind keine Bestellzeilen vorhanden.", 2)
  end if
return

@senden_an_projekt:
  senden_an_projekt_nr = 1
@senden_an:
  valid = 1
'eventuell hängende Tabellen speichern
  erg = rts( "refresh")
  
  opentable( "WBELSTM", "BELSTAMM")
  erg = linktable( "BELSTAMM", "BELEGERF.WBELSTM.STM_NUMMER")
  writeglobal( "WBELDEFWLINK", "S " + str$(&BELSTAMM.BELDEF_NUM))

  wnderg = window( "\WND\WBELDEA1")
  if wnderg = "" then return
  if senden_an_projekt_nr = 1 then
    if dialog("\DLG\WPROJAW") = 0 then return  
  end if    
  direktsenden = 1
  beldefnummer = val(wnderg)

  aktuelle_stammdaten = 1
  aktuelle_archiv = 0
  opentable( "XADRESSE")
  openmis
  opentable( "WBELSTM", "WBELSTM_MARKE", "MEMORY")
  opentable( "WARTIKEL", "ARTIKEL")
  opentable( "WRESS", "RESS")
  openserien
  openchargen
  fw_berechnung = fw_getberechnung

'alter Beleg
  aktuelle_belegdef = &BELSTAMM.BELDEF_NUM
  aktuelle_archiv = &BELSTAMM.ARCHIVART <> ""
  def = belegdefinition( aktuelle_belegdef, 0)
  aktuelle_loeschen = &BELEGDEF.UMWANDLUNG = "L"
'falls der Belegstamm nicht in der gleichen Gruppe dann duplizieren
  if checkbeleggruppe( aktuelle_belegdef, beldefnummer) = 0 then
    aktuelle_loeschen = 0
  end if
'falls der Belegstamm archiviert ist dann duplizieren
  if &BELSTAMM.ARCHIVART <> "" then
    aktuelle_loeschen = 0
  end if
  aktuelle_belegtext = &BELEGDEF.BELDEF_TXT

  uebernahme_serie_charge = 1
  neuepreise = 0
  if (checkbeleggruppe( aktuelle_belegdef, beldefnummer) = 0) and (reccount( "BELSTAMM") > 0) then
    uebernahme_serie_charge = 0
    erg = messagebox( "Zielbeleg und Quellbeleg entsprechen verschiedenen Beleggruppen.|Möchten Sie die Preise neu berechnen?", 23)
    if erg = 0 then
      valid = 0
      return
    end if
    if erg = 4 then
      neuepreise = 1
    end if
  end if 

  opentable( "WBELZEIL", "BELZEILE")
  setindex( "BELZEILE", "STM_POSNUMMER")
  if check_belegdefzus( &BELSTAMM.BELDEF_NUM, 1) then
    setfilter( "BELZEILE", "BELDEF_ZUS = 1")
  else
    setfilter( "BELZEILE", "BELDEF_ZUS = 0")
  end if

  gosub onselectrecord

  if check_bestandpruefung(aktuelle_belegdef, beldefnummer) = 1 then
    def = belegdefinition( beldefnummer, 0)
    bestandpruefung( 1)
    if valid = 0 then
      return
    end if
  end if

'neuer Beleg
  opentable( "WBELSTM", "BELSTAMM1")
  setautofield( "BELSTAMM1", "STM_NUMMER", 0)
  appendblank( "BELSTAMM1")
  def = belegdefinition( beldefnummer, 0)
  belegnummer( "BELSTAMM1", "BELEGDEF")
  if valid = 0 then return
  store( "BELSTAMM1")

'wg. Refresh bei Sybase nicht wirksam hier Tabelle neu öffnen
  if aliasname <> "" then
    closetable( "BELZEILE")
    opentable( "WBELZEIL", "BELZEILE")
    setindex( "BELZEILE", "STM_POSNUMMER")
    if check_belegdefzus( &BELSTAMM.BELDEF_NUM, 1) then
      setfilter( "BELZEILE", "BELDEF_ZUS = 1")
    else
      setfilter( "BELZEILE", "BELDEF_ZUS = 0")
    end if
  end if
  
  gosub okserie

'bei Teilbelegumwandlung alten Beleg offen lassen 
  if senden_an_projekt_nr = 1 then
    aktuelle_loeschen = 0
  end if

  if aktuelle_loeschen = 1 then
    erg = rts( "CLOSE", "BELEGERF")
  end if

  belegauswahl( &BELEGDEF.BELDEF_NUM, &BELSTAMM1.STM_NUMMER)
return

@archivart.oncalccolor:
@fw_isocode.oncalccolor:
@sum_brutto.oncalccolor:
@sum_netto.oncalccolor:
@datum.oncalccolor:
@bel_nummer.oncalccolor:
@adr_nummer.oncalccolor:
@adr_nummer1.oncalccolor:
@adr_nummer2.oncalccolor:
@markierung.oncalccolor:
  bookmark = getbookmark( "WBELSTM_MARKE")
  if findkey("WBELSTM_MARKE", "STM_NUMMER", &BELSTAMM.STM_NUMMER) = 1 then
    if &WBELSTM_MARKE.MARKE = "*" then
      valid = 10
    end if
    if &WBELSTM_MARKE.MARKE = "+" then
      valid = 11
    end if
  end if
  gotobookmark( "WBELSTM_MARKE", bookmark)
return

@belstamm.oncalcfields:
  bookmark = getbookmark( "WBELSTM_MARKE")
  &BELSTAMM.MARKIERUNG = ""
  if findkey("WBELSTM_MARKE", "STM_NUMMER", &BELSTAMM.STM_NUMMER) = 1 then
    if &WBELSTM_MARKE.MARKE = "*" then
      &BELSTAMM.MARKIERUNG = "***"
    end if
  end if
  gotobookmark( "WBELSTM_MARKE", bookmark)
return

@belegumwandlung.oncreate:
  @adressanschrift = "AUFTRAG"
  @adresse = &BELSTAMM1.ADR_NUMM_A
  @belegdef = hole_erste_beldef( hole_beldef_filter( "U ", str$(&BELSTAMM1.BELDEF_NUM)))
  if @belegdef = 0 then
    if (&BELSTAMM1.BELDEF_NUM > 1) and (&BELSTAMM1.BELDEF_NUM <= 10) then
      @belegdef = &BELSTAMM1.BELDEF_NUM - 1
    else 
      @belegdef = 1
    end if
  end if
  @stammdaten = 1
  setrange
return

@belegdef.onselect:
  if serienwandlung = 1 then
    writeglobal( "WBELDEFWLINK", "SU") 
    return
  end if
  writeglobal( "WBELDEFWLINK", "U " + str$(&BELSTAMM1.BELDEF_NUM))
return

@serienumwandlung.oncreate:
  @adressanschrift = "AUFTRAG"
  @belege_drucken = 0
  @adresse = ""
  @adresse_bis = ""
  @belegdef = hole_erste_beldef( hole_beldef_filter( "SU", ""))
  if @belegdef = 0 then
    @belegdef = 1
  end if
  @belegdef_neu = hole_erste_beldef( hole_beldef_filter( "SU", str$( @belegdef)))
  if @belegdef_neu = 0 then
    @belegdef_neu = 2
  end if
  @stammdaten = 1
  enable( @stammdaten, 2)
  setrangeserie
  serienwandlung = 1
  periodische_belege = 0
return

@belegdef_neu.onselect:
  writeglobal( "WBELDEFWLINK", "SU" + str$( @belegdef))
return

@belegumwandlung.onclose:
@serienumwandlung.onclose:
  gosub abbruch
return

@stammdaten.onexitchanged:
  aktuelle_stammdaten = @stammdaten
return

@belegdef.onexitchanged:
  if serienwandlung = 1 then
    if check_beldef( hole_beldef_filter( "SU", ""), @belegdef) = 0 then
      valid = 0
      return
    end if
  end if
  if serienwandlung = 0 then  
    if check_beldef( hole_beldef_filter( "U ", ""), @belegdef) = 0 then
      valid = 0
      return
    end if
  end if
  if serienwandlung = 1 then
    @belegdef_neu = hole_erste_beldef( hole_beldef_filter( "SU", str$( @belegdef)))
    if @belegdef_neu = 0 then
      @belegdef_neu = 2
    end if
  end if
  gosub belegdef_onexitchanged
return

@belegdef_neu.onexitchanged:
  if serienwandlung = 1 then
    if check_beldef( hole_beldef_filter( "SU", str$( @belegdef)), @belegdef_neu) = 0 then
      valid = 0
      return
    end if
  end if
  if serienwandlung = 0 then  
    if check_beldef( hole_beldef_filter( "U ", str$( @belegdef)), @belegdef_neu) = 0 then
      valid = 0
      return
    end if
  end if
  gosub belegdef_neu_onexitchanged
return  

belegdef_onexitchanged:  
belegdef_neu_onexitchanged:
@adresse.onexitchanged:
@adresse_bis.onexitchanged:
@datum_von.onexitchanged:
@datum_bis.onexitchanged:
@adressanschrift.onexitchanged:
  if serienwandlung = 0 then
    gosub abbruch
    setze_art
    setrange
  else
    gosub abbruch
    setze_art_serie
    setrangeserie
  end if
return

@loeschen.onexit:
@duplizieren.onexit:
  aktuelle_loeschen = @loeschen
return

@archiv.onclick:
  aktuelle_archiv = @archiv
  if aktuelle_archiv = 1 then
    gosub abbruch
    setrangestart( "BELSTAMM", adressanschrift, @adresse, "BELDEF_NUM", aktuelle_belegdef, "ARCHIVART", "")
    setrangeend( "BELSTAMM", adressanschrift, @adresse, "BELDEF_NUM", aktuelle_belegdef, "ARCHIVART", "Z")
    if (@adresse = getfield( "BELSTAMM1", adressanschrift)) and (aktuelle_belegdef = &BELSTAMM1.BELDEF_NUM) then
      setfilter( "BELSTAMM", replace( "STM_NUMMER <> %1", &BELSTAMM1.STM_NUMMER))
    end if
    aktuelle_loeschen = @loeschen
  else
    setrangestart( "BELSTAMM", adressanschrift, @adresse, "BELDEF_NUM", aktuelle_belegdef, "ARCHIVART", "")
    setrangeend( "BELSTAMM", adressanschrift, @adresse, "BELDEF_NUM", aktuelle_belegdef, "ARCHIVART", " ")
    if (@adresse = getfield( "BELSTAMM1", adressanschrift)) and (aktuelle_belegdef = &BELSTAMM1.BELDEF_NUM) then
      setfilter( "BELSTAMM", replace( "STM_NUMMER <> %1", &BELSTAMM1.STM_NUMMER))
    end if
  end if
return

@belzeile.onrecordchange:
  findfirst( "ARTIKEL", "ART_NUMMER", &BELZEILE.ART_NUMMER)
  @lagernd = str$( &ARTIKEL.BESTAND, 20, 2)
  @erwzugang = str$( &ARTIKEL.ERWZUGANG, 20, 2)
  @erwabgang = str$( &ARTIKEL.ERWABGANG, 20, 2)
  @verfuegbar = str$( &ARTIKEL.BESTAND - &ARTIKEL.ERWABGANG + &ARTIKEL.ERWZUGANG, 20, 2)
  if &BELZEILE.POS_NR = 0 then
    enable( @ganzer_beleg, 0)
    enable( @alle_belege, 0)
  else
    enable( @ganzer_beleg, 1)
    enable( @alle_belege, 1)
  end if
return

@belzeile.onexit:
  gosub belzeile_onbeforepost
  store( "BELZEILE")
  gosub belzeile_onafterpost
return

@belzeile.onbeforeinsert:
@belzeile.onbeforedelete:
  valid = 0
return

@ganzer_beleg.onpress:
onselectrecord:
@belstamm.onselectrecord:
  enable( "BELZEILE", 0)
  if findkey("WBELSTM_MARKE", "STM_NUMMER", &BELSTAMM.STM_NUMMER) = 0 then
    appendblank( "WBELSTM_MARKE")
    &WBELSTM_MARKE.STM_NUMMER = &BELSTAMM.STM_NUMMER
    &WBELSTM_MARKE.MARKE = "*"
    store( "WBELSTM_MARKE")
    liefermenge_setzen
  else
    liefermenge_loeschen
    deleterecord( "WBELSTM_MARKE")
  end if
  enable( "BELZEILE", 1)
  erg = rts( "refresh", "BELZEILE")
  erg = rts( "refresh", "BELSTAMM")
return

abbruch:
@abbruch.onpress:
  saetze = reccount( "WBELSTM_MARKE")
  if saetze <> 0 then 
    oldcursor = rts( "cursor", 11)
    enable( "BELZEILE", 0)
    gotofirst( "WBELSTM_MARKE")
    zaehler = 1
    do while eof( "WBELSTM_MARKE") = 0
      abbruch1 = screeninfo ( "Belege werden zurückgesetzt...", saetze, zaehler, 0)
      liefermenge_loeschen
      deleterecord( "WBELSTM_MARKE")  
      zaehler = zaehler + 1
    loop
    enable( "BELZEILE", 1)
    abbruch1 = screeninfo ( "", 0, 0, 0)
    oldcursor = rts( "cursor", oldcursor)
  end if
  periodische_belege = 0
return

@ok.onpress:
  aktuelle_belegtext = @belegtext
'erfordert beldefinition des neuen belegs
  def = belegdefinition( &BELSTAMM1.BELDEF_NUM, 0)
  valid = check_bearbeiten( @belegtext, &BELEGDEF.LOESCHART, count$( &BELEGDEF.NUM_KREIS, -1), "BELSTAMM1")
  if valid = 0 then 
    gosub abbruch
    return
  end if
  if (&BELSTAMM1.ADR_NUMM_A = "") and (aktuelle_stammdaten = 0) then 
    erg = messagebox( "Bei Umwandlung ohne Stammdaten muss der Zielbeleg bereits eine Adresse beinhalten.|Vorgang wird abgebrochen?", 2)
    valid = 0
    return
  end if
ok:

'BELSTAMM = alter Belegstamm
'BELZEILE = alte Belegzeilen
'BELSTAMM1 = neuer Beleg
'BELZEILE1 = neue Belegzeilen

  uebernahme_serie_charge = 1
  neuepreise = 0
  if (checkbeleggruppe( &BELSTAMM.BELDEF_NUM, &BELSTAMM1.BELDEF_NUM) = 0) and (reccount( "BELSTAMM") > 0) then
    uebernahme_serie_charge = 0
    erg = messagebox( "Zielbeleg und Quellbeleg entsprechen verschiedenen Beleggruppen.|Möchten Sie die Preise neu berechnen?", 23)
    if erg = 0 then
      valid = 0
      return
    end if
    if erg = 4 then
      neuepreise = 1
    end if
  end if 

  if (von_inet = 0) and (check_bestandpruefung( &BELSTAMM.BELDEF_NUM, &BELSTAMM1.BELDEF_NUM) = 1) then
    def = belegdefinition( &BELSTAMM1.BELDEF_NUM, 0)
    bestandpruefung( 0)
    if valid = 0 then 
      return
    end if
  end if

  if von_inet = 1 then
    uebernahme_serie_charge = 0
    def = belegdefinition( &BELSTAMM1.BELDEF_NUM, 0)
    valid = 1
    bestandpruefung( 0)
    if valid = 0 then
      return
    end if
  end if 

okserie:

  if beleginfobox = 0 then
    enable( "BELZEILE", 0)
    enable( "BELSTAMM", 0)
    enable( "BELSTAMM1", 0)
    oldcursor = rts( "cursor", 11)
    zaehler = 0 
    saetze = reccount( "WBELSTM_MARKE")
    abbruch1 = screeninfo ( "Belege werden erstellt...", saetze, zaehler, 0)
  end if

  opentable( "WBELZEIL", "BELZEILE1")
  setautofield( "BELZEILE1", "BZ_NUMMER", 0)
  setindex( "BELZEILE1", "STM_POSNUMMER")
  setrangestart( "BELZEILE1", "STM_NUMMER", &BELSTAMM1.STM_NUMMER, "POS_NR", "")
  setrangeend( "BELZEILE1", "STM_NUMMER", &BELSTAMM1.STM_NUMMER, "POS_NR", chr$(255))
  gotolast( "BELZEILE1")
  position = &BELZEILE1.POS_NR
  manposition = val( &BELZEILE1.POS_NUMMER)

  def = belegdefinition( &BELSTAMM1.BELDEF_NUM, 0)

  if direktsenden = 0 then
    gotofirst( "WBELSTM_MARKE")
  end if
  do while (eof( "WBELSTM_MARKE") = 0) and ((eof("WBELSTM_MARKE") = 0) or (bof("WBELSTM_MARKE") = 0)) and (schleifebeenden = 0)
'für direkten aufruf, weil keine Range vorhanden
    zaehler = zaehler + 1

    archivieren = 0
    if direktsenden = 1 then
      schleifebeenden = 1
    end if
    abbruch1 = screeninfo ( "Belege werden erstellt...", saetze, zaehler, 0)

    if findkey("BELSTAMM", "STM_NUMMER", &WBELSTM_MARKE.STM_NUMMER) = 1 then
      setrangestart( "BELZEILE", "STM_NUMMER", &BELSTAMM.STM_NUMMER, "POS_NR", "")
      setrangeend( "BELZEILE", "STM_NUMMER", &BELSTAMM.STM_NUMMER, "POS_NR", chr$(255))
      gotofirst( "BELZEILE")
      archivieren = 1

      if senden_an_projekt_nr = 1 then
        archivieren = 0
      end if

      referenztext_erzeugt = 0

      if aktuelle_stammdaten = 1 then
        if ((eof("BELZEILE1") = 0) or (bof("BELZEILE1") = 0)) and (teste_belstamm = 0) then
          erg = messagebox( "Zielbeleg hat bereits Belegzeilen.|Durch die Übernahme der Stammdaten könnten die alten Zeilen ungültig werden.|Möchten Sie übernehmen?", 23)
          if erg <> 4 then
            gosub abbruch
            goto weiter
          end if
        end if 
        aktuelle_stammdaten = 0
        stammdaten_uebernehmen( "BELSTAMM1", "BELSTAMM")
        opentable( "WLAGER", "LAGER")
        findfirst( "LAGER", "LAG_NUMMER", &BELSTAMM1.LAG_NUMMER)
        if (&LAGER.LAG_NUM_UM <> "") and (&BELSTAMM1.LAG_NUM_UM = "") then 
          &BELSTAMM1.LAG_NUM_UM = &LAGER.LAG_NUM_UM
        end if
      end if

      reduz_serie_charge = 0

      do while eof( "BELZEILE") = 0
'erfordert beldefinition des neuen belegs
        if ((&BELZEILE.LIEFMENGE <> 0) and ((instr(1, &BELEGDEF.ART_ART, &BELZEILE.ART) > 0) or (&BELEGDEF.ART_ART=""))) or (&BELZEILE.ART = "T") or (&BELZEILE.ART = "B") or (&BELZEILE.ART = "S") then
          if (referenztext_erzeugt = 0) and (&BELEGDEF.REF_TEXT <> "") and (von_inet = 0) then
            referenztext_erzeugt = 1
            appendblank( "BELZEILE1")
            position = position + 1
            &BELZEILE1.POS_NR = position
            &BELZEILE1.POS_NUMMER = ""
            &BELZEILE1.ART = "B"
            &BELZEILE1.ART_TEXT = replace( &BELEGDEF.REF_TEXT, aktuelle_belegtext, &BELSTAMM.BEL_NUMMER, &BELSTAMM.DATUM)
            if periodische_belege = 1 then
              &BELZEILE1.ART_TEXT = periodische_belege_text( &BELSTAMM1.PROJEKT_NR)
            end if
            &BELZEILE1.STM_NUMMER = &BELSTAMM1.STM_NUMMER
            &BELZEILE1.DATUM = &BELSTAMM1.DATUM
            &BELZEILE1.FIFODATUM = &BELSTAMM1.DATUM
            &BELZEILE1.LIEFDATUM = &BELSTAMM1.LIEFDATUM

            belegdefinitionvorgabe( "BELZEILE1", "BELEGDEF")
            &BELZEILE1.BELDEF_ZUS = 0

            &BELZEILE1.REF_STM_NR = &BELSTAMM.STM_NUMMER
            store( "BELZEILE1")
          end if

          appendblank( "BELZEILE1")

          if von_inet = 1 then
            neuepreise = 0
            if &BELZEILE.PREIS = 0 then 
              neuepreise = 1
            end if
            if findkey( "ARTIKEL", "ART_NUMMER", &BELZEILE.ART_NUMMER) = 1 then
              setzeeinezeile( "ARTIKEL", "BELZEILE", &ARTIKEL.ART)
            else
              &BELZEILE.ART = "B"
              &BELZEILE.ART_TEXT = "!!!" + &BELZEILE.ART_NUMMER
              &BELZEILE.ART_NUMMER = ""
            end if
          end if

          standardbelegzeile( "BELSTAMM", "BELZEILE", "BELSTAMM1", "BELZEILE1", "BELEGDEF", &BELZEILE.LIEFMENGE)

          position = position + 1
          manposition = manposition + 1
          &BELZEILE1.POS_NR = position
'nur generieren wenn kein spezielles Format vorliegt
          if str$( manposition, 0, 2) = &BELZEILE.POS_NUMMER then
            &BELZEILE1.POS_NUMMER = str$( manposition, 0, 2)
          end if

          if senden_an_aufteilung then
            if (&BELZEILE1.ART = "R") or (&BELZEILE1.ART = "A") or (&BELZEILE1.ART = "P") or (&BELZEILE1.ART = "H") then
              if @betragsaufteilung = 1 then
                &BELZEILE1.MENGE = &BELZEILE.MENGE_URSP / (&BELSTAMM.SUNET_URSP / &XHILF.DOUBLE1)
              end if
              if (@mengenaufteilung = 1) and (&BELZEILE.MENGE >= 1) then
                if ((&BELZEILE.MENGE_URSP / saetze) > 0) and (((&BELZEILE.MENGE_URSP / saetze) < 1)) then
                    &BELZEILE1.MENGE = 1
                  else
                    &BELZEILE1.MENGE = trunc(&BELZEILE.MENGE_URSP / saetze)
                end if
                if &BELZEILE.MENGE < &BELZEILE1.MENGE then
                  &BELZEILE.MENGE = &BELZEILE1.MENGE
                end if
              end if
              &BELZEILE.LIEFMENGE = &BELZEILE1.MENGE
            end if
          end if

          if (&BELZEILE1.ART = "A") or (&BELZEILE1.ART = "P") then
            findfirst( "ARTIKEL", "ART_NUMMER", &BELZEILE1.ART_NUMMER)
            berechne_preis( "ARTIKEL", "BELZEILE1")
          end if
          if (&BELZEILE1.ART = "R") then
            findfirst( "RESS", "ART_NUMMER", &BELZEILE1.ART_NUMMER)
            berechne_preis( "RESS", "BELZEILE1")
          end if

          berechnezeile( "BELSTAMM1", "BELZEILE1")

          if von_inet = 1 then
            &BELZEILE1.LAG_NUMMER = &BELSTAMM1.LAG_NUMMER
            &BELZEILE1.REF_STM_NR = 0
            &BELZEILE1.REFW_BZ_NR = 0
            if &BELZEILE1.LIEFDATUM = 0 then 
              &BELZEILE1.LIEFDATUM = &BELSTAMM1.LIEFDATUM
            end if 
            if &BELZEILE1.FIFODATUM = 0 then 
              &BELZEILE1.FIFODATUM = &BELSTAMM1.DATUM
            end if 
            &BELZEILE1.POS_NUMMER = str$( &BELZEILE1.POS_NR, 0, 2)
          end if

          if periodische_belege = 1 then
            &BELZEILE1.DATUM = &BELSTAMM1.DATUM
            &BELZEILE1.FIFODATUM = &BELSTAMM1.DATUM
            &BELZEILE1.LIEFDATUM = &BELSTAMM1.LIEFDATUM
          end if

'beldefinition des alten Belegs ist bereits richtig in den Zeilen gespeichert
'differenzmenge (liefermenge vom alten Beleg abziehen; tempmenge weil alle mis mit MENGE rechnen)
          if (&BELZEILE1.ART = "T") and (aktuelle_loeschen = 1) and (&BELSTAMM.ARCHIVART = "") then
            &BELZEILE.MENGE = &BELZEILE.MENGE - &BELZEILE.LIEFMENGE
            &BELZEILE.LIEFMENGE = 0
            store( "BELZEILE")
          end if
          if (&BELZEILE1.ART = "R") or (&BELZEILE1.ART = "A") or (&BELZEILE1.ART = "P") or (&BELZEILE1.ART = "H") then
 'Archivbelege keine Summenänderung
            if (aktuelle_loeschen = 1) and (&BELSTAMM.ARCHIVART = "") then
              tempmenge = &BELZEILE.MENGE
              &BELZEILE.MENGE = &BELZEILE.LIEFMENGE
 'Differenzwerte wg. Summe
              berechnezeile( "BELSTAMM", "BELZEILE")
              berechne_summe( "BELSTAMM", "BELZEILE", -1, 1)
              if (&BELZEILE1.ART = "A") or (&BELZEILE1.ART = "P") then
                findfirst( "ARTIKEL", "ART_NUMMER", &BELZEILE.ART_NUMMER)
                lagerdefinition( "BELZEILE")
                berechne_ek( "BELSTAMM", "ARTIKEL", "BELZEILE", -1)
                mis_artikel( "BELSTAMM", "BELZEILE", -1)
                mis_adresse_artikel( "BELSTAMM", "BELZEILE", -1)
                mis_adresse( "BELSTAMM", "BELZEILE", -1)
                lagerstand( "ARTIKEL", "BELZEILE", &BELZEILE.LIEFMENGE, -1)
                mis_artikel_lager( "BELZEILE", 0, 0, -1)
              end if
              if (&BELZEILE1.ART = "R") then
                findfirst( "RESS", "ART_NUMMER", &BELZEILE.ART_NUMMER)
                lagerdefinition( "BELZEILE")
                berechne_ek( "BELSTAMM", "RESS", "BELZEILE", -1)
                mis_artikel( "BELSTAMM", "BELZEILE", -1)
                mis_adresse_artikel( "BELSTAMM", "BELZEILE", -1)
                mis_adresse( "BELSTAMM", "BELZEILE", -1)
              end if

              &BELZEILE.MENGE = tempmenge - &BELZEILE.LIEFMENGE
'Neue Werte der Restmenge
              berechnezeile( "BELSTAMM", "BELZEILE")
              reduz_serie_charge = 1
            end if

            &BELZEILE.LIEFMENGE = 0
            store( "BELZEILE")
          end if

          if (&BELZEILE1.ART = "R") or (&BELZEILE1.ART = "A") or (&BELZEILE1.ART = "P") or (&BELZEILE1.ART = "H") then
'erfordert beldefinition des neuen belegs
            berechnezeile( "BELSTAMM1", "BELZEILE1")
            if (&BELZEILE1.ART = "A") or (&BELZEILE1.ART = "P") then
              findfirst( "ARTIKEL", "ART_NUMMER", &BELZEILE1.ART_NUMMER)
              lagerdefinition( "BELZEILE1")
              ek_spez_wandlung( "BELZEILE1", "BELZEILE", &BELEGDEF.ROHERTRAG, 1)
              berechne_ek( "BELSTAMM1", "ARTIKEL", "BELZEILE1", 1)
              berechne_summe( "BELSTAMM1", "BELZEILE1", 1, 0)
              mis_artikel( "BELSTAMM1", "BELZEILE1", 1)
              mis_adresse_artikel( "BELSTAMM1", "BELZEILE1", 1)
              mis_adresse( "BELSTAMM1", "BELZEILE1", 1)
              lagerstand( "ARTIKEL", "BELZEILE1", &BELZEILE1.MENGE, 1)
              mis_artikel_lager( "BELZEILE1", 0, 0, 1)
            end if
            if (&BELZEILE1.ART = "R") then
              findfirst( "RESS", "ART_NUMMER", &BELZEILE1.ART_NUMMER)
              lagerdefinition( "BELZEILE1")
              ek_spez_wandlung( "BELZEILE1", "BELZEILE", &BELEGDEF.ROHERTRAG, 1)
              berechne_ek( "BELSTAMM1", "RESS", "BELZEILE1", 1)
              berechne_summe( "BELSTAMM1", "BELZEILE1", 1, 0)
              mis_artikel( "BELSTAMM1", "BELZEILE1", 1)
              mis_adresse_artikel( "BELSTAMM1", "BELZEILE1", 1)
              mis_adresse( "BELSTAMM1", "BELZEILE1", 1)
            end if
          end if

          store( "BELZEILE1")

          zweitebelegzeile

          if ((&BELZEILE1.ART = "A") or (&BELZEILE1.ART = "P")) and (&BELZEILE1.SERNUM_JN = "J") and ((&BELSTAMM1.SERNUM_JN = "J") or (&BELSTAMM1.SERNUM_JN = "Z")) then
            seriennummernwandlung
          end if
          if ((&BELZEILE1.ART = "A") or (&BELZEILE1.ART = "P")) and (&BELZEILE1.CHARGE_JN = "J") and ((&BELSTAMM1.CHARGE_JN = "J") or (&BELSTAMM1.CHARGE_JN = "Z")) then
            chargennummernwandlung
          end if
        end if
        if &BELZEILE.MENGE <> 0 then
          archivieren = 0
        end if
        skip( "BELZEILE", 1)
      loop

      if (archivieren = 1) and (aktuelle_loeschen = 1) then
        &BELSTAMM.ARCHIVART = "S"
        &BELSTAMM.ARCHIVDAT = date
        &BELSTAMM.ARCHIVVON = userID
        store( "BELSTAMM")
      end if
      if &BELSTAMM.ARCHIVART = "" then
        store( "BELSTAMM")
      end if
    end if
    if direktsenden = 0 then
      skip( "WBELSTM_MARKE", 1) 
    end if
  loop

  erg = rts( "refresh", "BELZEILE1")

  store( "BELSTAMM1")
'  offene_posten( "BELSTAMM1", "BELEGDEF", 0)

weiter:
  if beleginfobox = 0 then
    abbruch1 = screeninfo ( "", 0, 0, 0)
    oldcursor = rts( "cursor", oldcursor)
    enable( "BELZEILE", 1)
    enable( "BELSTAMM", 1)
    enable( "BELSTAMM1", 1)
    erg = rts( "refresh", "BELSTAMM1")
    emptytable( "WBELSTM_MARKE")
  end if
return

sub zweitebelegzeile
dim ursprung as long
dim pos_nummer as string
  def = belegdefinition( &BELSTAMM1.BELDEF_NUM, 1)
  if def <> 1 then 
    def = belegdefinition( &BELSTAMM1.BELDEF_NUM, 0)
    exit sub     
  end if    
  opentable( "WBELZEIL", "BELZEILETEMP")
  findfirst( "BELZEILETEMP", "BZ_NUMMER", &BELZEILE1.BZ_NUMMER)
  ursprung = &BELZEILE1.BZ_NUMMER
  pos_nummer = &BELZEILE1.POS_NUMMER
  appendblank( "BELZEILE1")
  standardbelegzeile( "BELSTAMM1", "BELZEILETEMP", "BELSTAMM1", "BELZEILE1", "BELEGDEF", &BELZEILETEMP.MENGE)
  &BELZEILE1.REF_BZ_NR = ursprung
  &BELZEILE1.BELDEF_ZUS = 1
  if &BELSTAMM1.LAG_NUM_UM <> "" then
    &BELZEILE1.LAG_NUMMER = &BELSTAMM1.LAG_NUM_UM
  else
    &BELZEILE1.LAG_NUMMER = &BELSTAMM1.LAG_NUMMER
  end if
  if ((&BELZEILE1.ART = "P") or (&BELZEILE1.ART = "H") or (&BELZEILE1.ART = "K")) and (&BELEGDEF.AUFLOESEN <> "N") then
    erg = produktion_aufloesen( "BELZEILE1", 1, ursprung, pos_nummer)
  else
    lagerdefinition( "BELZEILE1")
    berechnezeile( "BELSTAMM", "BELZEILE1")
    store( "BELZEILE1")
    lagerstand( "ARTIKEL", "BELZEILE1", &BELZEILE1.MENGE, 1)
    mis_artikel_lager( "BELZEILE1", 0, 0, 1)
  end if
  findfirst( "BELZEILE1", "STM_NUMMER", &BELZEILETEMP.STM_NUMMER, "POS_NR", &BELZEILETEMP.POS_NR, "BELDEF_ZUS", &BELZEILETEMP.BELDEF_ZUS, "BZ_NUMMER", &BELZEILETEMP.BZ_NUMMER)
  def = belegdefinition( &BELSTAMM1.BELDEF_NUM, 0)
end sub

function produktion_aufloesen( belzeile as record, beldef_zus as long, ursprung as long, pos_nummer as string) as long
dim anzahl as double
dim lieferdatum as long
dim pos_nr as double
dim artnummer as string
dim bz_nummer as long

  if &BELEGDEF.AUFLOESEN = "N" then exit function
  enable( belzeile, 0)
  enable( "BELSTAMM1", 0)
  opentable( "WLISTE", "LISTE1")
  setindex( "LISTE1", "STK_POS_NUMMER")

  artnummer = &BELZEILE.ART_NUMMER

  anzahl = &BELZEILE.MENGE
  lieferdatum = &BELZEILE.LIEFDATUM

'wg. listen loeschen immer notwendig
  if (beldef_zus = 0) or (beldef_zus = 1) then
    store( belzeile)
  end if
  pos_nr = &BELZEILE.POS_NR

    setrangestart( "LISTE1", "STK_NUMMER", artnummer, "POS_NR", "", "LIS_NUMMER", "")
    setrangeend( "LISTE1", "STK_NUMMER", artnummer, "POS_NR", chr$(255), "LIS_NUMMER", chr$(255))
    gotofirst( "LISTE1")

    do while eof( "LISTE1") = 0
      produktion_aufloesen = 1
      if artnummer <> &BELZEILE.ART_NUMMER then
        appendblank( belzeile)
      else
        bz_nummer = &BELZEILE.BZ_NUMMER  
        init_belegzeile( belzeile)
        &BELZEILE.BZ_NUMMER = bz_nummer
      end if
      &BELZEILE.POS_NUMMER = pos_nummer

      neuerdatensatz( belzeile, beldef_zus) 
      store( belzeile)

      if &LISTE1.MENGE <> 0 then
        &BELZEILE.MENGE = &LISTE1.MENGE * anzahl
        &BELZEILE.MENGE_URSP = &BELZEILE.MENGE 
      end if
      &BELZEILE.LIEFDATUM = lieferdatum

'wegen Listen loeschen immer notwendig
      &BELZEILE.REF_BZ_NR = ursprung
      &BELZEILE.POS_NR = pos_nr
      if &BELZEILE.POS_NUMMER = "" then
        &BELZEILE.POS_NUMMER = str$( &BELZEILE.POS_NR, 0, 2)
      end if
'Umbuchungslager verwenden
      if ((beldef_zus = 1) or (beldef_zus = 3)) and (&BELSTAMM1.LAG_NUM_UM <> "") then
        &BELZEILE.LAG_NUMMER = &BELSTAMM1.LAG_NUM_UM
      end if
      lagerdefinition( belzeile)

      if (&LISTE1.ART = "A") or (&LISTE1.ART = "K") or (&LISTE1.ART = "H") or (&LISTE1.ART = "P") then 
        findfirst( "ARTIKEL", "ART_NUMMER", &LISTE1.ART_NUMMER)
        setzeeinezeile( "ARTIKEL", belzeile, &ARTIKEL.ART)
      end if
      if (&LISTE1.ART = "R") then 
        findfirst( "RESS", "ART_NUMMER", &LISTE1.ART_NUMMER)
        setzeeinezeile( "RESS", belzeile, "R")
      end if
      if (&LISTE1.ART = "B") then 
        &BELZEILE.ART = &LISTE1.ART 
        &BELZEILE.ART_TEXT = &LISTE1.ART_TEXT       
      end if
     
      store( belzeile)

      if (&BELZEILE.ART = "A") or (&BELZEILE.ART = "P") then 
        findfirst( "ARTIKEL", "ART_NUMMER", &BELZEILE.ART_NUMMER)
        berechne_ek( "BELSTAMM1", "ARTIKEL", belzeile, 1)
        berechne_summe( "BELSTAMM1", belzeile, 1, 0)
        mis_artikel( "BELSTAMM1", belzeile, 1)
        mis_adresse_artikel( "BELSTAMM1", belzeile, 1)
        mis_adresse( "BELSTAMM1", belzeile, 1)
        lagerstand( "ARTIKEL", belzeile, &BELZEILE.MENGE, 1)
        mis_artikel_lager( belzeile, 0, 0, 1)
      end if
      if &BELZEILE.ART = "R" then 
        findfirst( "RESS", "ART_NUMMER", &BELZEILE.ART_NUMMER)
        berechne_ek( "BELSTAMM1", "RESS", belzeile, 1)
        berechne_summe( "BELSTAMM1", belzeile, 1, 0)
        mis_artikel( "BELSTAMM1", belzeile, 1)
        mis_adresse_artikel( "BELSTAMM1", belzeile, 1)
        mis_adresse( "BELSTAMM1", belzeile, 1)
      end if

      skip( "LISTE1", 1)
    loop

  cancel( belzeile)

  closetable( "LISTE1")
  store( "BELSTAMM1")
  enable( belzeile, 1)
  enable( "BELSTAMM1", 1)
end function

sub neuerdatensatz( belzeile as record, beldef_zus as long)
  def = belegdefinition( &BELSTAMM1.BELDEF_NUM, beldef_zus)
  belegdefinitionvorgabe( belzeile, "BELEGDEF")
  &BELZEILE.STM_NUMMER = &BELSTAMM1.STM_NUMMER
  &BELZEILE.DATUM = &BELSTAMM1.DATUM
  &BELZEILE.FIFODATUM = &BELSTAMM1.DATUM
  &BELZEILE.LIEFDATUM = &BELSTAMM1.LIEFDATUM
  if &BELSTAMM1.LAG_NUMMER <> "" then
    &BELZEILE.LAG_NUMMER = &BELSTAMM1.LAG_NUMMER
  end if
  lagerdefinition( belzeile)
  &BELZEILE.PROJEKT_NR = &BELSTAMM1.PROJEKT_NR
  &BELZEILE.K_STL = &BELSTAMM1.K_STL
  &BELZEILE.K_TRG = &BELSTAMM1.K_TRG
  &BELZEILE.RECHRABATT = &BELSTAMM1.RECHRABATT
  &BELZEILE.STATVER = &BELSTAMM1.STATVER
  &BELZEILE.STATZWE = &BELSTAMM1.STATZWE
  &BELZEILE.STATART = &BELSTAMM1.STATART
  if (&BELSTAMM1.LKZ_L <> "") and (&BELZEILE.VST_UST = "U") then
    &BELZEILE.STATLKZ = &BELSTAMM1.LKZ_L
  else
    &BELZEILE.STATLKZ = &BELSTAMM1.LKZ_A
  end if
end sub

sub bestandpruefung( marke_loeschen as long)
  openquery( "SQL", "DELETE FROM XHILF WHERE USERID = '" + USERID + "' AND MANDANT = '" + upper$( CompanyName) + "'")
  execsql( "SQL") 
  closetable("SQL")
  if (instr(1, upper$(aliasname), "MICR") > 0) then
    commit
  end if
  opentable( "XHILF", "HILF")
  setfilter( "HILF", "USERID = '" + USERID + "'")
  setautofield( "HILF", "LFD_NUMMER", 0)

  enable( "BELZEILE", 0)
  gotofirst( "WBELSTM_MARKE")
  zaehler = 1
  saetze = reccount( "WBELSTM_MARKE")
  do while eof( "WBELSTM_MARKE") = 0
    abbruch1 = screeninfo ( "Bestandsunterschreitung wird geprüft...", saetze, zaehler, 0)
    setrangestart( "BELZEILE", "STM_NUMMER", &WBELSTM_MARKE.STM_NUMMER, "POS_NR", "")
    setrangeend( "BELZEILE", "STM_NUMMER", &WBELSTM_MARKE.STM_NUMMER, "POS_NR", chr$(255))
    gotofirst( "BELZEILE")
    do while eof( "BELZEILE") = 0
      if (&BELZEILE.LIEFMENGE <> 0) then
        if (&BELZEILE.ART = "A") or (&BELZEILE.ART = "P") then
          findfirst( "ARTIKEL", "ART_NUMMER", &BELZEILE.ART_NUMMER)
          error_file( "BELZEILE", "ARTIKEL", &BELEGDEF.LAGER_KORR)
        end if
      end if
      skip( "BELZEILE", 1)
    loop
    zaehler = zaehler + 1
    skip( "WBELSTM_MARKE", 1)
  loop
  enable( "BELZEILE", 1)
  abbruch1 = screeninfo ( "", 0, 0, 0)

  if reccount( "HILF") > 0 then
    if &BELEGDEF.LAGER_KORR = "W" then
      erg = dialog( "\DLG\XWARNUNG")
      if erg = 0 then
        valid = 0
        if marke_loeschen then gosub abbruch
      end if
    end if
    if &BELEGDEF.LAGER_KORR = "A" then
      erg = dialog( "\DLG\XFEHLER")
      valid = 0
      if marke_loeschen then gosub abbruch
    end if
  end if
  closetable( "HILF")
  gotofirst( "WBELSTM_MARKE")
end sub

'Zielbeleg muss prüfpflichtig sein und der Lagerstand muss durch den neuen Beleg tatsächlich abgebucht werden
'Z.B. Lieferschein auf Rechnung im Normalfall nicht mehr prüfen
function check_bestandpruefung( belstammdef as long, belstamm1def as long) as long
dim lager_korr_quelle as string
dim lager_quelle as string
  check_bestandpruefung = 0
  def = belegdefinition( belstammdef, 0)
  lager_korr_quelle = &BELEGDEF.LAGER_KORR
  lager_quelle = &BELEGDEF.LAGER
  def = belegdefinition( belstamm1def, 0)
  if (&BELEGDEF.LAGER_KORR = "W") or (&BELEGDEF.LAGER_KORR = "A") then
    if (lager_quelle <> -1) and (&BELEGDEF.LAGER = -1) then
      check_bestandpruefung = 1
    end if
  end if
  def = belegdefinition( aktuelle_belegdef, 0)
end function

function teste_belstamm as long
dim ok as long
  ok = 1
  if (&BELSTAMM1.RECHRABATT <> &BELSTAMM.RECHRABATT) or (&BELSTAMM1.STEUERBER <> &BELSTAMM.STEUERBER) then ok = 0
  if (&BELSTAMM1.FW_ISOCODE <> &BELSTAMM.FW_ISOCODE) or (&BELSTAMM1.FW_KURS <> &BELSTAMM.FW_KURS) then ok = 0
  if (&BELSTAMM1.FW_EHT <> &BELSTAMM.FW_EHT) or (&BELSTAMM1.ART <> &BELSTAMM.ART) then ok = 0
  teste_belstamm = ok
end function

belzeile_onbeforepost:
@belzeile.onbeforepost:
  if abs(&BELZEILE.LIEFMENGE) > abs(&BELZEILE.MENGE) then
    valid = messagebox( "Mehr als die offene Menge umwandeln?", 1023) = 4
  end if
return

belzeile_onafterpost:
@belzeile.onafterpost:
  bookmark = getbookmark( "BELZEILE")
  enable( "BELZEILE", 0)
  gotofirst( "BELZEILE")
  s = ""
'alle artikel checken ob gesamtmenge
  alleliefern = 1
  do while eof( "BELZEILE") = 0
    if (&BELZEILE.ART = "H") or (&BELZEILE.ART = "K") or (&BELZEILE.ART = "A") or (&BELZEILE.ART = "P") or (&BELZEILE.ART = "R") then
      if (&BELZEILE.LIEFMENGE <> 0) then
        s = "+"
      end if
      if (&BELZEILE.LIEFMENGE <> &BELZEILE.MENGE) then
        alleliefern = 0
      end if
    end if
    skip( "BELZEILE", 1)
  loop
  if alleliefern = 1 then
    s = "*"
  end if
  if findkey("WBELSTM_MARKE", "STM_NUMMER", &BELSTAMM.STM_NUMMER) = 0 then
    appendblank( "WBELSTM_MARKE")
  end if
  &WBELSTM_MARKE.STM_NUMMER = &BELSTAMM.STM_NUMMER
  &WBELSTM_MARKE.MARKE = s
  store( "WBELSTM_MARKE")
  if s = "" then 
    deleterecord( "WBELSTM_MARKE")  
  end if
  enable( "BELZEILE", 1)
  gotobookmark( "BELZEILE", bookmark)
  erg = rts( "refresh", "BELSTAMM")
return

sub setrange
  aktuelle_archiv = 0
  @archiv = 0
  aktuelle_stammdaten = @stammdaten
  aktuelle_belegdef = @belegdef
  def = belegdefinition( aktuelle_belegdef, 0)
  @belegtext = &BELEGDEF.BELDEF_TXT
  aktuelle_loeschen = &BELEGDEF.UMWANDLUNG = "L"
  @duplizieren = (&BELEGDEF.UMWANDLUNG = "D") or (&BELEGDEF.UMWANDLUNG = "Z")

  if findkey( "XADRESSE", "ADR_NUMMER", @adresse) = 1 then
    @name = &XADRESSE.NAME1
  end if
  setrangestart( "BELSTAMM", adressanschrift, @adresse, "BELDEF_NUM", aktuelle_belegdef, "ARCHIVART", "")
  setrangeend( "BELSTAMM", adressanschrift, @adresse, "BELDEF_NUM", aktuelle_belegdef, "ARCHIVART", " ")
  if (@adresse = getfield( "BELSTAMM1", adressanschrift)) and (aktuelle_belegdef = &BELSTAMM1.BELDEF_NUM) then
    setfilter( "BELSTAMM", replace( "STM_NUMMER <> %1", &BELSTAMM1.STM_NUMMER))
  end if

'falls der Belegstamm nicht in der gleichen Gruppe dann duplizieren und stammdaten vorbesetzen
  aktuelle_stammdaten = 1
  if checkbeleggruppe( &BELSTAMM.BELDEF_NUM, &BELSTAMM1.BELDEF_NUM) = 0 then
    @duplizieren = 1
    aktuelle_loeschen = 0
    aktuelle_stammdaten = 0
  end if

'Stammdaten werden auch bei ungleichen Adressen mit "nicht übernehmen" vorbesetzt
  if @adresse <> getfield( "BELSTAMM1", adressanschrift) then
    aktuelle_stammdaten = 0
  end if

'bei leerer Adresse wird übernehmen vorbesetzt
  if getfield( "BELSTAMM1", adressanschrift) = "" then
    aktuelle_stammdaten = 1
  end if

  if &BELEGDEF.UMWANDLUNG = "Z" then
    enable( @duplizieren, 0)
    enable( @loeschen, 0)
  else
    enable( @duplizieren, 1)
    enable( @loeschen, 1)
  end if
  @loeschen = aktuelle_loeschen
  @stammdaten = aktuelle_stammdaten

  setfilter( "BELZEILE", "")
  if check_belegdefzus( aktuelle_belegdef, 1) then
    setfilter( "BELZEILE", "BELDEF_ZUS = 1")
  else
    setfilter( "BELZEILE", "BELDEF_ZUS = 0")
  end if
end sub

sub setrangeserie
  aktuelle_archiv = 0
  @archivserie = 0
  aktuelle_stammdaten = @stammdaten
  aktuelle_belegdef = @belegdef
  aktuelle_belegdef_neu = @belegdef_neu

  setrangestart( "BELSTAMM", "BELDEF_NUM", aktuelle_belegdef, "ARCHIVART", "")
  setrangeend( "BELSTAMM", "BELDEF_NUM", aktuelle_belegdef, "ARCHIVART", " ")

  if (aktuelle_belegdef = 0) or (aktuelle_belegdef_neu = 0) then return 

  def = belegdefinition( aktuelle_belegdef, 0)
  @belegtext = &BELEGDEF.BELDEF_TXT
  aktuelle_belegtext = &BELEGDEF.BELDEF_TXT
  aktuelle_loeschen = &BELEGDEF.UMWANDLUNG = "L"
  @loeschen = aktuelle_loeschen
  @duplizieren = (&BELEGDEF.UMWANDLUNG = "D") or (&BELEGDEF.UMWANDLUNG = "Z")
  def = belegdefinition( aktuelle_belegdef_neu, 0)
  @belegtext_neu = &BELEGDEF.BELDEF_TXT

  @name = ""
  @name_bis = ""
  setfilter( "BELSTAMM", "")
  if findkey( "XADRESSE", "ADR_NUMMER", @adresse) = 1 then
    @name = &XADRESSE.NAME1
    setfilter( "BELSTAMM", replace( "%1 >= '%2'", adressanschrift, @adresse))
  end if
  if findkey( "XADRESSE", "ADR_NUMMER", @adresse_bis) = 1 then
    @name_bis = &XADRESSE.NAME1
    setfilter( "BELSTAMM", replace( "%1 <= '%2'", adressanschrift, @adresse_bis))
  end if

  if @datum_von > 0 then
    setfilter( "BELSTAMM", replace( "DATUM >= %1", @datum_von))
  end if
  if @datum_bis > 0 then
    setfilter( "BELSTAMM", replace( "DATUM <= %1", @datum_bis))
  end if

'falls der Belegstamm nicht in der gleichen Gruppe dann duplizieren vorbesetzen
  if checkbeleggruppe( aktuelle_belegdef, aktuelle_belegdef_neu) = 0 then
    @duplizieren = 1
  end if

  if &BELEGDEF.UMWANDLUNG = "Z" then
    enable( @duplizieren, 0)
    enable( @loeschen, 0)
  else
    enable( @duplizieren, 1)
    enable( @loeschen, 1)
  end if

  setfilter( "BELZEILE", "")
  if check_belegdefzus( aktuelle_belegdef, 1) then
    setfilter( "BELZEILE", "BELDEF_ZUS = 1")
  else
    setfilter( "BELZEILE", "BELDEF_ZUS = 0")
  end if
end sub

'************************* Aufteilungswandlung
@senden_an_aufteilung:
  senden_an_aufteilung = 1
  valid = 1
  if dialog("\DLG\WWANDTL") = 0 then return
'eventuell hängende Tabellen speichern
  erg = rts( "refresh")

  opentable( "WBELSTM", "BELSTAMM")
  erg = linktable( "BELSTAMM", "BELEGERF.WBELSTM.STM_NUMMER")
  writeglobal( "WBELDEFWLINK", "SA" + str$(&BELSTAMM.BELDEF_NUM))

  wnderg = window( "\WND\WBELDEA1")
  if wnderg = "" then return
  beldefnummer = val(wnderg)

  aktuelle_stammdaten = 1
  aktuelle_archiv = 0
  opentable( "XADRESSE")
  openmis
  opentable( "WBELSTM", "WBELSTM_MARKE", "MEMORY")
  opentable( "WARTIKEL", "ARTIKEL")
  opentable( "WRESS", "RESS")
  openserien
  openchargen
  fw_berechnung = fw_getberechnung

'alter Beleg
  aktuelle_belegdef = &BELSTAMM.BELDEF_NUM
  aktuelle_archiv = &BELSTAMM.ARCHIVART <> ""
  def = belegdefinition( aktuelle_belegdef, 0)
  aktuelle_loeschen = &BELEGDEF.UMWANDLUNG = "L"
'falls der Belegstamm nicht in der gleichen Gruppe dann duplizieren
  if checkbeleggruppe( aktuelle_belegdef, beldefnummer) = 0 then
    aktuelle_loeschen = 0
  end if
'falls der Belegstamm archiviert ist dann duplizieren
  if &BELSTAMM.ARCHIVART <> "" then
    aktuelle_loeschen = 0
  end if
  aktuelle_belegtext = &BELEGDEF.BELDEF_TXT

  uebernahme_serie_charge = 0
  neuepreise = 0
  if (checkbeleggruppe( aktuelle_belegdef, beldefnummer) = 0) then
    erg = messagebox( "Zielbeleg und Quellbeleg entsprechen verschiedenen Beleggruppen.|Aufteilung nicht möglich?", 2)
    valid = 0
    return
  end if 

  direktsenden = 1
  beleginfobox = 1
  zaehler = 0 

  opentable( "XHILF")
  setfilter( "XHILF", "USERID = '" + USERID + "'")
  saetze = reccount( "XHILF")
  if saetze = 0 then 
    erg = messagebox( "Keine Belege zu erstellen.", 2)
    valid = 0
    return
  end if 

  if aktuelle_belegdef = beldefnummer then
    erg = messagebox( "Zielbelege und Quellbelege entsprechen der selben Belegart.|Möchten Sie trotzdem wandeln?", 1023)
    if erg <> 4 then
      valid = 0
      return
    end if
  end if

  opentable( "WBELZEIL", "BELZEILE")
  setindex( "BELZEILE", "STM_POSNUMMER")

'neuer Beleg
  opentable( "WBELSTM", "BELSTAMM1")
  setautofield( "BELSTAMM1", "STM_NUMMER", 0)

  gotofirst( "XHILF")
  do while eof( "XHILF") = 0
    abbruch1 = screeninfo ( "Belege werden erstellt...", saetze, zaehler, 0)

    appendblank( "BELSTAMM1")

    &BELSTAMM1.DATUM = &XHILF.LONG1
'keine Belegdatumsüberprüfung bei Belegsplittung, da u.U. Belege in den nächsten Buchungszeitraum erstellt werden
'    if checkdatum( &BELSTAMM1.DATUM) = 0 then 
'      abbruch1 = screeninfo ( "", 0, 0, 0)
'      return
'    end if
    &BELSTAMM1.LIEFDATUM = &XHILF.LONG1

    def = belegdefinition( beldefnummer, 0)
    belegnummer( "BELSTAMM1", "BELEGDEF")
    if valid = 0 then return
    store( "BELSTAMM1")

    if erstererstellterbeleg = "" then
      erstererstellterbeleg = &BELSTAMM1.BEL_NUMMER
    end if  

    aktuelle_stammdaten = 1
    schleifebeenden = 0 
    gosub onselectrecord

'wg. Refresh bei Sybase nicht wirksam hier Tabelle neu öffnen
    if aliasname <> "" then
      closetable( "BELZEILE")
      opentable( "WBELZEIL", "BELZEILE")
      setindex( "BELZEILE", "STM_POSNUMMER")
    end if

    gosub okserie

'      if @belege_drucken = 1 then
'        &BELSTAMM.STM_NUMMER = &BELSTAMM1.STM_NUMMER
'        &BELSTAMM.BELDEF_NUM = &BELSTAMM1.BELDEF_NUM
'        makrofile( "\BAS\WMBELDRU|ohnedialog")
'        cancel( "BELSTAMM")
'      end if

    skip( "XHILF", 1)
    zaehler = zaehler + 1
    emptytable("WBELSTM_MARKE")
  loop
  abbruch1 = screeninfo ( "", 0, 0, 0)
  erg = messagebox( "Belege von %1 bis %2 erstellt.", 2, erstererstellterbeleg, &BELSTAMM1.BEL_NUMMER)

  if (archivieren = 1) and (aktuelle_loeschen = 1) then
    erg = rts( "CLOSE", "BELEGERF")
  end if
return


'************************* Serienwandlung
@okserie.onpress:
  direktsenden = 1
  beleginfobox = 1
  valid = 1
  zaehler = 0 

  if check_bestandpruefung(aktuelle_belegdef, aktuelle_belegdef_neu) = 1 then
    def = belegdefinition( aktuelle_belegdef_neu, 0)
    bestandpruefung( 0)
    if valid = 0 then 
      return
    end if
  end if

  enable( "BELZEILE", 0)
  enable( "BELSTAMM", 0)

  saetze = reccount( "WBELSTM_MARKE")
  if saetze = 0 then 
    erg = messagebox( "Keine Belege selektiert.", 2)
    gosub beenden
    valid = 0
    return
  end if 

  if aktuelle_belegdef = aktuelle_belegdef_neu then
    erg = messagebox( "Zielbelege und Quellbelege entsprechen der selben Belegart.|Möchten Sie trotzdem wandeln?", 1023)
    if erg <> 4 then
      gosub beenden
      valid = 0
      return
    end if
  end if

  uebernahme_serie_charge = 1
  neuepreise = 0
  if checkbeleggruppe( aktuelle_belegdef, aktuelle_belegdef_neu) = 0 then
    uebernahme_serie_charge = 0
    erg = messagebox( "Zielbelege und Quellbelege entsprechen verschiedenen Beleggruppen.|Möchten Sie die Preise neu berechnen?", 23)
    if erg = 0 then
      valid = 0
      gosub beenden
      return
    end if
    if erg = 4 then 
      neuepreise = 1
    end if
  end if

  abbruch1 = screeninfo ( "Belege werden erstellt...", saetze, zaehler, 0)

'neuer Beleg
  opentable( "WBELSTM", "BELSTAMM1")
  setautofield( "BELSTAMM1", "STM_NUMMER", 0)

  gotofirst( "WBELSTM_MARKE")
  do while eof( "WBELSTM_MARKE") = 0

    if findkey("BELSTAMM", "STM_NUMMER", &WBELSTM_MARKE.STM_NUMMER) = 1 then
      appendblank( "BELSTAMM1")
  
      &BELSTAMM1.DATUM = DATE
      if checkdatum( &BELSTAMM1.DATUM) = 0 then 
        abbruch1 = screeninfo ( "", 0, 0, 0)
        return
      end if
  
      def = belegdefinition( aktuelle_belegdef_neu, 0)
      belegnummer( "BELSTAMM1", "BELEGDEF")
      if valid = 0 then return
      store( "BELSTAMM1")
  
      if erstererstellterbeleg = "" then
        erstererstellterbeleg = &BELSTAMM1.BEL_NUMMER
      end if  
  
      aktuelle_stammdaten = 1
      schleifebeenden = 0 
      gosub okserie

      if @belege_drucken = 1 then
        &BELSTAMM.STM_NUMMER = &BELSTAMM1.STM_NUMMER
        &BELSTAMM.BELDEF_NUM = &BELSTAMM1.BELDEF_NUM
        makrofile( "\BAS\WMBELDRU|ohnedialog")
        cancel( "BELSTAMM")
      end if
    end if
    skip( "WBELSTM_MARKE", 1)
  loop

  setfilter( "BELSTAMM", "")
  enable( "BELSTAMM", 1)
  enable( "BELZEILE", 1)
  abbruch1 = screeninfo ( "", 0, 0, 0)
  erg = messagebox( "Belege von %1 bis %2 erstellt.", 2, erstererstellterbeleg, &BELSTAMM1.BEL_NUMMER)
  emptytable( "WBELSTM_MARKE")
  erg = rts( "CLOSE", "SERIENUMWANDLUNG")
return

beenden:
  setfilter( "BELSTAMM", "")
  enable( "BELSTAMM", 1)
  enable( "BELZEILE", 1)
  gosub abbruch
return

@archivserie.onclick:
  aktuelle_archiv = @archivserie
  if aktuelle_archiv = 1 then
    setrangestart( "BELSTAMM", "BELDEF_NUM", aktuelle_belegdef, "ARCHIVART", "")
    setrangeend( "BELSTAMM", "BELDEF_NUM", aktuelle_belegdef, "ARCHIVART", "Z")
    aktuelle_loeschen = @loeschen
  else
    setrangestart( "BELSTAMM", "BELDEF_NUM", aktuelle_belegdef, "ARCHIVART", "")
    setrangeend( "BELSTAMM", "BELDEF_NUM", aktuelle_belegdef, "ARCHIVART", " ")
  end if
return

@alle_belege.onpress:
  oldcursor = rts( "cursor", 11)
  enable( "BELZEILE", 0)
  enable( "BELSTAMM", 0)
  emptytable( "WBELSTM_MARKE")
  zaehler = 1
  saetze = reccount( "BELSTAMM")
  gotofirst( "BELSTAMM")
  do while eof( "BELSTAMM") = 0
    abbruch1 = screeninfo ( "Belege werden markiert...", saetze, zaehler, 0)
    appendblank( "WBELSTM_MARKE")
    &WBELSTM_MARKE.STM_NUMMER = &BELSTAMM.STM_NUMMER
    &WBELSTM_MARKE.MARKE = "*"
    store( "WBELSTM_MARKE")
    liefermenge_setzen
    skip( "BELSTAMM", 1)
    zaehler = zaehler + 1
  loop
  enable( "BELSTAMM", 1)
  enable( "BELZEILE", 1)
  abbruch1 = screeninfo ( "", 0, 0, 0)
  erg = rts( "refresh", "BELSTAMM")
  erg = rts( "refresh", "BELZEILE")
  oldcursor = rts( "cursor", oldcursor)
return

@periodische_belege.onpress:
  gosub belegdef_onexitchanged
  enable( @okserie, 4)
  @monat = getpart( "MONTH", date)
  @jahr = getpart( "YEAR", date)
  if dialog("\DLG\XMONJAHR") = 0 then return

  periodische_belege = 1
  opentable( "WPROJ")

  oldcursor = rts( "cursor", 11)
  enable( "BELZEILE", 0)
  enable( "BELSTAMM", 0)
  emptytable( "WBELSTM_MARKE")
  zaehler = 1
  saetze = reccount( "BELSTAMM")
  gotofirst( "BELSTAMM")
  do while eof( "BELSTAMM") = 0
    abbruch1 = screeninfo ( "Belege werden markiert...", saetze, zaehler, 0)
    if monate_erfuellt(&BELSTAMM.PROJEKT_NR) then
      appendblank( "WBELSTM_MARKE")
      &WBELSTM_MARKE.STM_NUMMER = &BELSTAMM.STM_NUMMER
      &WBELSTM_MARKE.MARKE = "*"
      store( "WBELSTM_MARKE")
      liefermenge_setzen
    end if
    skip( "BELSTAMM", 1)
    zaehler = zaehler + 1
  loop
  enable( "BELSTAMM", 1)
  enable( "BELZEILE", 1)
  abbruch1 = screeninfo ( "", 0, 0, 0)
  erg = rts( "refresh", "BELSTAMM")
  erg = rts( "refresh", "BELZEILE")
  oldcursor = rts( "cursor", oldcursor)
return

function monate_erfuellt( projekt_nr as string) as long
  monate_erfuellt = 0
  if findkey("WPROJ", "PROJEKT_NR", projekt_nr) = 0 then
    exit function
  end if
  if (&WPROJ.VERRECH <> "V") and (&WPROJ.VERRECH <> "O") then
    exit function
  end if
  if ((&WPROJ.VERRBEGDAT > date) and (&WPROJ.VERRBEGDAT <> 0)) or ((&WPROJ.VERRENDDAT < date) and (&WPROJ.VERRENDDAT <> 0)) then
    exit function
  end if
'Nachverrechnung z.B. Quartal wird verrechnet 3(1-3),6,9,12
  if (&WPROJ.VERRECH = "V") then
    if &WPROJ.VERR_PERIO = "M" then
      monate_erfuellt = 1
      exit function
    end if
    if (&WPROJ.VERR_PERIO = "Q") and ((@monat mod 3) = 0) then
      monate_erfuellt = 1
      exit function
    end if
    if (&WPROJ.VERR_PERIO = "H") and ((@monat mod 6) = 0) then
      monate_erfuellt = 1
      exit function
    end if
    if (&WPROJ.VERR_PERIO = "J") and (@monat = 12) then
      monate_erfuellt = 1
      exit function
    end if
  end if
'Vorverrechnung z.B. Quartal wird verrechnet 1(1-3),4,7,10
  if (&WPROJ.VERRECH = "O") then
    if &WPROJ.VERR_PERIO = "M" then
      monate_erfuellt = 1
      exit function
    end if
    if (&WPROJ.VERR_PERIO = "Q") and (((@monat-1) mod 3) = 0) then
      monate_erfuellt = 1
      exit function
    end if
    if (&WPROJ.VERR_PERIO = "H") and (((@monat-1) mod 6) = 0) then
      monate_erfuellt = 1
      exit function
    end if
    if (&WPROJ.VERR_PERIO = "J") and (@monat = 1) then
      monate_erfuellt = 1
      exit function
    end if
  end if
end function

function periodische_belege_text( projekt_nr as string) as string
dim dats, dane, dase as string

'monat * 5 = start
  dats = "    0101 0201 0301 0401 0501 0601 0701 0801 0901 1001 1101 1201"
  dane = "    0131 0228 0331 0430 0531 0630 0731 0831 0930 1031 1130 1231"
  dase = "    0131 0229 0331 0430 0531 0630 0731 0831 0930 1031 1130 1231"

  if schaltjahr( @jahr) = 1 then
    dane = dase
  end if

  periodische_belege_text = ""
  if findkey("WPROJ", "PROJEKT_NR", projekt_nr) = 0 then
    exit function
  end if
  if (&WPROJ.VERRECH = "V") then
    if &WPROJ.VERR_PERIO = "M" then
      periodische_belege_text = replace( "Abrechnungszeitraum &1-&2", val( str$(@jahr) + mid$(dats, @monat * 5, 4)), val( str$(@jahr) + mid$(dane, @monat * 5, 4)))
      exit function
    end if
    if (&WPROJ.VERR_PERIO = "Q") and ((@monat mod 3) = 0) then
      periodische_belege_text = replace( "Abrechnungszeitraum &1-&2", val( str$(@jahr) + mid$(dats, (trunc((@monat-1)/3)*3+1) * 5, 4)), val( str$(@jahr) + mid$(dane, (trunc((@monat-1)/3)*3+3) * 5, 4)))
      exit function
    end if
    if (&WPROJ.VERR_PERIO = "H") and ((@monat mod 6) = 0) then
      periodische_belege_text = replace( "Abrechnungszeitraum &1-&2", val( str$(@jahr) + mid$(dats, (trunc((@monat-1)/6)*6+1) * 5, 4)), val( str$(@jahr) + mid$(dane, (trunc((@monat-1)/6)*6+6) * 5, 4)))
      exit function
    end if
    if (&WPROJ.VERR_PERIO = "J") and (@monat = 12) then
      periodische_belege_text = replace( "Abrechnungszeitraum &1-&2", val( str$(@jahr) + mid$(dats, 1 * 5, 4)), val( str$(@jahr) + mid$(dane, 12 * 5, 4)))
      exit function
    end if
  end if
  if (&WPROJ.VERRECH = "O") then
    if &WPROJ.VERR_PERIO = "M" then
      periodische_belege_text = replace( "Abrechnungszeitraum &1-&2", val( str$(@jahr) + mid$(dats, @monat * 5, 4)), val( str$(@jahr) + mid$(dane, @monat * 5, 4)))
      exit function
    end if
    if (&WPROJ.VERR_PERIO = "Q") and (((@monat-1) mod 3) = 0) then
      periodische_belege_text = replace( "Abrechnungszeitraum &1-&2", val( str$(@jahr) + mid$(dats, (trunc((@monat-1)/3)*3+1) * 5, 4)), val( str$(@jahr) + mid$(dane, (trunc((@monat-1)/3)*3+3) * 5, 4)))
      exit function
    end if
    if (&WPROJ.VERR_PERIO = "H") and (((@monat-1) mod 6) = 0) then
      periodische_belege_text = replace( "Abrechnungszeitraum &1-&2", val( str$(@jahr) + mid$(dats, (trunc((@monat-1)/6)*6+1) * 5, 4)), val( str$(@jahr) + mid$(dane, (trunc((@monat-1)/6)*6+6) * 5, 4)))
      exit function
    end if
    if (&WPROJ.VERR_PERIO = "J") and (@monat = 1) then
      periodische_belege_text = replace( "Abrechnungszeitraum &1-&2", val( str$(@jahr) + mid$(dats, 1 * 5, 4)), val( str$(@jahr) + mid$(dane, 12 * 5, 4)))
      exit function
    end if
  end if
end function

function schaltjahr( jahr as long) as long
  schaltjahr = (jahr mod 4 = 0) and ((jahr mod 100 <> 0) or (jahr mod 400 = 0))
end function

sub liefermenge_setzen
  if aliasname = "" then
    setrangestart( "BELZEILE", "STM_NUMMER", &BELSTAMM.STM_NUMMER, "POS_NR", "")
    setrangeend( "BELZEILE", "STM_NUMMER", &BELSTAMM.STM_NUMMER, "POS_NR", chr$(255))

    if senden_an_projekt_nr = 1 then
      setfilter("BELZEILE", "PROJEKT_NR = '" + @projekt + "'")
    end if

    gotofirst( "BELZEILE")
    do while eof( "BELZEILE") = 0
      if (&BELSTAMM.ARCHIVART = "") and (&BELZEILE.MENGE <> 0) then
        &BELZEILE.LIEFMENGE = &BELZEILE.MENGE
      end if
      if (&BELSTAMM.ARCHIVART <> "") and (&BELZEILE.MENGE_URSP <> 0) then
        &BELZEILE.LIEFMENGE = &BELZEILE.MENGE_URSP
      end if
      store( "BELZEILE")
      skip( "BELZEILE", 1)
    loop

    if senden_an_projekt_nr = 1 then
      setfilter("BELZEILE", "")
    end if

    exit sub
  end if
  openquery( "SQL")
  if &BELSTAMM.ARCHIVART = "" then
    addsql( "SQL", "UPDATE WBELZEIL SET LIEFMENGE = MENGE WHERE MENGE <> 0")
  end if
  if &BELSTAMM.ARCHIVART <> "" then
    addsql( "SQL", "UPDATE WBELZEIL SET LIEFMENGE = MENGE_URSP WHERE MENGE_URSP <> 0")
  end if
  addsql( "SQL", "AND STM_NUMMER = " + STR$( &BELSTAMM.STM_NUMMER) + " AND MANDANT = '" + upper$( CompanyName) + "'")

  if senden_an_projekt_nr = 1 then
    addsql( "SQL", "AND PROJEKT_NR = '" + @projekt + "'")
  end if

  execsql( "SQL")
  closequery( "SQL")
end sub

sub liefermenge_loeschen
  if aliasname = "" then
    setrangestart( "BELZEILE", "STM_NUMMER", &WBELSTM_MARKE.STM_NUMMER, "POS_NR", "")
    setrangeend( "BELZEILE", "STM_NUMMER", &WBELSTM_MARKE.STM_NUMMER, "POS_NR", chr$(255))
    gotofirst( "BELZEILE")
    do while eof( "BELZEILE") = 0
      &BELZEILE.LIEFMENGE = 0
      store( "BELZEILE")
      skip( "BELZEILE", 1)
    loop
    exit sub
  end if
  openquery( "SQL")
  addsql( "SQL", "UPDATE WBELZEIL SET LIEFMENGE = 0")
  addsql( "SQL", "WHERE STM_NUMMER = " + STR$( &WBELSTM_MARKE.STM_NUMMER) + " AND MANDANT = '" + upper$( CompanyName) + "'")
  execsql( "SQL")
  closequery( "SQL")
end sub

'************************* Serienerstellung
@serienerstellung.oncreate:
  do_akt_tbd("XADRESSE", 0, "", 0)
  @beleg = ""
  @belegnach = ""
  @belegart = hole_erste_beldef( hole_beldef_filter( "SE", ""))
  gosub belegart_onexit
  @belegart_neu = hole_erste_beldef( hole_beldef_filter( "SE", str$( @belegart)))
  gosub belegart_neu_onexit
return

@belegart.onselect:
  writeglobal( "WBELDEFWLINK", "SE")
return

@belegart.onexitchanged:
  if check_beldef( hole_beldef_filter( "SE", ""), @belegart) = 0 then
    valid = 0
    return
  end if
  @belegart_neu = hole_erste_beldef( hole_beldef_filter( "SE", str$( @belegart)))
  gosub belegart_onexit
return

@belegart_neu.onselect:
  writeglobal( "WBELDEFWLINK", "SE" + str$( @belegart))
return

@belegart_neu.onexitchanged:
  if check_beldef( hole_beldef_filter( "SE", str$( @belegart)), @belegart_neu) = 0 then
    valid = 0
    return
  end if
return

@okserieerstellung.onpress:
  ungueltige_adresse = 0
  beleginfobox = 1
  aktuelle_belegdef = @belegart
  aktuelle_belegdef_neu = @belegart_neu

  if testefelder( "XADRESSE") = 1 then return

  if @bisadr <> "" then
    setrangestart( "XADRESSE2", "ADR_NUMMER", @vonadr)
    setrangeend( "XADRESSE2", "ADR_NUMMER", @bisadr)
  end if
  if @bisadrgrup <> "" then
    setfilter( "XADRESSE2", "AGR_NUMMER <= '" + @bisadrgrup + "' AND " + "AGR_NUMMER >= '" + @vonadrgrup + "'")
  end if

  direktsenden = 1
  beleginfobox = 1
  zaehler = 0 

  saetze = reccount( "XADRESSE2")
  if saetze = 0 then 
    erg = messagebox( "Keine Belege zu erstellen.", 2)
    valid = 0
    return
  end if 

  uebernahme_serie_charge = 0
  neuepreise = 0
  if checkbeleggruppe( aktuelle_belegdef, aktuelle_belegdef_neu) = 0 then
    erg = messagebox( "Zielbelege und Quellbelege entsprechen verschiedenen Beleggruppen.|Möchten Sie die Preise neu berechnen?", 23)
    if erg = 0 then
      valid = 0
      return
    end if
    if erg = 4 then 
      neuepreise = 1
    end if
  end if

  if aktuelle_belegdef = aktuelle_belegdef_neu then
    erg = messagebox( "Zielbelege und Quellbelege entsprechen der selben Belegart.|Möchten Sie trotzdem wandeln?", 1023)
    if erg <> 4 then
      valid = 0
      return
    end if
  end if

'alter Beleg
  opentable( "WBELSTM", "BELSTAMM")
  setindex( "BELSTAMM", "BELDEF_NUM_A")
  setrangestart( "BELSTAMM", "BELDEF_NUM", @belegart, "ARCHIVART", "", "BEL_NUMMER", @bel_nummer_von)
  setrangeend( "BELSTAMM", "BELDEF_NUM", @belegart, "ARCHIVART", "", "BEL_NUMMER", @bel_nummer_von)
  if (reccount( "BELSTAMM") = 0) or (@bel_nummer_von = "") then
    erg = messagebox( "Belegnummer leer oder ungültig.", 2)
    valid = 0
    return
  end if 
  gotofirst( "BELSTAMM")
  opentable( "WBELZEIL", "BELZEILE")
  setindex( "BELZEILE", "STM_POSNUMMER")

'neuer Beleg
  opentable( "WBELSTM", "BELSTAMM1")
  setautofield( "BELSTAMM1", "STM_NUMMER", 0)

  gotofirst( "XADRESSE2")
  do while eof( "XADRESSE2") = 0
    abbruch1 = screeninfo ( "Belege werden erstellt...", saetze, zaehler, 0)

    erg = 1
    if @wennfeld <> "" then 
      erg = 0
      if @op <> "[]" then
        makro( "if &XADRESSE2." + @wennfeld + " " + @op + " " + chw + @selektion + chw + " then erg = 1")
      else
        makro( "if instr( 1, &XADRESSE2." + @wennfeld + ", '" + @selektion + "') > 0 then erg = 1")
      end if
    end if

    if ((vst_ust = "V") and (&XADRESSE2.IST_K_LIEF = "D")) or ((vst_ust = "U") and (&XADRESSE2.IST_K_LIEF = "K")) then
      erg = 0
      ungueltige_adresse = ungueltige_adresse + 1
    end if

    if &XADRESSE2.GESPERRT = "J" then
      erg = 0
      ungueltige_adresse = ungueltige_adresse + 1
    end if

    if erg = 1 then
      appendblank( "BELSTAMM1")

      &BELSTAMM1.DATUM = @belegdatum
      &BELSTAMM1.LIEFDATUM = @belegdatum
      &BELSTAMM1.REFERENZ = @referenz
      if checkdatum( &BELSTAMM1.DATUM) = 0 then 
        abbruch1 = screeninfo ( "", 0, 0, 0)
        return
      end if

      def = belegdefinition( aktuelle_belegdef_neu, 0)
      belegnummer( "BELSTAMM1", "BELEGDEF")
      if valid = 0 then return
      store( "BELSTAMM1")

      if erstererstellterbeleg = "" then
        erstererstellterbeleg = &BELSTAMM1.BEL_NUMMER
      end if  

      &BELSTAMM1.ADR_NUMM_A = &XADRESSE2.ADR_NUMMER
      auftragsadresse( "BELSTAMM1")

      aktuelle_stammdaten = 0
      aktuelle_loeschen = 0
      schleifebeenden = 0 
      gosub onselectrecord

'wg. Refresh bei Sybase nicht wirksam hier Tabelle neu öffnen
      if aliasname <> "" then
        closetable( "BELZEILE")
        opentable( "WBELZEIL", "BELZEILE")
        setindex( "BELZEILE", "STM_POSNUMMER")
      end if

      gosub okserie

      if @belege_drucken = 1 then
        &BELSTAMM.STM_NUMMER = &BELSTAMM1.STM_NUMMER
        &BELSTAMM.BELDEF_NUM = &BELSTAMM1.BELDEF_NUM
        makrofile( "\BAS\WMBELDRU|ohnedialog")
        cancel( "BELSTAMM")
      end if
    end if
 
    emptytable("WBELSTM_MARKE")
    skip( "XADRESSE2", 1)
    zaehler = zaehler + 1
  loop
  abbruch1 = screeninfo ( "", 0, 0, 0)
  if ungueltige_adresse > 0 then
    erg = messagebox( "Belege von %1 bis %2 erstellt.||%3 Adressen waren für die gewählte Belegart ungültig.|z.B. Kunden für Lieferantenbelege.", 2, erstererstellterbeleg, &BELSTAMM1.BEL_NUMMER, ungueltige_adresse)
  else
    erg = messagebox( "Belege von %1 bis %2 erstellt.", 2, erstererstellterbeleg, &BELSTAMM1.BEL_NUMMER)
  end if
return

@bel_nummer_von.onselect:
  wnderg = window( "\WND\WBELEGA1" + "|" + str$(@belegart) + "|" + str$(@belegart) + "++|" + str$(@belegart) + "+" + " " + "+" + chr$(255))
'  wnderg = window( "\WND\WBELEGA1" + "|" + str$(@belegart) + "|" + str$(@belegart) + "|" + str$(@belegart))
  if wnderg <> "" then
    @bel_nummer_von = wnderg
  end if
return

belegart_neu_onexit:
belegart_onexit:
@belegart_neu.onexit:
@belegart.onexit:
  @beleg = hole_text_beldef( @belegart)
  @belegnach = hole_text_beldef( @belegart_neu)
  vst_ust = &WBELDEF_I.VST_UST 
return

'************************* Inventurpositionen abrufen
@inventurpositionen.oncreate:
  do_akt_tbd("WARTIKEL", 0, "", 0)
return

@okinventurpositionen.onpress:
  if testefelder( "WARTIKEL") = 1 then return

  if @bisart <> "" then
    setrangestart( "WARTIKEL2", "ART_NUMMER", @vonart)
    setrangeend( "WARTIKEL2", "ART_NUMMER", @bisart)
  end if
  if @bisartgrup <> "" then
    setfilter( "WARTIKEL2", "WGR_NUMMER <= '" + @bisartgrup + "' AND " + "WGR_NUMMER >= '" + @vonartgrup + "'")
  end if

  zaehler = 0 

  saetze = reccount( "WARTIKEL2")
  if saetze = 0 then 
    erg = messagebox( "Keine Einträge zu erstellen.", 2)
    valid = 0
    return
  end if 

'alter Beleg
  opentable( "WBELSTM", "BELSTAMM1")
  erg = linktable( "BELSTAMM1", "BELEGERF.WBELSTM.STM_NUMMER")
  aktuelle_belegdef = &BELSTAMM1.BELDEF_NUM
  def = belegdefinition( aktuelle_belegdef, 0)

  opentable( "WBELZEIL", "BELZEILE1")
  setindex( "BELZEILE1", "STM_POSNUMMER")
  setautofield( "BELZEILE1", "BZ_NUMMER", 0)
  setrangestart( "BELZEILE1", "STM_NUMMER", &BELSTAMM1.STM_NUMMER, "POS_NR", "")
  setrangeend( "BELZEILE1", "STM_NUMMER", &BELSTAMM1.STM_NUMMER, "POS_NR", chr$(255))
  gotolast( "BELZEILE1")
  position = &BELZEILE1.POS_NR
  manposition = val( &BELZEILE1.POS_NUMMER)

  if @bewegung_seit <> 0 then
    opentable( "WBELZEIL", "BELZEILE2")
    setindex( "BELZEILE2", "ART_BELDEF_NUMMER")
    erg = linktable( "BELZEILE2", "WARTIKEL2.ART+ART_NUMMER")
  end if

  neuepreise = 1

  gotofirst( "WARTIKEL2")
  abbruch1 = 0
  do while (eof( "WARTIKEL2") = 0) and (abbruch1 = 0)
    abbruch1 = screeninfo ( "Einträge werden erstellt...", saetze, zaehler, 1)

    erg = 1
    if @wennfeld <> "" then 
      erg = 0
      if @op <> "[]" then
        makro( "if &WARTIKEL2." + @wennfeld + " " + @op + " " + chw + @selektion + chw + " then erg = 1")
      else
        makro( "if instr( 1, &WARTIKEL2." + @wennfeld + ", '" + @selektion + "') > 0 then erg = 1")
      end if
    end if

    if (@lagerunter = 0) and (&WARTIKEL2.LAGERUNTER <> "J") then erg = 0  

    tempmenge = ermittlebestand( &WARTIKEL2.ART_NUMMER, &BELSTAMM1.LAG_NUMMER)

    if (erg = 1) and (@lager_null = 0) then
      if tempmenge = 0 then erg = 0
    end if

    if @inventur_seit <> 0 then
      i = 0 
      if aliasname = "" then 
        if findkey( "WMARTLAG", "ART_NUMMER", &WARTIKEL2.ART_NUMMER, "LAG_NUMMER", &BELSTAMM1.LAG_NUMMER) = 1 then
          i = &WMARTLAG.DATUM_INV
        end if  
      end if
      if aliasname <> "" then 
        openquery( "WMARTLAG")
        addsql( "WMARTLAG", "SELECT DATUM_INV FROM WMARTLAG")
        addsql( "WMARTLAG", "WHERE MANDANT = %1 AND ART_NUMMER = %2 AND LAG_NUMMER = %3", companyname, &WARTIKEL2.ART_NUMMER, &BELSTAMM1.LAG_NUMMER)
        i = &WMARTLAG.DATUM_INV
        opensql( "WMARTLAG")
        closequery( "WMARTLAG")
      end if
    
      if (@inventur_seit < i) then erg = 0 
    end if

    if @bewegung_seit <> 0 then
      setfilter( "BELZEILE2", "")
      if reccount( "BELZEILE2") = 0 then  
        erg = 0
      else
        setfilter( "BELZEILE2", "DATUM < " + str$(@bewegung_seit))
        if reccount( "BELZEILE2") > 0 then erg = 0
      end if
    end if

    if erg = 1 then
      appendblank( "BELZEILE1")
      position = position + 1
      manposition = manposition + 1
      &BELZEILE1.POS_NR = position
      &BELZEILE1.POS_NUMMER = str$(manposition, 0, 2)
      &BELZEILE1.STM_NUMMER = &BELSTAMM1.STM_NUMMER
      &BELZEILE1.DATUM = &BELSTAMM1.DATUM
      &BELZEILE1.FIFODATUM = &BELSTAMM1.DATUM
      &BELZEILE1.LIEFDATUM = &BELSTAMM1.LIEFDATUM

      belegdefinitionvorgabe( "BELZEILE1", "BELEGDEF")
      &BELZEILE1.BELDEF_ZUS = 0

      &BELZEILE1.REF_STM_NR = &BELSTAMM1.STM_NUMMER
 
      &BELZEILE1.LAG_NUMMER = &BELSTAMM1.LAG_NUMMER

      setzeeinezeile( "WARTIKEL2", "BELZEILE1", &WARTIKEL2.ART)
      &BELZEILE1.MENGE = tempmenge
      &BELZEILE1.MENGE_URSP = &BELZEILE1.MENGE 
      
      berechnezeile( "BELSTAMM1", "BELZEILE1")
      lagerdefinition( "BELZEILE1")
      berechne_ek( "BELSTAMM1", "WARTIKEL2", "BELZEILE1", 1)
      berechne_summe( "BELSTAMM1", "BELZEILE1", 1, 0)
      mis_artikel( "BELSTAMM1", "BELZEILE1", 1)
      mis_adresse_artikel( "BELSTAMM1", "BELZEILE1", 1)
      mis_adresse( "BELSTAMM1", "BELZEILE1", 1)
      lagerstand( "ARTIKEL", "BELZEILE1", &BELZEILE1.MENGE, 1)
      mis_artikel_lager( "BELZEILE1", 0, 0, 1)
      store( "BELZEILE1")
    end if
    skip( "WARTIKEL2", 1)
    zaehler = zaehler + 1
  loop
  store( "BELSTAMM1")
  erg = rts( "refresh", "BELZEILE1")
  erg = rts( "refresh", "BELSTAMM1")

  abbruch1 = screeninfo ( "", 0, 0, 0)
return

@seriennummern.onpress:
  if (&BELZEILE.SERNUM_JN = "J") and (&BELZEILE.ART = "A") and ((&BELSTAMM.SERNUM_JN = "J") or (&BELSTAMM.SERNUM_JN = "Z")) then
    wnderg = window( "\WND\WMSERIE2")
  else
    erg = messagebox( "Bei diesem Artikel oder Beleg gibt es keine Seriennummern.", 2)
  end if
return

@chargennummern.onpress:
  if (&BELZEILE.CHARGE_JN = "J") and (&BELZEILE.ART = "A") and ((&BELSTAMM.CHARGE_JN = "J") or (&BELSTAMM.CHARGE_JN = "Z")) then
    wnderg = window( "\WND\WMCHARG2")
  else
    erg = messagebox( "Bei diesem Artikel oder Beleg gibt es keine Chargennummern.", 2)
  end if
return

sub berechne_preis( art_ress as record, belzeile as record)
  if &BELZEILE.ART_NUMMER <> "" then
'je nach Belegtypus (WE, WA, INTERN) wird der "std_netto preis" ermittelt
    if (&BELEGDEF.VST_UST = "V") or (&BELEGDEF.VST_UST = "I") then
      &BELZEILE.STD_NETTO = &ART_RESS.EK_NETTO
    end if
    if &BELEGDEF.VST_UST = "U" then
      &BELZEILE.STD_NETTO = &ART_RESS.VK_NETTO
    end if

    if neuepreise = 1 then
      if &BELZEILE.ART = "R" then
        in_fremdwaehrung = 0
        &BELZEILE.PREIS = holepreis_d( belzeile, 0, &BELSTAMM1.ADR_NUMM_R)
      else
        in_fremdwaehrung = holepreis( belzeile, &ART_RESS.ARG_NUMMER, &BELSTAMM1.ADR_NUMM_R, &BELSTAMM1.AGR_NUMM_R, &BELSTAMM1.FW_ISOCODE, &BELSTAMM1.PREISLISTE, "")
      end if

      if in_fremdwaehrung = 0 then
        &BELZEILE.PREIS = fw_getfwbetrag_b( &BELZEILE.PREIS, &BELSTAMM1.FW_KURS, &BELSTAMM1.FW_EHT)
      end if
    end if 
  end if
end sub

sub setzeeinezeile( art_ress as record, belzeile as record, art as string)
  &BELZEILE.ART_NUMMER = &ART_RESS.ART_NUMMER
  if &BELZEILE.ART_NUMMER <> "" then
    &BELZEILE.ART = art
    &BELZEILE.ART_TEXT = &ART_RESS.ART_TEXT
    &BELZEILE.EINHEIT = &ART_RESS.EINHEIT
    if &ART_RESS.K_STL <> "" then
      &BELZEILE.K_STL = &ART_RESS.K_STL
    end if
    if &ART_RESS.K_TRG <> "" then
      &BELZEILE.K_TRG = &ART_RESS.K_TRG
    end if

    &BELZEILE.BONUS_JN = &ART_RESS.BONUS_JN
    &BELZEILE.PROV_JN = &ART_RESS.PROV_JN
    &BELZEILE.RAB_JN = &ART_RESS.RAB_JN
    &BELZEILE.RRAB_JN = &ART_RESS.RRAB_JN
    &BELZEILE.SKONTO_JN = &ART_RESS.SKONTO_JN
    if (&BELZEILE.ART = "R") then
      &BELZEILE.BESTELL_JN = ""
      &BELZEILE.SERNUM_JN = ""
      &BELZEILE.CHARGE_JN = ""
      &BELZEILE.GEWICHT = ""
      &BELZEILE.GEWICHTBRT = ""
    else
      &BELZEILE.BESTELL_JN = &ART_RESS.BESTELL_JN
      &BELZEILE.SERNUM_JN = &ART_RESS.SERNUM_JN
      &BELZEILE.CHARGE_JN = &ART_RESS.CHARGE_JN
      &BELZEILE.GEWICHT = &ART_RESS.GEWICHT
      &BELZEILE.GEWICHTBRT = &ART_RESS.GEWICHTBRT
    end if

'je nach Belegtypus (WE, WA, INTERN) wird der "std_netto preis" und das "lager" ermittelt
    if (&BELEGDEF.VST_UST = "V") or (&BELEGDEF.VST_UST = "I") then
      &BELZEILE.STD_NETTO = &ART_RESS.EK_NETTO
    end if
    if &BELEGDEF.VST_UST = "U" then
      &BELZEILE.STD_NETTO = &ART_RESS.VK_NETTO
    end if

    if (&BELZEILE.ART <> "R") then
      if &BELEGDEF.LAGER = 1 then
        if (&ART_RESS.LAGER_ZUG <> "") and (&BELZEILE.LAG_NUMMER = &BELSTAMM1.LAG_NUMMER) and (&BELEGDEF.ART_LAG_JN <> "N") then
          &BELZEILE.LAG_NUMMER = &ART_RESS.LAGER_ZUG
        end if
      end if
      if &BELEGDEF.LAGER = -1 then
        if (&ART_RESS.LAGER_ABG <> "") and (&BELZEILE.LAG_NUMMER = &BELSTAMM1.LAG_NUMMER) and (&BELEGDEF.ART_LAG_JN <> "N") then
          &BELZEILE.LAG_NUMMER = &ART_RESS.LAGER_ABG
        end if
      end if
    end if

    &BELZEILE.FIBUMODELL = &ART_RESS.FIBUMODELL
    if &BELEGDEF.BELEG_ART <> "" then
      &BELZEILE.FIBUMODELL = &BELEGDEF.BELEG_ART
    end if

    setze_mwst_satz( "BELSTAMM1", belzeile)

    if neuepreise = 1 then
      if &BELZEILE.ART = "R" then
        in_fremdwaehrung = 0
        &BELZEILE.PREIS = holepreis_d( belzeile, 0, &BELSTAMM1.ADR_NUMM_R)
      else
        in_fremdwaehrung = holepreis( belzeile, &ART_RESS.ARG_NUMMER, &BELSTAMM1.ADR_NUMM_R, &BELSTAMM1.AGR_NUMM_R, &BELSTAMM1.FW_ISOCODE, &BELSTAMM1.PREISLISTE, "")
      end if

      if in_fremdwaehrung = 0 then
        &BELZEILE.PREIS = fw_getfwbetrag_b( &BELZEILE.PREIS, &BELSTAMM1.FW_KURS, &BELSTAMM1.FW_EHT)
      end if

      if &BELSTAMM1.STEUERBER = "B" then
        &BELZEILE.PREIS = &BELZEILE.PREIS * (100 + &BELZEILE.MWST_SATZ) / 100
      end if
    end if
    &BELZEILE.PREIS = round( &BELZEILE.PREIS, 5)

    berechnezeile( "BELSTAMM1", belzeile)

  end if
end sub

function testefelder( tabellenname as string) as long
  testefelder = 0
'für automatische typkonvertierung hier trenncharakter festlegen
  chw = ""
  if get_property(@wennfeld, "TYPE:", tabellenname) = "STRING" then
    chw = "'"
  end if

  if (chw = "") and (@op = "[]") then
    erg = messagebox( "Die Operation 'enthält' ist bei numerischen Feldern nicht möglich.", 2)
    testefelder = 1
    exit function
  end if

  if ((@wennfeld <> "") and (@op = "")) or ((@wennfeld = "") and (@op <> "")) then
    erg = messagebox( "Sie müssen eine vollständige Bedingung festlegen.", 2)
    testefelder = 1
    exit function
  end if
end function

function checkbeleggruppe( belstammdef as long, belstamm1def as long) as long
dim vst_ust_lokal as string
  if (belstammdef > 0) and (belstamm1def > 0) then
    def = belegdefinition( belstammdef, 0)
  else
    checkbeleggruppe = 0
    exit function
  end if
  vst_ust_lokal = &BELEGDEF.VST_UST
  def = belegdefinition( belstamm1def, 0)
  if vst_ust_lokal = &BELEGDEF.VST_UST then
    checkbeleggruppe = 1
  else
    checkbeleggruppe = 0
  end if
  def = belegdefinition( aktuelle_belegdef, 0)
end function

sub setze_art
  if @adressanschrift = "AUFTRAG" then 
    adressanschrift = "ADR_NUMM_A"
    setindex("BELSTAMM", "ADR_A_BELDEF")
  end if
  if @adressanschrift = "RECHNUNG" then 
    adressanschrift = "ADR_NUMM_R"
    setindex("BELSTAMM", "ADR_R_BELDEF")
  end if
  if @adressanschrift = "LIEFERUNG" then
    adressanschrift = "ADR_NUMM_L"
    setindex("BELSTAMM", "ADR_L_BELDEF")    
  end if
end sub

sub setze_art_serie
  if @adressanschrift = "AUFTRAG" then 
    adressanschrift = "ADR_NUMM_A"
  end if
  if @adressanschrift = "RECHNUNG" then 
    adressanschrift = "ADR_NUMM_R"
  end if
  if @adressanschrift = "LIEFERUNG" then
    adressanschrift = "ADR_NUMM_L"
  end if
end sub

sub seriennummernwandlung
dim restmenge, tempmenge2 as double
  restmenge = abs( &BELZEILE1.MENGE)
  if uebernahme_serie_charge = 1 then
    opentable( "WSERBZ", "WSERBZ2")
    setindex( "WSERBZ2", "BZ_NUMMER_I")
    setautofield( "WSERBZ2", "SBZ_NUMMER", 0)
    setrangestart( "WSERBZ", "BZ_NUMMER", &BELZEILE.BZ_NUMMER)
    setrangeend( "WSERBZ", "BZ_NUMMER", &BELZEILE.BZ_NUMMER)
    gotofirst( "WSERBZ")
    do while (eof( "WSERBZ") = 0) and (restmenge <> 0) 
      if &WSERBZ.MENGE > 0 then
  
        appendblank( "WSERBZ2")
        erg = rts("ASSIGNRECORD", "WSERBZ", "WSERBZ2")
        &WSERBZ2.SBZ_NUMMER = 0
        &WSERBZ2.BZ_NUMMER = &BELZEILE1.BZ_NUMMER
        &WSERBZ2.BELDEF_NUM = &BELZEILE1.BELDEF_NUM
        &WSERBZ2.BELDEF_ZUS = &BELZEILE1.BELDEF_ZUS
        &WSERBZ2.LAG_NUMMER = &BELZEILE1.LAG_NUMMER
        if &WSERBZ.MENGE > restmenge then 
          &WSERBZ2.MENGE = restmenge
        else
          &WSERBZ2.MENGE = &WSERBZ.MENGE
        end if
        restmenge = restmenge - &WSERBZ2.MENGE
        &WSERBZ2.MENGE_URSP = &WSERBZ2.MENGE
        seriennummer( "WSERBZ2", &BELZEILE1.LAGER, 1, 0)
        store( "WSERBZ2")
  
        if reduz_serie_charge = 1 then
          &WSERBZ.MENGE = &WSERBZ.MENGE - &WSERBZ2.MENGE
          tempmenge2 = &WSERBZ.MENGE 
          &WSERBZ.MENGE = &WSERBZ2.MENGE
          seriennummer( "WSERBZ", &BELZEILE.LAGER, -1, 1)
          &WSERBZ.MENGE = tempmenge2
          store( "WSERBZ")
        end if
  
      end if
      skip( "WSERBZ", 1)
    loop
  end if
  if restmenge > 0 then
    oldcursor = rts( "cursor", oldcursor)
    seriennummerneingabe( &BELZEILE1.LAGER * &BELZEILE1.LAGER_L, &BELZEILE1.MENGE, &BELZEILE1.BZ_NUMMER)
    oldcursor = rts( "cursor", oldcursor)
  end if
end sub

sub chargennummernwandlung
dim restmenge, tempmenge2 as double
  restmenge = abs( &BELZEILE1.MENGE)
  if uebernahme_serie_charge = 1 then
    opentable( "WCHARGBZ", "WCHARGBZ2")
    setindex( "WCHARGBZ2", "BZ_NUMMER_C")
    setautofield( "WCHARGBZ2", "CBZ_NUMMER", 0)
    setrangestart( "WCHARGBZ", "BZ_NUMMER", &BELZEILE.BZ_NUMMER)
    setrangeend( "WCHARGBZ", "BZ_NUMMER", &BELZEILE.BZ_NUMMER)
    gotofirst( "WCHARGBZ")
    do while (eof( "WCHARGBZ") = 0) and (restmenge <> 0) 
      if &WCHARGBZ.MENGE > 0 then
  
        appendblank( "WCHARGBZ2")
        erg = rts("ASSIGNRECORD", "WCHARGBZ", "WCHARGBZ2")
        &WCHARGBZ2.BZ_NUMMER = &BELZEILE1.BZ_NUMMER
        &WCHARGBZ2.CBZ_NUMMER = 0
        &WCHARGBZ2.BELDEF_NUM = &BELZEILE1.BELDEF_NUM
        &WCHARGBZ2.BELDEF_ZUS = &BELZEILE1.BELDEF_ZUS
        &WCHARGBZ2.LAG_NUMMER = &BELZEILE1.LAG_NUMMER
        if &WCHARGBZ.MENGE > restmenge then 
          &WCHARGBZ2.MENGE = restmenge
        else
          &WCHARGBZ2.MENGE = &WCHARGBZ.MENGE
        end if
        restmenge = restmenge - &WCHARGBZ2.MENGE
        &WCHARGBZ2.MENGE_URSP = &WCHARGBZ2.MENGE
        chargennummer( "WCHARGBZ2", &BELZEILE1.LAGER, 1)
        store( "WCHARGBZ2")
  
        if reduz_serie_charge = 1 then
          &WCHARGBZ.MENGE = &WCHARGBZ.MENGE - &WCHARGBZ2.MENGE
          tempmenge2 = &WCHARGBZ.MENGE 
          &WCHARGBZ.MENGE = &WCHARGBZ2.MENGE
          chargennummer( "WCHARGBZ", &BELZEILE.LAGER, -1)
          &WCHARGBZ.MENGE = tempmenge2
          store( "WCHARGBZ")
        end if
  
      end if
      skip( "WCHARGBZ", 1)
    loop
  end if
  if restmenge > 0 then
    oldcursor = rts( "cursor", oldcursor)
    chargennummerneingabe( &BELZEILE1.LAGER * &BELZEILE1.LAGER_L, &BELZEILE1.MENGE, &BELZEILE1.BZ_NUMMER)
    oldcursor = rts( "cursor", oldcursor)
  end if
end sub


'Beleg aus Bau-Zahlungsplan erstellen
@ZPBeleg_erstellen:
  erg = rts( "refresh")
  opentable( "WPROJ", "WPROJ1")
  erg = linktable( "WPROJ1", "ZAHLPLAN.WPROJ.PROJEKT_NR")

  if &WPROJ1.GESPERRT = "J" then
    erg = messagebox( "Das Projekt ist gesperrt! Belegerstellung daher nicht möglich", 1)
    return
  end if 

  opentable( "WBAUZP", "WBAUZP1")
  setindex( "WBAUZP1", "POSNUMMER")
  setfilter( "WBAUZP1", "PROJEKT_NR = '" + &WPROJ1.PROJEKT_NR + "' AND AUSW_JN = 'J'")
  gotolast( "WBAUZP1")
  letzte_Baupos = &WBAUZP1.POS_NR

  setfilter( "WBAUZP1", "")
  setfilter( "WBAUZP1", "PROJEKT_NR = '" + &WPROJ1.PROJEKT_NR + "'")
  gotofirst( "WBAUZP1")

  sum_ZPBeleg = 0.0
  anz_ZPTR = 0 
  sum_ZPAbz = 0.0
  sum_ZPAnz = 0.0
  sum_ZPAnzkum = 0.0
  anz_kein_beleg = 0
  anz_SR = 0
  anz_SR2 = 0

  letzte_Beldef = 0
  bookmark = 0 
  do while eof( "WBAUZP1") = 0
    if anz_SR > 0 then
      anz_SR2 = anz_SR2 + 1
    end if
    if ( &WBAUZP1.BELDEF_NUM = 24) then
      anz_SR = anz_SR + 1
    end if 
    if &WBAUZP1.POS_NR <= letzte_Baupos then
      if ( &WBAUZP1.STM_NUMMER = 0) Or ( &WBAUZP1.AUSW_JN = "N") then
        anz_kein_beleg = anz_kein_beleg + 1 
      end if

      if ( &WBAUZP1.AUSW_JN = "J") then
        if ( letzte_Beldef <> 0) AND ( letzte_Beldef <> 21) then
          sum_ZPAnz = 0
        end if
        letzte_Beldef = &WBAUZP1.BELDEF_NUM
        ZPBeldefziel = &WBAUZP1.BELDEF_NUM
          sum_ZPBeleg = sum_ZPBeleg + &WBAUZP1.NETTO
        if ( &WBAUZP1.BELDEF_NUM = 22) AND ( &WBAUZP1.STM_NUMMER <> 0) then
          anz_ZPTR = anz_ZPTR + 1 
        end if
        sum_ZPAbz = &WBAUZP1.NETTO
        if ( &WBAUZP1.BELDEF_NUM = 21) then
          sum_ZPAnzkum = sum_ZPAnzkum + &WBAUZP1.NETTO 
          sum_ZPAnz = sum_ZPAnz + &WBAUZP1.NETTO
        end if 
        bookmark = getbookmark( "WBAUZP1") 
      end if
    end if
    skip( "WBAUZP1", 1)
  loop

  sum_ZPAbz = sum_ZPBeleg - sum_ZPAbz 
  if ( ZPbeldefziel = 0) Or ( bookmark = 0) then
    erg = messagebox( "Es wurden keine Belege ausgewählt!", 1)
    return
  end if 
  if anz_kein_beleg > 1 then
    erg = messagebox( "Es wurden noch nicht alle Vorgängerbelege erstellt. Bitte Zahlungsplan überprüfen!", 1)
    return
  end if 
  if anz_SR2 > 0 then
    erg = messagebox( "Nach der Schlussrechnung ist kein Beleg mehr erlaubt. Bitte Zahlungsplan überprüfen!", 1)
    return
  end if 
  if anz_SR > 1 then
    erg = messagebox( "Es ist nur eine Schlussrechnung erlaubt. Bitte Zahlungsplan überprüfen!", 1)
    return
  end if 

  gotobookmark( "WBAUZP1", bookmark)

  if ( &WBAUZP1.STM_NUMMER = 0) then
    if messagebox( "%1 jetzt erstellen?", 33, Beldeftextholen (ZPBeldefziel, 0)) = 3 then
      return
    end if
  else
    if messagebox( "%1 bereits erstellt. Belegbearbeitung starten?", 33, Beldeftextholen (ZPBeldefziel, 0)) = 3 then
      return
    end if
  end if

  if ( &WBAUZP1.STM_NUMMER = 0) then
    erg = ZPBeleg(ZPBeldefziel)
  else 
     belegauswahl( ZPBeldefziel, &WBAUZP1.STM_NUMMER)
  end if
return

function beldeftextholen( Beldef_numT as long, beldef_zusT as long) as string
  def = belegdefinition( Beldef_numT, beldef_zusT)
  beldeftextholen = &BELEGDEF.BELDEF_TXT
end function

Function ZPBeleg (Beldef_Numziel as long) as long
  ZPBeleg = 1
  opentable( "WBELSTM", "ZBELSTM")
  setindex("ZBELSTM", "PROJ_BELDEF")
  setfilter("ZBELSTM", "")
  setfilter( "ZBELSTM", "PROJEKT_NR = '" + &WPROJ1.PROJEKT_NR + "' AND BELDEF_NUM = 2 AND ARCHIVART = ''")

  gotofirst( "ZBELSTM")
  ZPgefunden = 1
  def = belegdefinition( &ZBELSTM.BELDEF_NUM, 0)
  if &BELEGDEF.AUFTRAG = 0 then
    ZPgefunden = 0 
    do while ( ZPgefunden = 0) AND ( eof( "ZBELSTM") = 0) 
      skip( "ZBELSTM", 1)
      if eof( "ZBELSTM") = 0 then
        def = belegdefinition( &ZBELSTM.BELDEF_NUM, 0)
        if &BELEGDEF.AUFTRAG = 1 then
          ZPgefunden = 1
        end if
      end if
    loop 
  end if

  if ZPgefunden = 0 then
    erg = messagebox( "Keine entsprechenden Quellbelege (Aufträge) gefunden.|Vorgang wird abgebrochen!", 2)
    ZPBeleg = 0 
    exit function
  end if

  opentable( "WBELSTM", "BELSTAMM")
  'erg = linktable( "BELSTAMM", "ZBELSTM.STM_NUMMER")
  if findkey("BELSTAMM", "STM_NUMMER", &ZBELSTM.STM_NUMMER) = 0 then
    exit function
  end if

  beldefnummer = Beldef_Numziel

  opentable( "XADRESSE")
  openmis
  opentable( "WARTIKEL", "ARTIKEL")
  opentable( "WRESS", "RESS")
  openserien
  openchargen
  fw_berechnung = fw_getberechnung

'alter Beleg
  aktuelle_belegdef = &BELSTAMM.BELDEF_NUM
  aktuelle_archiv = &BELSTAMM.ARCHIVART <> ""
  def = belegdefinition( aktuelle_belegdef, 0)
  aktuelle_loeschen = &BELEGDEF.UMWANDLUNG = "L"
  aktuelle_belegtext = &BELEGDEF.BELDEF_TXT

'neuer Beleg
  opentable( "WBELSTM", "BELSTAMM1")
  setautofield( "BELSTAMM1", "STM_NUMMER", 0)
  appendblank( "BELSTAMM1")
  def = belegdefinition( beldefnummer, 0)
  belegnummer( "BELSTAMM1", "BELEGDEF")
  if valid = 0 then 
    ZPBeleg = 0 
    exit function
  end if

  stammdaten_uebernehmen( "BELSTAMM1", "BELSTAMM")
  
  opentable( "WLAGER", "LAGER")
  findfirst( "LAGER", "LAG_NUMMER", &BELSTAMM1.LAG_NUMMER)
  if (&LAGER.LAG_NUM_UM <> "") and (&BELSTAMM1.LAG_NUM_UM = "") then 
    &BELSTAMM1.LAG_NUM_UM = &LAGER.LAG_NUM_UM
  end if
  &BELSTAMM1.PROJEKT_NR = &WPROJ1.PROJEKT_NR
  &BELSTAMM1.ZAHL_KOND = &WBAUZP1.ZAHL_KOND
  zahlungskonditionen( "BELSTAMM1")

  opentable( "WBELZEIL", "BELZEILE1")
  setautofield( "BELZEILE1", "BZ_NUMMER", 0)
  setindex( "BELZEILE1", "STM_POSNUMMER")

  position = 0 

'Auftragspositionen als Textzeilen übernehmen
  if ( &WBAUZP1.AUFTRPOS_JN = "J") then
    ermittle_ZPAuftragszeilen      
  end if

'Anzahlung erstellen
  if Beldef_numZiel = 21 then
    neue_ZPZeile( &WBAUZP1.NETTO, "Anzahlungssbetrag ", "BAU_ANZ")
  end if
  
'Teilrechnung erstellen
  if Beldef_numZiel = 22 then
    if ( &WPROJ1.BAUTRKUM_JN = "J" ) AND (( anz_ZPTr > 0) OR ( sum_ZPAnzkum > 0)) Then
      neue_ZPZeile( sum_ZPBeleg, "Rechnungsbetrag ", "BAU_TR")
    else
      neue_ZPZeile( &WBAUZP1.NETTO, "Rechnungsbetrag ", "BAU_TR")
    end if 
    if ( &WPROJ1.BAUTRKUM_JN = "J" ) AND (( anz_ZPTr > 0)  OR ( sum_ZPAnzkum > 0)) Then
       if sum_ZPAnzkum > 0 Then
        ZP_AnzposSR
      end if
    end if
    if ( &WPROJ1.BAUTRKUM_JN = "J" ) AND (( anz_ZPTr > 0) OR ( sum_ZPAnzkum > 0)) Then
      ZP_Abzugspos
    end if
  end if

'Teilschlussrechnung erstellen
  if Beldef_numZiel = 23 then
    neue_ZPZeile( sum_ZPBeleg, "Rechnungsbetrag ", "BAU_TR")
    if sum_ZPAnzkum > 0 Then
      ZP_AnzposSR
    end if
    if anz_ZPTr > 0 Then
      ZP_Abzugspos
    end if
  end if

'Schlussrechnung erstellen
  if Beldef_numZiel = 24 then
    neue_ZPZeile( sum_ZPBeleg, "Rechnungsbetrag ", "BAU_TR")
    if sum_ZPAnzkum > 0 Then
      ZP_AnzposSR
    end if
    if anz_ZPTr > 0 Then
      ZP_Abzugspos
    end if
  end if
  
  &WBAUZP1.BEL_NUMMER = &BELSTAMM1.BEL_NUMMER
  &WBAUZP1.STM_NUMMER = &BELSTAMM1.STM_NUMMER
  if ( Beldef_numZiel = 22) then
    &WBAUZP1.ANZBETR = sum_ZPAnz
  end if
  if ( Beldef_numZiel = 23) OR ( Beldef_numZiel = 24) then
    &WBAUZP1.ANZBETR = sum_ZPAnzkum
  end if

  &BELSTAMM1.OP = &BELSTAMM1.SUM_BRUTTO

  store( "BELSTAMM1")
  store( "WBAUZP1")

  erg = rts( "refresh", "WBAUZP1")
  erg = rts( "refresh", "BELZEILE1")
  erg = rts( "refresh", "BELSTAMM1")
  belegauswahl( Beldef_numZiel, &BELSTAMM1.STM_NUMMER)
end function

sub ZP_Abzugspos
  zlr_TR = 0
  zlr_TSR = 0

  opentable( "WBELSTM", "ZBELSTM1")
  opentable( "WBAUZP", "WBAUZP2")
  setindex( "WBAUZP2", "POSNUMMER")
  setfilter( "WBAUZP2", "PROJEKT_NR = '" + &WPROJ1.PROJEKT_NR + "' AND AUSW_JN = 'J'")

  gotofirst( "WBAUZP2")
  do while eof( "WBAUZP2") = 0
    if ( &WBAUZP2.LAUF_NR <> &WBAUZP1.LAUF_NR) AND ( &WBAUZP2.STM_NUMMER <> 0) then
      findfirst( "ZBELSTM1", "STM_NUMMER", &WBAUZP2.STM_NUMMER)
      if &WBAUZP2.BELDEF_NUM = 22 then
        zlr_TR = zlr_TR + 1 
        neue_ZPZeile( &ZBELSTM1.NETTO * -1, "abzüglich " + str$(zlr_TR, 2) + ". Teilrechnung ", "BAU_TR_A")
      end if
      if &WBAUZP2.BELDEF_NUM = 23 then
        zlr_TSR = zlr_TSR + 1 
        neue_ZPZeile( &ZBELSTM1.NETTO * -1, "abzüglich " + str$(zlr_TSR, 2) + ". Teilschlussrechnung ", "BAU_TR_A")
      end if
    end if
    skip( "WBAUZP2", 1)
  loop
end sub

sub ZP_AnzposSR
  opentable( "WBAUZP", "WBAUZP3")
  opentable( "WBELSTM", "ZBELSTM1")
  setindex( "WBAUZP3", "POSNUMMER")
  setfilter( "WBAUZP3", "PROJEKT_NR = '" + &WPROJ1.PROJEKT_NR + "' AND AUSW_JN = 'J'")

  gotofirst( "WBAUZP3")
  do while ( eof( "WBAUZP3") = 0) AND ( &WBAUZP3.LAUF_NR  <> &WBAUZP1.LAUF_NR)
   if ( &WBAUZP3.LAUF_NR <> &WBAUZP1.LAUF_NR) AND ( &WBAUZP3.STM_NUMMER <> 0) then
     if ( &WBAUZP3.BELDEF_NUM =21) then
       findfirst( "ZBELSTM1", "STM_NUMMER", &WBAUZP3.STM_NUMMER)
       neue_ZPZeile( &ZBELSTM1.NETTO * -1, "abzüglich Anzahlung vom " + str$(&WBAUZP3.WUNSCHDAT, 0), "BAU_ANZ")
     end if
   end if
   skip( "WBAUZP3", 1)
  loop
end sub

sub Ermittle_ZPAuftragszeilen
  opentable( "WBELZEIL", "BELZEILET")
  setindex( "BELZEILET", "STM_POSNUMMER")

  opentable( "XEINHEIT", "XEINHEIT")
  erg = findkey("XEINHEIT", "EINHEIT", &BELZEILET.EINHEIT)

  gotofirst( "ZBELSTM")
  do while eof( "ZBELSTM") = 0
    Ermittle_ZPAuftragszeilen2
    skip( "ZBELSTM", 1)
  loop
end sub

sub Ermittle_ZPAuftragszeilen2
  setrangestart( "BELZEILET", "STM_NUMMER", &ZBELSTM.STM_NUMMER, "POS_NR", "")
  setrangeend( "BELZEILET", "STM_NUMMER", &ZBELSTM.STM_NUMMER, "POS_NR", chr$(255))

  gotofirst( "BELZEILET")
  do while eof( "BELZEILET") = 0
    if &BELZEILET.ART = "B" then
      neuer_ZPText( &BELZEILET.ART_TEXT)
    end if
    if &BELZEILET.ART = "R" then
      neuer_ZPText( str$(&BELZEILET.MENGE,0,&XEINHEIT.BELEGDEZ) + " " + &BELZEILET.EINHEIT + " " + &BELZEILET.ART_TEXT)
    end if
    if &BELZEILET.ART = "A" then
      neuer_ZPText( str$(&BELZEILET.MENGE,0,&XEINHEIT.BELEGDEZ) + " " + &BELZEILET.EINHEIT + " " + &BELZEILET.ART_TEXT)
    end if
    skip( "BELZEILET", 1)
  loop
end sub

sub neuer_ZPText( ZPText as String)
  appendblank( "BELZEILE1")
  position = position + 1
  &BELZEILE1.POS_NR = position
  &BELZEILE1.ART = "B"
  &BELZEILE1.ART_TEXT = ZPText
 
  &BELZEILE1.STM_NUMMER = &BELSTAMM1.STM_NUMMER
  &BELZEILE1.DATUM = &BELSTAMM1.DATUM
  &BELZEILE1.FIFODATUM = &BELSTAMM1.DATUM
  &BELZEILE1.LIEFDATUM = &BELSTAMM1.LIEFDATUM
  belegdefinitionvorgabe( "BELZEILE1", "BELEGDEF")
  &BELZEILE1.BELDEF_ZUS = 0
  STORE( "BELZEILE1")
end sub

sub neue_ZPZeile( ZPPreis as double, ZPText as String, ZPRess as String)
  appendblank( "BELZEILE1")
  position = position + 1
  &BELZEILE1.POS_NR = position
  &BELZEILE1.POS_NUMMER = str$( position, 0, 2)
  &BELZEILE1.ART = "R"
  
  &BELZEILE1.ART_NUMMER = ZPRess
  &BELZEILE1.STM_NUMMER = &BELSTAMM1.STM_NUMMER
  &BELZEILE1.DATUM = &BELSTAMM1.DATUM
  &BELZEILE1.FIFODATUM = &BELSTAMM1.DATUM
  &BELZEILE1.LIEFDATUM = &BELSTAMM1.LIEFDATUM
  belegdefinitionvorgabe( "BELZEILE1", "BELEGDEF")
  &BELZEILE1.BELDEF_ZUS = 0
  &BELZEILE1.MENGE = 1
  &BELZEILE1.MENGE_URSP = 1
  &BELZEILE1.LIEFMENGE = 1
  &BELZEILE1.PREIS = ZPPreis
  &BELZEILE1.STD_NETTO = ZPPreis
  &BELZEILE1.PROJEKT_NR = &WPROJ1.PROJEKT_NR
  &BELZEILE1.LAG_NUMMER = &BELSTAMM1.LAG_NUMMER

  findfirst( "RESS", "ART_NUMMER", &BELZEILE1.ART_NUMMER)
  neuepreise = 0
  setzeeinezeile( "RESS", "BELZEILE1", "R")

  &BELZEILE1.STD_NETTO = ZPPreis
  &BELZEILE1.ART_TEXT = ZPText

  lagerdefinition( "BELZEILE1")
  berechne_ek( "BELSTAMM1", "RESS", "BELZEILE1", 1)
  berechne_summe( "BELSTAMM1", "BELZEILE1", 1, 0)
  mis_artikel( "BELSTAMM1", "BELZEILE1", 1)
  mis_adresse_artikel( "BELSTAMM1", "BELZEILE1", 1)
  mis_adresse( "BELSTAMM1", "BELZEILE1", 1)
  STORE( "BELZEILE1")
end sub

'$INCLUDE \BAS\WIADRESS
'$INCLUDE \BAS\WILAGER
'$INCLUDE \BAS\WIFORMEL
'$INCLUDE \BAS\WIBELEG
'$INCLUDE \BAS\WIBELERF
'$INCLUDE \BAS\WISONDPR
'$INCLUDE \BAS\WIMIS
'$INCLUDE \BAS\XFWPRC
'$INCLUDE \BAS\WISERIEN
'$INCLUDE \BAS\WICHARGE
'$INCLUDE \BAS\WMOP
'$INCLUDE \RTS\BAS\TBLINC
'$INCLUDE \RTS\BAS\EXECSQL
'$INCLUDE \RTS\BAS\TBD
'$INCLUDE \RTS\BAS\TBLSCAN
'$INCLUDE \BAS\WIBELDEF
