Может мне кто нить поможет? Код такой:
Code:
DATA: lt_poschedule TYPE TABLE OF bapimeposchedule
, ls_poschedule TYPE bapimeposchedule
, lt_poschedulex TYPE TABLE OF bapimeposchedulx
, ls_poschedulex TYPE bapimeposchedulx
, lt_bapiret2 TYPE TABLE OF bapiret2
, ls_bapiret2 TYPE bapiret2
, ls_poheader TYPE bapimepoheader
, ls_poheaderx TYPE bapimepoheaderx
, lt_poheader TYPE TABLE OF bapimepoheader
, lt_poheaderx TYPE TABLE OF bapimepoheaderx
, bapi_te_mepoitem TYPE bapi_te_mepoitem
, bapi_te_mepoitemx TYPE bapi_te_mepoitemx
, lt_extensionin TYPE TABLE OF bapiparex
, ls_extensionin TYPE bapiparex
, ls_ekko TYPE ekko
, ls_ekkn TYPE ekkn
, ls_ekpo TYPE ekpo
, ls_eket TYPE eket
, ls_poitem TYPE bapimepoitem
, ls_poitemx TYPE bapimepoitemx
, lt_poitem TYPE TABLE OF bapimepoitem
, lt_poitemx TYPE TABLE OF bapimepoitemx
, ls_poaccount TYPE bapimepoaccount
, ls_poaccountx TYPE bapimepoaccountx
, lt_poaccount TYPE TABLE OF bapimepoaccount
, lt_poaccountx TYPE TABLE OF bapimepoaccountx.
DATA: lv_pspel TYPE ps_posid.
DATA: ls_mess TYPE zmm_d595_msg
, ls_zpact TYPE zpact.
SELECT SINGLE *
FROM ekko
INTO CORRESPONDING FIELDS OF ls_ekko
WHERE ebeln = id_banfn.
ls_poheader-po_number = id_banfn.
ls_poheader-vendor = ls_ekko-lifnr.
ls_poheader-pmnttrms = ls_ekko-zterm.
ls_poheader-purch_org = ls_ekko-ekorg.
ls_poheader-pur_group = ls_ekko-ekgrp.
ls_poheaderx-vendor = 'X'.
ls_poheaderx-po_number = 'X'.
ls_poheaderx-pmnttrms = 'X'.
ls_poheaderx-purch_org = 'X'.
ls_poheaderx-pur_group = 'X'.
ls_poschedule-po_item = id_bnfpo.
ls_poschedulex-po_item = id_bnfpo.
ls_poschedule-sched_line = iv_etenr.
ls_poschedulex-sched_line = iv_etenr.
IF ix_datum IS NOT INITIAL.
ls_poschedule-delivery_date = iv_datum.
ls_poschedulex-delivery_date = 'X'.
ENDIF.
IF ix_omeng IS NOT INITIAL.
ls_poschedule-quantity = iv_menge.
ls_poschedulex-quantity = 'X'.
ENDIF.
APPEND ls_poschedule TO lt_poschedule.
APPEND ls_poschedulex TO lt_poschedulex.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = id_banfn
poheader = ls_poheader
poheaderx = ls_poheaderx
TABLES
return = lt_bapiret2
poschedule = lt_poschedule
poschedulex = lt_poschedulex.
CLEAR: ls_mess.
LOOP AT lt_bapiret2 INTO ls_bapiret2 WHERE type = 'E' OR type = 'A'.
ls_mess-i_msgty = ls_bapiret2-type.
ls_mess-i_text = ls_bapiret2-message.
APPEND ls_mess TO et_messages.
ENDLOOP.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
LOOP AT lt_bapiret2 INTO ls_bapiret2 WHERE type = 'S'.
ls_mess-i_msgty = ls_bapiret2-type.
ls_mess-i_text = ls_bapiret2-message.
APPEND ls_mess TO et_messages.
ENDLOOP.
ENDIF.
IF ix_adrow IS NOT INITIAL.
break rstihin.
SELECT SINGLE MAX( ebelp )
FROM eket
INTO ls_poschedule-po_item
WHERE ebeln = id_banfn.
SELECT SINGLE *
FROM eket
INTO CORRESPONDING FIELDS OF ls_eket
WHERE ebeln = id_banfn
AND ebelp = id_bnfpo
AND etenr = iv_etenr.
SELECT SINGLE *
FROM ekkn
INTO CORRESPONDING FIELDS OF ls_ekkn
WHERE ebeln = id_banfn
AND ebelp = id_bnfpo.
SELECT SINGLE *
FROM ekpo
INTO CORRESPONDING FIELDS OF ls_ekpo
WHERE ebeln = id_banfn
AND ebelp = id_bnfpo.
SELECT SINGLE * FROM zpact
INTO ls_zpact
WHERE num = ls_ekpo-zzcontract.
CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT'
EXPORTING
input = ls_ekkn-ps_psp_pnr
IMPORTING
output = lv_pspel.
CLEAR: lt_poschedule ,lt_poschedulex.
ls_poschedule-po_item = ls_poschedule-po_item + 10.
ls_poschedulex-po_item = ls_poschedule-po_item.
ls_poschedule-delivery_date = iv_datum.
ls_poschedulex-delivery_date = 'X'.
ls_poschedule-quantity = iv_omeng.
ls_poschedulex-quantity = 'X'.
APPEND ls_poschedule TO lt_poschedule.
APPEND ls_poschedulex TO lt_poschedulex.
ls_poitem-po_item = ls_poschedule-po_item.
ls_poitem-material = ls_ekpo-matnr.
ls_poitem-plant = ls_ekpo-werks.
ls_poitem-cmmt_item = ls_ekkn-fipos.
ls_poitem-funds_ctr = ls_ekkn-fistl.
ls_poitem-acctasscat = ls_ekpo-knttp.
ls_poitem-preq_no = ls_eket-banfn.
ls_poitem-preq_item = ls_eket-bnfpo.
ls_poitem-quantity = iv_omeng.
ls_poitem-trackingno = ls_ekpo-bednr.
ls_poitem-preq_name = sy-uname.
ls_poitem-batch = ls_eket-charg.
ls_poitem-stge_loc = ls_ekpo-lgort.
APPEND ls_poitem TO lt_poitem.
ls_poitemx-po_item = ls_poschedule-po_item.
ls_poitemx-po_itemx = 'X'.
ls_poitemx-material = 'X'.
ls_poitemx-plant = 'X'.
ls_poitemx-cmmt_item = 'X'.
ls_poitemx-quantity = 'X'.
ls_poitemx-funds_ctr = 'X'.
ls_poitemx-acctasscat = 'X'.
ls_poitemx-preq_no = 'X'.
ls_poitemx-preq_item = 'X'.
ls_poitemx-trackingno = 'X'.
ls_poitemx-preq_name = 'X'.
ls_poitemx-batch = 'X'.
ls_poitemx-stge_loc = 'X'.
APPEND ls_poitemx TO lt_poitemx.
ls_poaccount-po_item = ls_poschedule-po_item.
ls_poaccount-serial_no = ls_ekkn-zekkn.
ls_poaccount-wbs_element = lv_pspel.
ls_poaccount-cmmt_item = ls_ekkn-fipos.
ls_poaccount-sched_line = 1.
APPEND ls_poaccount TO lt_poaccount.
ls_poaccountx-po_item = ls_poschedule-po_item.
ls_poaccountx-serial_no = ls_ekkn-zekkn.
ls_poaccountx-wbs_element = 'X'.
ls_poaccountx-cmmt_item = 'X'.
ls_poaccountx-sched_line = 'X'.
APPEND ls_poaccountx TO lt_poaccountx.
CLEAR: ls_extensionin.
bapi_te_mepoitem-po_item = ls_poschedule-po_item.
bapi_te_mepoitem-zzcontract = ls_ekpo-zzcontract.
MOVE 'BAPI_TE_MEPOITEM' TO ls_extensionin-structure.
MOVE bapi_te_mepoitem TO ls_extensionin-valuepart1.
APPEND ls_extensionin TO lt_extensionin.
CLEAR: ls_extensionin.
bapi_te_mepoitemx-po_item = ls_poschedule-po_item.
bapi_te_mepoitemx-zzcontract = 'X'.
MOVE 'BAPI_TE_MEPOITEMX' TO ls_extensionin-structure.
MOVE bapi_te_mepoitemx TO ls_extensionin-valuepart1.
APPEND ls_extensionin TO lt_extensionin.
break rstihin.
CALL FUNCTION 'BAPI_PO_CHANGE'
EXPORTING
purchaseorder = id_banfn
poheader = ls_poheader
poheaderx = ls_poheaderx
TABLES
return = lt_bapiret2
poitem = lt_poitem
poitemx = lt_poitemx
poschedule = lt_poschedule
poschedulex = lt_poschedulex
poaccount = lt_poaccount
poaccountx = lt_poaccountx
extensionin = lt_extensionin.
CLEAR: ls_mess.
LOOP AT lt_bapiret2 INTO ls_bapiret2 WHERE type = 'E' OR type = 'A'.
ls_mess-i_msgty = ls_bapiret2-type.
ls_mess-i_text = ls_bapiret2-message.
APPEND ls_mess TO et_messages.
ENDLOOP.
IF sy-subrc = 0.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
LOOP AT lt_bapiret2 INTO ls_bapiret2 WHERE type = 'S'.
ls_mess-i_msgty = ls_bapiret2-type.
ls_mess-i_text = ls_bapiret2-message.
APPEND ls_mess TO et_messages.
ENDLOOP.
ENDIF.
ENDIF.
Фин позцию при добавлении новой (условие IF ix_adrow IS NOT INITIAL) строки не создает. Что можно сделать?