Optimizer - CS - Stückliste aus Matrix löschen
Frank Romeni
Wenn ich in einem Beleg eine Stückliste ([u]kein[/u] Template-Typ) eingetragen habe, dann kann ich die komplette Stückliste incl. der zugehörigen Artikelzeilen darüber löschen, indem ich manuell die erste Zeile (der Artikel, der die Stückliste definiert) lösche.Möchte ich das in einer CS-Regel erledigen so funktioniert das bei mir nicht: Die erste Zeile der Stückliste wird gelöscht, aber die zugeordneten Artikelzeilen bleiben in der Matrix stehen (und können nun auch nicht mehr manuell gelöscht werden, da SAP dies nur über die erste Zeile erlaubt!).
Ich bin mir sicher, daß zum Zeitpunkt des Löschens aus der Regel, bereits alle Artikelzeilen von SAP in der Matrix angelegt wurden, da ich, bevor ich lösche, bereits darauf zugegriffen habe.
So lösche ich:
matrix.Rows.Delete(pVal.Row);
Danke!
Frank Romeni
Frank Romeni
Liebe Leute,auch hier habe ich inzwischen selbst eine Lösung gefunden.
Zum Löschen einer Stückliste aus einem Beleg muß man beachten, daß hier das Verhalten von SAP sich bei manuellem Zugriff komplett vom Zugriff über das DI unterscheidet.
Manuell:
1. Die komplette Stückliste werden aus dem Beleg gelöscht, indem man die erste Zeile der Stückliste in der Matrix löscht.
2. Einzelne Artikelzeilen innerhalb der Stückliste können [u]nicht[/u] aus der Matrix gelöscht werden.
Über das DI in C#-Code:
1. Wird die erste Stücklistenzeile aus der Matrix gelöscht, so bleiben die Artikelzeilen der Stückliste in der Matrix stehen.
2. Alle Artikelzeilen innerhalb der Stückliste können einzeln aus der Matrix gelöscht werden.
Im C#-Code muß man also zum kompletten Löschen einer Stückliste aus der Matrix alle Zeilen der Stückliste einzeln aus der Matrix löschen:
Matrix matrix = Matrix.GetFromUID(pVal.Form, "38");
string itemCode = matrix.GetValue("1", pVal.Row-1);
SAPbobsCOM.ProductTrees tree =
(SAPbobsCOM.ProductTrees) SwissAddonFramework.B1Connector.GetB1Connector().Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oProductTrees);
tree.GetByKey(itemCode);
int count = tree.Items.Count; // Artikel in der Stückliste
for(int i=0; i<=count; i++){ // Kopfzeile incl. Artikelzeilen löschen
matrix.Rows.Delete(pVal.Row);
}
return true;
Anmerkung: Im Code oben taucht der Index i nicht im Zusammenhang mit pVal.Row auf, da immer die aktuelle Zeile gelöscht werden muß, da nach dem Löschen einer Zeile, die darunterliegenden Zeilen nach oben rutschen.
Frank Romeni
0
Please sign in to leave a comment.
Comments
0 comments