UDF in Zeile aufgrund von Artikelnummer befüllen
Michael Hubenschmid
Hallo.Möchte gerne den Wert Menge Pro Verpackungseinheit (int) in ein int Feld auf Belegzeile kopieren lassen.
Habe folgenden Code definiert:
string ItemCode = ((Matrix)pVal.Item).GetValue("1", pVal.Row-1);
string QueryVE = @"SELECT SalPackUn FROM OITM WHERE ItemCode ='" + ItemCode + "'";
string val = "";
using (System.Data.SqlClient.SqlDataReader sdr =
SwissAddonFramework.B1Connector.GetB1Connector().ExecuteQuery(QueryVE))
{
if (sdr.Read())
{
// ERSETZE "SPALTENNAME" DURCH DIE SPALTE ENTSPRECHEND DEM QUERY
val = sdr["SalPackUn"].ToString();
MessageBox.Show("VE: " + val, "OK");
}
}
((SwissAddonFramework.UI.Components.TextEdit)pVal.Form.Items["U_QtyPack"]).Value = val;
Leider sagt mir das Customize das nicht alle Codezeilen eine Wert zurückgeben würden.
Was ist falsch?
Michael Hubenschmid
Hallo Zusammen.Leider habe ich bisher noch keine Antwort auf meine Frage erhalten.
Ich hoffe das Problem ist nicht zu schwer um zu lösen.
Würde mich sehr freuen wenn ich einen guten Tip bekommen würde.
Vielen Dank!
Michael Egloff
Du hast ein generelles Problem.Jede Code-Regel im Optimizer hat einen Returnwert, welcher aussagt, ob alles geklappt hat, oder eben nicht.
Dieser Wert ist ein boolean.
Du musst also am Schluss
return true;
hinzufügen. Damit gibst du an, dass SAP ganz normal weitermachen darf.
Michael Hubenschmid
Hallo Michael.Ist dies der richtige Ausdruck um einen Wert in die Matrix zu schreiben?
((SwissAddonFramework.UI.Components.TextEdit)pVal.Form.Items["U_QtyPack"]).Value = val;
Danke für deine schnelle Auskunft.
Michael Egloff
Nein,um in die Matrix zu schreiben, braucht man folgende Syntax:
Matrix m = Matrix.GetFromUID(pVal.Form, "MatrixUID");
m.SetValue("U_QtyPack", rowNr, val);
Michael Hubenschmid
Hallo Michael.Leider schreibt mir meine Regel den gefundenen Wert immer noch nicht in die Spalte auf der Zeile nachdem ich einen Artikel ausgewählt habe.
Hier der im Moment definierte Code:
string ItemCode = ((Matrix)pVal.Item).GetValue("1", pVal.Row-1);
string QueryVE = @"SELECT SalPackUn FROM OITM WHERE ItemCode ='" + ItemCode + "'";
string val = "";
using (System.Data.SqlClient.SqlDataReader sdr =
SwissAddonFramework.B1Connector.GetB1Connector().ExecuteQuery(QueryVE))
{
if (sdr.Read())
{
// ERSETZE "SPALTENNAME" DURCH DIE SPALTE ENTSPRECHEND DEM QUERY
val = sdr["SalPackUn"].ToString();
MessageBox.Show("VE: " + val, "OK");
Matrix m = Matrix.GetFromUID(pVal.Form, "139");
m.SetValue("U_QtyPack", pVal.Row, val);
}
}
//((SwissAddonFramework.UI.Components.TextEdit)pVal.Form.Items["U_QtyPack"]).Value = val;
return true;
Auch so funktioniert es nicht:
string ItemCode = ((Matrix)pVal.Item).GetValue("1", pVal.Row-1);
string QueryVE = @"SELECT SalPackUn FROM OITM WHERE ItemCode ='" + ItemCode + "'";
string val = "";
using (System.Data.SqlClient.SqlDataReader sdr =
SwissAddonFramework.B1Connector.GetB1Connector().ExecuteQuery(QueryVE))
{
if (sdr.Read())
{
// ERSETZE "SPALTENNAME" DURCH DIE SPALTE ENTSPRECHEND DEM QUERY
val = sdr["SalPackUn"].ToString();
MessageBox.Show("VE: " + val, "OK");
}
}
//((SwissAddonFramework.UI.Components.TextEdit)pVal.Form.Items["U_QtyPack"]).Value = val;
Matrix m = Matrix.GetFromUID(pVal.Form, "139");
m.SetValue("U_QtyPack", pVal.Row, val);
return true;
Kannst du bitte nochmal kurz nen Blick drauf werfen. Habt solche Sachen sicher schon zig mal gemacht.
Merci vielmals.
Michael Hubenschmid
Hallo Michael.Im Anhang ist noch ein Printscreen von den Optimizer Einstellungen.
Gruss Micha
Attachment
[url=http://www.coresystems.ch/wp-content/../wp-content/forum-file-uploads/hum2006/Profine_Regel VE_Einstellungen.doc]Profine_Regel VE_Einstellungen.doc[/url]
Michael Egloff
Bist du sicher, dass die UID der Matrix "139" ist?Mach sonst ein try - catch rundherum und gib die Fehlermeldung als MessageBox aus.
Gruss
0
Please sign in to leave a comment.
Comments
0 comments