Files
d.velop/Stadt Essen/proz01_prozessakte.jpl

579 lines
20 KiB
Plaintext

// ##################### Stadt Essen - Prozessakte ######################
// Dokumentarten - in g01 deklariert
//global G01_DS_PROZESSA = "APROZ"
//global G01_DS_PROZESSD = "DPROZ"
// Feldpositionen
vars POS_AZ = 1
vars POS_Jahr = 2
vars POS_StatZ = 3
vars POS_GerichtAZ = 4
vars POS_Klaeger = 9
vars POS_Zda = 13
vars POS_Beklaeger = 15
vars POS_AusArt = 23
vars POS_DokGrp = 30
vars POS_DokTyp = 31
vars POS_AusDat = 51
vars POS_ZLM = 35
vars POS_LOESCHGRD = 36
vars POS_GADRESSE = 33
vars POS_Gericht = 20
vars POS_DOKIDORG = 10
// Feldpostitionen Adressverwaltung
vars POS_FFOE = 2
vars POS_Name = 9
vars POS_Strasse = 21
vars POS_Hnr = 29
vars POS_Plz = 24
vars POS_Ort = 25
// Variablen - Aufbewahrungsfristen (in Jahren)
vars FRIST_AUSSONDERUNG = 10 // 10 Jahre
vars WM_TRENNZEICHEN = ";"
vars STATUS_ZDA = 0
vars NEUES_AZ = 0
vars CHANGE_GERICHT = 0
// Datenbanktabelle
vars TB_DokGrpTyp = "DV_PROZ_Doktyp"
/////////////////////////// proz01_insert_entry_10 /////////////////////////////////////
// Vor Archivierung
// Uebernehmen der Werte aus der Akte
// Vorbelegen der laufenden Nummer
//////////////////////////////////////////////////////////////////////////////////////
proc proz01_insert_entry_10(user_ref, doc_type_short)
{
call proz01_split_AZ(1)
call proz01_split_Gericht()
}
/////////////////////////// proz01_insert_exit_10 ///////////////////////////////////////
// nach dem Import, Rollback noch moeglich
////////////////////////////////////////////////////////////////////////////////////////
proc proz01_insert_exit_10 (doc_id, file_destination, import_ok, user_ref, doc_type_short)
{
if(doc_type_short == G01_DS_PROZESSA)
{
// Erstellung des Aktenzeichens
vars update = 0
call proz01_fill_AZ_Nummer(doc_id, update)
}
}
//////////////////////////////// proz01_upd_attrib_entry_20 ////////////////////////////
// vor Änderung von Attributwerten
//////////////////////////////////////////////////////////////////////////////////////
proc proz01_upd_attrib_entry_20(doc_id, user_ref, doc_type_short, doc_type_short_new)
{
if(doc_type_short == G01_DS_ORGANI)
{
if(g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Name], POS_Name) == 1)
{
CHANGE_GERICHT = 1
}
else if(g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Strasse], POS_Strasse) == 1)
{
CHANGE_GERICHT = 1
}
else if(g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Hnr], POS_Hnr) == 1)
{
CHANGE_GERICHT = 1
}
else if(g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Plz], POS_Plz) == 1)
{
CHANGE_GERICHT = 1
}
else if(g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Ort], POS_Ort) == 1)
{
CHANGE_GERICHT = 1
}
call api_log_error("proz01_upd_attrib_entry_20 Adresse verändert? :CHANGE_GERICHT ")
}
else
{
call proz01_split_AZ(1)
call proz01_split_Gericht()
if(g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Zda], POS_Zda) == 1)
{
STATUS_ZDA = 1
}
// Wenn das Feld zum Löschen markiert auf Ja gesetzt wurde, überprüfe ob beim Löschgrund etwas eingetragen wurde. Falls nicht, gebe eine Fehlermeldung aus.
// Wenn das Feld zum Löschen markiert auf Nein gesetzt wurde, dann leere das Feld Löschgrund
if(dok_dat_feld[POS_ZLM] != get_doc_property(doc_id, "doc_field[:POS_ZLM]"))
{
if(dok_dat_feld[POS_ZLM] == G01_STR_JA)
{
if(dok_dat_feld[POS_LOESCHGRD] == "")
{
return -403 //Bitte geben Sie einen Löschgrund an!
}
}
else if(dok_dat_feld[POS_ZLM] == G01_STR_NEIN)
{
dok_dat_feld[POS_LOESCHGRD] = ""
}
}
if(doc_type_short == G01_DS_PROZESSA && g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Jahr], POS_Jahr) == 1)
{
NEUES_AZ = 1
}
// hinzugefügt am 13.02.23 - Bei manueller Änderung des Feld Aktenzeichen wird eine Fehlermeldung ausgegeben
//if((user_ref != "d3_async" || user_ref != "Master" ) && g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_AZ], POS_AZ) == 1)
//{
// call api_log_error("proz01_upd_attrib_entry_20 - Das aktenezichen wurde von :user_ref verändert!")
// return -403
//}
if(doc_type_short == G01_DS_PROZESSA && (g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_Gericht], POS_Gericht) == 1 || g02_strAttrHasChanged(doc_id, dok_dat_feld[POS_GADRESSE], POS_GADRESSE) == 1))
{
vars DocID, Name, Strasse, PLZ, Ort, Hnr, iCnt
DBMS ALIAS Name, Strasse, Hnr, PLZ, Ort
DBMS SQL SELECT dok_dat_feld_:POS_Name, dok_dat_feld_:POS_Strasse, dok_dat_feld_:POS_Hnr, dok_dat_feld_:POS_Plz, dok_dat_feld_:POS_Ort \
FROM firmen_spezifisch \
WHERE kue_dokuart = 'AAORG' AND dok_dat_feld_:POS_Name = :+dok_dat_feld[POS_Gericht] //AND doku_id = :+doc_id
iCnt = @dmrowcount
DBMS ALIAS
if(Name == "" || Strasse == "" || Hnr == "" || PLZ == "" || Ort == "")
{
//Gerichtsdaten nicht gepflegt! Bitte in der Organisation pflegen.
return -569
}
vars Gerichtsadresse = Strasse ## " " ## Hnr ## ", " ## PLZ ## " " ## Ort
call api_log_error("Änderung Ticket vor IF Gerichtsadresse - :Strasse :Hnr :PLZ :Ort")
if(Gerichtsadresse != dok_dat_feld[POS_GADRESSE])
{
//Gerichtsadresse entspricht nicht dem aktuell ausgewählten Gericht!
return -570
}
}
}
}
//////////////////////////////// ld01_upd_attrib_exit_20 /////////////////////////////
// UpdateAttribute: NACH Aenderung
//
//////////////////////////////////////////////////////////////////////////////////////
proc proz01_upd_attrib_exit_20(doc_id, error_number, user_ref, doc_type_short, doc_type_short_old)
{
// Update des Aktenzeichens bei Änderung des Jahres
if(NEUES_AZ == 1 && doc_type_short != G01_DS_ORGANI)
{
NEUES_AZ = 0
vars update = 1
call proz01_fill_AZ_Nummer(doc_id, update)
}
if(STATUS_ZDA == 1 && doc_type_short != G01_DS_ORGANI)
{
STATUS_ZDA = 0
vars strZDA, strDatum
if(dok_dat_feld[POS_Zda] == G01_STR_JA)
{
strZDA = G01_STR_JA
strDatum = proz01_getAussonderungsdatum(FRIST_AUSSONDERUNG)
}
else if(dok_dat_feld[POS_Zda] == G01_STR_NEIN)
{
strZDA = G01_STR_NEIN
strDatum = ""
}
call docSearchCreate()
call docSearchAddSearchParam("doc_type_short", "==", G01_DS_PROZESSA)
call docSearchAddSearchParam("doc_type_short", "==", G01_DS_PROZESSD)
call docSearchAddSearchParam("doc_field[:POS_AZ]", "==", dok_dat_feld[POS_AZ])
call docSearchAddReplacementParam("doc_field[:POS_Zda]", "*", strZDA)
call docSearchAddReplacementParam("doc_field[:POS_AusDat]", "*", strDatum)
call docSearchAddReplacementParam("doc_field[:POS_AusArt]", "*", dok_dat_feld[POS_AusArt])
call docSearchExecute()
call docSearchDestroy()
}
if(CHANGE_GERICHT == 1 && doc_type_short == G01_DS_ORGANI)
{
CHANGE_GERICHT = 0
vars strDocID, strNameNeu, strStrasseNeu, strPLZNeu, strOrtNeu, strHnrNeu, iCnt
DBMS ALIAS strNameNeu, strStrasseNeu, strHnrNeu, strPLZNeu, strOrtNeu
DBMS SQL SELECT dok_dat_feld_:POS_Name, dok_dat_feld_:POS_Strasse, dok_dat_feld_:POS_Hnr, dok_dat_feld_:POS_Plz, dok_dat_feld_:POS_Ort \
FROM firmen_spezifisch \
WHERE kue_dokuart = 'AAORG' AND doku_id = :+doc_id
iCnt = @dmrowcount
DBMS ALIAS
call api_log_error("proz01_upd_attrib_exit_20 Datenbankabfrage durchgelaufen iCnt => :iCnt")
if(iCnt == 1)
{
vars strGAdresse = strStrasseNeu ## " " ## strHnrNeu ## ", " ## strPLZNeu ## " " ## strOrtNeu
call api_log_error("proz01_upd_attrib_exit_20 neue Adresse => :strGAdresse neuer Name => :strNameNeu")
call docSearchCreate()
call docSearchAddSearchParam("doc_type_short", "==", G01_DS_PROZESSA)
call docSearchAddSearchParam("doc_field[:POS_DOKIDORG]", "==", doc_id)
call docSearchAddReplacementParam("doc_field[:POS_GADRESSE]", "*", strGAdresse)
call docSearchAddReplacementParam("doc_field[:POS_Gericht]", "*", strNameNeu)
call docSearchExecute()
call docSearchDestroy()
}
}
}
//////////////////////////////// proz01_validate_update_entry_10 ///////////////////////
// Vor Pruefen der Daten vor dem Ändern
//////////////////////////////////////////////////////////////////////////////////////
proc proz01_validate_update_entry_10(user_ref, doc_type_short)
{
call api_log_error("proz01_validate_update_entry_10 gestartet")
call proz01_split_AZ(1)
call proz01_split_Gericht()
}
/////////////////////////// proz01_search_entry_10 /////////////////////////////////////
// vor der Recherche
//////////////////////////////////////////////////////////////////////////////////////
proc proz01_search_entry_10(user_ref, doc_type_short)
{
call proz01_split_AZ(0)
call proz01_split_Gericht()
}
////////////////// Wertemengenhooks ////////////////////////////////////////////////
//////////////////// proz01_fill_Klaeger /////////////////////////////////////////////////
// Wertemengenhook zum fuellen des Felds Kläger mit AZ;Klaeger;Gerichtszeichen
// aus der Datenbank
//////////////////////////////////////////////////////////////////////////////////
proc proz01_fill_Klaeger(repos_id)
{
vars iRet, iCnt, i
vars strAZ[1000], strKlaeger[1000], strGerichtsZ[1000]
vars strEingabe = dok_dat_feld[POS_Klaeger]
vars igetippt = @length(strEingabe)
vars igetippt_min = 3
if(igetippt >= igetippt_min)
{
DBMS ALIAS strAZ, strKlaeger, strGerichtsZ
DBMS SQL SELECT DISTINCT dok_dat_feld_:POS_AZ, dok_dat_feld_:POS_Klaeger, dok_dat_feld_:POS_GerichtAZ \
FROM firmen_spezifisch WHERE kue_dokuart = :+G01_DS_PROZESSA AND (dok_dat_feld_:POS_AZ LIKE '%:strEingabe%' OR dok_dat_feld_:POS_Klaeger LIKE '%:strEingabe%')
iRet = @dmretcode
iCnt = @dmrowcount
DBMS ALIAS
for i = 1 while (i <= iCnt) step 1
{
d3server_value_char_allowed[i] = strAZ[i] ## ";" ## strKlaeger[i] ## ";" ## strGerichtsZ[i]
d3server_repos_id_allowed[i] = repos_id
}
}
}
//////////////////// proz01_fill_Beklagter /////////////////////////////////////////////////
// Wertemengenhook zum fuellen des Felds Beklagter mit AZ;Beklagter;Gerichtszeichen
// aus der Datenbank
//////////////////////////////////////////////////////////////////////////////////
proc proz01_fill_Beklagter(repos_id)
{
vars iRet, iCnt, i
vars strAZ[1000], strBeklagter[1000], strGerichtsZ[1000]
vars strEingabe = dok_dat_feld[POS_Beklaeger]
vars igetippt = @length(strEingabe)
vars igetippt_min = 3
/*
if(igetippt >= igetippt_min)
{
DBMS ALIAS strAZ, strBeklagter, strGerichtsZ
DBMS SQL SELECT DISTINCT dok_dat_feld_:POS_AZ, dok_dat_feld_:POS_Beklaeger, dok_dat_feld_:POS_GerichtAZ \
FROM firmen_spezifisch WHERE kue_dokuart = :+G01_DS_PROZESSA AND (dok_dat_feld_:POS_AZ LIKE '%:strEingabe%' OR dok_dat_feld_:POS_Beklaeger LIKE '%:strEingabe%')
iRet = @dmretcode
iCnt = @dmrowcount
DBMS ALIAS
for i = 1 while (i <= iCnt) step 1
{
d3server_value_char_allowed[i] = strAZ[i] ## ";" ## strBeklagter[i] ## ";" ## strGerichtsZ[i]
d3server_repos_id_allowed[i] = repos_id
}
}
*/
//Neu erstellt von N.Tietjen 25.10.2022
if(igetippt >= igetippt_min)
{
DBMS ALIAS d3server_value_char_allowed, d3server_repos_id_allowed
DBMS SQL SELECT DISTINCT dok_dat_feld_:POS_Beklaeger, :+repos_id \
FROM firmen_spezifisch WHERE kue_dokuart = :+G01_DS_PROZESSA AND dok_dat_feld_:POS_Beklaeger LIKE '%:strEingabe%'
iRet = @dmretcode
iCnt = @dmrowcount
DBMS ALIAS
}
}
//////////////////proz01_WM_DOKGRP ////////////////////////////////////////////////
proc proz01_WM_DOKGRP(repos_id)
{
vars strDokTyp = dok_dat_feld[POS_DokTyp]
if(strDokTyp != "")
{
DBMS ALIAS d3server_value_char_allowed, d3server_repos_id_allowed
DBMS SQL SELECT DISTINCT Dokumentgruppe, ':repos_id' FROM :TB_DokGrpTyp WHERE Dokumenttyp = :+strDokTyp
DBMS ALIAS
}
else
{
DBMS ALIAS d3server_value_char_allowed, d3server_repos_id_allowed
DBMS SQL SELECT DISTINCT Dokumentgruppe, ':repos_id' FROM :TB_DokGrpTyp
DBMS ALIAS
}
}
//////////////////proz01_WM_DOKTYP ////////////////////////////////////////////////
proc proz01_WM_DOKTYP(repos_id)
{
vars strDokGrp = dok_dat_feld[POS_DokGrp]
if(strDokGrp != "")
{
DBMS ALIAS d3server_value_char_allowed, d3server_repos_id_allowed
DBMS SQL SELECT DISTINCT Dokumenttyp, ':repos_id' FROM :TB_DokGrpTyp WHERE Dokumentgruppe = :+strDokGrp
DBMS ALIAS
}
else
{
DBMS ALIAS d3server_value_char_allowed, d3server_repos_id_allowed
DBMS SQL SELECT DISTINCT Dokumenttyp, ':repos_id' FROM :TB_DokGrpTyp
DBMS ALIAS
}
}
/////////////////// UNTERFUNKTIONEN ////////////////////////////////////////////////
//////////////////// l01_split_AZ /////////////////////////////////////////////////
// Funktion zum des Felds Aktenzeichen nach AZ;Klaeger;Gerichtszeichen
// und fuellen in die jeweiligen Felder
//////////////////////////////////////////////////////////////////////////////////
proc proz01_split_AZ(NotSearch)
{
vars strKlaeger = dok_dat_feld[POS_Klaeger]
//call api_log_error("proz01_split_AZ gestartet - strKlaeger => :strKlaeger")
vars iSplit = api_function("string_split", strKlaeger, WM_TRENNZEICHEN)
//call api_log_error("proz01_split_AZ - NotSearch => :NotSearch iSplit => :iSplit")
if(iSplit > 2)
{
// Neu hinzugefügt - Leeren des Feldes Kläger bei der Suche - LH 06.12.22
dok_dat_feld[POS_Klaeger] = ""
dok_dat_feld[POS_AZ] = api_splitted_string[1]
if(NotSearch == 1)
{
//call api_log_error("proz01_split_AZ - in NotSearch")
dok_dat_feld[POS_Klaeger] = api_splitted_string[2]
dok_dat_feld[POS_GerichtAZ] = api_splitted_string[3]
}
}
}
/////////////////////////// proz01_WM_AZ_Nummer //////////////////////////////////////
// Wertemenge für laufende Nummer
// Zusammengesetzt aus: Fortlaufende Nummer, Herrsteller, Anwendungsbezeichnung
//////////////////////////////////////////////////////////////////////////////////////
proc proz01_fill_AZ_Nummer(doc_id, update)
{
vars iRet, iCnt
vars strNummer, sqlCount
vars strJahr = dok_dat_feld[POS_Jahr]
vars strLNR = dok_dat_feld[POS_AZ]
if (update == 0)
{
/*DBMS ALIAS sqlCount
DBMS SQL SELECT COUNT(*) FROM firmen_spezifisch WHERE kue_dokuart = :+G01_DS_PROZESSA
iRet = @dmretcode
if(iRet != 0 && iRet != DM_NO_MORE_ROWS)
{
call api_log_error ("proz01_fill_AZ_Nummer => Fehler beim Ermitteln von Prozessakten. FEHLER: :iRet")
}
DBMS ALIAS
*/
DBMS ALIAS sqlCount
DBMS SQL SELECT TOP (1) right(dok_dat_feld_:POS_AZ, 4) + 1 from firmen_spezifisch WHERE kue_dokuart = :+G01_DS_PROZESSA ORDER BY right(dok_dat_feld_:POS_AZ,4) DESC
iRet = @dmretcode
if(iRet != 0 && iRet != DM_NO_MORE_ROWS)
{
call api_log_error ("proz01_fill_AZ_Nummer => Fehler beim Ermitteln von Prozessakten. FEHLER: :iRet")
}
DBMS ALIAS
vars string strCount = sqlCount
iRet = api_function ("string_fill_leading_char", strCount, 0, 4)
strNummer = strJahr ## "-" ## api_converted_string
}
else if(update == 1)
{
vars strTrennzeichen = "-"
vars iSplit = api_function("string_split", strLNR, strTrennzeichen)
if (iSplit > 1)
{
strNummer = strJahr ## "-" ## api_splitted_string[2]
}
}
iRet = api_function ("attribute_update_single", POS_AZ , strNummer, "", doc_id, "")
if(iRet != 0 )
{
call api_log_error ("proz01_fill_AZ_Nummer => Fehler beim Setzen des Aktenzeichens für :doc_id . FEHLER: :iRet")
}
// Vererbung des neuen Gerichtsaktenzeichens auf die darunterliegenden Dokumente - soll nicht umgesetzt werden
/*if(iRet == 0 && update == 1)
{
call docSearchCreate()
call docSearchAddSearchParam("doc_type_short", "==", G01_DS_PROZESSD)
call docSearchAddSearchParam("doc_field[:POS_AZ]", "==", strLNR)
call docSearchAddReplacementParam("doc_field[:POS_AZ]", "*", strNummer)
call docSearchExecute()
call docSearchDestroy()
} */
// Kategorie-Kürzel ermitteln
//strNummer = api_str_sub( strNummer, 4, 4) //Position Trennzeichen für Kategorie-Kürzel
//call api_log_error("proz01_fill_AZ_Nummer nach splitten der Funktion strNummer => :strNummer ")
/*if(iCnt == 1 && strNummer != -1)
{
vars strLNr = strNummer + 0001
iRet = api_function ("string_fill_leading_char", strLNr, 0, 4)
call api_log_error("proz01_fill_AZ_Nummer nach splitten der Funktion strLNr => :strLNr iRet => :iRet")
if(iRet >= 0)
{
d3server_value_char_allowed = strJahr ## "-" ## strLNr
d3server_repos_id_allowed = repos_id
}
} */
}
//////////////////////////////////////////////////////////////////////
// Auslesen des Gerichts und dessen Adresse aus der Adressverwaltung
// Einfügen in die Felder Gericht und Gerichtadresse
/////////////////////////////////////////////////////////////////////
proc proz01_getGericht(repos_id, user, doc_type_short)
{
vars strGericht = dok_dat_feld[POS_Gericht]
vars strGAdresse = dok_dat_feld[POS_GADRESSE]
vars strEingabe = dok_dat_feld[POS_Strasse]
vars strGName[1000], strGStrasse[1000], strGHNR[1000], strGPLZ[1000], strGOrt[1000], strDokId[1000]
vars iCnt, iRet, i
vars igetippt = @length(strGericht)
vars igetippt_min = 2
if(igetippt >= igetippt_min)
{
/*DBMS ALIAS strGName, strGStrasse, strGHNR, strGPLZ, strGOrt
DBMS SQL SELECT dok_dat_feld_:POS_Name, dok_dat_feld_:POS_Strasse, dok_dat_feld_:POS_Hnr, dok_dat_feld_:POS_Plz, dok_dat_feld_:POS_Ort \
FROM firmen_spezifisch \
WHERE kue_dokuart = 'AAORG' AND dok_dat_feld_:POS_Name like '%:strGericht%'
iCnt = @dmrowcount
iRet = @dmretcode
DBMS ALIAS
*/
// Sucht die Adressen raus, bei denen der Benutzer in der federfuehrenden OE Gruppe ist oder bei der keine federfuehrende OE eingetragen ist
DBMS ALIAS strGName, strGStrasse, strGHNR, strGPLZ, strGOrt, strDokId
DBMS SQL SELECT fs.dok_dat_feld_:POS_Name, fs.dok_dat_feld_:POS_Strasse, fs.dok_dat_feld_:POS_Hnr, fs.dok_dat_feld_:POS_Plz, fs.dok_dat_feld_:POS_Ort, fs.doku_id \
FROM firmen_spezifisch fs \
LEFT JOIN benutzergruppen gruppe \
ON gruppe.benutzergruppe = fs.dok_dat_feld_:POS_FFOE \
Left JOIN benutzer_in_gruppe bInGrp \
ON gruppe.gruppen_id = bInGrp.benutzergruppe \
WHERE fs.kue_dokuart = 'AAORG' AND (bInGrp.benutzername = :+user OR fs.dok_dat_feld_:POS_FFOE IS NULL) AND dok_dat_feld_:POS_Name LIKE '%:strGericht%'
iCnt = @dmrowcount
iRet = @dmretcode
DBMS ALIAS
for i = 1 while (i <= iCnt) step 1
{
d3server_value_char_allowed[i] = strGName[i] ## "|" ## strGStrasse[i] ## " " ## strGHNR[i] ## ", " ## strGPLZ[i] ## " " ## strGOrt[i] ## "|" ## strDokId[i]
d3server_repos_id_allowed [i] = repos_id
}
}
}
//////////////////// l01_split_Gericht /////////////////////////////////////////////////
// Funktion zum des Felds Aktenzeichen nach AZ;Klaeger;Gerichtszeichen
// und fuellen in die jeweiligen Felder
//////////////////////////////////////////////////////////////////////////////////
proc proz01_split_Gericht()
{
vars strGericht = dok_dat_feld[POS_Gericht]
vars strTrennzeichen = "|"
vars iSplit = api_function("string_split", strGericht, strTrennzeichen)
if(iSplit > 1)
{
dok_dat_feld[POS_Gericht] = api_splitted_string[1]
dok_dat_feld[POS_GADRESSE] = api_splitted_string[2]
dok_dat_feld[POS_DOKIDORG] = api_splitted_string[3]
}
}
/**
# Funktion: Liefert das Aussonderungsdatum anhand einer Frist
# Parameter: iFrist - Aufbewahrungsfrist
# Rückgabewert: -
**/
String proc proz01_getAussonderungsdatum(iFrist)
{
vars dAussondatum = ""
vars heutigesDatum = aktuelles_datum_deu
dAussondatum = heutigesDatum(7,4) + iFrist
dAussondatum = "31.12." ## dAussondatum
return dAussondatum
}