Infos aus Wareneingang bei Erstellung von Chargen
Michael Hubenschmid
Hallo Coresystems,ich habe eine kleine Denksportaufgabe.
Bin gerade dabei ein kleineres Addon zu basteln für das vorerfassen von Seriennummer und Chargen bei einer Bestellung. Das Vorerfassen klappt schon wunderbar.
Nur habe ich noch ein Problem bei der Übernahme der vorerfassten Nummern in die Standard-Seriennummer oder Charge im Wareneingang. Und zwar müsste ich von den Basiszeilen in der Maske Chargenerfassen von SAP herausbekommen welche BaseDocNum und BaseLine dies ist
(Nummer und Zeile der Bestellung zum zu erfassenden Wareneingang).
Gibt es dort Möglichkeiten:
Der Code zum Function Button auf dem Chargenform sieht bisher folgendermassen aus:
try
{
pVal.Form.Freeze(true);
Matrix mTop = Matrix.GetFromUID(pVal.Form, "35"); // Matrix Chargen aus Beleg
Matrix mBottum = Matrix.GetFromUID(pVal.Form, "3"); // Matrix Generierte Chargen
Button bOK = Button.GetFromUID(pVal.Form, "1"); // OK-Aktualisieren Button
bool lotVisible = mBottum.Columns["2"].Visible;
bool lotEditable = mBottum.Columns["2"].Editable;
bool qtyVisible = mBottum.Columns["5"].Visible;
bool qtyEditable = mBottum.Columns["5"].Editable;
bool attr1Visible = mBottum.Columns["7"].Visible;
bool attr1Editable = mBottum.Columns["7"].Editable;
bool attr2Visible = mBottum.Columns["8"].Visible;
bool attr2Editable = mBottum.Columns["8"].Editable;
bool prdDateVisible = mBottum.Columns["10"].Visible;
bool prdDateEditable = mBottum.Columns["10"].Editable;
bool expDateVisible = mBottum.Columns["11"].Visible;
bool expDateEditable = mBottum.Columns["11"].Editable;
if(lotVisible == false || qtyVisible == false || attr1Visible == false || attr2Visible == false || prdDateVisible == false || prdDateVisible == false)
{
MessageBox.Show("Eine der folgenden Spalten ist nicht eingeblendet: n - Charge n - Menge n - Herstelldatum n - Ablaufdatum n - Chargenattribut 1 n - Chargenattribut 2 n Bitte die notwendigen Spalten sichtbar setzen!", "OK");
return;
}
if(lotEditable == false || qtyEditable == false || attr1Editable == false || attr2Editable == false || prdDateEditable == false || prdDateEditable == false)
{
MessageBox.Show("Eine der folgenden Spalten ist nicht änderbar: n - Charge n - Menge n - Herstelldatum n - Ablaufdatum n - Chargenattribut 1 n - Chargenattribut 2 n Bitte die notwendigen Spalten aktiv setzen!", "OK");
return;
}
// GO THROUGH THE WHOLE LIST (TOP MATRIX)
for(int i = 0; i < mTop.Rows.Count; i++)
{
//MessageBox.Show("Zeile " + i + " Anzahl Zeilen: " + mTop.Rows.Count, "OK");
mTop.SelectedRows.Clear();
mTop.Columns["1"].Cells.Click(SwissAddonFramework.UI.Components.MatrixColumn.ClickTypes.Regular, MatrixColumn.Modifier.None);
string itemCode = mTop.GetValue("5", i);
string test = mTop.GetValue("4",i); // 4=BaseObject; 0=VisOrder; 1=Visible ObjCode
string docNum = mTop.GetValue("2",i);
double neededQuantity = Double.Parse(mTop.GetValue("44", i));
string tempCharge = "";
double tempChargeId = 0;
MessageBox.Show(test + " / " + itemCode + " / " + docNum.Substring(3) + " / " + neededQuantity.ToString(), "OK");
/*
int rowcounter = mBottum.Rows.Count -1;
// NO QUANTITY NEEDED FOR THIS ITEM
if(neededQuantity <= 0)
continue;
string itemCodeDetailsQry = @"SELECT
T0.ItmsGrpCod,
T0.U_Year,
T0.U_Mat,
ISNULL(T1.BatchNum, '0000000000') as BatchNum
FROM OITM T0
LEFT OUTER JOIN OIBT T1 ON T0.ItemCode = T1.ItemCode
WHERE T0.ItemCode =" + itemCode + " ORDER BY T1.BatchNum desc";
using (System.Data.SqlClient.SqlDataReader sdr = SwissAddonFramework.B1Connector.GetB1Connector().
ExecuteQuery(itemCodeDetailsQry))
{
if (sdr.Read())
{
string itemGroup = sdr["ItmsGrpCod"].ToString();
string itemYear = sdr["U_Year"].ToString();
string itemMatClass = sdr["U_Mat"].ToString();
tempCharge = itemGroup + itemYear + itemMatClass;
tempChargeId = double.Parse(sdr["BatchNum"].ToString().Substring(7, 3));
}
}
//MessageBox.Show("Chargenidentifikator: " + tempCharge, "OK");
//MessageBox.Show("Letzte Chargenlaufnummer: " + tempChargeId.ToString(), "OK");
//MessageBox.Show("Verarbietungzeile : " + mTop.Rows.VisualCount, "OK");
System.Collections.Generic.LinkedList allCharges = new System.Collections.Generic.LinkedList();
// GET A LIST OF CHARGES TO GENERATE (DATE, CHARGENAME, ROW AND QUANTITY)
for(double j = neededQuantity; j >= 1; j--)
{
string chargenNo = "";
string nextId = "";
if((tempChargeId + j).ToString().Length == 1)
{
nextId = "00" + (tempChargeId + j).ToString();
}
else if ((tempChargeId + j).ToString().Length == 2)
{
nextId = "0" + (tempChargeId + j).ToString();
}
else
{
nextId = (tempChargeId + j).ToString();
}
chargenNo = tempCharge + nextId;
//MessageBox.Show("Chargennummer " + chargenNo + " zwischengespeichert", "OK");
allCharges.AddLast(new Container(System.DateTime.Now, chargenNo, rowcounter, 1));
rowcounter = rowcounter + 1;
}
// SORTIERE LISTE (NACH Zeilennummer)
System.Collections.Generic.List sortedList = new System.Collections.Generic.List(allCharges);
sortedList.Sort();
// SELECT CHARGES
foreach(Container c in sortedList)
{
mBottum.SelectedRows.Clear();
mBottum.Columns["2"].Cells[c.Row].Click( SwissAddonFramework.UI.Components.MatrixColumn.ClickTypes.Regular, MatrixColumn.Modifier.None);
mBottum.SetValue("2", c.Row, c.Charge.ToString());
mBottum.SetValue("5", c.Row, c.Quantity.ToString());
bOK.Click(SwissAddonFramework.UI.Components.Item.ClickType.Regular);
}*/
}
}
catch(System.Exception ex)
{
StatusBar.WriteError("Unerwarteter Fehler beim automatischen Generieren der Chargen: " + ex.Message);
}
finally
{
pVal.Form.Freeze(false);
}
Die for-Schleife ist noch aus einer anderen Programmierung.
Ich danke für jeden hilfreichen Tip.
Adrian Meier
Hallo MichaelIch schlage vor, dass Du Dich bei unserem Support-Team meldest. Die können mit Dir den Code durchgehen.
HTH, Adrian
Michael Hubenschmid
Hallo Adi,danke für die Antwort. Hatte ganz vergessen, das ich das noch im Forum habe.
Habe das Problem schon selbst gelöst.
Beim Befor-Event des Hinzufügens schreibe ich alle Basislinks der Wareneingangszeilen in einen Container den ich dann in der Maske Chargendefinition abarbeite.
Aber falls du noch einen Tipp hast zu etwas wo du befürchtest das ich daran nicht gedacht habe kannst du mir dies hier gerne posten.
Gruss Micha
0
Please sign in to leave a comment.
Comments
0 comments