SAP Jobsuche bei DV-Treff


Suchen
strobbel
  • strobbel
  • SAP Forum - User Thema Starter
vor 13 Jahre
Hallo zusammen,

ich stehe ziemlich auf dem Schlauch was einen UserExit und den darin vorkommenden Ablauf anbetrifft.

Ich nutze den User-Exit EXIT_SAPLV56U_004 um Daten im Lieferschein zu ändern, genauer gesagt die Partnerrollen dort. In diesem User-Exit rufe ich den Bapi BAPI_OUTB_DELIVERY_CHANGE auf. Hier mal der Code zu diesem User-Exit:



DATA:
z_header_data LIKE bapiobdlvhdrchg,
z_header_control LIKE bapiobdlvhdrctrlchg.

DATA: BEGIN OF itab_zheaderpartner,
      UPD_MODE_PARTN TYPE BAPIDLVPARTNERCHG-UPD_MODE_PARTN,
      DELIV_NUMB TYPE BAPIDLVPARTNERCHG-DELIV_NUMB,
      ITM_NUMBER TYPE BAPIDLVPARTNERCHG-ITM_NUMBER,
      PARTN_ROLE TYPE BAPIDLVPARTNERCHG-PARTN_ROLE,
      PARTNER_NO TYPE BAPIDLVPARTNERCHG-PARTNER_NO,
      ADDRESS_NO TYPE BAPIDLVPARTNERCHG-ADDRESS_NO,
      DESC_PARTN TYPE BAPIDLVPARTNERCHG-DESC_PARTN,
      MANUAL_ADDR TYPE BAPIDLVPARTNERCHG-MANUAL_ADDR,
      SCA_CODE TYPE BAPIDLVPARTNERCHG-SCA_CODE,
END OF itab_zheaderpartner.

DATA z_header_partner LIKE itab_zheaderpartner OCCURS 10 with
header line.

*DATA z_header_partner TYPE TABLE OF BAPIDLVPARTNERCHG WITH HEADER LINE.

DATA: itab_del_change_BAPIRET2 like BAPIRET2.
DATA: itab_commit_BAPIRET2 like BAPIRET2.

DATA z_del_change_BAPIRET2 LIKE itab_del_change_BAPIRET2 OCCURS 10 with
header line.

DATA z_commit_BAPIRET2 LIKE itab_commit_BAPIRET2 OCCURS 10 with
header line.

loop at i_xvttp.

z_header_partner-upd_mode_partn = 'U'.
z_header_partner-deliv_numb = i_xvttp-vbeln.
z_header_partner-partn_role = 'SP'.
z_header_partner-partner_no = i_xvttk-tdlnr.

z_header_data-deliv_numb = i_xvttp-vbeln.
z_header_control-deliv_numb = i_xvttp-vbeln.
z_header_control-no_lock = 'Y'.

CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
  EXPORTING
    header_data = z_header_data
    header_control = z_header_control
    delivery = i_xvttp-vbeln
*   techn_control =
  TABLES
    header_partner = z_header_partner
*   header_partner_addr =
*   header_deadlines =
*   item_data =
*   item_control =
*   item_serial_no =
*   supplier_cons_data =
*   extension1 =
*   extension2 =
    return = z_del_change_BAPIRET2.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  EXPORTING
    WAIT = 'X'
  IMPORTING
    RETURN = z_commit_BAPIRET2.

endloop.



Dieser wird auch korrekt durchlaufen, aber leider werden keine Daten in der VBAP geändert. Die Problemstelle in Bapi habe ich auch bereits gefunden, kann mir diese aber nicht erklären.
Im Bapi gibt es folgenden Code in dem die Partnerdaten geändert werden:



FORM partner_upd_fill
        TABLES   it_header_partner STRUCTURE bapidlvpartnerchg
                 it_header_partner_addr STRUCTURE bapidlvpartnaddrchg
        CHANGING ct_partner_update TYPE shp_partner_update_t.

  DATA cs_partner_update TYPE shp_partner_update.
  DATA ls_header_partner TYPE bapidlvpartnerchg.

LOOP AT it_header_partner INTO ls_header_partner.
    CLEAR cs_partner_update.
    cs_partner_update-updkz_par = ls_header_partner-upd_mode_partn.
    cs_partner_update-vbeln_vl  = ls_header_partner-deliv_numb.
*     = IT_HEADER_PARTNER-ITM_NUMBER
    cs_partner_update-parvw     = ls_header_partner-partn_role.
    cs_partner_update-parnr     = ls_header_partner-partner_no.
*    = IT_HEADER_PARTNER-ADDRESS_NO
*    = IT_HEADER_PARTNER-DESC_PARTN
*    = IT_HEADER_PARTNER-MANUAL_ADDR

    IF ls_header_partner-manual_addr = gc_true.
      PERFORM partner_address_chg_fill
                      TABLES   it_header_partner_addr
                      USING    ls_header_partner-address_no
                      CHANGING cs_partner_update.
    ENDIF.
    APPEND cs_partner_update TO ct_partner_update.
  ENDLOOP.

ENDFORM.                    " PARTNER_UPD_FILL



Im fett markierten Loop sollen die Daten aus it_header_partner in lt_header_partner geschrieben werden. Dies passiert aber leider nicht wenn ich das ganze über den User-Exit laufen lasse.
Teste ich den Bapi jedoch über die se37, funktioniert Loop einwandfrei und die VBAP wird geändert.

Kann mir hier jemand weiterhelfen?

Gruß & Danke im Voraus
strobbel
ahelm
vor 13 Jahre
Hallo strobbel,

es fehlt dir genau eine Zeile im Coding: Nach diesem Block, der die Kopfzeile der internen Tabelle z_header_partner befüllt, musst du die Kopfzeile noch hinten anhängen:

...
z_header_partner-upd_mode_partn = 'U'.
z_header_partner-deliv_numb = i_xvttp-vbeln.
z_header_partner-partn_role = 'SP'.
z_header_partner-partner_no = i_xvttk-tdlnr.
append z_header_partner.
...

mfg Andreas