Добрый день, коллеги.
Возникла проблема при обновлении цены в контракте на закупку (ММ). Использую БАПИ BAPI_CONTRACT_CHANGE. Код не мой.
Ошибок при этом никаких. Подскажите кто знает какое-нибудь решение данной проблемы. Заранее спасибо.
Код ниже:
Code:
TABLES: a016.
DATA:
wa_a016 TYPE a016, "Kontraktposition
wa_konp TYPE konp, "Konditionen (Position)
t_016 TYPE TABLE OF a016,
item_cond_validity LIKE bapimeoutvalidity OCCURS 0 WITH HEADER LINE,
item_cond_validityx LIKE bapimeoutvalidityx OCCURS 0 WITH HEADER LINE,
item LIKE bapimeoutitem OCCURS 0 WITH HEADER LINE,
itemx LIKE bapimeoutitemx OCCURS 0 WITH HEADER LINE,
item_condition LIKE bapimeoutcondition OCCURS 0 WITH HEADER LINE,
item_conditionx LIKE bapimeoutconditionx OCCURS 0 WITH HEADER LINE,
h_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
DATA: h_evrtn_old TYPE ebeln,
h_evertp_old TYPE ebelp.
SELECTION-SCREEN BEGIN OF BLOCK sel WITH FRAME TITLE text-sel.
SELECT-OPTIONS: s_evrtn FOR a016-evrtn DEFAULT '160412-005' OBLIGATORY,
s_evrtp FOR a016-evrtp DEFAULT '0010'.
PARAMETERS: p_bis TYPE datum OBLIGATORY,
p_akt TYPE datum DEFAULT sy-datum.
PARAMETERS: p_commit AS CHECKBOX DEFAULT 'X'.
SELECTION-SCREEN END OF BLOCK sel.
START-OF-SELECTION.
BREAK-POINT.
SELECT * FROM a016 INTO TABLE t_016 WHERE evrtn IN s_evrtn AND evrtp IN s_evrtp
AND datbi >= p_akt AND datab <= p_akt.
SORT t_016 BY evrtn ASCENDING evrtp ASCENDING knumh DESCENDING.
LOOP AT t_016 INTO wa_a016.
IF h_evrtn_old <> wa_a016-evrtn AND NOT h_evrtn_old IS INITIAL.
WRITE: ' -> Bapi aufgerufen'.
PERFORM bapi_gueltigkeit USING h_evrtn_old.
PERFORM bapi_refresh.
ENDIF.
h_evrtn_old = wa_a016-evrtn.
* in die bapi parameter nur die werte für den jüngsten konditionssatz mitaufnehmen
IF wa_a016-evrtp <> h_evertp_old.
WRITE: / wa_a016-kschl, AT 10 wa_a016-evrtn, AT 30 wa_a016-evrtp, AT 75 wa_a016-datbi, '=>', p_bis, AT 110 wa_a016-datab, AT 130 wa_a016-knumh, 'in BAPIparam. aufgenommen'.
item_cond_validity-item_no = wa_a016-evrtp.
item_cond_validity-serial_id = wa_a016-knumh.
item_cond_validity-valid_to = p_bis.
item_cond_validity-valid_from = wa_a016-datab.
APPEND item_cond_validity.
MOVE-CORRESPONDING item_cond_validity TO item_cond_validityx.
CLEAR: item_cond_validityx-valid_from.
item_cond_validityx-valid_to = 'X'.
item_cond_validityx-item_nox = 'X'.
item_cond_validityx-serial_idx = 'X'.
APPEND item_cond_validityx.
MOVE-CORRESPONDING item_cond_validity TO item.
APPEND item.
MOVE-CORRESPONDING item_cond_validity TO itemx.
itemx-item_nox = 'X'.
APPEND itemx.
MOVE-CORRESPONDING item_cond_validity TO item_condition.
SELECT * FROM konp INTO CORRESPONDING FIELDS OF wa_konp
WHERE knumh = wa_a016-knumh.
ADD 1 TO item_condition-cond_count.
item_condition-cond_type = wa_konp-kschl.
* item_condition-cond_value = wa_konp-kbetr.
item_condition-currency = wa_konp-konwa.
item_condition-cond_value = 10000000.
item_condition-change_id = 'U'.
APPEND item_condition.
ENDSELECT.
MOVE-CORRESPONDING item_cond_validity TO item_conditionx.
MOVE-CORRESPONDING item_condition TO item_conditionx.
item_conditionx-item_nox = 'X'.
item_conditionx-serial_idx = 'X'.
item_conditionx-cond_countx = 'X'.
item_conditionx-cond_type = 'X'.
item_conditionx-cond_value = 'X'.
item_conditionx-currency = 'X'.
APPEND item_conditionx.
* -------------------------
* Новое условие
* CLEAR: item_cond_validity, item_cond_validityx.
*
* item_cond_validity-item_no = wa_a016-evrtp.
* item_cond_validity-serial_id = 1.
* item_cond_validity-valid_to = '99991231'.
* item_cond_validity-valid_from = p_bis + 1.
* APPEND item_cond_validity.
*
* MOVE-CORRESPONDING item_cond_validity TO item_cond_validityx.
* item_cond_validityx-valid_from = 'X'.
* item_cond_validityx-valid_to = 'X'.
* item_cond_validityx-item_nox = 'X'.
* item_cond_validityx-serial_idx = 'X'.
* APPEND item_cond_validityx.
*
* CLEAR: item_condition, item_conditionx.
*
* MOVE-CORRESPONDING item_cond_validity TO item_condition.
* SELECT * FROM konp INTO CORRESPONDING FIELDS OF wa_konp
* WHERE knumh = wa_a016-knumh.
* ADD 1 TO item_condition-cond_count.
* item_condition-cond_type = wa_konp-kschl.
** item_condition-cond_value = wa_konp-kbetr.
* item_condition-currency = wa_konp-konwa.
* item_condition-cond_value = 13000000.
* item_condition-change_id = 'I'.
* APPEND item_condition.
* ENDSELECT.
*
* MOVE-CORRESPONDING item_cond_validity TO item_conditionx.
* MOVE-CORRESPONDING item_condition TO item_conditionx.
*
* item_conditionx-item_nox = 'X'.
* item_conditionx-serial_idx = 'X'.
* item_conditionx-cond_countx = 'X'.
* item_conditionx-cond_type = 'X'.
* item_conditionx-cond_value = 'X'.
* item_conditionx-currency = 'X'.
* APPEND item_conditionx.
ENDIF. "wa_a016-evrtp <> h_evertp_old.
h_evertp_old = wa_a016-evrtp.
ENDLOOP.
IF NOT h_evrtn_old IS INITIAL.
WRITE: ' -> Bapi aufgerufen'.
PERFORM bapi_gueltigkeit USING wa_a016-evrtn.
PERFORM bapi_refresh.
ENDIF.
END-OF-SELECTION.
*&----
*
*& Form BAPI_GUELTIGKEIT
*&----
*
* text
*----
*
*--> p1 text
*<-- p2 text
*----
*
FORM bapi_gueltigkeit USING h_evrtn.
CALL FUNCTION 'BAPI_CONTRACT_CHANGE'
EXPORTING
purchasingdocument = h_evrtn
TABLES
item = item
itemx = itemx
item_cond_validity = item_cond_validity
item_cond_validityx = item_cond_validityx
item_condition = item_condition
item_conditionx = item_conditionx
return = h_return.
WRITE: /.
LOOP AT h_return.
CASE: h_return-type.
WHEN 'S'. WRITE: 'Success'.
WHEN 'E'. WRITE: 'Error'.
WHEN 'W'. WRITE: 'Warning'.
WHEN 'I'. WRITE: 'Info'.
WHEN 'A'. WRITE: 'Abort'.
ENDCASE.
WRITE: h_return-message.
ENDLOOP.
CLEAR: item_cond_validity, item_cond_validityx, h_return.
REFRESH: item_cond_validity, item_cond_validityx, h_return.
IF p_commit = 'X'.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = h_return.
.
SKIP.
IF sy-subrc = 0. WRITE 'Commit OK'. ELSE. WRITE: 'Fehlerim Commit'. ENDIF.
LOOP AT h_return.
CASE: h_return-type.
WHEN 'S'. WRITE: 'Success'.
WHEN 'E'. WRITE: 'Error'.
WHEN 'W'. WRITE: 'Warning'.
WHEN 'I'. WRITE: 'Info'.
WHEN 'A'. WRITE: 'Abort'.
ENDCASE.
WRITE: h_return-message.
ENDLOOP.
CLEAR: h_return. REFRESH: h_return.
ELSE.
ROLLBACK WORK.
ENDIF.
SKIP 2.
ENDFORM. " BAPI_GUELTIGKEIT
*&----
*
*& Form BAPI_REFRESH
*&----
*
*text
*----
*
*--> p1 text
*<-- p2 text
*----
*
FORM bapi_refresh .
CLEAR: item, itemx, item_cond_validity, item_cond_validityx, item_condition, item_conditionx.
REFRESH: item, itemx, item_cond_validity, item_cond_validityx, item_condition, item_conditionx.
CLEAR: h_evertp_old.
WRITE: 'BAPI Parameters refreshed'. SKIP 2.
ENDFORM. " BAPI_REFRESH