Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SAP BAPI_MATERIAL_GETLIST Übergabe des Filters (https://www.delphipraxis.net/209443-sap-bapi_material_getlist-uebergabe-des-filters.html)

rdes 7. Dez 2021 15:05

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,
http://www.joachim-lentz.homepage.t-online.de/intro.htm
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;

RonaldK 8. Dez 2021 08:59

AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters
 
Ist das Füllen der Tabellenzeile richtig so?
Zitat:

Delphi-Quellcode:
item.Value(1,'SIGN'):='I';
item.Value(1,'OPTION'):='BT';
item.Value(1,'MATNR_LOW') :='000000000006000107';
item.Value(1,'MATNR_HIGH'):='000000000006020000';

"Item" ist doch eine Tabellenzeile und nicht die Tabelle.
Vielleicht klappt das so:
Delphi-Quellcode:
Item.Value[1] :='I';
Item.Value[2] :='BT';
item.Value[3] :='000000000006000107';
item.Value[4] :='000000000006020000';

rdes 8. Dez 2021 09:58

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

RonaldK 8. Dez 2021 15:19

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.

tewes 9. Dez 2021 12:54

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';

Neco 9. Dez 2021 13:10

AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters
 
Guck Dir mal dieses Beispiel an und guck, ob dir das dimas von Item helfen kann.

http://joachim-lentz.homepage.t-onli...tm#example%208

rdes 10. Dez 2021 13:27

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

Neco 11. Dez 2021 00:28

AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters
 
Deswegen würde ich mal versuchen das "dimas" anzuwenden.

Pfaffe 11. Dez 2021 21:58

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 09:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz