![]() |
Datenbank: SAP • Version: 7.6 • Zugriff über: ActiceX
SAP BAPI_MATERIAL_GETLIST Übergabe des Filters
Hallo liebes Forum,
bin auf der Suche nach dem Fehler den ich mache. Der Rückgabewert von SAP Lautet: „Value in field SIGN can only be I, E „ Die Beispiele auf der Seite, ![]() Funktionieren soweit, also die Verbindung zu SAP ist OK. Bei der BAPI Funktion „BAPI_MATERIAL_GETLIST“ stoß ich auf ein Problem. Bei der Übergabe der Tabelle als Filter -> MATNRSELECTION wird etwas nicht stimmen. Hat jemand einen Tipp? Danke. Viele Grüße Reiner
Delphi-Quellcode:
procedure TForm1.Button18Click(Sender: TObject);
var i:integer; txt:String; iTabIndex,y:integer; item,mat,funct,selPlant,itemPlant:Variant; begin funct := sapFunctions1.add('BAPI_MATERIAL_GETLIST'); funct.exports['MAXROWS'].value :=100; mat:=funct.tables.item('MATNRSELECTION'); item:=mat.rows.add; item.Value(1,'SIGN'):='I'; item.Value(1,'OPTION'):='BT'; item.Value(1,'MATNR_LOW') :='000000000006000107'; item.Value(1,'MATNR_HIGH'):='000000000006020000'; if not funct.call then showMessage(funct.exception) else begin // Ausgabe Material tab2 := funct.tables.item['MATNRLIST'] ; if tab2.rowcount > 0 then begin iTabIndex := tab2.rowcount; for i := 1 to iTabIndex do begin try begin for y := 1 to 5 do begin txt := tab2.value(i, y); Grid.cells[y, i] := copy(txt, 0, 20); end; end; finally begin end; end; end; end; // Ausgabe Fehler tab2 := funct.tables.item('RETURN'); LN_Rueckgabe.caption := inttostr(tab2.rowcount); if tab2.rowcount > 0 then begin iTabIndex := tab2.rowcount; for i := 1 to iTabIndex do begin try begin for y := 1 to 12 do begin txt := tab2.value(i, y); Grid.cells[y, i] := copy(txt, 0, 50); end; end; finally begin end; end; end; end; end; end; |
AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters
Ist das Füllen der Tabellenzeile richtig so?
Zitat:
Vielleicht klappt das so:
Delphi-Quellcode:
Item.Value[1] :='I';
Item.Value[2] :='BT'; item.Value[3] :='000000000006000107'; item.Value[4] :='000000000006020000'; |
AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters
Hallo Ronald,
danke für die schnelle Nachricht. :thumb: Ich habe schon eine Menge Varianten getestet, die im Netz zu finden sind. Deine Variante war auch dabei, immer wieder derselbe Rückgabewert von SAP. Fehler: E , HV, 00026, Value in field SIGN can only be I, E , MGV_MATNRSELECTION :pale: Viele Grüße Reiner |
AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters
Es scheint etwas in der MATNRSELECTION Tabelle im SAP anzukommen, jedoch stehen dort wohl andere Werte drin.
Vielleicht kann man sich im SAP, in der SE37 und einen externen Breakpunkt genauer anschauen, was dort ankommt. |
AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters
Bin mir nicht sicher, aber geht es so?
item.Value('SIGN'):='I'; item.Value('OPTION'):='BT'; item.Value('MATNR_LOW') :='000000000006000107'; item.Value('MATNR_HIGH'):='000000000006020000'; |
AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters
Guck Dir mal dieses Beispiel an und guck, ob dir das dimas von Item helfen kann.
![]() |
AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters
Hallo tewes,
leider nicht, item.Value('SIGN'):='I'; …. geht auch nicht. Selbe Fehlermeldung. Ich denke, dass ist ein Problem mit Delphi VARIANT und SAP, sobald ich ein Variant sende geht es nicht mehr. Wie RonaldK schon schrieb, es kommt was an, jedoch das Falsche. Gruß Reiner |
AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters
Deswegen würde ich mal versuchen das "dimas" anzuwenden.
|
AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters
So funktioniert es bei mir:
Delphi-Quellcode:
var
i, y: integer; txt: String; Funct, mat, tab: OleVariant; begin Funct:= SAPFunctions1.Add('BAPI_MATERIAL_GETLIST'); // Funct.exports('MAXROWS').value:= 100; mat:= Funct.tables.item('MATNRSELECTION'); mat.Rows.Add; mat.value(1, 'SIGN'):= 'I'; // I, E mat.value(1, 'OPTION'):= 'BT'; // (EQ,NE,GT,GE,LE,LT,BT,NB,CP,NP) mat.value(1, 'MATNR_LOW'):= '000000000000107117'; // 18 Zeichen mat.value(1, 'MATNR_HIGH'):= '000000000000107120'; if not Funct.call then showMessage(Funct.exception) else begin // Ausgabe Material tab:= Funct.tables.item('MATNRLIST'); for i:= 1 to tab.rowcount do for y:= 1 to 6 do // Warum max. 6? begin txt:= tab.value(i, y); mmo1.Lines.Add(txt); end; // Ausgabe Fehler tab:= Funct.tables.item('RETURN'); for i:= 1 to tab.rowcount do for y:= 1 to 12 do begin txt:= tab.value(i, y); mmo1.Lines.Add(txt); end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz