Anda di halaman 1dari 5

*&---------------------------------------------------------------------*

*& Report ZZ_MS_BAPI_COPY *


*& *
*&---------------------------------------------------------------------*

REPORT zz_ms_bapi_copy.

DATA ls_bapi_view TYPE order_view.


DATA lt_salesdocuments TYPE TABLE OF sales_key.
DATA lt_order_headers_out TYPE TABLE OF bapisdhd.
DATA lt_order_items_out TYPE TABLE OF bapisdit.
DATA lt_order_schedules_out TYPE TABLE OF bapisdhedu.
DATA lt_order_conditions_out TYPE TABLE OF bapisdcond.
DATA lt_order_partners_out TYPE TABLE OF bapisdpart.

DATA: lv_logic_switch TYPE bapisdls.


DATA lv_salesdocument TYPE bapivbeln-vbeln.
DATA lt_return TYPE TABLE OF bapiret2.
DATA lt_order_items_in TYPE TABLE OF bapisditm.
DATA lt_order_schedules_in TYPE TABLE OF bapischdl.
DATA lt_order_partners TYPE TABLE OF bapiparnr.
DATA lt_order_conditions_in TYPE TABLE OF bapicond.

DATA: ls_return TYPE bapiret2.


DATA: ls_header_out TYPE bapisdhd.
DATA ls_order_header_in TYPE bapisdhd1.
DATA: ls_item_out TYPE bapisdit.
DATA: ls_order_items_in TYPE bapisditm.
DATA: ls_order_schedules_in TYPE bapischdl.
DATA: ls_schedules_out TYPE bapisdhedu.
DATA: ls_order_partners_out TYPE bapisdpart.
DATA: ls_order_partners TYPE bapiparnr.
DATA ls_order_conditions_in TYPE bapicond.
DATA: ls_conditions_out TYPE bapisdcond.

PARAMETERS: pa_key TYPE sales_key, "ref_doc


pa_auart TYPE vbak-auart, "doc_type
pa_itmno TYPE vbap-posnr, "itm_number
pa_qty TYPE vbep-wmeng, "Order quantity
pa_prart TYPE kond-knprs, "condition type
pa_purno TYPE vbkd-bstkd. "order number

ls_bapi_view-header = 'X'.
ls_bapi_view-item = 'X'.
ls_bapi_view-sdschedule = 'X'.
ls_bapi_view-sdcond = 'X'.
ls_bapi_view-partner = 'X'.

APPEND pa_key TO lt_salesdocuments.

CALL FUNCTION 'BAPISDORDER_GETDETAILEDLIST'


EXPORTING
i_bapi_view = ls_bapi_view
* I_MEMORY_READ =
TABLES
sales_documents = lt_salesdocuments
order_headers_out = lt_order_headers_out
order_items_out = lt_order_items_out
order_schedules_out = lt_order_schedules_out
* ORDER_BUSINESS_OUT =
order_partners_out = lt_order_partners_out
* ORDER_ADDRESS_OUT =
* ORDER_STATUSHEADERS_OUT =
* ORDER_STATUSITEMS_OUT =
order_conditions_out = lt_order_conditions_out
* ORDER_COND_HEAD =
* ORDER_COND_ITEM =
* ORDER_COND_QTY_SCALE =
* ORDER_COND_VAL_SCALE =
* ORDER_CONTRACTS_OUT =
* ORDER_TEXTHEADERS_OUT =
* ORDER_TEXTLINES_OUT =
* ORDER_FLOWS_OUT =
* ORDER_CFGS_CUREFS_OUT =
* ORDER_CFGS_CUCFGS_OUT =
* ORDER_CFGS_CUINS_OUT =
* ORDER_CFGS_CUPRTS_OUT =
* ORDER_CFGS_CUVALS_OUT =
* ORDER_CFGS_CUBLBS_OUT =
* ORDER_CFGS_CUVKS_OUT =
* ORDER_BILLINGPLANS_OUT =
* ORDER_BILLINGDATES_OUT =
* ORDER_CREDITCARDS_OUT =
* EXTENSIONOUT =
.
************************************************************************
** PREPARE DATA

* fill header data


IF NOT lt_order_headers_out[] IS INITIAL.
READ TABLE lt_order_headers_out INTO ls_header_out INDEX 1.

ls_order_header_in-doc_type = pa_auart.
ls_order_header_in-sales_org = ls_header_out-sales_org.
ls_order_header_in-distr_chan = ls_header_out-distr_chan.
ls_order_header_in-division = ls_header_out-division.
ls_order_header_in-ref_doc = pa_key.
ls_order_header_in-purch_no_c = pa_purno.
ls_order_header_in-refdoc_cat = ls_header_out-sd_doc_cat.
ENDIF.

* fill item data


IF pa_itmno NE 0.
** if itm_number is selected
READ TABLE lt_order_items_out INTO ls_item_out
WITH KEY itm_number = pa_itmno.
IF sy-subrc = 0.
PERFORM add_items.
PERFORM add_schedules.
IF pa_prart CA 'BCG'.
PERFORM add_conditions.
ENDIF.
ENDIF.
ELSE.
** for all items
LOOP AT lt_order_items_out INTO ls_item_out.
PERFORM add_items.
PERFORM add_schedules.
IF pa_prart CA 'BCG'.
PERFORM add_conditions.
ENDIF.
ENDLOOP.

ENDIF.

* fill partner data


READ TABLE lt_order_partners_out INTO ls_order_partners_out
WITH KEY partn_role = 'AG'.
IF sy-subrc = 0.
ls_order_partners-partn_role = 'AG'.
ls_order_partners-partn_numb = ls_order_partners_out-customer.
APPEND ls_order_partners TO lt_order_partners.
ENDIF.

*fill logic switch


lv_logic_switch-pricing = pa_prart.

*** END OF PREPARE DATA


************************************************************************

CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'


EXPORTING
* SALESDOCUMENTIN =
order_header_in = ls_order_header_in
* ORDER_HEADER_INX =
* SENDER =
* BINARY_RELATIONSHIPTYPE =
* INT_NUMBER_ASSIGNMENT =
* BEHAVE_WHEN_ERROR =
logic_switch = lv_logic_switch
* TESTRUN =
* CONVERT = ' '
IMPORTING
salesdocument = lv_salesdocument
TABLES
return = lt_return
order_items_in = lt_order_items_in
* ORDER_ITEMS_INX =
order_partners = lt_order_partners
order_schedules_in = lt_order_schedules_in
* ORDER_SCHEDULES_INX =
order_conditions_in = lt_order_conditions_in
* ORDER_CONDITIONS_INX =
* ORDER_CFGS_REF =
* ORDER_CFGS_INST =
* ORDER_CFGS_PART_OF =
* ORDER_CFGS_VALUE =
* ORDER_CFGS_BLOB =
* ORDER_CFGS_VK =
* ORDER_CFGS_REFINST =
* ORDER_CCARD =
* ORDER_TEXT =
* ORDER_KEYS =
* EXTENSIONIN =
* PARTNERADDRESSES =
.

LOOP AT lt_return INTO ls_return.


WRITE:/ ls_return-type,
ls_return-id,
ls_return-number,
ls_return-message.
ENDLOOP.

IF NOT lv_salesdocument IS INITIAL.


COMMIT WORK.
ENDIF.

*&---------------------------------------------------------------------*
*& Form add_schedules
*&---------------------------------------------------------------------*
FORM add_schedules . "add schedules to item

LOOP AT lt_order_schedules_out INTO ls_schedules_out


WHERE itm_number = ls_item_out-itm_number.
ls_order_schedules_in-itm_number = ls_schedules_out-itm_number.

IF NOT pa_qty IS INITIAL AND NOT ls_schedules_out-req_qty = 0.


ls_order_schedules_in-req_qty = pa_qty.
ELSE.
ls_order_schedules_in-req_qty = ls_schedules_out-req_qty.
ENDIF.

ls_order_schedules_in-sched_line = ls_schedules_out-sched_line.
APPEND ls_order_schedules_in TO lt_order_schedules_in.
ENDLOOP.

IF sy-subrc <> 0.
ls_order_schedules_in-itm_number = ls_item_out-itm_number.
ls_order_schedules_in-sched_line = '001'.
ls_order_schedules_in-req_qty = pa_qty.
APPEND ls_order_schedules_in TO lt_order_schedules_in.
ENDIF.

ENDFORM. " add_schedules


*&---------------------------------------------------------------------*
*& Form add_items
*&---------------------------------------------------------------------*
FORM add_items .

ls_order_items_in-itm_number = ls_item_out-itm_number.
ls_order_items_in-material = ls_item_out-material.
ls_order_items_in-ref_doc = pa_key.
ls_order_items_in-ref_doc_it = ls_item_out-itm_number.
ls_order_items_in-ref_doc_ca = ls_header_out-sd_doc_cat.
APPEND ls_order_items_in TO lt_order_items_in.

ENDFORM. " add_items


*&---------------------------------------------------------------------*
*& Form add_conditions
*&---------------------------------------------------------------------*
FORM add_conditions. " add conditions to item
LOOP AT lt_order_conditions_out INTO ls_conditions_out
WHERE itm_number = ls_item_out-itm_number
AND NOT cond_type IS INITIAL.
CLEAR ls_order_conditions_in.
MOVE-CORRESPONDING ls_conditions_out TO ls_order_conditions_in.
ls_order_conditions_in-cond_unit = ls_conditions_out-cond_d_unt.
ls_order_conditions_in-currency_2 = ls_order_header_in-currency.
APPEND ls_order_conditions_in TO lt_order_conditions_in.
ENDLOOP.

ENDFORM. " add_conditions

Anda mungkin juga menyukai