AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SAP BAPI_MATERIAL_GETLIST Übergabe des Filters
Thema durchsuchen
Ansicht
Themen-Optionen

SAP BAPI_MATERIAL_GETLIST Übergabe des Filters

Ein Thema von rdes · begonnen am 7. Dez 2021 · letzter Beitrag vom 11. Dez 2021
Antwort Antwort
rdes

Registriert seit: 16. Jun 2005
3 Beiträge
 
Delphi 11 Alexandria
 
#1

SAP BAPI_MATERIAL_GETLIST Übergabe des Filters

  Alt 7. Dez 2021, 15:05
Datenbank: SAP • Version: 7.6 • Zugriff über: ActiceX
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;

Geändert von rdes ( 8. Dez 2021 um 07:29 Uhr)
  Mit Zitat antworten Zitat
RonaldK

Registriert seit: 14. Sep 2021
16 Beiträge
 
#2

AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters

  Alt 8. Dez 2021, 08:59
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';

Geändert von RonaldK ( 8. Dez 2021 um 09:02 Uhr)
  Mit Zitat antworten Zitat
rdes

Registriert seit: 16. Jun 2005
3 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters

  Alt 8. Dez 2021, 09:58
Hallo Ronald,
danke für die schnelle Nachricht.
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

Viele Grüße
Reiner
  Mit Zitat antworten Zitat
RonaldK

Registriert seit: 14. Sep 2021
16 Beiträge
 
#4

AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters

  Alt 8. Dez 2021, 15:19
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.
  Mit Zitat antworten Zitat
tewes

Registriert seit: 31. Jan 2007
25 Beiträge
 
#5

AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters

  Alt 9. Dez 2021, 12:54
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';
  Mit Zitat antworten Zitat
Neco

Registriert seit: 3. Apr 2005
3 Beiträge
 
Delphi XE7 Architect
 
#6

AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters

  Alt 9. Dez 2021, 13:10
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
Roland
  Mit Zitat antworten Zitat
rdes

Registriert seit: 16. Jun 2005
3 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters

  Alt 10. Dez 2021, 13:27
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
  Mit Zitat antworten Zitat
Neco

Registriert seit: 3. Apr 2005
3 Beiträge
 
Delphi XE7 Architect
 
#8

AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters

  Alt 11. Dez 2021, 00:28
Deswegen würde ich mal versuchen das "dimas" anzuwenden.
Roland
  Mit Zitat antworten Zitat
Pfaffe

Registriert seit: 29. Jan 2009
294 Beiträge
 
Delphi 12 Athens
 
#9

AW: SAP BAPI_MATERIAL_GETLIST Übergabe des Filters

  Alt 11. Dez 2021, 21:58
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 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