AUTO STO PO CREATE (ME21N) USING BAPI
*&---------------------------------------------------*
*& Report ZSD_AUTO_STO_CREATE*&---------------------------------------------------*
*& Program : ZSD_AUTO_STO_CREATE
*& Author : King Of ABAP
*& Created on :
*& Requested By :
*& Project :
*& Transport-No :
*& Description : STO PO Creation
*& T-Code :
*&---------------------------------------------------*
REPORT zsd_auto_sto_create.
INCLUDE zsd_auto_sto_create_top.
INCLUDE zsd_auto_sto_create_sel.
INCLUDE zsd_auto_sto_create_f01.
START-OF-SELECTION.
*** Validation For Input Field If PO is alredy exist
IF NOT p_ref IS INITIAL.
SELECT SINGLE * FROM ekko INTO @DATA(ls_ekko)
WHERE verkf EQ @p_ref.
IF NOT ls_ekko-verkf IS INITIAL.
MESSAGE 'PO Already exist for the invoice number' TYPE 'I'.
EXIT.
ENDIF.
ENDIF.
PERFORM get_data.
PERFORM display_data.
*&---------------------------------------------------------------------*
*& Include ZSD_AUTO_STO_CREATE_TOP
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_alv,
sno TYPE i,
po_no TYPE ebeln,
type TYPE bapi_mtype,
message TYPE bapi_msg,
END OF ty_alv.
DATA: gt_alv TYPE STANDARD TABLE OF ty_alv,
gs_alv TYPE ty_alv.
*& Include ZSD_AUTO_STO_CREATE_TOP
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_alv,
sno TYPE i,
po_no TYPE ebeln,
type TYPE bapi_mtype,
message TYPE bapi_msg,
END OF ty_alv.
DATA: gt_alv TYPE STANDARD TABLE OF ty_alv,
gs_alv TYPE ty_alv.
*&---------------------------------------------------------------------*
*& Include ZSD_AUTO_STO_CREATE_SEL
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_ref TYPE vbkd-bstkd OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
*& Include ZSD_AUTO_STO_CREATE_SEL
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS: p_ref TYPE vbkd-bstkd OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
*&---------------------------------------------------------------------*
*& Include ZSD_AUTO_STO_CREATE_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
FORM get_data .
** Fill Header Declaration
DATA: ls_poheader TYPE bapimepoheader,
ls_poheaderx TYPE bapimepoheaderx.
*** Address Data Declaration
DATA:ls_address TYPE bapimepoaddrvendor.
*** Item Level Data Declaration
DATA: lt_poitem TYPE STANDARD TABLE OF bapimepoitem,
ls_poitem TYPE bapimepoitem,
lt_poitemx TYPE STANDARD TABLE OF bapimepoitemx,
ls_poitemx TYPE bapimepoitemx.
*** Schedule Declarations
DATA: lt_poschedule TYPE STANDARD TABLE OF bapimeposchedule,
ls_poschedule TYPE bapimeposchedule,
lt_poschedulex TYPE STANDARD TABLE OF bapimeposchedulx,
ls_poschedulex TYPE bapimeposchedulx.
*** Return Declarations
DATA:lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2.
*** PO Number Declaration
DATA:lv_po TYPE bapimepoheader-po_number.
DATA: lv_ebelp TYPE ebelp.
IF p_ref IS NOT INITIAL.
SELECT * FROM vbkd INTO TABLE @DATA(lt_vbkd)
WHERE bstkd EQ @p_ref.
ENDIF.
IF lt_vbkd IS NOT INITIAL.
SELECT * FROM vbap INTO TABLE @DATA(lt_vbap)
FOR ALL ENTRIES IN @lt_vbkd
WHERE vbeln EQ @lt_vbkd-vbeln.
ENDIF.
*** Get Address Details
IF lt_vbkd IS NOT INITIAL.
SELECT * FROM vbpa INTO TABLE @DATA(lt_vbpa)
FOR ALL ENTRIES IN @lt_vbkd
WHERE vbeln EQ @lt_vbkd-vbeln
AND parvw EQ 'WE'.
ENDIF.
LOOP AT lt_vbkd INTO DATA(ls_vbkd).
LOOP AT lt_vbap INTO DATA(ls_vbap).
ls_poheader-doc_type = 'ZEST'.
ls_poheader-suppl_plnt = ls_vbap-zz1_werks_sdi.
ls_poheader-purch_org = '****'.
ls_poheader-pur_group = 'P16'.
ls_poheader-comp_code = '****'.
ls_poheader-sales_pers = p_ref.
ls_poheader-our_ref = ls_vbap-vbeln.
ls_poheaderx-doc_type = abap_true.
ls_poheaderx-suppl_plnt = abap_true.
ls_poheaderx-purch_org = abap_true.
ls_poheaderx-pur_group = abap_true.
ls_poheaderx-comp_code = abap_true.
ls_poheaderx-sales_pers = abap_true.
ls_poheaderx-our_ref = abap_true.
lv_ebelp = lv_ebelp + 10.
ls_poitem-po_item = lv_ebelp.
ls_poitem-material = |{ ls_vbap-matnr ALPHA = IN }|.
ls_poitem-plant = ls_vbap-werks.
ls_poitem-quantity = ls_vbap-kwmeng.
ls_poitem-stge_loc = '1000'.
APPEND ls_poitem TO lt_poitem.
CLEAR:ls_poitem.
*** Flag Set
ls_poitemx-po_item = lv_ebelp.
ls_poitemx-po_itemx = abap_true.
ls_poitemx-material = abap_true.
ls_poitemx-quantity = abap_true.
ls_poitemx-plant = abap_true.
ls_poitemx-stge_loc = abap_true.
APPEND ls_poitemx TO lt_poitemx.
CLEAR:ls_poitemx.
**** po schedule
ls_poschedule-po_item = lv_ebelp .
ls_poschedule-quantity = ls_vbap-kwmeng.
ls_poschedule-delivery_date = sy-datum.
APPEND ls_poschedule TO lt_poschedule.
CLEAR:ls_poschedule.
*** Flag Set
ls_poschedulex-po_item = lv_ebelp .
ls_poschedulex-po_itemx = abap_true.
ls_poschedulex-delivery_date = abap_true.
ls_poschedulex-quantity = abap_true.
APPEND ls_poschedulex TO lt_poschedulex.
CLEAR:ls_poschedulex.
ENDLOOP.
ENDLOOP.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = ls_poheader
poheaderx = ls_poheaderx
IMPORTING
exppurchaseorder = lv_po
TABLES
return = lt_return
poitem = lt_poitem
poitemx = lt_poitemx
poschedule = lt_poschedule
poschedulex = lt_poschedulex.
DELETE lt_return WHERE type = 'W'.
DELETE lt_return WHERE type = 'I'.
READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
IF sy-subrc EQ 0.
LOOP AT lt_return INTO ls_return WHERE type = 'E'.
gs_Alv-sno = gs_Alv-sno + 1.
gs_alv-type = 'E'.
gs_alv-message = ls_return-message.
APPEND gs_alv TO gt_alv.
CLEAR:gs_alv.
ENDLOOP.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
LOOP AT lt_return INTO ls_return WHERE type = 'S'.
gs_Alv-sno = gs_Alv-sno + 1.
gs_alv-po_no = lv_po.
gs_alv-type = 'S'.
gs_alv-message = ls_return-message.
APPEND gs_alv TO gt_alv.
CLEAR:gs_alv.
ENDLOOP.
CLEAR:lt_return,lt_poitem,lt_poitemx,lt_poschedule,lt_poschedulex,lt_vbap.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
FORM display_data .
TYPE-POOLS:
slis.
DATA:
ls_fieldcat TYPE slis_fieldcat_alv,
ls_layout TYPE slis_layout_alv.
DATA:
lt_fieldcat TYPE slis_t_fieldcat_alv.
DATA:
lv_program TYPE sy-repid.
IF gt_alv IS NOT INITIAL.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'SNO'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Serial Number'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'po_no'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'PO Number'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'TYPE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'STATUS'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MESSAGE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Message'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_layout.
ls_layout-colwidth_optimize = 'X'.
ls_layout-zebra = 'X'.
lv_program = sy-repid.
* Display The Final Display
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = lv_program
is_layout = ls_layout
it_fieldcat = lt_fieldcat
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
ELSE.
MESSAGE 'No Errors Found' TYPE 'I'.
ENDIF.
ENDFORM.
*& Include ZSD_AUTO_STO_CREATE_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
FORM get_data .
** Fill Header Declaration
DATA: ls_poheader TYPE bapimepoheader,
ls_poheaderx TYPE bapimepoheaderx.
*** Address Data Declaration
DATA:ls_address TYPE bapimepoaddrvendor.
*** Item Level Data Declaration
DATA: lt_poitem TYPE STANDARD TABLE OF bapimepoitem,
ls_poitem TYPE bapimepoitem,
lt_poitemx TYPE STANDARD TABLE OF bapimepoitemx,
ls_poitemx TYPE bapimepoitemx.
*** Schedule Declarations
DATA: lt_poschedule TYPE STANDARD TABLE OF bapimeposchedule,
ls_poschedule TYPE bapimeposchedule,
lt_poschedulex TYPE STANDARD TABLE OF bapimeposchedulx,
ls_poschedulex TYPE bapimeposchedulx.
*** Return Declarations
DATA:lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2.
*** PO Number Declaration
DATA:lv_po TYPE bapimepoheader-po_number.
DATA: lv_ebelp TYPE ebelp.
IF p_ref IS NOT INITIAL.
SELECT * FROM vbkd INTO TABLE @DATA(lt_vbkd)
WHERE bstkd EQ @p_ref.
ENDIF.
IF lt_vbkd IS NOT INITIAL.
SELECT * FROM vbap INTO TABLE @DATA(lt_vbap)
FOR ALL ENTRIES IN @lt_vbkd
WHERE vbeln EQ @lt_vbkd-vbeln.
ENDIF.
*** Get Address Details
IF lt_vbkd IS NOT INITIAL.
SELECT * FROM vbpa INTO TABLE @DATA(lt_vbpa)
FOR ALL ENTRIES IN @lt_vbkd
WHERE vbeln EQ @lt_vbkd-vbeln
AND parvw EQ 'WE'.
ENDIF.
LOOP AT lt_vbkd INTO DATA(ls_vbkd).
LOOP AT lt_vbap INTO DATA(ls_vbap).
ls_poheader-doc_type = 'ZEST'.
ls_poheader-suppl_plnt = ls_vbap-zz1_werks_sdi.
ls_poheader-purch_org = '****'.
ls_poheader-pur_group = 'P16'.
ls_poheader-comp_code = '****'.
ls_poheader-sales_pers = p_ref.
ls_poheader-our_ref = ls_vbap-vbeln.
ls_poheaderx-doc_type = abap_true.
ls_poheaderx-suppl_plnt = abap_true.
ls_poheaderx-purch_org = abap_true.
ls_poheaderx-pur_group = abap_true.
ls_poheaderx-comp_code = abap_true.
ls_poheaderx-sales_pers = abap_true.
ls_poheaderx-our_ref = abap_true.
lv_ebelp = lv_ebelp + 10.
ls_poitem-po_item = lv_ebelp.
ls_poitem-material = |{ ls_vbap-matnr ALPHA = IN }|.
ls_poitem-plant = ls_vbap-werks.
ls_poitem-quantity = ls_vbap-kwmeng.
ls_poitem-stge_loc = '1000'.
APPEND ls_poitem TO lt_poitem.
CLEAR:ls_poitem.
*** Flag Set
ls_poitemx-po_item = lv_ebelp.
ls_poitemx-po_itemx = abap_true.
ls_poitemx-material = abap_true.
ls_poitemx-quantity = abap_true.
ls_poitemx-plant = abap_true.
ls_poitemx-stge_loc = abap_true.
APPEND ls_poitemx TO lt_poitemx.
CLEAR:ls_poitemx.
**** po schedule
ls_poschedule-po_item = lv_ebelp .
ls_poschedule-quantity = ls_vbap-kwmeng.
ls_poschedule-delivery_date = sy-datum.
APPEND ls_poschedule TO lt_poschedule.
CLEAR:ls_poschedule.
*** Flag Set
ls_poschedulex-po_item = lv_ebelp .
ls_poschedulex-po_itemx = abap_true.
ls_poschedulex-delivery_date = abap_true.
ls_poschedulex-quantity = abap_true.
APPEND ls_poschedulex TO lt_poschedulex.
CLEAR:ls_poschedulex.
ENDLOOP.
ENDLOOP.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = ls_poheader
poheaderx = ls_poheaderx
IMPORTING
exppurchaseorder = lv_po
TABLES
return = lt_return
poitem = lt_poitem
poitemx = lt_poitemx
poschedule = lt_poschedule
poschedulex = lt_poschedulex.
DELETE lt_return WHERE type = 'W'.
DELETE lt_return WHERE type = 'I'.
READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
IF sy-subrc EQ 0.
LOOP AT lt_return INTO ls_return WHERE type = 'E'.
gs_Alv-sno = gs_Alv-sno + 1.
gs_alv-type = 'E'.
gs_alv-message = ls_return-message.
APPEND gs_alv TO gt_alv.
CLEAR:gs_alv.
ENDLOOP.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
LOOP AT lt_return INTO ls_return WHERE type = 'S'.
gs_Alv-sno = gs_Alv-sno + 1.
gs_alv-po_no = lv_po.
gs_alv-type = 'S'.
gs_alv-message = ls_return-message.
APPEND gs_alv TO gt_alv.
CLEAR:gs_alv.
ENDLOOP.
CLEAR:lt_return,lt_poitem,lt_poitemx,lt_poschedule,lt_poschedulex,lt_vbap.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
FORM display_data .
TYPE-POOLS:
slis.
DATA:
ls_fieldcat TYPE slis_fieldcat_alv,
ls_layout TYPE slis_layout_alv.
DATA:
lt_fieldcat TYPE slis_t_fieldcat_alv.
DATA:
lv_program TYPE sy-repid.
IF gt_alv IS NOT INITIAL.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'SNO'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Serial Number'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'po_no'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'PO Number'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'TYPE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'STATUS'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'MESSAGE'.
ls_fieldcat-tabname = 'GT_ALV'.
ls_fieldcat-seltext_m = 'Message'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_layout.
ls_layout-colwidth_optimize = 'X'.
ls_layout-zebra = 'X'.
lv_program = sy-repid.
* Display The Final Display
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = lv_program
is_layout = ls_layout
it_fieldcat = lt_fieldcat
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
ELSE.
MESSAGE 'No Errors Found' TYPE 'I'.
ENDIF.
ENDFORM.
Comments
Post a Comment