Archiv des Intrexx Live! Forums

Hier sehen Sie die Foreneinträge aus dem Intrexx Live! Forum. Bis November 2016 war es das Forum für alle Fragen rund um die Software Intrexx von United Planet.
Seit November 2016 gibt es ein neues moderiertes Forum, das Intrexx Community Forum. Nutzen Sie bitte unbedingt dieses für aktuelle Fragen, Antworten und Informationen.

Wichtig: Dieses Forum dient als Archiv. Die Einträge beziehen sich oft auf ältere Versionen von Intrexx und entsprechen nicht mehr den aktuellen technischen Gegebenheiten.
Daher sollten alle Inhalte ausschließlich von Experten genutzt werden. Bei unsachgemäßer Anwendung kann es zu zeitaufwändigen Problemen oder Datenverlust kommen.
Übersicht > Intrexx Professional: Programming > [GELÖST] Berechnung per Groovy

[GELÖST] Berechnung per Groovy

Moin,

ich möchte in einer Datengruppe nachträglich über einen Prozess ein Feld neu berechnen lassen.

Ausgangstabelle:
ID
Name
Rechnungsbetrag
Skonto
NetNet

Dazu habe ich einen Timergesteuerten Prozess erstellt, in dem ich per Groovy das Feld "NetNet" berechnen lasse.


//Variablen definieren
def myID = g_record["34413B11B081B27FF858337895CBB0BB1EB03A33"].value //GUID PK ID Grunddatenpositionen <integer>
def kon_rech = g_record["4C3FF853A07AA57B80CE3CF505E1169933F12C59"].value //GUID "Rechnungsbetrag" <string>
def kon_skonto = g_record["C6EE47753600A01596C13BE94587F6CABB247151"].value //GUID "Skonto%" <integer>

//Datenbankverbindung herstellen
def l_conn = g_dbConnections.systemConnection

//Berechnung von kon_netnet
def kon_netnet = ((100-kon_rech) * (kon_skonto/100)) + kon_rech

//Update der Tabelle
def l_stmtUpdate = g_dbQuery.prepare(l_conn, "UPDATE DATAGROUP('19E99AD3D449F9E48D97141B0C658E4543D4FCDB') set FLT_NETTO_D86826D2 = ? WHERE LID=?")
l_stmtUpdate.setDouble(1,kon_netnet)
l_stmtUpdate.setString(2,myID)
l_stmtSelect.executeQuery()



Ist das so logisch aufgebaut?

Ich hole mir aus der Tabelle die Felder "Rechnungsbetrag" und "Skonto" und schreibe das Ergebnis der Berechnung in kon_netnet.
Muss ich davor noch ein SELECT machen oder kennt das System die Tabelle aus dem Timer im Prozess?

Ich programmiere eigentlich nicht in Groovy, deswegen bin ich etwas unsicher. Vielleicht kann mir
jemand ein wenig Hilfestellung geben?

Gruß,
Günther
24.02.2016 12:21 von Günther
Warum probierst es nicht einfach aus? Oder kommt ein Fehler?

Je nachdem welche Tabelle du im Timer ausgewählt hast, kennt dein Groovy script die auch schon und du brauchst keinen Select machen.
24.02.2016 12:29 von falkh
Hallo Günther,

dein l_stmtSelect ist nicht definiert. Willst du das über alle Datensätze machen? So wie du es aufgebaut hast kann der Timerprozess nicht wissen welchen Datensatz du meinst.
Wenn du es über alle machen willst kannst du das doch per SQL Update direckt machen.
24.02.2016 12:33 von cbarth
Hallo cbarth,

ich möchte für alle Datensätze der Gruppe das Feld "NetNet" neuberechnen lassen. Mit direkt SQL Update meinst du, dass die Modifikation im Management Studio per SQL Script durchgeführt werden sollen?

Gruß,
Günther
24.02.2016 12:41 von Günther
Hallo Günther,

erstelle einfach ein update in dienem Prozess

def myCon = g_dbConnections.systemConnection
def sqlTEXT =""
sqlTEXT = "UPDATE [KHKVKBelege] set USER_KLdatum = ?, USER_KLuser = ?, USER_KLbem = ? WHERE ((BelID = ?) and (Mandant = 1))"

g_dbQuery.executeUpdate(myCon, sqlTEXT){
setTimestamp(1, akt_MLDG_Dt)
setString(2, akt_MLDG_User)
setString(3, g_request.rq_Txspeichern)
setInt(4, Integer.parseInt(akt_Beleg_ID))}


In dieser Art...
24.02.2016 12:56 von cbarth
Ich wäre ja dafür das komplett in SQL zu machen, wenn ohnehin alle Datensätze der Datengruppe berechnet werden sollen.
Das kann SQL bestimm tgenausogut und zudem auch performanter.

Sieht dann etwa so aus:

1. Globaler Timer ohne Datengruppenzuordnung

2. Im Groovy etwa sowas:


//Datenbankverbindung herstellen
def l_conn = g_dbConnections.systemConnection

//Update der Tabelle
def l_stmtUpdate = g_dbQuery.prepare(l_conn, "UPDATE DATAGROUP('19E99AD3D449F9E48D97141B0C658E4543D4FCDB') set FLT_NETTO_D86826D2 = ((100-kon_rech) * (kon_skonto/100) + kon_rech)")
l_stmtUpdate.executeQuery()

Die Variablennamen im SQL müssen natürlich durch die entsprechenden Feldnamen ersetzt werden.
Oder sind die skonto etc in einer fremden Datengruppe?
24.02.2016 13:11 von MartinW
Die Felder sind alle in der Datengruppe "DATAGROUP('19E99AD3D449F9E48D97141B0C658E4543D4FCDB')".

Ich habe allerdings gerade festgestellt, dass der Rechnungsbetrag als string gespeichert ist. Damit wird ein SQL Update nicht zurechtkommen.
Kann ich hier einfach ein CONVERT ansetzen?
24.02.2016 13:23 von Günther
klar kannst du convert ansetzen...
24.02.2016 15:01 von cbarth
Hallo,

ich habs nun hinbekommen wie du es geschrieben hast. Ein CONVERT ging natürlich auch.


//Datenbankverbindung herstellen
def l_conn = g_dbConnections.systemConnection

//Update der Tabelle
def l_stmtUpdate = g_dbQuery.prepare(l_conn, "UPDATE [XDATAGROUP2705C112] SET FLT_NETTONETTO = ROUND(((100 - CONVERT(float,STR_FRECHNUNGSKONDITION)) * (CONVERT(float,L_SKONTO) / 100) + FLT_FRECHNUNGSKONDITION),2)")
l_stmtUpdate.executeQuery()



Vielen Dank für eure Mühe.

Gruß,
Günther
24.02.2016 15:15 von Günther
Zurück | Alles über Intrexx | Impressum | Datenschutzerklärung

Über United Planet
© 2019 United Planet GmbH
Schnewlinstraße 2
79098 Freiburg