'Description: Fibu: Include: SUBs Buchung speichern etc.
'usedby: fibu


'********************************************************************************************
sub validate_buchung
  valid = 1

  if (dialogart <> "") and (nur_stapelbuchen = 1) and (stapel = "") then
    erg = messagebox("Wenn die Option nur Stapelbuchen aktiviert ist darf keine Buchung ohne aktiven Stapel gespeichert werden!", 2)
    valid = 0
    exit sub
  end if

' Belegdatum ********************************************************************
  if getfield("PERIODEN", "BEENDET_" + mid$(str$(&fjour1z.bel_datum), 5, 2)) = "J" then
    erg = messagebox("Bereits abgeschlossene Buchungsperioden können nicht mehr bebucht werden!", 2)
    valid = 0
    exit sub
  end if
  if (&fjour1z.bel_datum < belegzeitraum_anfang) or (&fjour1z.bel_datum > belegzeitraum_ende) then
    erg = messagebox("Belegdatum: %1 paßt nicht in das aktuelle Wirtschaftsjahr!", 2, num$(&fjour1z.bel_datum))
    valid = 0
    exit sub
  end if

' Allgemeine Unklarheiten ********************************************************
  if (&FJOUR1Z.FIB_KTO_NR <> "") and (&fjour1z.buch_kto <> &FJOUR1Z.FIB_KTO_NR) and (&fjour1z.gegen_kto <> &FJOUR1Z.FIB_KTO_NR) then
    erg = messagebox("Das Personenkonto entspricht weder Buchungs- noch Gegenkonto.|Bitte erfassen Sie die Zeile neu.", 2)
    valid = 0
    exit sub
  end if
  if (&fjour1z.buch_sh = "") or ((&fjour1z.buch_sh <> "S") and (&fjour1z.buch_sh <> "H")) then
    erg = messagebox("Buchungskonto muß eine Soll-/Habenstellung haben!", 2)
    valid = 0
    exit sub
  end if
  if (&fjour1z.buch_kto = &fjour1z.gegen_kto) then
    erg = messagebox("Buchungskonto: %1 und Gegenkonto: %2 können nicht ident sein!", 2, &fjour1z.buch_kto, &fjour1z.gegen_kto)
    valid = 0
    exit sub
  end if
  if (&fjour1z.buch_kto = &fjour1z.ust_kto) then
    erg = messagebox("Buchungskonto: %1 und Umsatzsteuerkonto: %2 können nicht ident sein!", 2, &fjour1z.buch_kto, &fjour1z.ust_kto)
    valid = 0
    exit sub
  end if
  if (&fjour1z.gegen_kto = &fjour1z.ust_kto) then
    erg = messagebox("Gegenkonto: %1 und Umsatzsteuerkonto: %2 können nicht ident sein!", 2, &fjour1z.gegen_kto, &fjour1z.ust_kto)
    valid = 0
    exit sub
  end if
  if (&fjour1z.brutto = 0) then
    erg = messagebox("Bruttobetrag kann nicht 0 sein!", 2)
    valid = 0
    exit sub
  end if
  if (&fjour1z.netto = 0) then
    erg = messagebox("Nettobetrag kann nicht 0 sein!", 2)
    valid = 0
    exit sub
  end if
  if (str$((&fjour1z.netto + &fjour1z.ust), 20, 2) <> str$(&fjour1z.brutto, 20, 2)) then
'  untenstehende Abfragen ergeben bei div. Beträgeng z. b. 230.07 eine entsprechende Fehlermldung obwohl kein Fehler vorhanden ist.  
'  if (str$(round(&fjour1z.netto, 2) + round(&fjour1z.ust, 2), 20, 2) <> str$(&fjour1z.brutto, 20, 2)) then 
'  if (str$(round(&fjour1z.netto, 2) + round(&fjour1z.ust, 2), 20, 2) <> str$(round(&fjour1z.brutto, 2), 20, 2)) then   
    erg = messagebox("Nettobetrag + USt (%1) sind ungleich dem Bruttobetrag (%2)! Dies ist eine unmögliche Buchung.", 2, num$(round(&fjour1z.netto, 2) + round(&fjour1z.ust, 2), 20, 2), num$(round(&fjour1z.brutto, 2), 20, 2))
    valid = 0
    exit sub
  end if

' UST Logik *****************************************************************
  if (val(str$(&fjour1z.ust, 20, 3)) <> 0) and (&fjour1z.ust_schl = "") then
    erg = messagebox("Buchung hat keinen Umsatzsteuerschlüssel zugewiesen!", 2)
    valid = 0
    exit sub
  end if
  if (val(str$(&fjour1z.ust, 20, 3)) <> 0) and (&fjour1z.ust_kto = "") then
    erg = messagebox("Buchung hat kein Umsatzsteuerkonto zugewiesen!", 2)
    valid = 0
    exit sub
  end if
  if (val(str$(&fjour1z.ust, 20, 3)) = 0) and (&fjour1z.ust_kto <> "") then
    erg = messagebox("Umsatzsteuerbetrag kann nicht 0 sein, wenn ein Umsatzsteuerkonto: %1 zugewiesen wurde!", 2, &fjour1z.ust_kto)
    valid = 0
    exit sub
  end if
  if (&xustschd.rech_art = "N") and (&xustschd.ust_g_kto = "") then
    erg = messagebox("Im Umsatzsteuerschlüssel wurde kein Erwerbsteuergegenkonto angegeben!", 2)
    valid = 0
    exit sub
  end if
  if (&fjour1z.ust_schl <> "") and ((&xustschd.rech_art = "") or (&fjour1z.ust_kto = "") or (&fjour1z.ust_prz = 0) or (&fjour1z.ust_sh = "")) then
    erg = messagebox("Ust-Schlüssel wurde nicht vollständig gesetzt!", 2)
    valid = 0
    exit sub
  end if
'  Untenstehende Fehlermeldung wieder entfernt, da es bei der Mehrzahl der Anwender nur zu
'  Unmut geführt hat.
'  if (&fjour1z.ust_schl <> "") and ((&xustschd.ust_kto <> &fjour1z.ust_kto) or (&fjour1z.ust_prz <> &xustschd.ust_prz)) then
'    erg = messagebox("Ust-Schlüssel Definitionen weichen von den Eingaben der aktuellen Buchung ab! Wollen Sie trotzdem weiterbuchen?", 1020)
'    if erg <> 4 then
'      valid = 0
'      exit sub
'    end if
'  end if

' Personenkonten ************************************************************
  if (&FJOUR1Z.FIB_KTO_NR = "") and ((&buchKto.kto_art = "PK") or (&gegenKto.kto_art = "PK")) and (&FJOUR1Z.BUCH_ART <> "AUTO-EB") then
    erg = messagebox("Das Personenkonto wurde nicht gespeichert.|Bitte erfassen Sie die Zeile neu.", 2)
    valid = 0
    exit sub
  end if
  if (&FJOUR1Z.FIB_KTO_NR <> "") and (Personen_sammel_kto = "") then
    erg = messagebox("Das Personenkonto hat kein Sammelkonto zugewiesen!|Es ist wahrscheinlich sowohl als Kunde als auch als Lieferant definiert.|Setzen Sie die USt-Art im Gegenkonto auf VST oder UST damit das Programm das Sammelkonto setzen kann.", 2)
    valid = 0
    exit sub
  end if
  if (&buchKto.kto_art = "PK") and (&gegenKto.kto_art = "PK") then
    erg = messagebox("Personenkonten können nicht direkt gegen Personenkonten gebucht werden! Bitte verwenden Sie ein Zwischenkonto.", 2)
    valid = 0
    exit sub
  end if
  if ((&buchKto.kto_art = "PK") and (&gegenKto.op_ausgl <> "J") and (&gegenKto.UST_ART = "")) and (&FJOUR1Z.BUCH_ART <> "AUTO-EB") then
    erg = messagebox("Konto: %1 hat keine USt-Art gesetzt! Der offene Posten kann daher nicht korrekt gebildet werden.", 2, &gegenKto.kto_nr)
    valid = 0
    exit sub
  end if
  if ((&gegenKto.kto_art = "PK") and (&buchKto.op_ausgl <> "J") and (&buchKto.UST_ART = "")) and (&FJOUR1Z.BUCH_ART <> "AUTO-EB") then
    erg = messagebox("Konto: %1 hat keine USt-Art gesetzt! Der offene Posten kann daher nicht korrekt gebildet werden.", 2, &buchKto.kto_nr)
    valid = 0
    exit sub
  end if
  if (splitt_id = 0) and (&FJOUR1Z.FIB_KTO_NR <> "") and (&fjour1z.bel_nummer <> "") and (&FJOUR1Z.BUCH_ART <> "AUTO-AUSGL") and (findkey("XOP", "FIB_KTO_NR", &FJOUR1Z.FIB_KTO_NR, "BEL_NUMMER", &fjour1z.bel_nummer, "BEL_DATUM", &fjour1z.bel_datum) = 1) then
    if messagebox("OP Belegnummer bereits vorhanden:||Belegnummer: %1|Datum: &2||Trotzdem verbuchen?", 1020, &fjour1z.bel_nummer, &fjour1z.bel_datum) <> 4 then
      valid = 0
      exit sub
    end if
  end if


' Fremdwährungen *************************************************************
  if (fw_cross = 0) and (fw_multi = 0) then
    if (&fjour1z.fw_isocode <> "") and (&buchKto.FW_ISOCODE <> &fjour1z.fw_isocode) and (&buchKto.FW_ISOCODE <> "") then
      erg = messagebox("Die Fremdwährung: " + &fjour1z.fw_isocode + " kann nur mit dem Crossratingmodul auf das Buchungskonto gebucht werden!", 2)
      valid = 0
      exit sub
    end if
    if (&fjour1z.fw_isocode <> "") and (&gegenKto.FW_ISOCODE <> &fjour1z.fw_isocode) and (&gegenKto.FW_ISOCODE <> "") then
      erg = messagebox("Die Fremdwährung: " + &fjour1z.fw_isocode + " kann nur mit dem Crossratingmodul auf das Gegenkonto gebucht werden!", 2)
      valid = 0
      exit sub
    end if
    if (&fjour1z.fw_isocode <> "") and (&ustkto.FW_ISOCODE <> &fjour1z.fw_isocode) and (&ustKto.FW_ISOCODE <> "") then
      erg = messagebox("Die Fremdwährung: " + &fjour1z.fw_isocode + " kann nur mit dem Crossratingmodul auf das Umsatzsteuerkonto gebucht werden!", 2)
      valid = 0
      exit sub
    end if
    if (&fjour1z.ust_schl <> "") and (&xustschd.rech_art = "N") and (&fjour1z.fw_isocode <> "") and (&ust_g_kto.FW_ISOCODE <> &fjour1z.fw_isocode) and (&ust_g_kto.FW_ISOCODE <> "") then
      erg = messagebox("Die Fremdwährung: " + &fjour1z.fw_isocode + " kann nur mit dem Crossratingmodul auf das Erwerbsteuergegenkonto gebucht werden!", 2)
      valid = 0
      exit sub
    end if
    if (&FJOUR1Z.FIB_KTO_NR <> "") and (Personen_sammel_kto = "") and (&fjour1z.fw_isocode <> "") and (&sammelKto.FW_isocode <> &fjour1z.fw_isocode) and (&sammelKto.FW_isocode <> "") then
      erg = messagebox("Die Fremdwährung: " + &fjour1z.fw_isocode + " kann nur mit dem Crossratingmodul auf das Sammelkonto gebucht werden!", 2)
      valid = 0
      exit sub
    end if
  end if

' 2. Fremdwährungen abchecken *************************************************************
  if (&fjour1z.fx_isocode = "") or (&fjour1z.fx_eht = 0) or (&fjour1z.fx_kurs = 0) then
    erg = messagebox("Die 2. Fremdwährung wurde entweder in den Stammdaten oder in der Fremdwährungsverwaltung nicht ordnungsgemäß definiert! Diese Buchung wird/wurde nicht richtig verarbeitet!", 2)
  end if

' Soll/Habensaldokontrolle *********************************************************
  if ((&buchKto.sh_warn = "S") and (&fjour1z.buch_sh = "S") and ((&buchKto.checksaldo + &fjour1z.brutto) > 0)) and (dialogart <> "") then
    erg = messagebox("Buchungskonto: %1 hat Soll-/Habenwarnung aktiviert und der Saldo gleitet in den nicht erlaubten Bereich! Wollen Sie trotzdem weiterbuchen?", 1020, &fjour1z.buch_kto)
    if erg <> 4 then
      valid = 0
      exit sub
    end if
  end if
  if ((&buchKto.sh_warn = "S") and (&fjour1z.buch_sh = "H") and ((&buchKto.checksaldo - &fjour1z.brutto) > 0)) and (dialogart <> "") then
    erg = messagebox("Buchungskonto: %1 hat Soll-/Habenwarnung aktiviert und der Saldo gleitet in den nicht erlaubten Bereich! Wollen Sie trotzdem weiterbuchen?", 1020, &fjour1z.buch_kto)
    if erg <> 4 then
      valid = 0
      exit sub
    end if
  end if
  if ((&buchKto.sh_warn = "H") and (&fjour1z.buch_sh = "H") and ((&buchKto.checksaldo - &fjour1z.brutto) < 0)) and (dialogart <> "") then
    erg = messagebox("Buchungskonto: %1 hat Soll-/Habenwarnung aktiviert und der Saldo gleitet in den nicht erlaubten Bereich! Wollen Sie trotzdem weiterbuchen?", 1020, &fjour1z.buch_kto)
    if erg <> 4 then
      valid = 0
      exit sub
    end if
  end if
  if ((&buchKto.sh_warn = "H") and (&fjour1z.buch_sh = "S") and ((&buchKto.checksaldo + &fjour1z.brutto) < 0)) and (dialogart <> "") then
    erg = messagebox("Buchungskonto: %1 hat Soll-/Habenwarnung aktiviert und der Saldo gleitet in den nicht erlaubten Bereich! Wollen Sie trotzdem weiterbuchen?", 1020, &fjour1z.buch_kto)
    if erg <> 4 then
      valid = 0
      exit sub
    end if
  end if
  if ((&gegenKto.sh_warn = "S") and (&fjour1z.buch_sh = "S") and ((&gegenKto.checksaldo - &fjour1z.brutto) > 0)) and (dialogart <> "") then
    erg = messagebox("Gegenkonto: %1 hat Soll-/Habenwarnung aktiviert und der Saldo gleitet in den nicht erlaubten Bereich! Wollen Sie trotzdem weiterbuchen?", 1020, &fjour1z.gegen_kto)
    if erg <> 4 then
      valid = 0
      exit sub
    end if
  end if
  if ((&gegenKto.sh_warn = "S") and (&fjour1z.buch_sh = "H") and ((&gegenKto.checksaldo + &fjour1z.brutto) > 0)) and (dialogart <> "") then
    erg = messagebox("Gegenkonto: %1 hat Soll-/Habenwarnung aktiviert und der Saldo gleitet in den nicht erlaubten Bereich! Wollen Sie trotzdem weiterbuchen?", 1020, &fjour1z.gegen_kto)
    if erg <> 4 then
      valid = 0
      exit sub
    end if
  end if
  if ((&gegenKto.sh_warn = "H") and (&fjour1z.buch_sh = "H") and ((&gegenKto.checksaldo + &fjour1z.brutto) < 0)) and (dialogart <> "") then
    erg = messagebox("Gegenkonto: %1 hat Soll-/Habenwarnung aktiviert und der Saldo gleitet in den nicht erlaubten Bereich! Wollen Sie trotzdem weiterbuchen?", 1020, &fjour1z.gegen_kto)
    if erg <> 4 then
      valid = 0
      exit sub
    end if
  end if
  if ((&gegenKto.sh_warn = "H") and (&fjour1z.buch_sh = "S") and ((&gegenKto.checksaldo - &fjour1z.brutto) < 0)) and (dialogart <> "") then
    erg = messagebox("Gegenkonto: %1 hat Soll-/Habenwarnung aktiviert und der Saldo gleitet in den nicht erlaubten Bereich! Wollen Sie trotzdem weiterbuchen?", 1020, &fjour1z.gegen_kto)
    if erg <> 4 then
      valid = 0
      exit sub
    end if
  end if

' Kostenrechnung *****************************************************************
  if (&fjour1z.kore_schl <> "") and ((&fjour1z.K_STL <> "") or (&fjour1z.K_ART <> "") or (&fjour1z.K_TRG <> "")) then
    erg = messagebox("Es kann kein Kostenschlüssel und gleichzeitig eine einzelne Kostenstelle, -art, -träger angegeben werden!", 2)
    valid = 0
    exit sub
  end if
  if (&fjour1z.kst_lst = "") and ((&fjour1z.kore_schl <> "") or (&fjour1z.K_STL <> "") or (&fjour1z.K_ART <> "") or (&fjour1z.K_TRG <> "")) then
    erg = messagebox("Buchung hat Kostenstelle, -art, -träger bzw. einen Kostenschlüssel angegeben jedoch keine Angabe bezüglich Kosten/Leistung!", 2)
    valid = 0
    exit sub
  end if
  if (&buchKto.kore_schl + &buchKto.k_stl + &buchKto.k_art + &buchKto.k_trg + &buchKto.kst_lst <> "") and (&gegenKto.kore_schl + &gegenKto.k_stl + &gegenKto.k_art + &gegenKto.k_trg + &gegenKto.kst_lst <> "") then
    erg = messagebox("Buchungskonto und Gegenkonto haben Kostenrechnungseinstellungen.|Es kann nur ein Konto pro Buchung eine Kostenrechnungseinstellung haben.|Diese Buchung wird nicht in die Kostenrechnung übergeleitet!|Buchen Sie diese Buchung entweder über ein Zwischenkonto|oder manuell in der Kostenrechnung.|Wollen Sie diese Buchung trotzdem speichern?", 2)
    if erg <> 4 then
      valid = 0
      exit sub
    end if
  end if
  if (&fjour1z.kore_schl + &fjour1z.k_stl + &fjour1z.k_art + &fjour1z.k_trg + &fjour1z.kst_lst <> "") and (&fjour1z.k_manuell = "J") then
    erg = messagebox("Zu dieser Buchung wurde bereits eine manuelle Aufteilung der Kosten durchgeführt! Eine zusätzlich Erfassung in der Finanzbuchhaltung ist daher nicht mehr zulässig.", 2)
    valid = 0
    exit sub
  end if
  if (&fjour1z.kore_schl + &fjour1z.k_stl + &fjour1z.k_art + &fjour1z.k_trg = "") and (&fjour1z.kst_lst <> "") and (state("FJOUR1Z") = 2) then
    erg = messagebox("Zu dieser Buchung muß eine manuelle Aufteilung der Kosten durchgeführt werden!", 2)
    valid = 0
    exit sub
  end if
  if (&fjour1z.kore_schl + &fjour1z.k_stl + &fjour1z.k_art + &fjour1z.k_trg = "") and (&fjour1z.kst_lst <> "") and (state("FJOUR1Z") <> 2) then
    erg = messagebox("Bitte nicht vergessen! Zu dieser Buchung muß eine manuelle Aufteilung der Kosten durchgeführt werden.", 2)
  end if
end sub


'********************************************************************************************
sub check_before_edit_or_delete
  valid = 1
  set_all_variables(0, 0)
  if (&fjour1z.splitt_id <> 0) and (SPLITTBUCHUNG_EINZELNACHWEIS = 0) then
    if findkey("fjour", "ID_NUMMER", &fjour1z.splitt_id) = 0 then
      erg = messagebox("Diese Buchung hat durch eine Fehlfunktion keine Journalbuchungen sie kann daher nachträglich verändert, bzw. gelöscht werden!", 2)
      exit sub
    end if
  end if
  if (&fjour1z.splitt_id = 0) or (SPLITTBUCHUNG_EINZELNACHWEIS = 1) then
    if findkey("fjour", "ID_NUMMER", &fjour1z.id_nummer) = 0 then
      erg = messagebox("Diese Buchung hat durch eine Fehlfunktion keine Journalbuchungen sie kann daher nachträglich verändert, bzw. gelöscht werden!", 2)
      exit sub
    end if
  end if
  if &fjour1z.stapel = "" then
    erg = messagebox("Buchungen die bereits aus dem Stapel abgebucht wurden, können nachträglich nicht mehr verändert, bzw. gelöscht werden!", 2)
    valid = 0
    exit sub
  end if
  if check_op_ausgleich(1) = 1 then
    valid = 0
    exit sub
  end if
end sub


'***************************************************************************
sub get_akt_X
  akt_id_nummer = &fjour1z.id_nummer
  akt_bel_nr = &fjour1z.bel_nr
  akt_bel_datum = &fjour1z.bel_datum
  akt_bel_symbol = &fjour1z.bel_symbol
  akt_bel_nummer = &fjour1z.bel_nummer
  akt_buch_kto = &fjour1z.buch_kto
  akt_sh = &fjour1z.buch_sh
  akt_gegen_kto = &fjour1z.gegen_kto
  akt_buch_text = &fjour1z.buch_text
  akt_BRT_NETTO = &fjour1z.BRT_NETTO
end sub


'********************************************************************************************
sub set_fjour1z_fields
  if &fjour1z.bel_nr = 0 then
    locktable("fbelnr", 1)
    if findkey("fbelnr", "bel_symbol", &fjour1z.bel_symbol, "bz_anfang", Belegzeitraum_anfang) = 0 then
      appendblank("fbelNr")
      &fbelnr.bz_anfang = Belegzeitraum_anfang
      &fbelnr.bel_symbol = &fjour1z.bel_symbol
    end if
    if &fbelnr.bel_nr <> -1 then
      &fbelnr.bel_nr = &fbelnr.bel_nr + 1
      store("fbelnr")
    end if
    locktable("fbelnr", 0)
    if &fbelnr.bel_nr <> -1 then &fjour1z.bel_nr = &fbelnr.bel_nr
    if dialogart <> "" then
      @aktuelle_belegnummer = &fbelnr.bel_symbol + " " + str$(&fbelnr.bel_nr)
    end if
  end if

  if is_ausgleichsbuchung = 0 then get_akt_X

  &fjour1z.stapel = stapel
  &fjour1z.bz_anfang = belegzeitraum_anfang
  &fjour1z.BUCH_ART = ""

'bei Ausgleichsbuchungen muss buch_art gesetzt werden, damit z.B. Skontobuchungen autom. wieder gelöscht werden wenn der Ausgleich aufgehoben wird
  if is_ausgleichsbuchung = 1 then
    if (&xausglbu.vst_ust <> "") and (&xausglbu.buch_art <> "IST-STEUER") then
      &fjour1z.BUCH_ART = "AUTO-AUSGL"
    end if
  end if

  if (ausgleich <> "") and (&fjour1z.buch_art = "") then &fjour1z.buch_art = "OP-AUSGL"
  if (&fjour1z.buch_art = "OP-AUSGL") or (&fjour1z.buch_art = "AUTO-AUSGL") or (&buchKto.op_ausgl = "J") or (&gegenKto.op_ausgl = "J") then vst_or_ust = ""

  ENABLE( "FJOUR1Z", 0)
  if (dialogart <> "") and (manuelle_transaction = 1) then STARTTRANSACTION
  store("fjour1z")
  &fjour1z.bel_datum = &fjour1z.bel_datum
  ENABLE( "FJOUR1Z", 1)

  if (val(str$(Splittbetrag, 20, 2)) <> 0.0) or (splitt_id <> 0) then
    if splitt_id = 0 then
      splitt_id = &fjour1z.id_nummer
    end if
    &fjour1z.splitt_id = splitt_id
  end if
end sub


'********************************************************************************************
sub summen_runden

  &fjour1z.betrag = val(str$(&fjour1z.betrag, 20, 2))
  &fjour1z.brutto = val(str$(&fjour1z.brutto, 20, 2))
  &fjour1z.netto = val(str$(&fjour1z.netto, 20, 2))
  if &fjour1z.ust <> 0 then
    &fjour1z.ust = &fjour1z.brutto - &fjour1z.netto
  end if
  if &fjour1z.fx_brutto <> 0 then
    &fjour1z.fx_brutto = val(str$(&fjour1z.fx_brutto, 20, 2))
    &fjour1z.fx_netto = val(str$(&fjour1z.fx_netto, 20, 2))
    if &fjour1z.fx_ust <> 0 then
      &fjour1z.fx_ust = &fjour1z.fx_brutto - &fjour1z.fx_netto
    end if
  end if
  if &fjour1z.fw_brutto <> 0 then
    &fjour1z.fw_brutto = val(str$(&fjour1z.fw_brutto, 20, 2))
    &fjour1z.fw_netto = val(str$(&fjour1z.fw_netto, 20, 2))
    if &fjour1z.fw_ust <> 0 then
      &fjour1z.fw_ust = &fjour1z.fw_brutto - &fjour1z.fw_netto
    end if
  end if
end sub


'********************************************************************************************
sub F_onbeforepost(with_valid as long)

  valid = 1
  if (abs(&fjour1z.ust) < 0.01) and (with_valid = 1) then clear_ust
  set_all_variables(0, 0)

  if (with_valid = 1) and (valid = 0) then exit sub

  valid = 1
  if with_valid = 1 then validate_buchung
  if (valid = 0) and (state("FJOUR1Z") = 2) then &fjour1z.id_nummer = 0
end sub


'********************************************************************************************
sub F_onpost(with_op_handling as long, with_kore_handling as long)

  if valid = 0 then exit sub

  summen_runden

  set_fjour1z_fields

' OP-Handling muß in ONBEFOREPOST stehen, da es Daten in die Jounalzeile zurückschreibt.
  if (with_op_handling = 1) and (&FJOUR1Z.FIB_KTO_NR <> "") then
    if (&fjour1z.bel_nummer = "") then &fjour1z.bel_nummer = &fjour1z.bel_symbol + str$(&fjour1z.bel_nr)
    create_offene_posten(1)
  end if

' KORE buchen muß in ONBEFOREPOST stehen, da es die KORE_ID in die Journalzeile zurückschreibt
  if (with_kore_handling <> 0) then
    if kore = 1 then
      f_kore(with_kore_handling)
      if &fjour1z.k_manuell <> "J" then
        &fjour1z.kore_id = kore_id
      end if
    end if
  end if

  kontrollsumme = kontrollsumme + &fjour1z.brutto
  if dialogart <> "" then
    @kontroll_summe = num$(kontrollsumme, 15, 2)
  end if
end sub


'********************************************************************************************
sub set_stapel(astapel as string)
  stapel = astapel
  cancel("fjour1z")
  set_stapelrange

  if findkey("xusercon", "userid", userid, "config_art", "STAPEL") = 0 then
    appendblank("xusercon")
    &xusercon.userid = userid
    &xusercon.config_art = "STAPEL"
  end if
  &xusercon.configwert = stapel
  store("xusercon")
  if &fjour1z.buch_kto <> "" then
    appendblank("fjour1z")
  else
    set_all_variables(0, 0)
  end if
  @aktueller_stapel = stapel + "                "
end sub


'***************************************************************************
sub ausgleichsbuchungen
dim i as long
dim has_action as long
dim pl_min as long
dim ust_schl_vom_konto_sp as long
dim j as long

  has_action = 0
  pl_min = 0
  ust_schl_vom_konto_sp = 0
  setfilter( "xausgl", "")
  setfilter( "xausgl", replace( "userid = '%1'", userid))
  gotofirst("xausgl")
  do while eof("xausgl") = 0
    has_action = 1
    i = 1
    if findkey("xausglbu", "vst_ust", &xausgl.vst_ust, "Buch_art", &xausgl.buch_art) = 1 then
      ausgl_nochmal:
      is_ausgleichsbuchung = 1
      appendblank("fjour1z")
      &fjour1z.BEL_DATUM = &xausgl.bel_datum
      &fjour1z.val_datum = &fjour1z.bel_datum
      &fjour1z.BEL_SYMBOL = &xausgl.BEL_SYMBOL
      &fjour1z.BEL_NR = &xausgl.BEL_NR
      &fjour1z.BUCH_KTO = &xausglbu.KTO
      if &xausgl.buch_kto <> "" then &fjour1z.BUCH_KTO = &xausgl.buch_KTO
      &fjour1z.BUCH_SH = &xausglbu.kto_sh
      &fjour1z.GEGEN_KTO = &xausgl.pers_kto
      &fjour1z.BRUTTO = abs(&xausgl.betrag)
      if (&xausglbu.vst_ust <> "") and (&xausglbu.buch_art <> "IST-STEUER") then
        &fjour1z.BUCH_ART = "AUTO-AUSGL"
      end if
      if (&xausglbu.ust = "J") and (getfield("xausgl", "ust_schl" + str$(i)) <> "") then
        &fjour1z.UST_SCHL = getfield("xausgl", "ust_schl" + str$(i))
        &fjour1z.brutto = abs(getfield("xausgl", "brt_betr" + str$(i)))
      end if
      if (getfield("xausgl", "ust_schl" + str$(i)) = "") and (abs(getfield("xausgl", "brt_betr" + str$(i))) <> 0) then
        &fjour1z.UST_SCHL = ""
        &fjour1z.brutto = abs(getfield("xausgl", "brt_betr" + str$(i)))
      end if
      &fjour1z.BUCH_TEXT = &xausglbu.BUCH_text + " / OP-Beleg: " + &xausgl.bel_nummer

'     set_all_variables(1) muß hier stehen um den Ust-Schlüssel zu positionieren und die
'     Variablen (buch_keine_fw, etc.) zu setzen die für die Fremdwährungsverbuchung notwendig sind.
      ust_schl_vom_konto_sp = ust_schl_vom_konto
      ust_schl_vom_konto = 0
      set_all_variables(1, 0)
      ust_schl_vom_konto = ust_schl_vom_konto_sp

'     Betrag auf netto setzen wegen Erwerbsteuerausgleichsbuchung
      if (&fjour1z.UST_SCHL <> "") and (&xustschd.rech_art = "N") then
        &fjour1z.NETTO = &fjour1z.brutto
        set_betraege
      end if

'     Beträge neu rechnen wegen Fremdwährung
      if (&buchKto.keine_fw = "") and (&gegenKto.keine_fw = "") then
        &fjour1z.fw_isocode = &xausgl.fw_isocode
        &fjour1z.fw_kurs = &xausgl.fw_kurs
        &fjour1z.fw_eht = &xausgl.fw_eht
        set_betraege
      end if

'     Ausgleichskonto neu setzten wenn der UST-Schlüssel ein eigenes Skontokonto definiert hat
      if (&fjour1z.UST_SCHL <> "") and (&xausglbu.ust = "J") and (&xustschd.skto_kto <> "") and (instr(1, &xausgl.buch_art, "SKONTO") > 0) then
        &fjour1z.BUCH_KTO = &xustschd.skto_kto
      end if

'     Einen eventuell gesetzten Steuerschlüssel in einer automatischen Umbuchung auf 0 setzen
'     wenn in der Tabelle XAUSGLBU die entsprechenden Felder gesetzt sind
      if (&xausglbu.ust <> "J") and (&xausglbu.vst_ust = "") and (&fjour1z.UST_SCHL <> "") then
        clear_ust
      end if

'     Sicherstellen, daß die OP Nummer noch nicht vergeben ist. Und eventuell eine neue generieren.
      j = 1
      &fjour1z.bel_nummer = &fjour1z.bel_symbol + str$(&fjour1z.bel_nr)
      if findkey( "XOP", "FIB_KTO_NR", &FJOUR1Z.FIB_KTO_NR, "BEL_NUMMER", &fjour1z.BEL_NUMMER, "BEL_DATUM", &fjour1z.bel_datum) = 1 then
        do while findkey( "XOP", "FIB_KTO_NR", &FJOUR1Z.FIB_KTO_NR, "BEL_NUMMER", &fjour1z.BEL_NUMMER + "/" + str$(j), "BEL_DATUM", &fjour1z.bel_datum) = 1
          j = j + 1
        loop
        &fjour1z.BEL_NUMMER = &fjour1z.BEL_NUMMER + "/" + str$(j)
      end if

      F_onbeforepost(1)
      F_onpost(1, 1)
      if valid = 1 then
        store("fjour1z")
        fibu_alles_speichern(1)

        if (&xausglbu.vst_ust <> "") and (&xausglbu.buch_art <> "IST-STEUER") and (&xop.bel_nummer = &fjour1z.bel_nummer) then
          &xop.op = 0
          &xop.fw_op = 0
          &xop.fx_op = 0
          &xop.zahlung = &xop.betrag
          &xop.fw_zahlung = &xop.fw_betrag
          &xop.fx_zahlung = &xop.fx_betrag
          store("xop")
        end if

        if (&xausglbu.vst_ust <> "") and (&xausglbu.buch_art <> "IST-STEUER") and (&xop.bel_nummer = &fjour1z.bel_nummer) then
          appendblank("XOPREFER")
          &XOPREFER.STM_NUMMER = &xausgl.ausgl_id
          &XOPREFER.ID_NUMMER = &xop.id_nummer
          &XOPREFER.FIB_KTO_NR = &xausgl.pers_kto
          &XOPREFER.BEL_NUMMER = &fjour1z.bel_nummer
          &XOPREFER.BEL_DATUM = &fjour1z.bel_datum
          &XOPREFER.DISPO = &xop.betrag
          &XOPREFER.FW_DISPO = &xop.fw_betrag
          &XOPREFER.FX_DISPO = &xop.fx_betrag
          store("XOPREFER")
        end if

      end if
      is_ausgleichsbuchung = 0

'     Schleife für verschiedene UST-Schlüssel 5 mal durchlaufen
      i = i + 1
      if i <= 5 then
        if (&xausglbu.ust = "J") and (getfield("xausgl", "brt_betr" + str$(i)) <> 0) then
          goto ausgl_nochmal
        end if
      end if
    end if

'   Automatische Buchung für Anzahlungsautomatik
    if &xausgl.buch_art = "ANZAHLAUTO" then
      is_ausgleichsbuchung = 1
      appendblank("fjour1z")
      &fjour1z.BEL_DATUM = &xausgl.bel_datum
      &fjour1z.val_datum = &fjour1z.bel_datum
      &fjour1z.BEL_SYMBOL = &xausgl.BEL_SYMBOL
      &fjour1z.BEL_NR = &xausgl.BEL_NR
      &fjour1z.BUCH_KTO = &xausgl.buch_KTO
      &fjour1z.BUCH_SH = "S"
      &fjour1z.GEGEN_KTO = &xausgl.pers_kto
      &fjour1z.BRUTTO = abs(&xausgl.betrag)
      &fjour1z.BUCH_TEXT = "Anzahlung"

'     set_all_variables(1) muß hier stehen um den Ust-Schlüssel zu positionieren und die
'     Variablen (buch_keine_fw, etc.) zu setzen die für die Fremdwährungsverbuchung notwendig sind.
      set_all_variables(1, 0)

      &fjour1z.ust_schl = &xausgl.ust_schl1
      do_ust_schl(1)

'     Betrag auf netto setzen wegen Erwerbsteuerausgleichsbuchung
      if (&fjour1z.UST_SCHL <> "") and (&xustschd.rech_art = "N") then
        &fjour1z.NETTO = &fjour1z.brutto
        set_betraege
      end if

'     Beträge neu rechnen wegen Fremdwährung
      if (&buchKto.keine_fw = "") and (&gegenKto.keine_fw = "") then
        &fjour1z.fw_isocode = &xausgl.fw_isocode
        &fjour1z.fw_kurs = &xausgl.fw_kurs
        &fjour1z.fw_eht = &xausgl.fw_eht
        set_betraege
      end if

      F_onbeforepost(1)
      F_onpost(0, 1)
      if valid = 1 then
        store("fjour1z")
        fibu_alles_speichern(1)
      end if
      is_ausgleichsbuchung = 0
    end if

    skip("xausgl", 1)
  loop
  if has_action = 1 then
    openquery( "SQL")
    addsql( "SQL", "Delete from xausgl where userid = '" + userid + "' AND MANDANT = '" + upper$( CompanyName) + "';")
    execsql( "SQL")
    closetable("SQL")
    i = rts("refresh", "XAUSGL")
  end if                
end sub


'***************************************************************************
sub check_standardkonten
  if &fstm.ksamm_kto = "" then
    erg = messagebox("In den Standardeinstellungen wurde kein Standardkundensammelkonto definiert! Buchen wird abgebrochen.", 2)
    erg = erg / 0
  end if
  if &fstm.lsamm_kto = "" then
    erg = messagebox("In den Standardeinstellungen wurde kein Standardlieferantensammelkonto definiert! Buchen wird abgebrochen.", 2)
    erg = erg / 0
  end if
  if &fstm.eb_kto = "" then
    erg = messagebox("In den Standardeinstellungen wurde kein Eröffnungsbilanzkonto definiert! Buchen wird abgebrochen.", 2)
    erg = erg / 0
  end if
  if &xstmdat.fw_isocode = "" then
    erg = messagebox("In den Stammdaten wurde keine Standardwährung definiert! Buchen wird abgebrochen.", 2)
    erg = erg / 0
  end if
  if &xstmdat.fx_isocode = "" then
    erg = messagebox("In den Stammdaten wurde keine 2. Standardwährung definiert! Buchen wird abgebrochen.", 2)
    erg = erg / 0
  end if
end sub


'***************************************************************************
sub buchen_oncreate
  if (findkey("xusercon", "userid", userid, "config_art", "STAPEL") = 1) then
    opentable("fstapel")
    if findkey("fstapel", "stapel", &xusercon.configwert, "BZ_ANFANG", belegzeitraum_anfang) = 1 then
      stapel = &xusercon.configwert
    else
      &xusercon.configwert = ""
      store("xusercon")
    end if
    closetable("fstapel")
  end if
  @aktueller_stapel = stapel + "             "
  if eingabereihenfolge = 1 then setindex("fjour1z", "STAPEL_ID_NUMMER")
  set_stapelrange

  if (findkey("xusercon", "userid", userid, "config_art", "KONTROLLSUMME") = 1) and (KONTROLLSUMME_SPEICHERN = 1) then
    kontrollsumme = val(&xusercon.configwert)
  end if

  check_standardkonten
end sub


'***************************************************************************
sub set_stapelrange
  ENABLE( "FJOUR1Z", 0)
  if eingabereihenfolge = 0 then
    setrangestart("fjour1z")
    setrangestart("fjour1z", "bz_anfang", belegzeitraum_anfang, "STAPEL", stapel)
    setrangeend("fjour1z", "bz_anfang", belegzeitraum_anfang, "STAPEL", stapel)
  else
    setrangestart("fjour1z")
    setrangestart("fjour1z", "bz_anfang", belegzeitraum_anfang, "STAPEL", stapel)
    setrangeend("fjour1z", "bz_anfang", belegzeitraum_anfang, "STAPEL", stapel)
  end if
  if dialogart = "DIALOG-JOURNAL" then
    setrangestart("fjour1z2")
    setrangestart("fjour1z2", "bz_anfang", belegzeitraum_anfang, "STAPEL", stapel)
    setrangeend("fjour1z2", "bz_anfang", belegzeitraum_anfang, "STAPEL", stapel)
  end if
  ENABLE( "FJOUR1Z", 1)
end sub


'***************************************************************************
sub set_fbumsk
  if findkey("fbumsk", "modell", @bumsk) = 0 then exit sub
  if BUCHUNGSMODELL_IST_STAPEL = 1 then
    neuer_stapel(@bumsk)
  end if    
  cancel("fjour1z")
'  if &fbumsk.dialog <> "" then wnd_erg = changedialog(&fbumsk.dialog)
  set_buchungsmaske
  appendblank("fjour1z")
  @bumsk = &fbumsk.modell
  if &fbumsk.feld_1 <> "" then set_fbumsk_first_object
end sub


'***************************************************************************
sub neuer_stapel(astapel as string)
    opentable("fstapel")
    if findkey("fstapel", "stapel", astapel, "BZ_ANFANG", belegzeitraum_anfang) = 0 then
      appendblank("fstapel")
      &fstapel.stapel = astapel
      &fstapel.bz_anfang = belegzeitraum_anfang
      &fstapel.name = astapel
      store("fstapel")
    end if
    closetable("fstapel")
    set_stapel(astapel)
end sub


'***************************************************************************
sub buchung_suchen
dim bel_datum as long
dim bel_symbol as long
dim bel_nr as long
dim retourstapel as string

  retourstapel = ""
  wnd_erg = "||" + str$(Belegzeitraum_anfang) + "+" + stapel + "+" + str$(Belegzeitraum_anfang) + "++|" + str$(Belegzeitraum_anfang) + "+" + stapel + "+" + str$(Belegzeitraum_ende) + "+ZZZZZZZZZZ+999999999"
  wnd_erg = window("\wnd\fjour1z" + wnd_erg)
  if wnd_erg <> "" then
    retourstapel = mid$(wnd_erg, instr(1, wnd_erg, "+") + 1, 255)
    wnd_erg = mid$(wnd_erg, 1, instr(1, wnd_erg, "+") - 1)
    cancel("fjour1z")
    if stapel <> retourstapel then
      set_stapel(retourstapel)
    end if
    ENABLE( "FJOUR1Z", 0)
    setindex("fjour1z", "")
    findfirst("fjour1z", "id_nummer", val(wnd_erg))
    bel_datum = &fjour1z.bel_datum
    bel_symbol = &fjour1z.bel_symbol
    bel_nr = &fjour1z.bel_nr
    if eingabereihenfolge = 0 then
      setindex("fjour1z", "stapel_Belegdatum")
    else
      setindex("fjour1z", "STAPEL_ID_NUMMER")
    end if
    set_stapelrange
    if eingabereihenfolge = 0 then
      findfirst("fjour1z","bz_anfang", belegzeitraum_anfang, "STAPEL", stapel, "bel_datum", bel_datum, "BEL_SYMBOL", bel_symbol, "BEL_NR", bel_nr, "ID_NUMMER", val(wnd_erg))
    else
      findfirst("fjour1z","bz_anfang", belegzeitraum_anfang, "STAPEL", stapel, "ID_NUMMER", val(wnd_erg))
    end if
    ENABLE( "FJOUR1Z", 1)
    gosub FJOUR1Z_ONRECORDCHANGE
  end if
end sub


'***********************************************************************************
sub set_buchungsmaske
dim buch_kto_filter as string
dim gegen_kto_filter as string

  buch_kto_filter = ""
  gegen_kto_filter = ""


  enable(@buch_kto, 1)
  enable(@buch_kto, 3)
  enable(@buch_kto, val(&fbumsk.BKTO))
  enable(@l_buch_kto, 1)
  enable(@l_buch_kto, 3)
  enable(@l_buch_kto, val(&fbumsk.BKTO))

  enable(@Gegen_kto, 1)
  enable(@Gegen_kto, 3)
  enable(@Gegen_kto, val(&fbumsk.GKTO))
  enable(@l_Gegen_kto, 1)
  enable(@l_Gegen_kto, 3)
  enable(@l_Gegen_kto, val(&fbumsk.GKTO))

  enable(@bel_datum, 1)
  enable(@bel_datum, 3)
  enable(@bel_datum, val(&fbumsk.BEL_DATUM))
  enable(@l_bel_datum, 1)
  enable(@l_bel_datum, 3)
  enable(@l_bel_datum, val(&fbumsk.BEL_DATUM))

  enable(@bel_symbol, 1)
  enable(@bel_symbol, 3)
  enable(@bel_symbol, val(&fbumsk.BEL_SYMBOL))
  enable(@l_bel_symbol, 1)
  enable(@l_bel_symbol, 3)
  enable(@l_bel_symbol, val(&fbumsk.BEL_SYMBOL))

  enable(@bel_nr, 1)
  enable(@bel_nr, 3)
  enable(@bel_nr, val(&fbumsk.BEL_NR))
  enable(@l_bel_nr, 1)
  enable(@l_bel_nr, 3)
  enable(@l_bel_nr, val(&fbumsk.BEL_NR))

  enable(@buch_sh, 1)
  enable(@buch_sh, 3)
  enable(@buch_sh, val(&fbumsk.BUCH_SH))
  enable(@l_buch_sh, 1)
  enable(@l_buch_sh, 3)
  enable(@l_buch_sh, val(&fbumsk.BUCH_SH))

  enable(@ust_schl, 1)
  enable(@ust_schl, 3)
  enable(@ust_schl, val(&fbumsk.UST_SCHL))
  enable(@l_ust_schl, 1)
  enable(@l_ust_schl, 3)
  enable(@l_ust_schl, val(&fbumsk.UST_SCHL))
 
  enable(@ust_kto, 1)
  enable(@ust_kto, 3)
  enable(@ust_kto, val(&fbumsk.UST_KTO))
  enable(@l_ust_kto, 1)
  enable(@l_ust_kto, 3)
  enable(@l_ust_kto, val(&fbumsk.UST_KTO))

  enable(@ust_prz, 1)
  enable(@ust_prz, 3)
  enable(@ust_prz, val(&fbumsk.UST_PRZ))
  enable(@l_ust_prz, 1)
  enable(@l_ust_prz, 3)
  enable(@l_ust_prz, val(&fbumsk.UST_PRZ))

  enable(@ust_sh, 1)
  enable(@ust_sh, 3)
  enable(@ust_sh, val(&fbumsk.UST_SH))
  enable(@l_ust_sh, 1)
  enable(@l_ust_sh, 3)
  enable(@l_ust_sh, val(&fbumsk.UST_SH))

  enable(@betrag, 1)
  enable(@betrag, 3)
  enable(@betrag, val(&fbumsk.BETRAG))
  enable(@l_betrag, 1)
  enable(@l_betrag, 3)
  enable(@l_betrag, val(&fbumsk.BETRAG))

  enable(@brt_netto, 1)
  enable(@brt_netto, 3)
  enable(@brt_netto, val(&fbumsk.BRT_NETTO))
  enable(@l_brt_netto, 1)
  enable(@l_brt_netto, 3)
  enable(@l_brt_netto, val(&fbumsk.BRT_NETTO))

  enable(@buch_text, 1)
  enable(@buch_text, 3)
  enable(@buch_text, val(&fbumsk.BUCH_TEXT))
  enable(@l_buch_text, 1)
  enable(@l_buch_text, 3)
  enable(@l_buch_text, val(&fbumsk.BUCH_TEXT))

  enable(@brutto, 1)
  enable(@brutto, 3)
  enable(@brutto, val(&fbumsk.BRUTTO))
  enable(@l_brutto, 1)
  enable(@l_brutto, 3)
  enable(@l_brutto, val(&fbumsk.BRUTTO))

  enable(@netto, 1)
  enable(@netto, 3)
  enable(@netto, val(&fbumsk.NETTO))
  enable(@l_netto, 1)
  enable(@l_netto, 3)
  enable(@l_netto, val(&fbumsk.NETTO))

  enable(@ust, 1)
  enable(@ust, 3)
  enable(@ust, val(&fbumsk.UST))
  enable(@l_ust, 1)
  enable(@l_ust, 3)
  enable(@l_ust, val(&fbumsk.UST))

  enable(@bel_nummer, 1)
  enable(@bel_nummer, 3)
  enable(@bel_nummer, val(&fbumsk.BEL_NUMMER))
  enable(@l_bel_nummer, 1)
  enable(@l_bel_nummer, 3)
  enable(@l_bel_nummer, val(&fbumsk.BEL_NUMMER))

  enable(@k_stl, 1)
  enable(@k_stl, 3)
  enable(@k_stl, val(&fbumsk.K_STL))
  enable(@l_k_stl, 1)
  enable(@l_k_stl, 3)
  enable(@l_k_stl, val(&fbumsk.k_stl))

  enable(@k_art, 1)
  enable(@k_art, 3)
  enable(@k_art, val(&fbumsk.k_art))
  enable(@l_k_art, 1)
  enable(@l_k_art, 3)
  enable(@l_k_art, val(&fbumsk.k_art))

  enable(@k_trg, 1)
  enable(@k_trg, 3)
  enable(@k_trg, val(&fbumsk.k_trg))
  enable(@l_k_trg, 1)
  enable(@l_k_trg, 3)
  enable(@l_k_trg, val(&fbumsk.k_trg))

  enable(@kore_schl, 1)
  enable(@kore_schl, 3)
  enable(@kore_schl, val(&fbumsk.kore_schl))
  enable(@l_kore_schl, 1)
  enable(@l_kore_schl, 3)
  enable(@l_kore_schl, val(&fbumsk.kore_schl))

  enable(@kst_lst, 1)
  enable(@kst_lst, 3)
  enable(@kst_lst, val(&fbumsk.kst_lst))
  enable(@l_kst_lst, 1)
  enable(@l_kst_lst, 3)
  enable(@l_kst_lst, val(&fbumsk.kst_lst))

  enable(@fw_isocode, 1)
  enable(@fw_isocode, 3)
  enable(@fw_isocode, val(&fbumsk.FW_ISOCODE))
  enable(@l_fw_isocode, 1)
  enable(@l_fw_isocode, 3)
  enable(@l_fw_isocode, val(&fbumsk.FW_ISOCODE))

  enable(@fw_kurs, 1)
  enable(@fw_kurs, 3)
  enable(@fw_kurs, val(&fbumsk.FW_KURS))
  enable(@l_fw_kurs, 1)
  enable(@l_fw_kurs, 3)
  enable(@l_fw_kurs, val(&fbumsk.FW_KURS))

  enable(@fw_brutto, 1)
  enable(@fw_brutto, 3)
  enable(@fw_brutto, val(&fbumsk.FW_BRUTTO))
  enable(@l_fw_brutto, 1)
  enable(@l_fw_brutto, 3)
  enable(@l_fw_brutto, val(&fbumsk.FW_BRUTTO))

  enable(@fw_netto, 1)
  enable(@fw_netto, 3)
  enable(@fw_netto, val(&fbumsk.FW_NETTO))
  enable(@l_fw_netto, 1)
  enable(@l_fw_netto, 3)
  enable(@l_fw_netto, val(&fbumsk.FW_NETTO))

  enable(@fw_ust, 1)
  enable(@fw_ust, 3)
  enable(@fw_ust, val(&fbumsk.FW_UST))
  enable(@l_fw_ust, 1)
  enable(@l_fw_ust, 3)
  enable(@l_fw_ust, val(&fbumsk.FW_UST))

  enable(@fx_ISOCODE, 1)
  enable(@fx_ISOCODE, 3)
  enable(@fx_ISOCODE, val(&fbumsk.fx_ISOCODE))
  enable(@l_fx_ISOCODE, 1)
  enable(@l_fx_ISOCODE, 3)
  enable(@l_fx_ISOCODE, val(&fbumsk.fx_ISOCODE))

  enable(@fx_kurs, 1)
  enable(@fx_kurs, 3)
  enable(@fx_kurs, val(&fbumsk.fx_KURS))
  enable(@l_fx_kurs, 1)
  enable(@l_fx_kurs, 3)
  enable(@l_fx_kurs, val(&fbumsk.fx_KURS))

  enable(@fx_brutto, 1)
  enable(@fx_brutto, 3)
  enable(@fx_brutto, val(&fbumsk.fx_BRUTTO))
  enable(@l_fx_brutto, 1)
  enable(@l_fx_brutto, 3)
  enable(@l_fx_brutto, val(&fbumsk.fx_BRUTTO))

  enable(@fx_netto, 1)
  enable(@fx_netto, 3)
  enable(@fx_netto, val(&fbumsk.fx_NETTO))
  enable(@l_fx_netto, 1)
  enable(@l_fx_netto, 3)
  enable(@l_fx_netto, val(&fbumsk.fx_NETTO))

  enable(@fx_ust, 1)
  enable(@fx_ust, 3)
  enable(@fx_ust, val(&fbumsk.fx_UST))
  enable(@l_fx_ust, 1)
  enable(@l_fx_ust, 3)
  enable(@l_fx_ust, val(&fbumsk.fx_UST))

  enable(@zahl_kond, 1)
  enable(@zahl_kond, 3)
  enable(@zahl_kond, val(&fbumsk.zahl_kond))
  enable(@l_zahl_kond, 1)
  enable(@l_zahl_kond, 3)
  enable(@l_zahl_kond, val(&fbumsk.zahl_kond))

  enable(@zahl_ziel, 1)
  enable(@zahl_ziel, 3)
  enable(@zahl_ziel, val(&fbumsk.zahl_ziel))
  enable(@l_zahl_ziel, 1)
  enable(@l_zahl_ziel, 3)
  enable(@l_zahl_ziel, val(&fbumsk.zahl_ziel))

  enable(@SKONTOPRZ1, 1)
  enable(@SKONTOPRZ1, 3)
  enable(@SKONTOPRZ1, val(&fbumsk.SKONTOPRZ1))
  enable(@l_SKONTOPRZ1, 1)
  enable(@l_SKONTOPRZ1, 3)
  enable(@l_SKONTOPRZ1, val(&fbumsk.SKONTOPRZ1))

  enable(@SKONTOTGE1, 1)
  enable(@SKONTOTGE1, 3)
  enable(@SKONTOTGE1, val(&fbumsk.SKONTOTGE1))
  enable(@l_SKONTOTGE1, 1)
  enable(@l_SKONTOTGE1, 3)
  enable(@l_SKONTOTGE1, val(&fbumsk.SKONTOTGE1))

  enable(@SKONTOPRZ2, 1)
  enable(@SKONTOPRZ2, 3)
  enable(@SKONTOPRZ2, val(&fbumsk.SKONTOPRZ2))
  enable(@l_SKONTOPRZ2, 1)
  enable(@l_SKONTOPRZ2, 3)
  enable(@l_SKONTOPRZ2, val(&fbumsk.SKONTOPRZ2))

  enable(@SKONTOTGE2, 1)
  enable(@SKONTOTGE2, 3)
  enable(@SKONTOTGE2, val(&fbumsk.SKONTOTGE2))
  enable(@l_SKONTOTGE2, 1)
  enable(@l_SKONTOTGE2, 3)
  enable(@l_SKONTOTGE2, val(&fbumsk.SKONTOTGE2))

  if (&fbumsk.BKTO_ART <> "") and (&fbumsk.BKTO_ART <> "0") then 
    buch_kto_filter = " AND (KTO_ART = '" + &fbumsk.BKTO_ART + "')"
  end if
  if (&fbumsk.BKTO_OPAUS <> "") then 
    if buch_kto_filter <> "" then 
      buch_kto_filter = buch_kto_filter + " AND "
    end if
    buch_kto_filter = buch_kto_filter + "(OP_AUSGL = 'J')"
  end if

  if (&fbumsk.GKTO_ART <> "") and (&fbumsk.GKTO_ART <> "0") then 
    gegen_kto_filter = "AND (KTO_ART = '" + &fbumsk.GKTO_ART + "')"
  end if
  if (&fbumsk.GKTO_OPAUS <> "") then 
    if gegen_kto_filter <> "" then
      gegen_kto_filter = gegen_kto_filter + " AND "
    end if
    gegen_kto_filter = gegen_kto_filter + "(OP_AUSGL = 'J')"
  end if

  WRITEGLOBAL ( "STRING_1", buch_kto_filter)
  WRITEGLOBAL ( "STRING_2", gegen_kto_filter)
end sub


'***************************************************************************
sub buchungsmakrospeichern
  if (&fjour1z.BUCH_KTO = "") or (&fjour1z.GEGEN_KTO = "") then exit sub
  appendblank("fbumakro")
  &fbumakro.BEZEICHN = &fjour1z.BUCH_TEXT
  &fbumakro.BEL_SYMBOL = &fjour1z.BEL_SYMBOL
  &fbumakro.BUCH_KTO = &fjour1z.BUCH_KTO
  &fbumakro.BUCH_SH = &fjour1z.BUCH_SH
  &fbumakro.GEGEN_KTO = &fjour1z.GEGEN_KTO
  &fbumakro.UST_SCHL = &fjour1z.UST_SCHL
  &fbumakro.UST_KTO = &fjour1z.UST_KTO
  &fbumakro.UST_SH = &fjour1z.UST_SH
  &fbumakro.UST_PRZ = &fjour1z.UST_PRZ
  &fbumakro.BUCH_TEXT = &fjour1z.BUCH_TEXT
  &fbumakro.K_STL = &fjour1z.K_STL
  &fbumakro.K_ART = &fjour1z.K_ART
  &fbumakro.K_TRG = &fjour1z.K_TRG
  &fbumakro.KORE_SCHL = &fjour1z.KORE_SCHL
  &fbumakro.KST_LST = &fjour1z.KST_LST
  &fbumakro.EINHEIT = &fjour1z.EINHEIT
  &fbumakro.FW_ISOCODE = &fjour1z.FW_ISOCODE
  &fbumakro.ZAHL_KOND = &fjour1z.ZAHL_KOND
  &fbumakro.ZAHL_ZIEL = &fjour1z.ZAHL_ZIEL
  &fbumakro.SKONTOPRZ1 = &fjour1z.SKONTOPRZ1
  &fbumakro.SKONTOPRZ2 = &fjour1z.SKONTOPRZ2
  &fbumakro.SKONTOTGE1 = &fjour1z.SKONTOTGE1
  &fbumakro.SKONTOTGE2 = &fjour1z.SKONTOTGE2
  store("fbumakro")
end sub


'**********************************************************************************
sub fbuchung_stornieren
dim i as long
dim storno_pl_minus as long

' Das Flag storno_pl_minus steuert ob eine Stornobuchung durch vertauschen von S/H oder durch
' setzten des Betrags ins Minus ausgeführt wird.
' storno_pl_minus = 1: vertauschen von S/H
' storno_pl_minus = -1: Buchungsbetrag wird ins Minus gesetzt.

  storno_pl_minus = 1
  erg = 0  'Wenn das Makro fällt dann auch diese Zeile löschen
  if (&fjour1z.stapel <> "") then
    i = messagebox("Noch im Stapel befindliche Buchungen können nicht storniert sondern nur gelöscht werden!", 2)
    exit sub
  end if
  if (&fjour1z.DIV_CODE = "STORN") then
    i = messagebox("Bereits stornierte Buchungen können nicht noch einmal storniert werden!", 2)
    exit sub
  end if
  if (&fjour1z.DIV_CODE = "WAWI") then
    i = messagebox("Buchungen die aus der Warenwirtschaft übernommen wurden, können nicht in der Finanzbuchhaltung storniert werden, sondern nur in der Warenwirtschaft!", 2)
    exit sub
  end if
  if messagebox("Buchung stornieren?", 20) = 4 then
    Splittbetrag = 0
    splitt_id = 0
    if findkey("j1z", "id_nummer", &fjour1z.id_nummer) = 1 then
      @stornobelegsymbol = &j1z.BEL_SYMBOL
      @stornodatum = &j1z.BEL_DATUM
      if dialog("\dlg\fstorno") = 0 then exit sub
      if getfield("PERIODEN", "BEENDET_" + mid$(str$(@stornodatum), 5, 2)) = "J" then
        i = messagebox("Bereits abgeschlossene Buchungsperioden können nicht mehr bebucht werden!", 2)
        exit sub
      end if
      ENABLE( "FJOUR1Z", 0)
      &fjour1z.DIV_CODE = "STORN"

'     Kostenrechungsbuchung löschen *****
      if (kore = 1) then
        f_kore(0)
        &fjour1z.kore_id = kore_id
      end if

      store("fjour1z")
      ENABLE( "FJOUR1Z", 1)
      create_offene_posten(-1)
      appendblank("fjour1z")
      &fjour1z.BEL_DATUM = @stornodatum
      &fjour1z.BEL_SYMBOL = @stornobelegsymbol
      &fjour1z.BEL_NR = &j1z.BEL_NR
      &fjour1z.BUCH_KTO = &j1z.BUCH_KTO
      if &j1z.BUCH_SH = "S" then 
        &fjour1z.BUCH_SH = "H"
      else
        &fjour1z.BUCH_SH = "S"
      end if
      if storno_pl_minus = -1 then
        &fjour1z.BUCH_SH = &j1z.BUCH_SH
      end if
      &fjour1z.GEGEN_KTO = &j1z.GEGEN_KTO
      &fjour1z.UST_SCHL = &j1z.UST_SCHL
      &fjour1z.UST_KTO = &j1z.UST_KTO
      if &j1z.UST_SH <> "" then
        if &j1z.UST_SH = "S" then 
          &fjour1z.UST_SH = "H"
        else
          &fjour1z.UST_SH = "S"
        end if
      end if
      &fjour1z.UST_PRZ = &j1z.UST_PRZ
      &fjour1z.BRUTTO = &j1z.BRUTTO * storno_pl_minus
      &fjour1z.NETTO = &j1z.NETTO * storno_pl_minus
      &fjour1z.UST = &j1z.UST * storno_pl_minus
      &fjour1z.BEL_NUMMER = &j1z.BEL_NUMMER
      &fjour1z.BUCH_TEXT = "Storno zu Beleg: " + &j1z.bel_symbol + " " + str$(&j1z.bel_nr) + " vom: " + num$(&j1z.bel_datum)
'     Kore-Felder ausnehmen da die Kore-Buchung automatisch gelöscht wurde.
'      &fjour1z.K_STL = &j1z.K_STL
'      &fjour1z.K_ART = &j1z.K_ART
'      &fjour1z.K_TRG = &j1z.K_TRG
'      &fjour1z.KORE_SCHL = &j1z.KORE_SCHL
'      &fjour1z.KST_LST = &j1z.KST_LST
      &fjour1z.FW_EHT = &j1z.FW_EHT
      &fjour1z.FW_ISOCODE = &j1z.FW_ISOCODE
      &fjour1z.FW_KURS = &j1z.FW_KURS
      &fjour1z.FW_BRUTTO = &j1z.FW_BRUTTO * storno_pl_minus 
      &fjour1z.FW_NETTO = &j1z.FW_NETTO * storno_pl_minus
      &fjour1z.FW_UST = &j1z.FW_UST * storno_pl_minus
      &fjour1z.FX_ISOCODE = &j1z.FX_ISOCODE
      &fjour1z.FX_KURS = &j1z.FX_KURS
      &fjour1z.FX_EHT = &j1z.FX_EHT
      &fjour1z.FX_BRUTTO = &j1z.FX_BRUTTO * storno_pl_minus
      &fjour1z.FX_NETTO = &j1z.FX_NETTO * storno_pl_minus
      &fjour1z.FX_UST = &j1z.FX_UST * storno_pl_minus
      &fjour1z.VAL_DATUM = &j1z.VAL_DATUM
      &fjour1z.DIV_CODE = "STORN"
      &fjour1z.ZESS_KZ = &j1z.ZESS_KZ
      &fjour1z.FIBU_GEBU = &j1z.FIBU_GEBU
      &fjour1z.ZM_OK = &j1z.ZM_OK
      &fjour1z.ZM_1 = &j1z.ZM_1
      &fjour1z.ZM_2 = &j1z.ZM_2
      &fjour1z.ZM_3 = &j1z.ZM_3
'      &fjour1z.SPLITT_ID = &j1z.SPLITT_ID
      &fjour1z.STAPEL = &j1z.STAPEL
      &fjour1z.BUCH_ART = &j1z.BUCH_ART
      &fjour1z.ZAHL_KOND = &j1z.ZAHL_KOND
      &fjour1z.ZAHL_ZIEL = &j1z.ZAHL_ZIEL
      &fjour1z.SKONTOPRZ1 = &j1z.SKONTOPRZ1
      &fjour1z.SKONTOTGE1 = &j1z.SKONTOTGE1
      &fjour1z.SKONTOPRZ2 = &j1z.SKONTOPRZ2
      &fjour1z.SKONTOTGE2 = &j1z.SKONTOTGE2
      &fjour1z.BETRAG = &j1z.BETRAG * storno_pl_minus
      &fjour1z.BRT_NETTO = &j1z.BRT_NETTO
      &fjour1z.MAKRO = &j1z.MAKRO
      F_onbeforepost(0)
      F_onpost(0, 0)
      ENABLE( "FJOUR1Z", 0)
'     KORE-Felder auf 0 setzen, da sie durch f_onbeforepost automatisch gesetzt wurden.
      &fjour1z.K_STL = ""
      &fjour1z.K_ART = ""
      &fjour1z.K_TRG = ""
      &fjour1z.KORE_SCHL = ""
      &fjour1z.KST_LST = ""
      store("fjour1z")
      fibu_alles_speichern(1)
      ENABLE( "FJOUR1Z", 1)
      appendblank("FJOUR1Z")
    end if
  end if
end sub


'***********************************************************************************
sub set_fbumsk_first_object

  if upper$(&fbumsk.feld_1) = "BEL_DATUM" then
    enable(@bel_datum, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "BEL_SYMBOL" then
    enable(@bel_symbol, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "BEL_NR" then
    enable(@bel_nr, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "BUCH_KTO" then
    enable(@buch_kto, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "GEGEN_KTO" then
    enable(@Gegen_kto, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "BUCH_SH" then
    enable(@buch_sh, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "UST_SCHL" then
    enable(@ust_schl, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "" then
    enable(@ust_kto, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "UST_PRZ" then
    enable(@ust_prz, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "UST_SH" then
    enable(@ust_sh, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "BETRAG" then
    enable(@betrag, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "BRT_NETTO" then
    enable(@brt_netto, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "BUCH_TEXT" then
    enable(@buch_text, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "BRUTTO" then
    enable(@brutto, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "NETTO" then
    enable(@netto, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "UST" then
    enable(@ust, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "BEL_NUMMER" then
    enable(@bel_nummer, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "K_STL" then
    enable(@k_kstl, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "K_ART" then
    enable(@k_art, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "K_TRG" then
    enable(@k_trg, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "KORE_SCHL" then
    enable(@kore_schl, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "KST_LST" then
    enable(@kst_lst, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "FW_ISOCODE" then
    enable(@fw_isocode, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "FW_KURS" then
    enable(@fw_kurs, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "FW_BRUTTO" then
    enable(@fw_brutto, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "FW_NETTO" then
    enable(@fw_netto, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "FW_UST" then
    enable(@fw_ust, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "FX_ISOCODE" then
    enable(@fx_ISOCODE, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "FX_KURS" then
    enable(@fx_kurs, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "FX_BRUTTO" then
    enable(@fx_brutto, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "FX_NETTO" then
    enable(@fx_netto, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "FX_UST" then
    enable(@fx_ust, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "ZAHL_KOND" then
    enable(@zahl_kond, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "ZAHL_ZIEL" then
    enable(@zahl_ziel, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "SKONTOPRZ1" then
    enable(@SKONTOPRZ1, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "SKONTOTGE1" then
    enable(@SKONTOTGE1, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "SKONTOPRZ2" then
    enable(@SKONTOPRZ2, 4)
    exit sub
  end if
  if upper$(&fbumsk.feld_1) = "SKONTOTGE2" then
    enable(@SKONTOTGE2, 4)
    exit sub
  end if
end sub


'****************************************************************************************
sub F_kore(pl_min as long)
dim eht as string
dim betrag as double
 
  eht = ""
  betrag = 0.0
  if &fjour1z.kore_schl + &fjour1z.k_stl + &fjour1z.k_art + &fjour1z.k_trg + &fjour1z.kst_lst = "" then exit sub

  betrag = &fjour1z.netto
  if dialogart <> "" then
    if (&buchKto.kst_lst = "K") and (&fjour1z.buch_sh = "H") then betrag = betrag * -1
    if (&buchKto.kst_lst = "L") and (&fjour1z.buch_sh = "S") then betrag = betrag * -1
    if (&gegenKto.kst_lst = "K") and (&fjour1z.buch_sh = "S") then betrag = betrag * -1
    if (&gegenKto.kst_lst = "L") and (&fjour1z.buch_sh = "H") then betrag = betrag * -1
  end if
  if korebetrag_minus = 1 then betrag = betrag * -1

  eht = &fjour1z.einheit
  kore_id = kostenrechnung(&fjour1z.k_stl, &fjour1z.k_art, &fjour1z.k_trg, &fjour1z.kore_schl, "XJOUR1Z", &fjour1z.kore_id, &fjour1z.bel_datum, &fjour1z.bel_symbol, &fjour1z.bel_nr, &fjour1z.kst_lst, &fjour1z.buch_text, betrag,pl_min, &fjour1z.menge,eht)
end sub


'****************************************************************************************
sub kore_manuell
  writeentry("\X" + mid$(userid, 1, 7), "TABLE", "XJOUR1Z")
  writeentry("\X" + mid$(userid, 1, 7), "ID_NUMMER", str$(&fjour1z.kore_ID))
  writeentry("\X" + mid$(userid, 1, 7), "BEL_DATUM", str$(&fjour1z.bel_datum))
  writeentry("\X" + mid$(userid, 1, 7), "BEL_SYMBOL", &fjour1z.bel_symbol)
  writeentry("\X" + mid$(userid, 1, 7), "BEL_NR", str$(&fjour1z.bel_nr))
  writeentry("\X" + mid$(userid, 1, 7), "BUCH_TEXT", &fjour1z.buch_text)
  writeentry("\X" + mid$(userid, 1, 7), "BETRAG", str$(&fjour1z.netto, 20, 2))
  writeentry("\X" + mid$(userid, 1, 7), "KST_LST", &fjour1z.kst_lst)
  writeentry("\X" + mid$(userid, 1, 7), "K_STL", &fjour1z.k_stl)
  writeentry("\X" + mid$(userid, 1, 7), "K_ART", &fjour1z.k_art)
  writeentry("\X" + mid$(userid, 1, 7), "K_TRG", &fjour1z.k_trg)
  writeentry("\X" + mid$(userid, 1, 7), "MENGE", str$(&fjour1z.MENGE, 20, 5))
  writeentry("\X" + mid$(userid, 1, 7), "EINHEIT", &fjour1z.einheit)
  writeentry("\X" + mid$(userid, 1, 7), "", "")
  global1 = ""
  erg = dialog("\DLG\kbuchext")
  if global1 = "GELÖSCHT" then
    global1 = ""
    erg = rts("refresh", "FJOUR1Z")
    exit sub
  end if
' Wenn Kore Buchendialog mit ESC beendet wurde dann keine weiteren Aktionen
  if erg = 0 then exit sub
' Wenn Kore Buchendialog mit Speichern beendet wurde dann überarbeiten der Fibubuchung
  erg = val(readentry("\X" + mid$(userid, 1, 7), "ID_NUMMER", ""))
  if (erg <> &fjour1z.kore_ID) or (&fjour1z.k_manuell <> "J") then 
    if &fjour1z.id_nummer >= 1 then
      openquery( "SQL")
      addsql( "SQL", "UPDATE FJOUR SET K_STL = '', K_ART = '', K_TRG = '', KST_LST = '', KORE_SCHL = '', KORE_ID = " + str$(erg) + ", K_MANUELL = 'J' WHERE ID_NUMMER = " + str$(&fjour1z.id_nummer) + " AND MANDANT = '" + upper$( CompanyName) + "';")
      execsql( "SQL")
      closetable("SQL")
      enable("fjour1z", 0)
      &fjour1z.kore_ID = erg
      &fjour1z.k_stl = ""
      &fjour1z.k_art = ""
      &fjour1z.k_trg = ""
      &fjour1z.kst_lst = ""
      &fjour1z.KORE_SCHL = ""
      &fjour1z.menge = 0
      &fjour1z.einheit = ""
      &fjour1z.k_manuell = "J"
      store("fjour1z")    
      ENABLE( "FJOUR1Z", 1)
    else
      &fjour1z.kore_ID = erg
      &fjour1z.k_stl = ""
      &fjour1z.k_art = ""
      &fjour1z.k_trg = ""
      &fjour1z.kst_lst = ""
      &fjour1z.KORE_SCHL = ""
      &fjour1z.menge = 0
      &fjour1z.einheit = ""
      &fjour1z.k_manuell = "J"
    end if
  end if
  erg = val(readentry("\X" + mid$(userid, 1, 7), "", ""))
end sub
