'DESCRIPTION: Wawi: Dlg: Belegerfassung
'USEDBY: WAWI

dim oldcursor as long
dim def as long
dim erg, beldefnummer as long
dim netto, brutto as double
dim wnderg, wnderg_ausw as string
dim fw_einheiten, kurs as double
dim fw_berechnung as string
dim alte_fremdwaehrung as string
dim alte_rechnungsadresse, alte_steuerberechnung as string
dim altes_datum, altes_liefdatum as long
dim alter_fwkurs, alte_fweinheit, alter_rechrabatt as double
dim deleted as long

dim anzahl_belegzeilen, zaehler, gebucht, liste_aufgeloest as long
dim letzteart, letzteartnummer, letzteseriejn, letztechargejn as string
dim letztemenge, position as double
dim lagerstand_bisdatum as double
dim abbruch, ursprung as long
dim aktuelleswnd, art, positiontext as string
dim preis, handelslisterabatt as double
dim handelsliste, handelaufgeloest as long
dim op_betrag, kreditlimit as double
dim in_fremdwaehrung as long
dim aktuell_letzterbeleg, alte_art as string
dim lieferdatum as long
dim aufgebaut, erfasse as long
dim vorschlagsmenge, alte_pos_nr, pos_nr as double
dim menge as double
dim bz_nummer as long

dim pos(10) as long
dim artnummer(10) as string
dim anzahl(10) as double
dim tiefe as long

dim summe_ek as double

dim letztegeholtenummer as string
dim kassenerfassung as long
dim sendstring, alte_projekt_nr as string
dim runddiffbeleg(5), betrbrutto(5), betrnetto(5), mwst_satz(5) as double

  beldefnummer = readglobal( "BELEGDEFNUMMER")
  def = belegdefinition( beldefnummer, 0)
  vorschlagsmenge = val( readoption( "Vorschlagsmenge Belegerfassung", "1"))
  opentable( "WARTIKEL", "ARTIKEL1")
  opentable( "WRESS", "RESS1")
end

@belegerf.oncreate:
  openmis
  openserien
  openchargen
  fw_berechnung = fw_getberechnung    
  @belegtext = &BELEGDEF.BELDEF_TXT
  kassenerfassung = &BELEGDEF.KASSENERF = "J"
  enable( @fremdwaehrung2, 0)
'je nach vorhandensein erstes Feld selektieren
  if state("BELSTAMM") <> 2 then 
    enable( @adr_numm_a, 4)
    enable( @lag_nummer, 4)
    enable( @bel_nummer, 0)
  else
    enable( @bel_nummer, 4)
  end if

'von zeile
  letzteart = ""
  letzteartnummer = ""
  letztemenge = 0
  letzteseriejn = ""
  letztechargejn = ""

  if &BELZEILE.STM_NUMMER <> 0 then 
    setfilter( "BELZEILE", "BELDEF_ZUS = 0")
  end if
  enable( @buchen, (eof( "BELZEILE") = 0) or (bof( "BELZEILE") = 0))
  
  fenster(0)

  if kassenerfassung then
    if fileexist( "sendstr.exe") then
      sendstring = "sendstr.exe " + chr$(34) + "EOT SOH " + chr$(39) + "C1X" + chr$(39) + " ETB" + chr$(34)
      shell ( sendstring)
    end if
  end if
return

@belegerf.onclose:
  erg = rts( "REFRESH", "BELSTAMM")
return

@lag_nummer.onexitchanged:
  if check_lager = 0 then return
  opentable( "WLAGER", "LAGER")
  findfirst( "LAGER", "LAG_NUMMER", &BELSTAMM.LAG_NUMMER)
  if (&LAGER.LAG_NUM_UM <> "") and (&BELSTAMM.LAG_NUM_UM = "") then 
    &BELSTAMM.LAG_NUM_UM = &LAGER.LAG_NUM_UM
  end if
  lager_lieferadresse
return

@lag_num_um.onexitchanged:
  if check_lager = 0 then return
return

function check_lager as long
  check_lager = 1
  if reccount( "BELZEILE") > 0 then
    erg = messagebox( "Bereits Zeilen vorhanden.|Lageränderung nicht mehr möglich.", 2)
    valid = 0
    check_lager = 0
  end if
end function

@datum.onexitchanged:
  valid = checkdatum( &BELSTAMM.DATUM)
  if valid = 0 then return
  enable( "BELSTAMM", 0)
  fw_geaendert
  datumgeaendert
  if (&BELSTAMM.BELDEF_NUM < 16) and (&BELSTAMM.BELDEF_NUM > 10) then 
    &BELSTAMM.LIEFDATUM = &BELSTAMM.DATUM
    liefdatum_geaendert
  end if 
  enable( "BELSTAMM", 1)
return

@liefdatum.onexitchanged:
  liefdatum_geaendert
return

@steuerber.onclick:
  if state("BELSTAMM") = 2 then return
  if (eof("BELZEILE") = 1) and (bof("BELZEILE") = 1) then return
  if &BELSTAMM.STEUERBER = @steuerber then return
  erg = messagebox( "Steuerberechnung wurde geändert.|Belegzeilen werden neu berechnet!", 1023)
  if erg <> 4 then  
    valid = 0
    return
  end if
  oldcursor = rts( "CURSOR", 11)
  &BELSTAMM.STEUERBER = @steuerber
  store( "BELSTAMM")
  enable( "BELSTAMM", 0)
  openrange( "BELZEILE")
  do while eof( "BELZEILE") = 0
    if &BELSTAMM.STEUERBER = "B" then
      &BELZEILE.PREIS = round( &BELZEILE.PREIS * ((100 + &BELZEILE.MWST_SATZ) / 100), 5)
    else
      &BELZEILE.PREIS = round( &BELZEILE.PREIS / ((100 + &BELZEILE.MWST_SATZ) / 100), 5)
    end if
    berechnezeile( "BELSTAMM", "BELZEILE")
    skip( "BELZEILE", 1)
  loop
  closerange( "BELZEILE")
  enable( "BELSTAMM", 1)
  alte_steuerberechnung = &BELSTAMM.STEUERBER
  oldcursor = rts( "CURSOR", oldcursor)
return

@vertreter.onpress:
  valid = check_bearbeiten( @belegtext, &BELEGDEF.LOESCHART, aktuell_letzterbeleg, "BELSTAMM")
  if valid = 0 then return
  wnderg = window( "\WND\WBELVTR")
return

@naturalrabatt.onpress:
  zeile_beenden
  valid = check_bearbeiten( @belegtext, &BELEGDEF.LOESCHART, aktuell_letzterbeleg, "BELSTAMM")
  if valid = 0 then return
  naturalrabatt_holen
return

@adr_numm_a.onexitchanged:
  if kassenerfassung then
    cancel( "BELZEILE")
  end if

  enable( "BELSTAMM", 0)
  auftragsadresse( "BELSTAMM")
  adr_geaendert
  rechrabatt_geaendert
  gosub partner_a_onexitchanged
  lager_lieferadresse
  enable( "BELSTAMM", 1)

  if kassenerfassung then
    if &BELSTAMM.BELDEF_NUM = 18 then enable( @menge, 4)
    enable( @projekt_nr_z, 4)
    gosub belzeile_onenter
  end if
return

@adr_numm_a.onexit:
  if kassenerfassung and (&BELSTAMM.STEUERBER <> "") then
    if &BELSTAMM.BELDEF_NUM = 18 then enable( @menge, 4)
    enable( @projekt_nr_z, 4)
    gosub belzeile_onenter
  end if
return

@adr_numm_r.onexitchanged:
  enable( "BELSTAMM", 0)
  rechnungsadresse( "BELSTAMM")
  adr_geaendert
  rechrabatt_geaendert
  enable( "BELSTAMM", 1)
return

@adr_numm_l.onexitchanged:
  enable( "BELSTAMM", 0)
  lieferadresse( "BELSTAMM")
  gosub liefadr_geaendert
  enable( "BELSTAMM", 1)
return

sub lager_lieferadresse
  if (&LAGER.ADR_NUMM_L <> "") and (&BELEGDEF.VST_UST = "V") and (&BELSTAMM.ADR_NUMM_L = "") then
    lieferadresse( "BELSTAMM")
  end if
  if (&LAGER.K_STL <> "") and (&BELSTAMM.K_STL = "") then
    &BELSTAMM.K_STL = &LAGER.K_STL
  end if
  if (&LAGER.K_TRG <> "") and (&BELSTAMM.K_TRG = "") then
    &BELSTAMM.K_TRG = &LAGER.K_TRG
  end if
  if (&LAGER.ADR_NUMM_R <> "") and (&BELEGDEF.VST_UST = "U") and (&BELSTAMM.ADR_NUMM_R <> &LAGER.ADR_NUMM_R) then
    erg = messagebox( "Die Rechnungsadresse unterscheidet sich von|der am Lager hinterlegten Konsignationslageradresse.", 2)
  end if
end sub

partner_a_onexitchanged:
@partner_a.onexitchanged:
  if (&BELSTAMM.PARTNER_R = "") and (&BELSTAMM.ADR_NUMM_A = &BELSTAMM.ADR_NUMM_R) then
    &BELSTAMM.PARTNER_R = &BELSTAMM.PARTNER_A
  end if
return

@zahl_kond.onexitchanged:
  zahlungskonditionen( "BELSTAMM")
return

@fremdwaehrung.onexitchanged:
  fw_geaendert
return

@adressart.onexitchanged:
  if state("BELSTAMM") = 2 then return
  if (eof("BELZEILE") = 1) and (bof("BELZEILE") = 1) then return
  erg = messagebox( "Adressart wurde geändert.|Belegzeilen werden neu berechnet!", 1023)
  if erg <> 4 then  
    valid = 0
    return
  end if
  adressart_geaendert
return

@fw_kurs.onexitchanged:
  fwkurs_geaendert
return

@rechrabatt_s.onexitchanged:
  if (eof("BELZEILE") = 1) and (bof("BELZEILE") = 1) then return
  erg = messagebox( "Rechnungsrabatt% wurde geändert.|Belegzeilen werden neu berechnet!", 1023)
  if erg <> 4 then  
    valid = 0
    return
  end if
  rechrabatt_geaendert
return

@preisliste.onexitchanged:
  if state("BELSTAMM") = 2 then return
  if (eof("BELZEILE") = 1) and (bof("BELZEILE") = 1) then return
  erg = messagebox( "Preisliste wurde geändert.|Möchten Sie die Belegzeilen neu berechnen?", 1023)
  if erg = 0 then
    valid = 0
    return
  end if
  if erg = 4 then
    preisliste_geaendert
  end if  
return

@statver.onexitchanged:
  if state("BELSTAMM") = 2 then return
  if (eof("BELZEILE") = 1) and (bof("BELZEILE") = 1) then return
  erg = messagebox( "Verfahren wurde geändert.|Möchten Sie die Belegzeilen anpassen?", 1023)
  if erg = 0 then
    valid = 0
    return
  end if
  if erg = 4 then
    stat_geaendert( "STATVER", "STATVER")
  end if  
return

@statzwe.onexitchanged:
  if state("BELSTAMM") = 2 then return
  if (eof("BELZEILE") = 1) and (bof("BELZEILE") = 1) then return
  erg = messagebox( "Verkehrszweig wurde geändert.|Möchten Sie die Belegzeilen anpassen?", 1023)
  if erg = 0 then
    valid = 0
    return
  end if
  if erg = 4 then
    stat_geaendert( "STATZWE", "STATZWE")
  end if  
return

@statart.onexitchanged:
  if state("BELSTAMM") = 2 then return
  if (eof("BELZEILE") = 1) and (bof("BELZEILE") = 1) then return
  erg = messagebox( "Art des Geschäftes wurde geändert.|Möchten Sie die Belegzeilen anpassen?", 1023)
  if erg = 0 then
    valid = 0
    return
  end if
  if erg = 4 then
    stat_geaendert( "STATART", "STATART")
  end if  
return

@lkz_l.onexitchanged:
@lkz_a.onexitchanged:
  if state("BELSTAMM") = 2 then return
  if (eof("BELZEILE") = 1) and (bof("BELZEILE") = 1) then return
  erg = messagebox( "Es wurden bereits Belegzeilen erfasst.|Land wird übernommen.", 1023)
  if erg <> 4 then  
    valid = 0
    return
  end if
liefadr_geaendert:
  if (&BELSTAMM.LKZ_L <> "") and (&BELEGDEF.VST_UST = "U") then
    stat_geaendert( "LKZ_L", "STATLKZ")
  else
    stat_geaendert( "LKZ_A", "STATLKZ")
  end if
return

sub stat_geaendert( feldvon as string, feldauf as string)
  store( "BELSTAMM")
  oldcursor = rts( "CURSOR", 11)
  enable( "BELSTAMM", 0)
  openrange( "BELZEILE")
  do while eof( "BELZEILE") = 0
    putfield( "BELZEILE", feldauf, getfield( "BELSTAMM", feldvon))
    store( "BELZEILE")
    skip( "BELZEILE", 1)
  loop
  closerange( "BELZEILE")
  store( "BELSTAMM")
  enable( "BELSTAMM", 1)
  oldcursor = rts( "CURSOR", oldcursor)
end sub

@projekt_nr.onexitchanged:
  opentable( "WPROJ")
  if findkey( "WPROJ", "PROJEKT_NR", &BELSTAMM.PROJEKT_NR) = 1 then
    if &WPROJ.K_STL <> "" then
      &BELSTAMM.K_STL = &WPROJ.K_STL
    end if
    if &WPROJ.K_TRG <> "" then
      &BELSTAMM.K_TRG = &WPROJ.K_TRG
    end if
  end if

  if (eof("BELZEILE") = 1) and (bof("BELZEILE") = 1) then return
  openrange( "BELZEILE")
  if &BELSTAMM.PROJEKT_NR <> "" then
    erg = messagebox( "Es wurden bereits Belegzeilen erfasst.|Kostenträger oder Kostenstelle wird neu vom Projekt übernommen.|Eventuelle projektspezifische Preise werden nicht neu übernommen.", 1023)
    if erg <> 4 then  
      valid = 0
      closetable( "WPROJ")
      return
    end if
  end if
  oldcursor = rts( "CURSOR", 11)
  do while eof( "BELZEILE") = 0
    if &BELSTAMM.K_TRG <> "" then
      &BELZEILE.K_TRG = &BELSTAMM.K_TRG
    end if
    if &BELSTAMM.K_STL <> "" then 
      &BELZEILE.K_STL = &BELSTAMM.K_STL
    end if
    &BELZEILE.PROJEKT_NR = &BELSTAMM.PROJEKT_NR
    store( "BELZEILE")
    skip( "BELZEILE", 1)
  loop
  closetable( "WPROJ")
  oldcursor = rts( "CURSOR", oldcursor)
  closerange( "BELZEILE")
return

sub datumgeaendert
dim temp_datum as long
  store( "BELSTAMM")
  oldcursor = rts( "CURSOR", 11)
  openrange( "BELZEILE")
  temp_datum = &BELSTAMM.DATUM
  do while eof( "BELZEILE") = 0
    &BELSTAMM.DATUM = altes_datum
    mis( -1)
    &BELSTAMM.DATUM = temp_datum
    mis( 1)
    &BELZEILE.DATUM = &BELSTAMM.DATUM
    &BELZEILE.FIFODATUM = &BELSTAMM.DATUM
    store( "BELZEILE")
    skip( "BELZEILE", 1)
  loop
  closerange( "BELZEILE")
  altes_datum = temp_datum
  oldcursor = rts( "CURSOR", oldcursor)
end sub

sub liefdatum_geaendert
dim temp_datum as long
  store( "BELSTAMM")
  oldcursor = rts( "CURSOR", 11)
  openrange( "BELZEILE")
  temp_datum = &BELSTAMM.LIEFDATUM
  do while eof( "BELZEILE") = 0
    &BELSTAMM.LIEFDATUM = altes_liefdatum
    mis( -1)
    &BELSTAMM.LIEFDATUM = temp_datum
    mis( 1)
    &BELZEILE.LIEFDATUM = &BELSTAMM.LIEFDATUM
    store( "BELZEILE")
    skip( "BELZEILE", 1)
  loop
  closerange( "BELZEILE")
  altes_liefdatum = temp_datum
  oldcursor = rts( "CURSOR", oldcursor)
end sub

sub adr_geaendert
dim temp_adresse as string
dim preisholen as long
  if state("BELSTAMM") = 2 then 
    hole_kreditlimit
    exit sub
  end if
  if (eof("BELZEILE") = 1) and (bof("BELZEILE") = 1) then 
    hole_kreditlimit
    exit sub
  end if

  erg = messagebox( "Adresse wurde geändert.|Möchten Sie die Preise neu berechnen?", 1023)
  preisholen = erg = 4
  if erg = 0 then
    valid = 0
    return
  end if
  store( "BELSTAMM")
  oldcursor = rts( "CURSOR", 11)
  enable( "BELSTAMM", 0)
  openrange( "BELZEILE")
  temp_adresse = &BELSTAMM.ADR_NUMM_R
  do while eof( "BELZEILE") = 0
    &BELSTAMM.ADR_NUMM_R = alte_rechnungsadresse
    mis( -1)
    &BELSTAMM.ADR_NUMM_R = temp_adresse
    setze_mwst_satz( "BELSTAMM", "BELZEILE")
    if preisholen then
      ermittlepreis( "BELZEILE", 0, 0)    
    end if  
    mis( 1)
    if (&BELSTAMM.LKZ_L <> "") and (&BELEGDEF.VST_UST = "U") then
      &BELZEILE.STATLKZ = &BELSTAMM.LKZ_L
    else
      &BELZEILE.STATLKZ = &BELSTAMM.LKZ_A
    end if
    berechnezeile( "BELSTAMM", "BELZEILE")
    store( "BELZEILE")
    skip( "BELZEILE", 1)
  loop
  closerange( "BELZEILE")
  store( "BELSTAMM")
  enable( "BELSTAMM", 1)
  alte_rechnungsadresse = temp_adresse
  oldcursor = rts( "CURSOR", oldcursor)
  hole_kreditlimit
  check_kreditlimit
end sub

sub fw_geaendert
dim preis as double
  store( "BELSTAMM")
  oldcursor = rts( "CURSOR", 11)
  enable( "BELSTAMM", 0)
  fremdwaehrung( "BELSTAMM")

  openrange( "BELZEILE")
  do while eof( "BELZEILE") = 0
    if (&BELZEILE.ART = "A") or (&BELZEILE.ART = "P") or (&BELZEILE.ART = "R") then 
      mis( -1)
      setze_mwst_satz( "BELSTAMM", "BELZEILE")
      preis = &BELZEILE.PREIS
      if alte_steuerberechnung = "B" then
        preis = &BELZEILE.PREIS / (1 + ( &BELZEILE.MWST_SATZ / 100))
      end if

      if (alte_fremdwaehrung <> &BELSTAMM.FW_ISOCODE) or ((altes_datum <> &BELSTAMM.DATUM) and (&BELEGDEF.PREIS_KURS = "J")) then
        if alte_fremdwaehrung <> "" then
          preis = fw_getbetrag_b( preis, alter_fwkurs, alte_fweinheit)
        end if
        if &BELSTAMM.FW_ISOCODE <> "" then
          preis = fw_getfwbetrag_b( preis, &BELSTAMM.FW_KURS, &BELSTAMM.FW_EHT)
        end if
      end if

      if &BELSTAMM.STEUERBER = "B" then
        preis = preis * (100 + &BELZEILE.MWST_SATZ) / 100
      end if
      &BELZEILE.PREIS = round( preis, 5)
      berechnezeile( "BELSTAMM", "BELZEILE")
      mis( 1)
    end if
    skip( "BELZEILE", 1)
  loop
  closerange( "BELZEILE")
  alte_fremdwaehrung = &BELSTAMM.FW_ISOCODE
  alte_steuerberechnung = &BELSTAMM.STEUERBER
  enable( "BELSTAMM", 1)
  oldcursor = rts( "CURSOR", oldcursor)
end sub

sub adressart_geaendert
  store( "BELSTAMM")
  oldcursor = rts( "CURSOR", 11)
  enable( "BELSTAMM", 0)
  loeschesumme( "BELSTAMM")
  openrange( "BELZEILE")
  do while eof( "BELZEILE") = 0
    if (&BELZEILE.ART = "A") or (&BELZEILE.ART = "P") or (&BELZEILE.ART = "R") then 
      preis = &BELZEILE.PREIS
      if &BELSTAMM.STEUERBER = "B" then
        preis = &BELZEILE.PREIS / (1 + ( &BELZEILE.MWST_SATZ / 100))
      end if
      setze_mwst_satz( "BELSTAMM", "BELZEILE")
      if &BELSTAMM.STEUERBER = "B" then
        preis = preis * (100 + &BELZEILE.MWST_SATZ) / 100
      end if
      &BELZEILE.PREIS = round( preis, 5)
      berechnezeile( "BELSTAMM", "BELZEILE")
      berechne_summe( "BELSTAMM", "BELZEILE", 1, 0)
    end if
    skip( "BELZEILE", 1)
  loop
  closerange( "BELZEILE")
  store( "BELSTAMM")
  enable( "BELSTAMM", 1)
  oldcursor = rts( "CURSOR", oldcursor)
end sub

sub fwkurs_geaendert
dim wert as double
  store( "BELSTAMM")
  oldcursor = rts( "CURSOR", 11)
  enable( "BELSTAMM", 0)
  openrange( "BELZEILE")
  do while eof( "BELZEILE") = 0
    if (&BELZEILE.ART = "A") or (&BELZEILE.ART = "P") or (&BELZEILE.ART = "R") then 
      mis( -1)
      wert = &BELZEILE.NETTO
      wert = fw_getbetrag_b( wert, alter_fwkurs, &BELSTAMM.FW_EHT)
      wert = fw_getfwbetrag_b( wert, &BELSTAMM.FW_KURS, &BELSTAMM.FW_EHT)
      &BELZEILE.NETTO = round( wert, 2)
      &BELZEILE.EK = round( &BELZEILE.NETTO / &BELZEILE.MENGE, 5)
      mis( 1)
    end if
    skip( "BELZEILE", 1)
  loop
  closerange( "BELZEILE")
  alter_fwkurs = &BELSTAMM.FW_KURS 
  enable( "BELSTAMM", 1)
  oldcursor = rts( "CURSOR", oldcursor)
end sub

sub rechrabatt_geaendert
  store( "BELSTAMM")
  oldcursor = rts( "CURSOR", 11)
  enable( "BELSTAMM", 0)
  openrange( "BELZEILE")
  do while eof( "BELZEILE") = 0
    mis( -1)
    &BELZEILE.RECHRABATT = &BELSTAMM.RECHRABATT
    berechnezeile( "BELSTAMM", "BELZEILE")
    mis( 1)
    store( "BELZEILE")
    skip( "BELZEILE", 1)
  loop
  closerange( "BELZEILE")
  store( "BELSTAMM")
  enable( "BELSTAMM", 1)
  oldcursor = rts( "CURSOR", oldcursor)
end sub

sub preisliste_geaendert
  store( "BELSTAMM")
  oldcursor = rts( "CURSOR", 11)
  enable( "BELSTAMM", 0)
  openrange( "BELZEILE")
  do while eof( "BELZEILE") = 0
    mis( -1)
    ermittlepreis( "BELZEILE", 0, 0)
    berechnezeile( "BELSTAMM", "BELZEILE")
    mis( 1)
    store( "BELZEILE")
    skip( "BELZEILE", 1)
  loop
  closerange( "BELZEILE")
  store( "BELSTAMM")
  enable( "BELSTAMM", 1)
  oldcursor = rts( "CURSOR", oldcursor)
end sub

@belstamm.onbeforeedit:
  valid = check_bearbeiten( @belegtext, &BELEGDEF.LOESCHART, aktuell_letzterbeleg, "BELSTAMM")
  if valid = 0 then return
  alte_fremdwaehrung = &BELSTAMM.FW_ISOCODE
  alte_rechnungsadresse = &BELSTAMM.ADR_NUMM_R
  altes_datum = &BELSTAMM.DATUM
  altes_liefdatum = &BELSTAMM.LIEFDATUM
  alter_fwkurs = &BELSTAMM.FW_KURS
  alte_fweinheit = &BELSTAMM.FW_EHT

  alte_steuerberechnung = &BELSTAMM.STEUERBER
  alter_rechrabatt = &BELSTAMM.RECHRABATT
'  makrofile( "\BAS\WMOP|MINUS")
return

@bel_nummer.onexitnewrec:
  belegnummer( "BELSTAMM", "BELEGDEF")
  if valid = 0 then return
  setfilter( "BELZEILE", "BELDEF_ZUS = 0")
  enable( @bel_nummer, 0)
'je nach vorhandensein erstes Feld selektieren
  enable( @adr_numm_a, 4)
  enable( @lag_nummer, 4)

  aktuell_letzterbeleg = &BELSTAMM.BEL_NUMMER
return 

@bel_nummer.onselect:
  if state( "BELSTAMM") = 2 then 
    &BELSTAMM.BEL_NUMMER = suchenummer( "Beleg", str$(&BELEGDEF.BELDEF_NUM), &BELSTAMM.BEL_NUMMER)
    if &BELSTAMM.BEL_NUMMER <> "" then 
      setfilter( "BELZEILE", "BELDEF_ZUS = 0")
    end if
    return
  end if
  wnderg_ausw = window( "\WND\WBELEGA3" + "|" + str$(beldefnummer) + "+" + &BELSTAMM.ARCHIVART + "+" + &BELSTAMM.BEL_NUMMER + "+" + str$(&BELSTAMM.STM_NUMMER) + "|" + str$(beldefnummer) + "++|" + str$(beldefnummer) + "+" + " " + "+" + chr$(255))
  opentable( "WBELSTM", "BELSTAMM1")
  erg = findkey( "BELSTAMM1", "STM_NUMMER", val(wnderg_ausw))
  erg = findkey( "BELSTAMM", "BELDEF_NUM", &BELSTAMM1.BELDEF_NUM, "ARCHIVART", &BELSTAMM1.ARCHIVART, "BEL_NUMMER", &BELSTAMM1.BEL_NUMMER, "STM_NUMMER", &BELSTAMM1.STM_NUMMER) 
  closetable( "BELSTAMM1")
  gosub belstamm_onrecordchange
return

@plz_a.onexitchanged:
  opentable( "XPLZ")
  if findkey( "XPLZ", "PLZ", &BELSTAMM.PLZ_A, "LKZ", &BELSTAMM.LKZ_A) = 1 then
    &BELSTAMM.ORT_A = &XPLZ.ORT
  end if
return

@plz_r.onexitchanged:
  opentable( "XPLZ")
  if findkey( "XPLZ", "PLZ", &BELSTAMM.PLZ_R, "LKZ", &BELSTAMM.LKZ_R) = 1 then
    &BELSTAMM.ORT_R = &XPLZ.ORT
  end if
return

@plz_l.onexitchanged:
  opentable( "XPLZ")
  if findkey( "XPLZ", "PLZ", &BELSTAMM.PLZ_L, "LKZ", &BELSTAMM.LKZ_L) = 1 then
    &BELSTAMM.ORT_L = &XPLZ.ORT
  end if
return

@BELSTAMM.onnewrecord:
  enable( @bel_nummer, 1)
  enable( @bel_nummer, 4)

  if kassenerfassung then
    if fileexist( "sendstr.exe") then
      sendstring = "sendstr.exe " + chr$(34) + "EOT SOH " + chr$(39) + "C1X" + chr$(39) + " ETB" + chr$(34)
      shell ( sendstring)
    end if
  end if
return

@BELSTAMM.oncopyrecord:
  &BELSTAMM.BEL_NUMMER = ""
  &BELSTAMM.STM_NUMMER = 0
  loeschesumme( "BELSTAMM")
  &BELSTAMM.DATUM = date
  &BELSTAMM.LIEFDATUM = date
  &BELSTAMM.ARCHIVVON = ""
  &BELSTAMM.ARCHIVDAT = 0
  &BELSTAMM.ARCHIVART = ""
  &BELSTAMM.GEDRUCKT = 0
  &BELSTAMM.FIBU_GEB = ""
return

@BELSTAMM.onbeforepost:
  valid = checkdatum( &BELSTAMM.DATUM)
  if &BELSTAMM.LIEFDATUM = 0 then
    &BELSTAMM.LIEFDATUM = &BELSTAMM.DATUM
  end if
return

@BELSTAMM.onbeforedelete:
  if erhaltenummer( "Beleg", str$(&BELEGDEF.BELDEF_NUM), &BELSTAMM.BEL_NUMMER) = 0 then return

  valid = check_bearbeiten( @belegtext, &BELEGDEF.LOESCHART, aktuell_letzterbeleg, "BELSTAMM")
  if valid = 0 then return

  openrange( "BELZEILE")
  do while (eof( "BELZEILE") = 0) and (valid = 1)
    if (&BELZEILE.SERNUM_JN = "J") and ((&BELSTAMM.SERNUM_JN = "J") or (&BELSTAMM.SERNUM_JN = "Z")) then
      valid = checkserien( "BELZEILE", &BELZEILE.LAGER * &BELZEILE.LAGER_L, &BELZEILE.MENGE)
    end if
    if (&BELZEILE.CHARGE_JN = "J") and ((&BELSTAMM.CHARGE_JN = "J") or (&BELSTAMM.CHARGE_JN = "Z")) then
      valid = checkchargen( "BELZEILE", &BELZEILE.LAGER * &BELZEILE.LAGER_L, &BELZEILE.MENGE)
    end if
    skip ( "BELZEILE", 1)
  loop
  closerange( "BELZEILE")
return

@BELSTAMM.ondelete:
  oldcursor = rts( "CURSOR", 11)

  if kassenerfassung then
    if fileexist( "sendstr.exe") then
      sendstring = "sendstr.exe " + chr$(34) + "EOT SOH " + chr$(39) + "C1X" + chr$(39) + " ETB" + chr$(34)
      shell ( sendstring)
    end if
  end if

  bemerkung_loeschen( "Beleg", str$(&BELSTAMM.STM_NUMMER))

  openrange( "BELZEILE")
  do while eof( "BELZEILE") = 0
    bemerkung_loeschen( "Belegzeile", str$(&BELZEILE.BZ_NUMMER))
    if (&BELZEILE.SERNUM_JN = "J") and ((&BELSTAMM.SERNUM_JN = "J") or (&BELSTAMM.SERNUM_JN = "Z")) then
      loescheserien( "BELZEILE", &BELZEILE.LAGER * &BELZEILE.LAGER_L, &BELZEILE.MENGE)
    end if
    if (&BELZEILE.CHARGE_JN = "J") and ((&BELSTAMM.CHARGE_JN = "J") or (&BELSTAMM.CHARGE_JN = "Z")) then
      loeschechargen( "BELZEILE", &BELZEILE.LAGER * &BELZEILE.LAGER_L, &BELZEILE.MENGE)
    end if
    mis( -1)
  
    deleterecord( "BELZEILE")
  loop

  closerange( "BELZEILE")

'löschen der alten einträge in belvtr
  opentable( "WBELVTR", "BELVTR")
  setrangestart( "BELVTR", "STM_NUMMER", &BELSTAMM.STM_NUMMER, "VTR_NUMMER", "")
  setrangeend( "BELVTR", "STM_NUMMER", &BELSTAMM.STM_NUMMER, "VTR_NUMMER", chr$(255))
  gotofirst( "BELVTR")
  do while eof( "BELVTR") = 0
    deleterecord( "BELVTR")
  loop
  closetable( "BELVTR")

'dienstleistungszeilen als nicht verrechnet setzen
  openquery( "SQL")
  addsql( "SQL", "UPDATE WDIENST SET BEL_NUMMER = '', STM_NUMMER = 0, VERR_JN = 'N' WHERE")
  addsql( "SQL", "STM_NUMMER = %1 AND", &BELSTAMM.STM_NUMMER)
  addsql( "SQL", "MANDANT = '" + upper$( CompanyName) + "'")
  execsql( "SQL")

'Zahlungsplan als nicht verrechnet setzen
  openquery( "SQL")
  addsql( "SQL", "UPDATE WBAUZP SET BEL_NUMMER = '', STM_NUMMER = 0, ANZBETR = 0 WHERE")
  addsql( "SQL", "STM_NUMMER = %1 AND", &BELSTAMM.STM_NUMMER)
  addsql( "SQL", "MANDANT = '" + upper$( CompanyName) + "'")
  execsql( "SQL")
  opentable( "WBAUZP")
  erg = rts( "refresh", "WBAUZP") 
  closetable( "WBAUZP")
  oldcursor = rts( "CURSOR", oldcursor)
  deleted = 1
return

sub openrange( belzeile as record)
  enable( "BELZEILE", 0)
  setfilter( "BELZEILE", "")
  gotofirst( "BELZEILE")
end sub

sub closerange( belzeile as record)
  setfilter( "BELZEILE", "BELDEF_ZUS = 0")
  if kassenerfassung then
    if &BELSTAMM.BELDEF_NUM = 19 then setfilter( "BELZEILE", "MENGE <> 0 OR MENGE_URSP = 0")
  end if
  gotofirst( "BELZEILE")
  enable( "BELZEILE", 1)
end sub


'*****************************************************************************************
'Belegzeilen

belzeile_onrecordchange:
@belzeile.onrecordchange:
  if aufgebaut = 0 then 
    aufgebaut = 1 
    fenster(0)
  end if
  fenster(1)
  gosub belstamm_onrecordchange 
  erfasse = 0
return

@belstamm.onrecordchange:
  hole_kreditlimit
belstamm_onrecordchange:
  if (&BELZEILE.ART_NUMMER = &ARTIKEL1.ART_NUMMER) and (&BELZEILE.ART = &ARTIKEL1.ART) then
    @lagernd = str$( &ARTIKEL1.BESTAND, 20, 2)
    @erwzugang = str$( &ARTIKEL1.ERWZUGANG, 20, 2)
    @erwabgang = str$( &ARTIKEL1.ERWABGANG, 20, 2)
    @verfuegbar = str$( &ARTIKEL1.BESTAND - &ARTIKEL1.ERWABGANG + &ARTIKEL1.ERWZUGANG, 20, 2)
    return
  end if
  if findkey( "ARTIKEL1", "ART_NUMMER", &BELZEILE.ART_NUMMER) then
    @lagernd = str$( &ARTIKEL1.BESTAND, 20, 2)
    @erwzugang = str$( &ARTIKEL1.ERWZUGANG, 20, 2)
    @erwabgang = str$( &ARTIKEL1.ERWABGANG, 20, 2)
    @verfuegbar = str$( &ARTIKEL1.BESTAND - &ARTIKEL1.ERWABGANG + &ARTIKEL1.ERWZUGANG, 20, 2)
  else
    @lagernd = str$( 0, 0, 2)
    @erwzugang = str$( 0, 0, 2)
    @erwabgang = str$( 0, 0, 2)
    @verfuegbar = str$( 0, 0, 2)
  end if
  enable( @buchen, (eof( "BELZEILE") = 0) or (bof( "BELZEILE") = 0))
return

belzeile_onenter:
@belzeile.onenter:
  store( "BELSTAMM")

  if kassenerfassung then
    gotolast( "BELZEILE")
    appendblank( "BELZEILE")
  end if
return

@belzeile.onbeforeedit:
  valid = check_bearbeiten( @belegtext, &BELEGDEF.LOESCHART, aktuell_letzterbeleg, "BELSTAMM")
  if valid = 0 then return

  if (&BELZEILE.ART <> "P") and (&BELZEILE.ART <> "H") and (&BELZEILE.ART <> "K") and (&BELZEILE.ART <> "A") and (&BELZEILE.ART <> "R") then return

  valid = check_handel( 1)
  if valid = 0 then return

  letzteartnummer = &BELZEILE.ART_NUMMER
  letzteart = &BELZEILE.ART
  letztemenge = &BELZEILE.MENGE
  letzteseriejn = &BELZEILE.SERNUM_JN
  letztechargejn = &BELZEILE.CHARGE_JN
return

@belzeile.onbeforeeditcached:
  mis( -1)
  zweitebelegzeile( "edit")
return

@belzeile.onbeforeinsert:
  letzteart = ""
  letzteartnummer = ""
  letztemenge = 0
  letzteseriejn = ""
  letztechargejn = ""
  valid = check_bearbeiten( @belegtext, &BELEGDEF.LOESCHART, aktuell_letzterbeleg, "BELSTAMM")
return

belzeile_onnewrecord:
@belzeile.onnewrecord:
  neuerdatensatz( "BELZEILE", 0)
  &BELZEILE.ART = alte_art

  if kassenerfassung then
    &BELZEILE.ART = "A"
    &BELZEILE.MENGE = vorschlagsmenge
    &BELZEILE.MENGE_URSP = &BELZEILE.MENGE
    letztemenge = &BELZEILE.MENGE
    letzteart = &BELZEILE.ART
    &BELZEILE.PROJEKT_NR = alte_projekt_nr
  end if
return

@belzeile.onbeforepost:
  if (&BELZEILE.ART = "S") then
    berechnezwischensumme( "BELSTAMM", "BELZEILE")
    return
  end if

  if (&BELZEILE.ART <> "P") and (&BELZEILE.ART <> "H") and (&BELZEILE.ART <> "K") and (&BELZEILE.ART <> "A") and (&BELZEILE.ART <> "R") then return

  if &BELZEILE.POS_NUMMER = "" then 
    &BELZEILE.POS_NUMMER = str$( &BELZEILE.POS_NR, 0, 2)
  end if

  if &BELZEILE.ART_NUMMER = "" then
    cancel( "BELZEILE") 
    valid = 0
    return 
  end if

  if (&BELZEILE.ART = "R") then return

  if &BELZEILE.AUFMASS1 * &BELZEILE.AUFMASS2 * &BELZEILE.AUFMASS3 <> 0 then
    &BELZEILE.MENGE = &BELZEILE.AUFMASS1 * &BELZEILE.AUFMASS2 * &BELZEILE.AUFMASS3
  end if

  if (letzteart = &BELZEILE.ART) and (letzteartnummer = &BELZEILE.ART_NUMMER) then
    letzteart = ""
    letzteartnummer = ""
    letztemenge = 0
    letzteseriejn = ""
    letztechargejn = ""
  end if

  liste_aufgeloest = 0
  if (&BELZEILE.ART = "P") or (&BELZEILE.ART = "H") or (&BELZEILE.ART = "K") then
    openquery( "SQL", "DELETE FROM XHILF WHERE USERID = '" + USERID + "' AND MANDANT = '" + upper$( CompanyName) + "'")
    execsql( "SQL") 
    closetable("SQL")
    opentable( "XHILF", "HILF")
    setfilter( "HILF", "USERID = '" + USERID + "'")
    setautofield( "HILF", "LFD_NUMMER", 0)
    liste_aufgeloest = produktion_aufloesen( "BELZEILE", 0, 1)
    if reccount( "HILF") > 0 then
      if &BELEGDEF.LAGER_KORR = "W" then
        erg = dialog( "\DLG\XWARNUNG")
        if erg = 0 then
          belegzeilenloeschen_liste
          valid = 0
          return 
        end if
      end if
      if &BELEGDEF.LAGER_KORR = "A" then
        erg = dialog( "\DLG\XFEHLER")
        belegzeilenloeschen_liste
        valid = 0
        return 
      end if
    end if
    closetable( "HILF")
  end if

'Standard und bei Abbruch der Auflösung Lagerstand der Liste checken
  findfirst( "ARTIKEL1", "ART_NUMMER", &BELZEILE.ART_NUMMER)
  if (liste_aufgeloest = 0) and (erfasse = 1) then
    if ((&BELZEILE.SERNUM_JN = "J") and (&BELSTAMM.SERNUM_JN = "Z")) or ((&BELZEILE.CHARGE_JN = "J") and (&BELSTAMM.CHARGE_JN = "Z")) then 
      valid = checklagerstand( "ARTIKEL1", "BELZEILE", &BELEGDEF.LAGER_KORR, 1, "Z")
      if valid = 0 then erg = messagebox( "Bei diesem Beleg ist eine Serien/Chargennummer zwingend.|Die angegebene Menge kann nicht abgebucht werden.|Sie können die Zeile löschen oder die Menge reduzieren.", 2)
    else
      valid = checklagerstand( "ARTIKEL1", "BELZEILE", &BELEGDEF.LAGER_KORR, 1, "")
    end if
  end if

'löscht alte Seriennummern falls der Artikel gewechselt wurde
  if (valid = 1) and (letzteartnummer <> &BELZEILE.ART_NUMMER) and (letzteseriejn = "J") and ((&BELSTAMM.SERNUM_JN = "J") or (&BELSTAMM.SERNUM_JN = "Z")) then
    valid = checkserien( "BELZEILE", &BELZEILE.LAGER * &BELZEILE.LAGER_L, letztemenge)
    if valid = 1 then
      loescheserien( "BELZEILE", &BELZEILE.LAGER * &BELZEILE.LAGER_L, letztemenge)
      zweitebelegzeile( "delete")
    end if
  end if

'löscht alte Chargennummern falls der Artikel gewechselt wurde
  if (valid = 1) and (letzteartnummer <> &BELZEILE.ART_NUMMER) and (letztechargejn = "J") and ((&BELSTAMM.CHARGE_JN = "J") or (&BELSTAMM.CHARGE_JN = "Z")) then
    valid = checkchargen( "BELZEILE", &BELZEILE.LAGER * &BELZEILE.LAGER_L, letztemenge)
    if valid = 1 then
      loeschechargen( "BELZEILE", &BELZEILE.LAGER * &BELZEILE.LAGER_L, letztemenge)
    end if
  end if
return

@belzeile.onafterpost:
  if (&BELZEILE.ART <> "P") and (&BELZEILE.ART <> "H") and (&BELZEILE.ART <> "K") and (&BELZEILE.ART <> "A") and (&BELZEILE.ART <> "R") then return
  if liste_aufgeloest = 1 then return
  mis( 1)
  zweitebelegzeile( "post")

  if (&BELZEILE.ART = "A") and (&BELZEILE.SERNUM_JN = "J") and ((&BELSTAMM.SERNUM_JN = "J") or (&BELSTAMM.SERNUM_JN = "Z")) and (erfasse = 1) then
    seriennummerneingabe( &BELZEILE.LAGER * &BELZEILE.LAGER_L, &BELZEILE.MENGE, &BELZEILE.BZ_NUMMER)
  end if

  if (&BELZEILE.ART = "A") and (&BELZEILE.CHARGE_JN = "J") and ((&BELSTAMM.CHARGE_JN = "J") or (&BELSTAMM.CHARGE_JN = "Z")) and (erfasse = 1) then
    chargennummerneingabe( &BELZEILE.LAGER * &BELZEILE.LAGER_L, &BELZEILE.MENGE, &BELZEILE.BZ_NUMMER)
  end if

  erfasse = 0
  letzteart = ""
  letzteartnummer = ""
  letztemenge = 0
  letzteseriejn = ""
  letztechargejn = ""

  check_kreditlimit

  if kassenerfassung then
    if fileexist( "sendstr.exe") then
      sendstring = "sendstr.exe " + chr$(34) + "EOT SOH " + chr$(39) + "C1X" + chr$(39) + " ETB" + chr$(34)
      shell ( sendstring)

      sendstring = "sendstr.exe " + chr$(34) + chr$(39) + mid$(&BELZEILE.ART_TEXT + "                                      ", 1, 25) + str$(&BELZEILE.PREIS, 15, 2) + chr$(39) + chr$(34)
      shell ( sendstring)
    end if
  end if
return

@belzeile.onbeforedelete:
  valid = check_bearbeiten( @belegtext, &BELEGDEF.LOESCHART, aktuell_letzterbeleg, "BELSTAMM")
  if valid = 0 then return
  if (&BELZEILE.ART <> "P") and (&BELZEILE.ART <> "H") and (&BELZEILE.ART <> "K") and (&BELZEILE.ART <> "A") and (&BELZEILE.ART <> "R") then return

  valid = check_handel( 2)
  if valid = 0 then return

  letzteart = &BELZEILE.ART
  letzteartnummer = &BELZEILE.ART_NUMMER
  letztemenge = &BELZEILE.MENGE
  letzteseriejn = &BELZEILE.SERNUM_JN
  letztechargejn = &BELZEILE.CHARGE_JN

  zweitebelegzeile( "beforedelete")
  if valid = 0 then return

  if (letzteseriejn = "J") and ((&BELSTAMM.SERNUM_JN = "J") or (&BELSTAMM.SERNUM_JN = "Z")) then
    valid = checkserien( "BELZEILE", &BELZEILE.LAGER * &BELZEILE.LAGER_L, letztemenge)
  end if
  if valid = 0 then return

  if (letztechargejn = "J") and ((&BELSTAMM.CHARGE_JN = "J") or (&BELSTAMM.CHARGE_JN = "Z")) then
    valid = checkchargen( "BELZEILE", &BELZEILE.LAGER * &BELZEILE.LAGER_L, letztemenge)
  end if
return

@belzeile.ondelete:
  bemerkung_loeschen( "Belegzeile", str$(&BELZEILE.BZ_NUMMER))

  if (&BELZEILE.ART <> "P") and (&BELZEILE.ART <> "H") and (&BELZEILE.ART <> "K") and (&BELZEILE.ART <> "A") and (&BELZEILE.ART <> "R") then return

  ursprung = 0
  if &BELZEILE.ART = "H" then ursprung = &BELZEILE.BZ_NUMMER

  mis( -1)

  zweitebelegzeile( "delete")
  if (&BELZEILE.SERNUM_JN = "J") and ((&BELSTAMM.SERNUM_JN = "J") or (&BELSTAMM.SERNUM_JN = "Z")) then
    loescheserien( "BELZEILE", &BELZEILE.LAGER * &BELZEILE.LAGER_L, &BELZEILE.MENGE)
  end if
  if (&BELZEILE.CHARGE_JN = "J") and ((&BELSTAMM.CHARGE_JN = "J") or (&BELSTAMM.CHARGE_JN = "Z")) then
    loeschechargen( "BELZEILE", &BELZEILE.LAGER * &BELZEILE.LAGER_L, &BELZEILE.MENGE)
  end if
return

@belzeile.onafterdelete:
  if (&BELZEILE.ART <> "P") and (&BELZEILE.ART <> "H") and (&BELZEILE.ART <> "K") and (&BELZEILE.ART <> "A") and (&BELZEILE.ART <> "R") then return

  erg = check_handel( 0)

  letzteart = ""
  letzteartnummer = ""
  letztemenge = 0
  letzteseriejn = ""
  letztechargejn = ""

  erg = rts( "REFRESH", "BELSTAMM")
  erg = rts( "REFRESH", "ARTIKEL1")
return

@belzeile.onrefresh:
  gotolast( "BELZEILE")
return

sub zweitebelegzeile( aktion as string)
dim belzeilnr, stammnr, posnr, beldefzus, bznummer, refbznr as long
dim wertzugang as long
  def = belegdefinition( &BELSTAMM.BELDEF_NUM, 1)
  if def <> 1 then 
    def = belegdefinition( &BELSTAMM.BELDEF_NUM, 0)
    exit sub     
  end if    
  art = &BELZEILE.ART
  opentable( "WBELZEIL", "BELZEILETEMP")
  findfirst( "BELZEILETEMP", "BZ_NUMMER", &BELZEILE.BZ_NUMMER)
  openrange( "BELZEILE")
  findfirst( "BELZEILE", "STM_NUMMER", &BELZEILETEMP.STM_NUMMER, "POS_NR", &BELZEILETEMP.POS_NR, "BELDEF_ZUS", &BELZEILETEMP.BELDEF_ZUS, "BZ_NUMMER", &BELZEILETEMP.BZ_NUMMER)
  belzeilnr = &BELZEILE.BZ_NUMMER
  stammnr = &BELZEILE.STM_NUMMER 
  posnr = &BELZEILE.POS_NR 
  beldefzus = &BELZEILE.BELDEF_ZUS
  if (aktion = "edit") then
    skip( "BELZEILETEMP", 1)
    do while (&BELZEILETEMP.BELDEF_ZUS <> 0) and (eof( "BELZEILETEMP") = 0)
      lagerstand( "ARTIKEL1", "BELZEILETEMP", &BELZEILETEMP.MENGE, -1)
      mis_artikel_lager( "BELZEILETEMP", 0, 0, -1)
      skip( "BELZEILETEMP", 1)
    loop
  end if
  if (aktion = "post") or (aktion = "cancel") then
    ursprung = &BELZEILE.BZ_NUMMER
    if ((art = "P") or (art = "H") or (art = "K")) and (&BELEGDEF.AUFLOESEN <> "N") then
      erg = produktion_aufloesen( "BELZEILE", 1, 0)
    end if
    if ((art <> "P") and (art <> "H") and (art <> "K")) or (&BELEGDEF.AUFLOESEN = "N") then
      skip( "BELZEILE", 1)
      if (&BELZEILE.BELDEF_ZUS = 0) or (eof( "BELZEILE") = 1) then
        appendblank( "BELZEILE")
        standardbelegzeile( "BELSTAMM", "BELZEILETEMP", "BELSTAMM", "BELZEILE", "BELEGDEF", &BELZEILETEMP.MENGE)
        &BELZEILE.REF_BZ_NR = ursprung
        &BELZEILE.BELDEF_ZUS = 1
      else
        bznummer = &BELZEILE.BZ_NUMMER
        refbznr = &BELZEILE.REF_BZ_NR        
        standardbelegzeile( "BELSTAMM", "BELZEILETEMP", "BELSTAMM", "BELZEILE", "BELEGDEF", &BELZEILETEMP.MENGE)
        &BELZEILE.BZ_NUMMER = bznummer
        &BELZEILE.REF_BZ_NR = refbznr
        &BELZEILE.BELDEF_ZUS = 1
      end if

      if &BELSTAMM.LAG_NUM_UM <> "" then
        &BELZEILE.LAG_NUMMER = &BELSTAMM.LAG_NUM_UM
      else
        &BELZEILE.LAG_NUMMER = &BELSTAMM.LAG_NUMMER
      end if
      lagerdefinition( "BELZEILE")

      if &BELSTAMM.LAG_NUM_UM <> "" then
        wertzugang = 0
        if (&BELZEILE.LAGER * &BELZEILE.LAGER_L = 1) and (&BELZEILE.FINANZ * &BELZEILE.FINANZ_L = -1) then
          wertzugang = 1
        end if
        if (&BELZEILE.LAGER * &BELZEILE.LAGER_L = -1) and (&BELZEILE.FINANZ * &BELZEILE.FINANZ_L = 1) then
          wertzugang = -1
        end if
        if &BELZEILE.MENGE < 0 then
          wertzugang = wertzugang * -1
        end if
        if (wertzugang = 1) then &BELZEILE.FIFOPOSITIV = "J"
      end if  

      berechnezeile( "BELSTAMM", "BELZEILE")
      store( "BELZEILE")
      lagerstand( "ARTIKEL1", "BELZEILE", &BELZEILE.MENGE, 1)
      mis_artikel_lager( "BELZEILE", 0, 0, 1)
    end if
  end if
  if (aktion = "delete") then
    skip( "BELZEILETEMP", 1)
    do while (&BELZEILETEMP.BELDEF_ZUS <> 0) and (bof( "BELZEILETEMP") = 0)

      lagerstand( "ARTIKEL1", "BELZEILETEMP", &BELZEILETEMP.MENGE, -1)
      if (&BELZEILETEMP.SERNUM_JN = "J") and ((&BELSTAMM.SERNUM_JN = "J") or (&BELSTAMM.SERNUM_JN = "Z")) then 
        loescheserien( "BELZEILETEMP", &BELZEILETEMP.LAGER * &BELZEILETEMP.LAGER_L, &BELZEILETEMP.MENGE)
      end if 
      if (&BELZEILETEMP.CHARGE_JN = "J") and ((&BELSTAMM.CHARGE_JN = "J") or (&BELSTAMM.CHARGE_JN = "Z")) then 
        loeschechargen( "BELZEILETEMP", &BELZEILETEMP.LAGER * &BELZEILETEMP.LAGER_L, &BELZEILETEMP.MENGE)
      end if 
      mis_artikel_lager( "BELZEILETEMP", 0, 0, -1)
      deleterecord( "BELZEILETEMP")
    loop
  end if
  if (aktion = "beforedelete") then
    skip( "BELZEILETEMP", 1)
    do while (&BELZEILETEMP.BELDEF_ZUS <> 0) and (bof( "BELZEILETEMP") = 0) and (valid > 0)
      if (&BELZEILETEMP.SERNUM_JN = "J") and ((&BELSTAMM.SERNUM_JN = "J") or (&BELSTAMM.SERNUM_JN = "Z")) then 
        valid = checkserien( "BELZEILETEMP", &BELZEILETEMP.LAGER * &BELZEILETEMP.LAGER_L, &BELZEILETEMP.MENGE) 
      end if
      if (&BELZEILETEMP.CHARGE_JN = "J") and ((&BELSTAMM.CHARGE_JN = "J") or (&BELSTAMM.CHARGE_JN = "Z")) then 
        valid = checkchargen( "BELZEILETEMP", &BELZEILETEMP.LAGER * &BELZEILETEMP.LAGER_L, &BELZEILETEMP.MENGE) 
      end if
      skip( "BELZEILETEMP", -1)
    loop
  end if
  closerange( "BELZEILE") 
  findfirst( "BELZEILE", "STM_NUMMER", stammnr, "POS_NR", posnr, "BELDEF_ZUS", beldefzus, "BZ_NUMMER", belzeilnr)
  def = belegdefinition( &BELSTAMM.BELDEF_NUM, 0)
end sub

@pos_nummer.oncalccolor:
@pos_nr.oncalccolor:
@art_text.oncalccolor:
@art_nummer.oncalccolor:
@art.oncalccolor:
@rabatt.oncalccolor:
@preis.oncalccolor:
@menge.oncalccolor:
@aufmass1.oncalccolor:
@aufmass2.oncalccolor:
@aufmass3.oncalccolor:
@betrbrutto.oncalccolor:
@betrnetto.oncalccolor:
@druckenkennz.oncalccolor:
  if &BELZEILE.ART = "T" then valid = 10
  if &BELZEILE.ART = "S" then valid = 8
return

@betrrabatt.onexitchanged:
@rabatt.onexitchanged:
  if ( &BELZEILE.RAB_JN <> "J") and ( &BELZEILE.RABATT <> 0) then
    erg = messagebox( "Bei '%1' ist kein Rabatt möglich.|Rabatt wird genullt.", 2, &BELZEILE.ART_NUMMER)
    &BELZEILE.RABATT = 0
    &BELZEILE.BETRRAB = 0
    &BELZEILE.BRAB_URSP = 0
  end if
  berechnezeile( "BELSTAMM", "BELZEILE")
return

@betrrrabatt.onexitchanged:
@rechrabatt.onexitchanged:
  if ( &BELZEILE.RRAB_JN <> "J") and ( &BELZEILE.RECHRABATT <> 0) then
    erg = messagebox( "Bei '%1' ist kein Rechnungsrabatt möglich.|Rechnungsrabatt wird genullt.", 2, &BELZEILE.ART_NUMMER)
    &BELZEILE.RECHRABATT = 0
    &BELZEILE.BETRRRAB = 0 
    &BELZEILE.BRRAB_URSP = 0
  end if
  berechnezeile( "BELSTAMM", "BELZEILE")
return

@preis.onexitchanged:
  berechnezeile( "BELSTAMM", "BELZEILE")
return

@aufmass1.onexitchanged:
@aufmass2.onexitchanged:
@aufmass3.onexitchanged:
  &BELZEILE.MENGE = &BELZEILE.AUFMASS1 * &BELZEILE.AUFMASS2 * &BELZEILE.AUFMASS3
@menge.onexitchanged:
  &BELZEILE.MENGE_URSP = &BELZEILE.MENGE_URSP + &BELZEILE.MENGE - letztemenge
  letztemenge = &BELZEILE.MENGE

  ermittlepreis( "BELZEILE", 0, 0)

  erfasse = 1
return

@art.onexit:
  if &BELZEILE.ART <> Upper$( &BELZEILE.ART) then
    &BELZEILE.ART = Upper$( &BELZEILE.ART)
  end if
  alte_art = &BELZEILE.ART
  fenster( 0)
return

@art.onexitchanged:
  if &BELZEILE.ART_NUMMER <> "" then
    if (Upper$( &BELZEILE.ART) <> "P") and (Upper$( &BELZEILE.ART) <> "H") and (Upper$( &BELZEILE.ART) <> "K") and (Upper$( &BELZEILE.ART) <> "A") and (Upper$( &BELZEILE.ART) <> "R") then
      erg = messagebox( "Sie können die Zeilenart nicht auf %1 ändern.|Sie können die Zeile löschen und eine neue errichten.", 2, Upper$( &BELZEILE.ART))
      valid = 0
      &BELZEILE.ART = letzteart
      return
    end if
  end if

  alte_art = Upper$( &BELZEILE.ART)
  alte_pos_nr = &BELZEILE.POS_NR
  init_belegzeile( "BELZEILE")
  gosub belzeile_onnewrecord
  &BELZEILE.POS_NR = alte_pos_nr
  &BELZEILE.ART = alte_art

  if (&BELEGDEF.ART_ART <> "") and ( instr( 1, &BELEGDEF.ART_ART, &BELZEILE.ART) = 0) then
    erg = messagebox( "Artikelart bei diesem Beleg nicht erlaubt. Übernahme nicht möglich.", 2)
    valid = 0
    return
  end if
  fenster( 0)
  fenster( 1)
  artvorgaben( "BELZEILE")
return

@hauptakt_z.onexitchanged:
  opentable( "WHPTAK")  
  if findkey( "WHPTAK", "HAUPTAKT", &BELZEILE.HAUPTAKT) = 1 then
    &BELZEILE.IHR_TEXT = &WHPTAK.BEZEICH
  end if
@unterakt_z.onexitchanged:
@teilakt_z.onexitchanged:
@projekt_nr_z.onexitchanged:
  ermittlepreis( "BELZEILE", 0, 0)

  opentable( "WPROJ")
  if findkey( "WPROJ", "PROJEKT_NR", &BELZEILE.PROJEKT_NR) = 1 then
    if &WPROJ.K_STL <> "" then
      &BELZEILE.K_STL = &WPROJ.K_STL
    end if
    if &WPROJ.K_TRG <> "" then
      &BELZEILE.K_TRG = &WPROJ.K_TRG
    end if
  end if

  alte_projekt_nr = &BELZEILE.PROJEKT_NR
return

@lag_nummer_z.onexitchanged:
  if &BELZEILE.SERNUM_JN = "J" then
    valid = checkserienvorhanden( "BELZEILE")
  end if
  if valid = 0 then
    erg = messagebox( "Lagerortänderung bei bereits erfassten Seriennummern nicht möglich.", 2)
    return
  end if
  if &BELZEILE.CHARGE_JN = "J" then
    valid = checkchargenvorhanden( "BELZEILE")
  end if
  if valid = 0 then
    erg = messagebox( "Lagerortänderung bei bereits erfassten Chargennummern nicht möglich.", 2)
  end if
  lagerdefinition( "BELZEILE")
return

@druckenkennz.onexitchanged:
  &BELZEILE.DRUCKEN = upper$( &BELZEILE.DRUCKEN)
return

sub setzezeile( art_ress as record, belzeile as record, art as string)
  if &ART_RESS.GESPERRT = "J" then
    erg = messagebox( "Eintrag gesperrt. Übernahme nicht möglich.", 2)
    valid = 0
    exit sub
  end if
  if (&BELEGDEF.ART_ART <> "") and ( instr( 1, &BELEGDEF.ART_ART, &ART_RESS.ART) = 0) then
    erg = messagebox( "Artikelart bei diesem Beleg nicht erlaubt. Übernahme nicht möglich.", 2)
    valid = 0
    exit sub
  end if
  enable( "BELZEILE", 2)

  if &BELZEILE.MENGE = 0 then
    &BELZEILE.MENGE = vorschlagsmenge
    &BELZEILE.MENGE_URSP = &BELZEILE.MENGE
    letztemenge = &BELZEILE.MENGE
  end if 
  setzeeinezeile( art_ress, belzeile, art, 0, 0)
  gosub belzeile_onrecordchange
  enable( "BELZEILE", 3)
  erfasse = 1  
end sub

sub fenster( aktion as long)
  if &BELEGDEF.BEARBEITE1 = "BLOCKIERT" then exit sub
  if &BELEGDEF.BEARBEITE1 <> "" then
    aktuelleswnd = changewindow( &BELEGDEF.BEARBEITE1)
    exit sub
  end if
  if aktion = 0 then
'standardfenster  holen
    if aktuelleswnd = "" then
      aktuelleswnd = changewindow( "")
    end if
  end if
  if aktion = 1 then
    if (&BELZEILE.ART = "B") and (aktuelleswnd <> "\WND\WBELZEI3") then
      wnderg = changewindow( "\WND\WBELZEI3")
    else
      wnderg = changewindow( aktuelleswnd)
    end if
  end if
  if (aktion = 2) and (&BELZEILE.ART <> "R") and (&ARTIKEL1.BEARBEITEN <> "BLOCKIERT") then
    if (&ARTIKEL1.BEARBEITEN <> "") and (aktuelleswnd <> &ARTIKEL1.BEARBEITEN) then
      wnderg = changewindow( &ARTIKEL1.BEARBEITEN)
    else
      wnderg = changewindow( aktuelleswnd)
    end if
  end if
end sub

@buchen.onpress:
  gebucht = 0
  anzahl_belegzeilen = reccount( "BELZEILE")
  if anzahl_belegzeilen = 0 then 
    erg = messagebox( "Keine Belegzeilen vorhanden", 2)
    return
  end if

  enable( "BELZEILE", 0)
  opentable( "WBELZEIL", "BELZEILE1")
  setautofield( "BELZEILE1", "BZ_NUMMER", 0)

  openquery( "SQL", "DELETE FROM XHILF WHERE USERID = '" + USERID + "' AND MANDANT = '" + upper$( CompanyName) + "'")
  execsql( "SQL") 
  closetable("SQL")

  opentable( "XHILF", "HILF")
  setfilter( "HILF", "USERID = '" + USERID + "'")
  setautofield( "HILF", "LFD_NUMMER", 0)

  eine_beldef_buchen( 2)
  eine_beldef_buchen( 3)

  valid = 1
  if gebucht = 1 then
    if reccount( "HILF") > 0 then
      if &BELEGDEF.LAGER_KORR = "W" then
        erg = dialog( "\DLG\XWARNUNG")
        if erg = 0 then
          belegzeilenloeschen
          valid = 0
        end if
      end if
      if &BELEGDEF.LAGER_KORR = "A" then
        erg = dialog( "\DLG\XFEHLER")
        belegzeilenloeschen
        valid = 0
      end if
    end if

    if valid = 1 then
      setfilter( "BELZEILE", "")
      gotofirst( "BELZEILE")
      do while eof( "BELZEILE") = 0
        if &BELZEILE.BELDEF_ZUS >= 2 then
          def = belegdefinition( &BELSTAMM.BELDEF_NUM, &BELZEILE.BELDEF_ZUS)
          if (&BELEGDEF.SERNUM_JN = "J") or (&BELEGDEF.SERNUM_JN = "Z") then 
            if &BELZEILE.SERNUM_JN = "J" then
              seriennummerneingabe( &BELZEILE.LAGER * &BELZEILE.LAGER_L, &BELZEILE.MENGE, &BELZEILE.BZ_NUMMER)
            end if
            if &BELZEILE.CHARGE_JN = "J" then
              chargennummerneingabe( &BELZEILE.LAGER * &BELZEILE.LAGER_L, &BELZEILE.MENGE, &BELZEILE.BZ_NUMMER)
            end if
          end if
        end if
        skip( "BELZEILE", 1)
      loop

      &BELSTAMM.ARCHIVART = "S"
      store( "BELSTAMM")
  
      erg = messagebox( "Beleg vollständig gebucht.", 2)
      erg = rts( "close", "belegerf")
    end if
  end if

  enable( "BELZEILE", 1)
  closetable( "BELZEILE1")
  closetable( "HILF")

  if gebucht = 0 then
    erg = messagebox( "Nichts zu buchen.|Überprüfen Sie bitte die Belegdefinitionen.", 2)
  end if
return

sub eine_beldef_buchen( beldef_zus as long)
dim inv_datum as long
dim inv_menge as double
dim differenzmenge as double
  inv_datum = 0
  inv_menge = 0.0
  differenzmenge = 0.0
  def = belegdefinition( &BELSTAMM.BELDEF_NUM, beldef_zus)
  if def = 1 then
    gebucht = 1

    gotofirst( "BELZEILE")
    for zaehler = 1 to anzahl_belegzeilen
      abbruch = screeninfo ( "Beleg wird verbucht...", anzahl_belegzeilen, zaehler, 0)

'Lagerstand bis Belegdatum rechnen, falls Korrekturbeleg, wenn neg. Lagerabweichung dann Beldef_zus = 3 sonst 2 buchen  
      lagerstand_bisdatum = 0
      if &BELEGDEF.LAGER_KORR = "K" then
        lagerstand_bisdatum = lagerstanddatum( &BELZEILE.ART, &BELZEILE.ART_NUMMER, &BELSTAMM.LAG_NUMMER, 0, &BELSTAMM.DATUM)
        differenzmenge = &BELZEILE.MENGE - lagerstand_bisdatum
        if (differenzmenge < 0) and (&BELEGDEF.LAGER <> -1) then goto weiter
        if (differenzmenge > 0) and (&BELEGDEF.LAGER <> 1) then goto weiter
        inv_datum = &BELSTAMM.DATUM
        inv_menge = &BELZEILE.MENGE
        &BELZEILE.MENGE_URSP = lagerstand_bisdatum
        store( "BELZEILE")
        if differenzmenge = 0 then
          mis_artikel_lager_inv( "BELZEILE", inv_datum, inv_menge)
          goto weiter
        end if
      end if

      appendblank( "BELZEILE1")
      standardbelegzeile( "BELSTAMM", "BELZEILE", "BELSTAMM", "BELZEILE1", "BELEGDEF", abs(differenzmenge))
      &BELZEILE1.REFW_BZ_NR = 0
      &BELZEILE1.BELDEF_ZUS = beldef_zus

      if &BELEGDEF.LAGER_KORR = "K" then
        &BELZEILE1.MENGE_URSP = lagerstand_bisdatum
      end if
    
'falls aufgelöst wird darf lagerberechnung erst in setzezeile erfolgen
      liste_aufgeloest = 0
      if ((&BELZEILE1.ART = "P") or (&BELZEILE1.ART = "H") or (&BELZEILE1.ART = "K")) and (&BELEGDEF.AUFLOESEN <> "N") then
        liste_aufgeloest = produktion_aufloesen( "BELZEILE1", beldef_zus, 1)
      end if
      if liste_aufgeloest = 0 then
        if (&BELZEILE1.ART = "A") or (&BELZEILE1.ART = "K") or (&BELZEILE1.ART = "H") or (&BELZEILE1.ART = "P") then 
          berechnezeile( "BELSTAMM", "BELZEILE1")
          findfirst( "ARTIKEL1", "ART_NUMMER", &BELZEILE1.ART_NUMMER)
          berechne_ek( "BELSTAMM", "ARTIKEL1", "BELZEILE1", 1)
          lagerstand( "ARTIKEL1", "BELZEILE1", &BELZEILE1.MENGE, 1)
          mis_artikel_lager( "BELZEILE1", inv_datum, inv_menge, 1)
        end if 
      end if
      store( "BELZEILE1")
weiter:
      skip( "BELZEILE", 1)
    next
    abbruch = screeninfo ( "", 0, 0, 0)
  end if
end sub

sub belegzeilenloeschen
  enable( "BELZEILE", 0)
  setfilter( "BELZEILE", "")
  gotofirst( "BELZEILE")
  do while eof( "BELZEILE") = 0
    if &BELZEILE.BELDEF_ZUS >= 2 then
      mis( -1)
      deleterecord( "BELZEILE")
    else
      skip( "BELZEILE", 1)
    end if
  loop
  if reccount( "BELZEILE") > 1 then
    setfilter( "BELZEILE", "BELDEF_ZUS = 0")
  end if
  enable( "BELZEILE", 1)
end sub

sub naturalrabatt_holen
dim manposition as double
  enable( "BELZEILE", 0)
  enable( "BELSTAMM", 0)

  erg = messagebox( "Naturalrabattzeilen einfügen?", 23)
  if erg <> 4 then  
    exit sub
  end if  
  
  openquery( "SQL", "DELETE FROM XHILF WHERE USERID = '" + USERID + "' AND MANDANT = '" + upper$( CompanyName) + "'")
  execsql( "SQL") 
  closetable("SQL")
  opentable( "XHILF", "HILF")
  setfilter( "HILF", "USERID = '" + USERID + "'")
  setautofield( "HILF", "LFD_NUMMER", 0)
    
  opentable( "WBELZEIL", "BELZEILE1")
  setindex( "BELZEILE1", "STM_POSNUMMER")
  setrangestart( "BELZEILE1", "STM_NUMMER", &BELSTAMM.STM_NUMMER)
  setrangeend( "BELZEILE1", "STM_NUMMER", &BELSTAMM.STM_NUMMER)
  gotolast( "BELZEILE1")
  pos_nr = &BELZEILE1.POS_NR
  bz_nummer = &BELZEILE1.BZ_NUMMER
  manposition = val( &BELZEILE1.POS_NUMMER)
  
  gotofirst( "BELZEILE1")
  do while (eof( "BELZEILE1") = 0) and (&BELZEILE1.BZ_NUMMER <= bz_nummer)

    appendblank( "BELZEILE")

    neuerdatensatz( "BELZEILE", 0) 

    findfirst( "ARTIKEL1", "ART_NUMMER", &BELZEILE1.ART_NUMMER)
    if hole_naturalrabatt( "BELZEILE1", "BELZEILE", &ARTIKEL1.ARG_NUMMER, &BELSTAMM.ADR_NUMM_R, &BELSTAMM.AGR_NUMM_R, &BELSTAMM.FW_ISOCODE, &BELSTAMM.PREISLISTE) = 1 then 
      store( "BELZEILE")
          
      &BELZEILE.MENGE_URSP = &BELZEILE.MENGE 
      &BELZEILE.LIEFDATUM = &BELZEILE1.LIEFDATUM
      pos_nr = pos_nr + 1
      &BELZEILE.REF_BZ_NR = &BELZEILE1.BZ_NUMMER
      &BELZEILE.POS_NR = pos_nr
      &BELZEILE.POS_NUMMER = str$( &BELZEILE.POS_NR, 0, 2)
      lagerdefinition( "BELZEILE")
      findfirst( "ARTIKEL1", "ART_NUMMER", &BELZEILE.ART_NUMMER)
      setzeeinezeile( "ARTIKEL1", "BELZEILE", &ARTIKEL1.ART, 0, 0)
      
      &BELZEILE.PREIS = 0
      berechnezeile( "BELSTAMM", "BELZEILE")

      error_file( "BELZEILE", "ARTIKEL1", &BELEGDEF.LAGER_KORR)
   
      mis( 1)
      store( "BELZEILE")
   
      zweitebelegzeile( "post")
    else
      cancel( "BELZEILE")
    end if
       
    skip( "BELZEILE1", 1)
  loop
  
  if reccount( "HILF") > 0 then
    if &BELEGDEF.LAGER_KORR = "W" then
      erg = dialog( "\DLG\XWARNUNG")
      if erg = 0 then
        natural_belegzeilenloeschen
      end if
    end if
    if &BELEGDEF.LAGER_KORR = "A" then
      erg = dialog( "\DLG\XFEHLER")
      natural_belegzeilenloeschen
    end if
  end if
  closetable( "HILF")
    
  closetable( "BELZEILE1")
  store( "BELSTAMM")
  enable( "BELZEILE", 1)
  enable( "BELSTAMM", 1)
end sub

sub natural_belegzeilenloeschen
  setfilter( "BELZEILE", "")
  gotofirst( "BELZEILE")
  do while eof( "BELZEILE") = 0
    if &BELZEILE.BZ_NUMMER > bz_nummer then
      mis( -1)
      deleterecord( "BELZEILE")
    else
      skip( "BELZEILE", 1)
    end if
  loop
  if reccount( "BELZEILE") > 1 then
    setfilter( "BELZEILE", "BELDEF_ZUS = 0")
  end if
end sub

function produktion_aufloesen( belzeile as record, beldef_zus as long, mit_error_file as long) as long
dim verhaeltnis as double
dim vknetto as double

  handelsliste = 0
  produktion_aufloesen = 0
  handelaufgeloest = 0
  handelslisterabatt = &BELZEILE.RABATT
  if &BELEGDEF.AUFLOESEN = "N" then exit function
  enable( belzeile, 0)
  enable( "BELSTAMM", 0)
  opentable( "WLISTE", "LISTE1")
  setindex( "LISTE1", "STK_POS_NUMMER")

  tiefe = 1
  artnummer( tiefe) = &BELZEILE.ART_NUMMER
  pos( tiefe) = 0

  anzahl( tiefe) = &BELZEILE.MENGE
  lieferdatum = &BELZEILE.LIEFDATUM

  summe_ek = 0.0

'Verhältnis bei Handelsstücklisten-Preisänderungen
  vknetto = 0.0

  verhaeltnis = 0.0
  if &BELZEILE.MENGE <> 0 then vknetto = &BELZEILE.BETRNETTO / &BELZEILE.MENGE
  if &BELZEILE.STD_NETTO <> 0 then verhaeltnis = vknetto / &BELZEILE.STD_NETTO

'wg. listen loeschen immer notwendig
  ursprung = 0

  if (beldef_zus = 0) or (beldef_zus = 1) then
    store( belzeile)
    ursprung = &BELZEILE.BZ_NUMMER
  end if
  pos_nr = &BELZEILE.POS_NR
naechster:
  erg = 4
  if (&BELEGDEF.AUFLOESEN = "F") and (&BELZEILE.ART = "P") then
    erg = messagebox( "Produktionsliste '%1' auflösen?", 23, artnummer( tiefe))
  end if

  if (&BELEGDEF.AUFLOESEN = "F") and (&BELZEILE.ART = "H") then
    erg = messagebox( "Handelsliste '%1' auflösen?||Es werden Titel und Einzelpositionen gedruckt.|Bei Nichtauflösung werden die Einzelpositionen am Ausdruck unterdrückt.", 23, artnummer( tiefe))
    if erg = 4 then handelaufgeloest = 1
    if erg = 3 then erg = 4
  end if
'Mis rückrechnen falls Verschachtelung aufgelöst wird
  if (erg = 4) and (tiefe > 1) then          
    findfirst( "ARTIKEL1", "ART_NUMMER", &BELZEILE.ART_NUMMER)
    berechne_summe( "BELSTAMM", belzeile, -1, 0)
    mis_artikel( "BELSTAMM", belzeile, -1)
    mis_adresse_artikel( "BELSTAMM", belzeile, -1)
    mis_adresse( "BELSTAMM", belzeile, -1)
    lagerstand( "ARTIKEL1", belzeile, &BELZEILE.MENGE, -1)
    mis_artikel_lager( belzeile, 0, 0, -1)
  end if
'Subliste nicht auflösen, weiter in der Hauptliste
  if (erg = 3) and (tiefe > 1) then      
    tiefe = tiefe - 1
    pos( tiefe) = pos( tiefe) + 1
    appendblank( belzeile)
    pos_nr = pos_nr + 1
    erg = 4  
  end if  
  if erg = 4 then
naechster1:
    setrangestart( "LISTE1", "STK_NUMMER", artnummer(tiefe), "POS_NR", "", "LIS_NUMMER", "")
    setrangeend( "LISTE1", "STK_NUMMER", artnummer(tiefe), "POS_NR", chr$(255), "LIS_NUMMER", chr$(255))
    gotofirst( "LISTE1")
    skip( "LISTE1", pos( tiefe))


    do while eof( "LISTE1") = 0
      produktion_aufloesen = 1
      if (&LISTE1.ART = "A") or (&LISTE1.ART = "K") or (&LISTE1.ART = "H") or (&LISTE1.ART = "P") then 
        findfirst( "ARTIKEL1", "ART_NUMMER", &LISTE1.ART_NUMMER)
      end if
      if (&LISTE1.ART = "R") then 
        findfirst( "RESS1", "ART_NUMMER", &LISTE1.ART_NUMMER)
      end if
      if (&LISTE1.ART = "B") and (beldef_zus = 0) then 
        init_belegzeile( belzeile)
      end if    
 
      if beldef_zus = 0 then
        if (&BELZEILE.ART = "H") then
          if handelaufgeloest = 1 then &BELZEILE.ART = "T"
          store( belzeile)
          appendblank( belzeile)
          pos_nr = pos_nr + 1
          handelsliste = 1
        end if
      end if

      if beldef_zus = 1 then
        skip( belzeile, 1)
        if ( &BELZEILE.BELDEF_ZUS = 0) or (eof( belzeile) = 1) then
          appendblank( belzeile)
        end if
      end if

      neuerdatensatz( belzeile, beldef_zus) 
      store( belzeile)

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

'wegen Listen loeschen immer notwendig
      &BELZEILE.REF_BZ_NR = ursprung
'überträgt die Referenz beim Buchen auf alle Listenartikel
      if beldef_zus >= 2 then
        &BELZEILE.REF_STM_NR = &BELSTAMM.STM_NUMMER
      end if
      &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 (&BELSTAMM.LAG_NUM_UM <> "") then
        &BELZEILE.LAG_NUMMER = &BELSTAMM.LAG_NUM_UM
      end if
      lagerdefinition( belzeile)

      if (&LISTE1.ART = "A") or (&LISTE1.ART = "K") or (&LISTE1.ART = "H") or (&LISTE1.ART = "P") then 
        if handelsliste = 1 then
          setzeeinezeile( "ARTIKEL1", belzeile, &LISTE1.ART, &LISTE1.VK_NETTO * verhaeltnis, handelslisterabatt)
        end if
        if handelsliste = 0 then
          setzeeinezeile( "ARTIKEL1", belzeile, &LISTE1.ART, 0, 0)
        end if
      end if
      if (&LISTE1.ART = "R") then 
        if handelsliste = 1 then
          setzeeinezeile( "RESS1", belzeile, &LISTE1.ART, &LISTE1.VK_NETTO * verhaeltnis, handelslisterabatt)
        end if
        if handelsliste = 0 then
          setzeeinezeile( "RESS1", belzeile, &LISTE1.ART, 0, 0)
        end if
      end if
      if (&LISTE1.ART = "B") then 
        &BELZEILE.ART = &LISTE1.ART 
        &BELZEILE.ART_TEXT = &LISTE1.ART_TEXT       
      end if
     
      if (handelsliste = 1) and (handelaufgeloest = 0) then
        &BELZEILE.DRUCKEN = "N"
      end if

      store( belzeile)

      if (&BELZEILE.ART = "A") or (&BELZEILE.ART = "P") then 
        findfirst( "ARTIKEL1", "ART_NUMMER", &BELZEILE.ART_NUMMER)
        if mit_error_file then 
          error_file( belzeile, "ARTIKEL1", &BELEGDEF.LAGER_KORR)
        end if
        berechne_ek( "BELSTAMM", "ARTIKEL1", belzeile, 1)
        berechne_summe( "BELSTAMM", belzeile, 1, 0)
        mis_artikel( "BELSTAMM", belzeile, 1)
        mis_adresse_artikel( "BELSTAMM", belzeile, 1)
        mis_adresse( "BELSTAMM", belzeile, 1)
        lagerstand( "ARTIKEL1", belzeile, &BELZEILE.MENGE, 1)
        mis_artikel_lager( belzeile, 0, 0, 1)
      end if
      if &BELZEILE.ART = "R" then 
        findfirst( "RESS1", "ART_NUMMER", &BELZEILE.ART_NUMMER)
        berechne_ek( "BELSTAMM", "RESS1", belzeile, 1)
        berechne_summe( "BELSTAMM", belzeile, 1, 0)
        mis_artikel( "BELSTAMM", belzeile, 1)
        mis_adresse_artikel( "BELSTAMM", belzeile, 1)
        mis_adresse( "BELSTAMM", belzeile, 1)
      end if

      store( belzeile)

'Wert der P Zeile hochrechnen
      summe_ek = summe_ek + &BELZEILE.EK * &BELZEILE.MENGE

      if beldef_zus = 0 then
        zweitebelegzeile( "post")
      end if
        
'bei verschachtelten Stücklisten darf bei Schattenbuchungen nicht aufgelöst werden
      if (beldef_zus = 0) or (beldef_zus = 2) then 
        if (&BELZEILE.ART = "P") and (tiefe < 10) then
          tiefe = tiefe + 1
          artnummer( tiefe) = &BELZEILE.ART_NUMMER
          pos( tiefe) = 0
          anzahl( tiefe) = &BELZEILE.MENGE
          goto naechster
        else
          if (tiefe >= 10) then
            erg = messagebox( "Liste hat zu große Verschachtelungstiefe.|Eventuell setzen sich 2 Artikel (Listen) gegenseitig voraus.", 2)
          end if  
          pos( tiefe) = pos( tiefe) + 1
        end if                 
      end if
 
      skip( "LISTE1", 1)

      if eof( "LISTE1") = 0 then
        if beldef_zus = 0 then
          appendblank( belzeile)
          pos_nr = pos_nr + 1
        end if

        if beldef_zus >= 2 then
          appendblank( belzeile)
        end if
      end if
    loop

    if tiefe > 1 then
      tiefe = tiefe - 1
      pos( tiefe) = pos( tiefe) + 1
      appendblank( belzeile)
      pos_nr = pos_nr + 1
      goto naechster1
    end if
  end if

'Wert in die P Zeile eintragen
  if beldef_zus = 3 then
    opentable( "WBELZEIL", "BELZEILETEMP")
    setindex( "BELZEILETEMP", "STM_POSNUMMER") 
    if findkey( "BELZEILETEMP", "STM_NUMMER", &BELZEILE.STM_NUMMER, "POS_NR", &BELZEILE.POS_NR, "BELDEF_ZUS", 2) = 1 then
      if &BELZEILETEMP.MENGE = 0 then
        &BELZEILETEMP.EK = 0
      else
        &BELZEILETEMP.EK = round( summe_ek / &BELZEILETEMP.MENGE, 5)
      end if
      store( "BELZEILETEMP")
    end if 
    closetable( "BELZEILETEMP")
  end if

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

function check_handel( aktion as long) as long
dim ursprung_pos as double
  check_handel = 1
  if ursprung > 0 then               
    if aktion = 0 then                                          'löschen Handelsliste
      ursprung_pos = &BELZEILE.POS_NR
      belegzeilenloeschen_liste
      findfirst( "BELZEILE", "STM_NUMMER", &BELZEILE.STM_NUMMER, "POS_NR", ursprung_pos)
      if &BELZEILE.POS_NR < ursprung_pos then    
        gotolast( "BELZEILE")
        &BELZEILE.POS_NR = &BELZEILE.POS_NR + 1
        store( "BELZEILE")
      end if
      exit function
    end if
  end if
  if (&BELZEILE.ART = "A") and (&BELZEILE.REF_BZ_NR <> 0) then  'vorlöschen, voreditieren Einzelteil
    if (aktion = 1) or (aktion = 2) then
      opentable( "WBELZEIL", "BELZEILETEMP")
      findfirst( "BELZEILETEMP", "BZ_NUMMER", &BELZEILE.REF_BZ_NR)
      if &BELZEILETEMP.ART = "H" then
        erg = messagebox( "Einzelteile von nicht aufgelösten Handelsstücklisten können nicht bearbeitet werden.", 2)
        check_handel = 0
      end if
    end if
  end if
  if (&BELZEILE.ART = "H") then
    if (aktion = 1) then
      erg = messagebox( "Nicht aufgelöste Handelsstücklisten können nicht bearbeitet werden.", 2)

      check_handel = 0
    end if
  end if
end function

sub belegzeilenloeschen_liste
  enable( "BELZEILE", 0)
  gotofirst( "BELZEILE")
  do while eof( "BELZEILE") = 0
    if (&BELZEILE.REF_BZ_NR = ursprung) or (&BELZEILE.BZ_NUMMER = ursprung) then
      mis( -1)
      zweitebelegzeile( "delete")
      deleterecord( "BELZEILE")
    else
      skip( "BELZEILE", 1)
    end if
  loop
  enable( "BELZEILE", 1)
end sub

sub setzeeinezeile( art_ress as record, belzeile as record, art as string, handelspreis as double, handelsrabatt as double)
  &BELZEILE.ART_NUMMER = &ART_RESS.ART_NUMMER
  if &BELZEILE.ART_NUMMER <> "" then
    if (art <> "R") then
      if &BELZEILE.ART <> "T" then
        &BELZEILE.ART = &ART_RESS.ART
      end if
    else
      &BELZEILE.ART = art
    end if

    &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
      &BELZEILE.URSPRUNG = &ART_RESS.URSPRUNG
    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 (art <> "R") then
      if (&BELEGDEF.LAGER = 1) or ((&BELEGDEF.VST_UST = "V") and (&BELEGDEF.LAGER = 0)) then
        if (&ART_RESS.LAGER_ZUG <> "") and (&BELZEILE.LAG_NUMMER = &BELSTAMM.LAG_NUMMER) and (&BELEGDEF.ART_LAG_JN <> "N") then
          &BELZEILE.LAG_NUMMER = &ART_RESS.LAGER_ZUG
        end if
      end if
      if (&BELEGDEF.LAGER = -1) or ((&BELEGDEF.VST_UST = "U") and (&BELEGDEF.LAGER = 0)) then
        if (&ART_RESS.LAGER_ABG <> "") and (&BELZEILE.LAG_NUMMER = &BELSTAMM.LAG_NUMMER) and (&BELEGDEF.ART_LAG_JN <> "N") then
          &BELZEILE.LAG_NUMMER = &ART_RESS.LAGER_ABG
        end if
      end if
      lagerdefinition( belzeile)
    end if

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

    setze_mwst_satz( "BELSTAMM", belzeile)
    ermittlepreis( belzeile, handelspreis, handelsrabatt)

  end if
end sub

sub ermittlepreis( belzeile as record, handelspreis as double, handelsrabatt as double)
dim arg_nummer as string 
  arg_nummer = ""
  if findkey( "ARTIKEL1", "ART_NUMMER", &BELZEILE.ART_NUMMER) = 1 then
    arg_nummer = &ARTIKEL1.ARG_NUMMER
  end if  
  if (&BELZEILE.ART = "R") then arg_nummer = ""
  
  if &BELZEILE.ART = "R" then
    in_fremdwaehrung = 0
    &BELZEILE.PREIS = holepreis_d( belzeile, 0, &BELSTAMM.ADR_NUMM_R)
  else
    in_fremdwaehrung = holepreis( belzeile, arg_nummer, &BELSTAMM.ADR_NUMM_R, &BELSTAMM.AGR_NUMM_R, &BELSTAMM.FW_ISOCODE, &BELSTAMM.PREISLISTE, "")
  end if

'für Handelsstücklisten immer den Listeneinzelpreis nehmen, Rabatt der Titelzeile übernehmen
  if handelspreis <> 0 then &BELZEILE.PREIS = handelspreis
  if handelsrabatt <> 0 then 
    if &BELZEILE.RAB_JN = "J" then &BELZEILE.RABATT = handelsrabatt
    if &BELZEILE.RAB_JN <> "J" then 
      erg = messagebox( "Bei '%1' ist kein Rabatt möglich.|Rabatt wird nicht übernommen.|Titelzeile und Auflösung stimmen nicht mehr überein.", 2, &BELZEILE.ART_NUMMER)
    end if
  end if

  if &BELZEILE.RRAB_JN = "J" then
    &BELZEILE.RECHRABATT = &BELSTAMM.RECHRABATT
  end if

  if in_fremdwaehrung = 0 then
    &BELZEILE.PREIS = fw_getfwbetrag_b( &BELZEILE.PREIS, &BELSTAMM.FW_KURS, &BELSTAMM.FW_EHT)
  end if
  if &BELSTAMM.STEUERBER = "B" then
    &BELZEILE.PREIS = &BELZEILE.PREIS * (100 + &BELZEILE.MWST_SATZ) / 100
    &BELZEILE.PREIS = round( &BELZEILE.PREIS, 2)
  end if
  &BELZEILE.PREIS = round( &BELZEILE.PREIS, 5)

  berechnezeile( "BELSTAMM", belzeile)
end sub

@maske.onpress:
  zeile_beenden
  wnderg = window( "\WND\WMASKE")
  if (wnderg <> "") and (wnderg <> "BLOCKIERT") then
    aktuelleswnd = wnderg
    wnderg = changewindow( wnderg)
  end if
return

@seriennummern.onpress:
  zeile_beenden
  if (&BELZEILE.SERNUM_JN = "J") and ((&BELSTAMM.SERNUM_JN = "J") or (&BELSTAMM.SERNUM_JN = "Z")) then
    if (&BELZEILE.ART = "A") and (&BELZEILE.MENGE <> 0) then
      seriennummerneingabe( &BELZEILE.LAGER * &BELZEILE.LAGER_L, &BELZEILE.MENGE, &BELZEILE.BZ_NUMMER)
    end if
  else
    erg = messagebox( "Bei diesem Artikel oder Beleg gibt es keine Seriennummern.", 2)
  end if
return

@chargennummern.onpress:
  zeile_beenden
  if (&BELZEILE.CHARGE_JN = "J") and ((&BELSTAMM.CHARGE_JN = "J") or (&BELSTAMM.CHARGE_JN = "Z")) then
    if (&BELZEILE.ART = "A") and (&BELZEILE.MENGE <> 0) then
      chargennummerneingabe( &BELZEILE.LAGER * &BELZEILE.LAGER_L, &BELZEILE.MENGE, &BELZEILE.BZ_NUMMER)
    end if
  else
    erg = messagebox( "Bei diesem Artikel oder Beleg gibt es keine Chargennummern.", 2)
  end if
return

@ok.onpress:
  zeile_beenden

  store( "BELSTAMM")
  openrange( "BELZEILE")
  korrigiere_mwst( "BELSTAMM", "BELZEILE")
  closerange( "BELZEILE")
return

@drucken.onpress:
  zeile_beenden

  store( "BELSTAMM")
  openrange( "BELZEILE")
  korrigiere_mwst( "BELSTAMM", "BELZEILE")
  closerange( "BELZEILE")

  if kassenerfassung then
    if fileexist( "sendstr.exe") then
      sendstring = "sendstr.exe " + chr$(34) + "EOT SOH " + chr$(39) + "C1X" + chr$(39) + " ETB" + chr$(34)
      shell ( sendstring)

      sendstring = "sendstr.exe " + chr$(34) + chr$(39) + "Endbetrag:              " + num$(&BELSTAMM.SUM_BRUTTO, 15, 2) + chr$(39) + chr$(34)
      shell ( sendstring)
    end if
  end if
  makrofile( "\BAS\WMBELDRU")
return

@aktivitaet.onpress:
  if &BELSTAMM.PROJEKT_NR = "" then
    erg = messagebox( "Dem Beleg muß ein Projekt zugeordnet sein.", 2)
    return
  end if
  zeile_beenden
  erg = dialog( "\DLG\WAKTIV")
return

@intrastat.onpress:
  zeile_beenden
  erg = dialog( "\DLG\WSTATBZ")
return

@manekpreis.onpress:
  zeile_beenden
  mis(-1)
  erg = dialog( "\DLG\WMANEK")
  if erg <> 0 then 
    berechnezeile( "BELSTAMM", "BELZEILE")
  end if
  mis(1)
  zeile_beenden
return

@nummer.onpress:
  zeile_beenden
  erg = messagebox( "Positionen neu nummerieren?", 1023)
  if erg <> 4 then return 
  enable( "BELZEILE", 0)
  position = 1
  gotofirst( "BELZEILE")
  do while eof( "BELZEILE") = 0
    if (&BELZEILE.ART = "A") or (&BELZEILE.ART = "K") or (&BELZEILE.ART = "H") or (&BELZEILE.ART = "P") or (&BELZEILE.ART = "R") then 
      &BELZEILE.POS_NUMMER = str$( position, 0, 2)
      position = position + 1
    else
      &BELZEILE.POS_NUMMER = ""  
    end if
    store( "BELZEILE")
    skip( "BELZEILE", 1)
  loop
  enable( "BELZEILE", 1)
return

@hinauf.onpress:
  zeile_beenden
  bewegen( -1)
return

@hinunter.onpress:
  zeile_beenden
  bewegen( 1)
return

@zwischensumme.onpress:
  zeile_beenden
  erg = messagebox( "Zwischensummen neu berechnen?", 1023)
  if erg <> 4 then return 
  enable( "BELZEILE", 0)
  gotofirst( "BELZEILE")
  do while eof( "BELZEILE") = 0
    if (&BELZEILE.ART = "S") then 
      berechnezwischensumme( "BELSTAMM", "BELZEILE")
      store( "BELZEILE")
    end if
    skip( "BELZEILE", 1)
  loop
  enable( "BELZEILE", 1)
return

sub bewegen( richtung as long)
dim alteposition, neueposition as string
dim temppos, altepos, neuepos as double
  if check_bearbeiten( @belegtext, &BELEGDEF.LOESCHART, aktuell_letzterbeleg, "BELSTAMM") = 0 then exit sub
  enable( "BELZEILE", 0)
  altepos = &BELZEILE.POS_NR
  alteposition = &BELZEILE.POS_NUMMER
  skip( "BELZEILE", richtung)
  if ((eof( "BELZEILE") = 1) and (richtung = 1)) or ((bof( "BELZEILE") = 1) and (richtung = -1)) then 
    enable( "BELZEILE", 1)
    exit sub
  end if
  neuepos = &BELZEILE.POS_NR
  neueposition = &BELZEILE.POS_NUMMER
  if richtung = 1 then 
    temppos = neuepos - 0.99
  else 
    temppos = altepos - 1.01
  end if 
  &BELZEILE.POS_NR = temppos
  store( "BELZEILE")
  skip( "BELZEILE", richtung * -1)

  &BELZEILE.POS_NR = neuepos
  &BELZEILE.POS_NUMMER = neueposition

  store( "BELZEILE")
  findfirst( "BELZEILE", "STM_NUMMER", &BELZEILE.STM_NUMMER, "POS_NR", temppos)
  &BELZEILE.POS_NR = altepos
  &BELZEILE.POS_NUMMER = alteposition
  store( "BELZEILE")
  skip( "BELZEILE", richtung)
  enable( "BELZEILE", 1)
end sub

sub mis( vorz as long)
  enable( "BELZEILE", 0)
  if (&BELZEILE.ART = "A") or (&BELZEILE.ART = "P") then 
    findfirst( "ARTIKEL1", "ART_NUMMER", &BELZEILE.ART_NUMMER)
    berechne_ek( "BELSTAMM", "ARTIKEL1", "BELZEILE", vorz)
    berechne_summe( "BELSTAMM", "BELZEILE", vorz, 0)
    mis_artikel( "BELSTAMM", "BELZEILE", vorz)
    mis_adresse_artikel( "BELSTAMM", "BELZEILE", vorz)
    mis_adresse( "BELSTAMM", "BELZEILE", vorz)
    lagerstand( "ARTIKEL1", "BELZEILE", &BELZEILE.MENGE, vorz)
    mis_artikel_lager( "BELZEILE", 0, 0, vorz)
  end if
  if &BELZEILE.ART = "R" then 
    findfirst( "RESS1", "ART_NUMMER", &BELZEILE.ART_NUMMER)
    berechne_ek( "BELSTAMM", "RESS1", "BELZEILE", vorz)
    berechne_summe( "BELSTAMM", "BELZEILE", vorz, 0)
    mis_artikel( "BELSTAMM", "BELZEILE", vorz)
    mis_adresse_artikel( "BELSTAMM", "BELZEILE", vorz)
    mis_adresse( "BELSTAMM", "BELZEILE", vorz)
  end if
  store( "BELSTAMM")
  enable( "BELZEILE", 1)
end sub

sub zeile_beenden 
  if (&BELZEILE.ART = "") or (&BELZEILE.ART_NUMMER = "") then 
    cancel( "BELZEILE")
  else
    store( "BELZEILE")
  end if
end sub

sub hole_kreditlimit
  op_betrag = 0
  kreditlimit = 0
  if ((&BELEGDEF.LAGER = -1) and (&BELEGDEF.VST_UST = "U")) or (&BELEGDEF.AUFTRAG = 1) then
    op_betrag = hole_op_betrag( "BELSTAMM")
    kreditlimit = &XADRESSEOP.CREDIT_LIM
  end if
end sub

sub check_kreditlimit
  if (kreditlimit > 0) and (op_betrag + &BELSTAMM.SUM_BRUTTO > kreditlimit) then
    erg = messagebox( "Kreditlimit um %1 überschritten", 2, op_betrag + &BELSTAMM.SUM_BRUTTO - kreditlimit)
  end if  
end sub

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

'$INCLUDE \BAS\WILAGER
'$INCLUDE \BAS\WISONDPR
'$INCLUDE \BAS\WIBELEG
'$INCLUDE \BAS\WIBELERF
'$INCLUDE \BAS\WISERIEN
'$INCLUDE \BAS\WICHARGE
'$INCLUDE \BAS\WIMIS
'$INCLUDE \BAS\WIARTW
'$INCLUDE \BAS\XFWPRC
'$INCLUDE \BAS\XIBEMERK
'$INCLUDE \RTS\BAS\XIOPTION
'$INCLUDE \BAS\WIADRESS
'$INCLUDE \BAS\WMOP
'$INCLUDE \BAS\XISERIE
