BAPI_SALESDOCU_CREATEWITHDIA

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).

BAPI_SALESDOCU_CREATEWITHDIA

Postby Curt3333 » Wed Jun 25, 2003 1:52 pm

Hallo zusammen,

ich soll Aufträge aus einer Exceldatei über den o.g. BAPI im SAP anlegen.
Leider funktioniert das nicht.

Hier mein VBA-Coding:

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. Option Explicit
  2.  
  3. Dim functionCtrl As Object          'Function Control (Sammelobjekt: Container)
  4. Dim sapConnection As Object         'Verbindungsobjekt
  5. Dim theFunc As Object               'Function Objekt
  6. Dim die_exception As Object
  7. Dim bWeiter As Boolean
  8. Dim i As Integer
  9. Dim sType As String
  10. Dim iStartPos As Integer
  11. Dim returnFunc As Boolean
  12.  
  13. Sub Testauftrag()
  14.  
  15. Worksheets(1).Select
  16.  
  17. 'Erstellen eines Funktionsobjektes
  18. Set functionCtrl = CreateObject("SAP.Functions")
  19. Set sapConnection = functionCtrl.Connection
  20.  
  21. 'Logon mit Initialwerten
  22. sapConnection.Client = "800"
  23. sapConnection.Language = "DE"
  24.  
  25. If sapConnection.Logon&#40;0, False&#41; <> True Then
  26.        MsgBox "Keine Verbindung zum R/3!", vbCritical
  27.        Call Finish&#40;functionCtrl, sapConnection&#41;
  28.        Exit Sub                                           'Programm beenden
  29. End If
  30.    
  31. 'Referenz auf Funktionsobjekt "BAPI_SALESDOCU_CREATEWITHDIA"
  32. Set theFunc = functionCtrl.Add&#40;"BAPI_SALESDOCU_CREATEWITHDIA"&#41;
  33.  
  34. ' Ab der 4. Zeile stehen die Benutzerdaten
  35.     i = 4
  36.    
  37. '************************************************************
  38. ' Schleife über alle Aufträge
  39. '************************************************************
  40. While i < 5  ' Testweise
  41.  
  42. Dim Sammler As Object
  43. Dim Auftraggeber As Object
  44. Dim Pos As Object
  45.  
  46. ' Kontraktart
  47.    Call FillInterface&#40;theFunc, Sammler, "SALES_HEADER_IN", i&#41;
  48. ' Auftraggeber
  49.     Call FillInterface&#40;theFunc, Auftraggeber, "SALES_PARTNERS", i&#41;
  50. 'Positionen
  51.    Call FillInterface&#40;theFunc, Pos, "SALES_ITEMS_IN", i&#41;
  52. ' Aufruf der BAPI-Funktion
  53.     Call BAPIFunction&#40;theFunc&#41;
  54.                  
  55.  i = i + 1
  56. Wend
  57. '************************************************************
  58. ' Ende der Schleife über Aufträge
  59. '************************************************************
  60.  
  61. ' Abmelden
  62. Call Finish&#40;functionCtrl, sapConnection&#41;
  63. MsgBox "Programm beendet!", vbOKOnly, "Beenden"
  64.  
  65. End Sub
  66.  
  67. ' ************************************************************
  68. ' Prozedur: Finish
  69. '
  70. ' Aufgabe : Aufräumarbeiten: Abmelden beim SAP-System, Zurücksetzten
  71. ' von Referenzvariablen
  72. ' ************************************************************
  73. Sub Finish&#40;ByRef functionCtrl As Object, ByRef sapConnection As Object&#41;
  74.     ' Abmelden vom SAP-System, falls die Anmeldung vorher erfolgt ist
  75.    If Not IsNull&#40;functionCtrl.Connection&#41; Then
  76.        'Vebindung zum R/3 beenden !
  77.         functionCtrl.Connection.logoff
  78.     End If
  79.    
  80.     '
  81.    'Objekte und damit Speicherplatz freigeben
  82.     Set sapConnection = Nothing
  83.     Set functionCtrl = Nothing
  84. End Sub
  85.  
  86. ' ************************************************************
  87. ' Prozedur: FillInterface
  88. '
  89. ' Aufgabe : Füllen der Schnittstelle der BAPI's.
  90. '' ************************************************************
  91. Sub FillInterface&#40;ByRef theFunc As Object, ByRef ObjectName As Object, sParamName As String, iRow As Integer&#41;
  92.    
  93.    Select Case sParamName
  94.    Case "SALES_HEADER_IN"
  95.        Set ObjectName = theFunc.exports&#40;sParamName&#41;
  96.        ObjectName.Value&#40;"DOC_TYPE"&#41; = Cells&#40;iRow, 1&#41;
  97.        ObjectName.Value&#40;"SALES_ORG"&#41; = Cells&#40;iRow, 2&#41;
  98.        ObjectName.Value&#40;"DISTR_CHAN"&#41; = Cells&#40;iRow, 3&#41;
  99.        ObjectName.Value&#40;"DIVISION"&#41; = Cells&#40;iRow, 4&#41;
  100.        ObjectName.Value&#40;"DATE_TYPE"&#41; = Cells&#40;iRow, 5&#41;
  101.        
  102.        
  103.    Case "SALES_PARTNERS"
  104.        Set ObjectName = theFunc.tables.Item&#40;sParamName&#41;
  105.        ObjectName.AppendRow
  106.        For Each ObjectName In ObjectName.Rows
  107.            ObjectName&#40;"PARTN_ROLE"&#41; = Cells&#40;iRow, 6&#41;
  108.            ObjectName&#40;"PARTN_NUMB"&#41; = Cells&#40;iRow, 7&#41;
  109.        Next
  110.            
  111.    Case "SALES_ITEMS_IN"
  112.        Set ObjectName = theFunc.tables.Item&#40;sParamName&#41;
  113.        ObjectName.AppendRow
  114.        For Each ObjectName In ObjectName.Rows
  115.            ObjectName&#40;"MATERIAL"&#41; = Cells&#40;iRow, 8&#41;
  116.            ObjectName&#40;"TARGET_QTY"&#41; = Cells&#40;iRow, 9&#41;
  117.        Next
  118.        
  119.    Case "DEFAULTS"
  120.        Set ObjectName = theFunc.exports&#40;sParamName&#41;
  121.        MsgBox sParamName
  122.            
  123.    End Select
  124. End Sub
  125.  
  126. ' ************************************************************
  127. ' Prozedur: BAPIFunction
  128. '
  129. ' Aufgabe : ruft das BAPI auf und analysiert die Tab mit den Rückgabewe.
  130. '           Die Rückgabewerte werden in die Exceltab in die jeweilige Zeile
  131. '           geschrieben.
  132. '
  133. ' ***********************************************************
  134. Sub BAPIFunction&#40;ByRef theFunc As Object&#41;
  135.    
  136.    'Aufruf des Bapi
  137.     returnFunc = theFunc.Call
  138.     If returnFunc = False Then
  139.     MsgBox "Fehler beim Zugriff auf Funktion im R/3 ! ", vbCritical
  140.     End If
  141. End Sub
  142.  
  143.  
GeSHi ©



Ich habe ein ABAP-Programm mit den gleichen Übergabewerten geschrieben und dort funktionierts. Beim VBA-Progamm tritt bei returnFunc = theFunc.Call ein Fehler auf.
Keine Ahnung warum. :roll:

Kann mir jemand helfen?

Gruß
Mrs. Hilflos :cry:
Curt3333
...
...
 
Posts: 298
Joined: Mon Feb 03, 2003 4:05 pm

Postby Dion4903 » Wed Jun 25, 2003 2:11 pm

Hi,

ich würde eine endlose Schleife im FB BAPI_SALESDOCU_CREATEWITHDIA (am Anfang) einbauen, z.B:
Data var type i.
while var <> 1.
endwhile.

Wenn der FB aufgeruft wird, kann man den Prozess debuggen - transaction SE50, den richtigen Prozess auswählen, Menue->Programm/Modus->Programm->Debugging. In Debugg Modul kann man feststellen ob die Werten richtig aus Excel übergegeben sind.

Gruss, tom
Dion4903
..
..
 
Posts: 78
Joined: Tue Dec 03, 2002 3:53 pm

Postby Curt3333 » Wed Jun 25, 2003 5:31 pm

Hallo tom,

danke für den Tipp. So komme ich mal wenigstens zum Debuggen ins SAP-System.
Ich habe jetzt die Abbruchstelle (im Programm SAPMSSYD) gefunden, kann aber leider nichts damit anfangen.

Code: [Select all] [Expand/Collapse] [Download] (Untitled.txt)
  1. * Flush Automation Queue
  2. * must be last call in %_ctl_output
  3. *  PERFORM  CONTROL_FLUSH&#40;SAPFGUICNTL&#41; IF FOUND.
  4.   call 'DYNP_GET_SUBSCREEN'.
  5.   if sy-subrc = 2.
  6.     perform handle_flush_pbo&#40;sapfguicntl&#41; if found.
  7. *    Call Function 'AC_SYSTEM_FLUSH'.
  8.     perform diag_xml_send.
  9.  
  10.   endif.
  11.  
GeSHi ©
:?

Der Abbruch erfolgt, weil sy-subrc = 2 ist. Was macht der Befehl call 'DYNP_GET_SUBSCREEN'. ? Ist das eine Systemfunktion. Kann ich mir irgendwie das Coding anschauen?

Danke für eure Hilfe
Gruß
Mrs. Hilflos
Curt3333
...
...
 
Posts: 298
Joined: Mon Feb 03, 2003 4:05 pm

Postby Curt3333 » Thu Jun 26, 2003 8:45 am

...
Ich habe jetzt mit den gleichen Daten den BAPI_SALESDOCU_CREATEFROMDATA1 verwendet. Dort scheint es besser zu funktionieren. Jetzt bekomme ich als Rückmeldung über die Tabelle Return, das der Auftrag xxx angelegt wurde. Gehe ich allerdings in das System, kann ich den Auftrag xxx nicht finden :?:

Hat jemand dazu eine Idee?

Habs gefunden: der BAPI_TRANSACTION_COMMIT machts.

Kann es sein, das der BAPI_SALESDOCU_CREATEWITHDIA einfach nicht von einer anderen Anwendung aus funktioniert?

Gruß
Mrs. Hilflos
Curt3333
...
...
 
Posts: 298
Joined: Mon Feb 03, 2003 4:05 pm


Return to ABAP Objects®

Who is online

Users browsing this forum: No registered users and 9 guests