AUTO PR CREATE (ME51N) Using BAPI
*&---------------------------------------------------------------------*
*& Report : ZMM_AUTO_PR_CREATE
*& Author : King Of ABAP'r
*& Progam : PR creation
*& DATE : 2022
*&---------------------------------------------------------------------*
REPORT zmm_auto_pr_create.
TYPE-POOLS: slis,truxs .
*
TYPES: BEGIN OF ty_data,
sno(4) TYPE c, "serial Number
bsart TYPE bbsrt, "Document type
bnfpo TYPE bnfpo, "Item number of purchase requisition
knttp TYPE knttp, "Account assignment category
matnr TYPE matnr, "Material
qty TYPE bamng, "Qty
uom TYPE meins, "Unit
werks TYPE ewerk, "Plant
lgort TYPE lgort_d, "Storage Loc
purch_org TYPE ekorg, "Purchasing Organization
pur_group TYPE ekgrp, "Purchasing Group
preq_name TYPE afnam, "Requisitioner Name
trackingno TYPE bednr, "Tracking Number
vbeln TYPE vbeln, "Sales order
vbelp TYPE posnr_va, "Item
lfdat TYPE eindt,
prio_req TYPE prio_req,
preq_price TYPE bapicurext,
currency TYPE waers,
END OF ty_data,
BEGIN OF ty_hdr,
sno(4) TYPE c, "serial Number
bsart TYPE bbsrt, "Document type
END OF ty_hdr,
BEGIN OF ty_item,
sno(4) TYPE c, "serial Number
bnfpo TYPE bnfpo, "Item number of purchase requisition
knttp TYPE knttp, "Account assignment category
matnr TYPE matnr, "Material
qty TYPE bamng, "Qty
uom TYPE meins, "Unit
werks TYPE ewerk, "Plant
lgort TYPE lgort_d, "Storage Loc
purch_org TYPE ekorg, "Purchasing Organization
pur_group TYPE ekgrp, "Purchasing Group
preq_name TYPE afnam, "Requisitioner Name
trackingno TYPE bednr, "Tracking Number
vbeln TYPE vbeln, "Sales order
vbelp TYPE posnr_va, "Item
lfdat TYPE eindt,
prio_req TYPE prio_req,
preq_price TYPE bapicurext,
currency TYPE waers,
END OF ty_item,
BEGIN OF ty_final,
sno(4) TYPE c, "serial Number
type TYPE char1,
banfn TYPE banfn,
message TYPE bapi_msg,
END OF ty_final.
DATA: ls_hdr TYPE ty_hdr,
lt_hdr TYPE STANDARD TABLE OF ty_hdr,
lt_items TYPE STANDARD TABLE OF ty_item,
ls_items TYPE ty_item.
DATA : itab_type TYPE truxs_t_text_data,
itab_excel TYPE STANDARD TABLE OF ty_data,
gs_excel TYPE ty_data,
itab_final TYPE STANDARD TABLE OF ty_final,
itab_item TYPE STANDARD TABLE OF bapiebanc,
itab_accassign TYPE STANDARD TABLE OF bapiebkn,
itab_return TYPE STANDARD TABLE OF bapiret2,
itab_prheader TYPE STANDARD TABLE OF bapimereqheader,
itab_prheaderx TYPE STANDARD TABLE OF bapimereqheaderx,
itab_pritem TYPE STANDARD TABLE OF bapimereqitemimp,
itab_pritemx TYPE STANDARD TABLE OF bapimereqitemx,
itab_praccount TYPE STANDARD TABLE OF bapimereqaccount,
itab_praccountx TYPE STANDARD TABLE OF bapimereqaccountx,
itab_fieldcat TYPE slis_t_fieldcat_alv,
wa_prheader LIKE bapimereqheader,
wa_prheaderx LIKE bapimereqheaderx,
wa_pritem TYPE bapimereqitemimp,
wa_pritemx TYPE bapimereqitemx,
wa_praccount TYPE bapimereqaccount,
wa_praccountx TYPE bapimereqaccountx,
wa_fieldcat TYPE slis_fieldcat_alv,
wa_layout TYPE slis_layout_alv,
wa_excel TYPE ty_data,
wa_final TYPE ty_final,
wa_item TYPE bapiebanc,
wa_accassign TYPE bapiebkn,
wa_return TYPE bapiret2.
DATA: lv_number TYPE bapimereqheader-preq_no,
lv_num TYPE i,
lv_bnfpo TYPE bnfpo.
DATA:lv_matnr TYPE matnr18.
CONSTANTS: lc_e TYPE char1 VALUE 'E',
lc_s TYPE char1 VALUE 'S'.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS : p_file TYPE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
IMPORTING
file_name = p_file.
START-OF-SELECTION.
IF p_file IS NOT INITIAL.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_line_header = 'X'
i_tab_raw_data = itab_type
i_filename = p_file
TABLES
i_tab_converted_data = itab_excel
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ELSE.
MESSAGE 'Please provide the filename' TYPE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
PERFORM process_data.
PERFORM pr_create.
PERFORM display.
*&---------------------------------------------------------------------*
*& Form process_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM process_data .
DATA(it_data) = itab_excel.
LOOP AT it_data INTO DATA(ls_data).
DATA(wa_data) = ls_data.
AT NEW sno.
ls_hdr-sno = wa_data-sno.
ls_hdr-bsart = wa_data-bsart.
APPEND ls_hdr TO lt_hdr.
CLEAR ls_hdr.
ENDAT.
ls_items-sno = wa_data-sno.
ls_items-bnfpo = wa_data-bnfpo.
ls_items-knttp = wa_data-knttp.
ls_items-matnr = wa_data-matnr.
ls_items-qty = wa_data-qty.
ls_items-uom = wa_data-uom.
ls_items-werks = wa_data-werks.
ls_items-lgort = wa_data-lgort.
ls_items-purch_org = wa_data-purch_org.
ls_items-pur_group = wa_data-pur_group.
ls_items-preq_name = wa_data-preq_name.
ls_items-trackingno = wa_data-trackingno.
ls_items-vbeln = wa_data-vbeln.
ls_items-vbelp = wa_data-vbelp.
ls_items-lfdat = wa_data-lfdat.
ls_items-prio_req = wa_data-prio_req.
ls_items-preq_price = wa_data-preq_price.
ls_items-currency = wa_data-currency.
APPEND ls_items TO lt_items.
CLEAR: ls_items, wa_data , ls_data.
ENDLOOP.
ENDFORM.
**&---------------------------------------------------------------------*
**& Form PR_CREATE
**&---------------------------------------------------------------------*
** text
**----------------------------------------------------------------------*
FORM pr_create .
CLEAR: itab_item, itab_accassign, lv_number, lv_num.
LOOP AT lt_hdr INTO DATA(wa_hdr).
wa_prheader-pr_type = wa_hdr-bsart.
APPEND wa_prheader TO itab_prheader.
wa_prheaderx-pr_type = abap_true.
APPEND wa_prheaderx TO itab_prheaderx.
LOOP AT lt_items INTO ls_items WHERE sno = wa_hdr-sno.
** Display Item Details
lv_bnfpo = lv_bnfpo + 10.
wa_pritem-preq_item = lv_bnfpo. "'00010'.
wa_pritem-pur_group = ls_items-pur_group.
DATA(len) = strlen( ls_items-matnr ).
IF len LE '18'.
lv_matnr = ls_items-matnr.
lv_matnr = |{ lv_matnr ALPHA = IN }| .
ls_items-matnr = lv_matnr.
wa_pritem-material_long = ls_items-matnr.
ELSE.
wa_pritem-material_long = ls_items-matnr.
ENDIF.
wa_pritem-plant = ls_items-werks.
wa_pritem-store_loc = ls_items-lgort.
wa_pritem-trackingno = ls_items-trackingno.
wa_pritem-quantity = ls_items-qty.
wa_pritem-unit = ls_items-uom.
wa_pritem-deliv_date = ls_items-lfdat.
wa_pritem-purch_org = ls_items-purch_org.
wa_pritem-prio_requirement = ls_items-prio_req.
wa_pritem-acctasscat = ls_items-knttp.
wa_pritem-preq_price = ls_items-preq_price.
wa_pritem-currency = ls_items-currency.
wa_pritem-preq_name = ls_items-preq_name.
APPEND wa_pritem TO itab_pritem.
CLEAR: wa_pritem.
wa_pritemx-preq_item = lv_bnfpo. "'00010'.
wa_pritemx-pur_group = abap_true.
wa_pritemx-material_long = abap_true.
wa_pritemx-plant = abap_true.
wa_pritemx-store_loc = abap_true.
wa_pritemx-trackingno = abap_true.
wa_pritemx-quantity = abap_true.
wa_pritemx-unit = abap_true.
wa_pritemx-deliv_date = abap_true.
wa_pritemx-purch_org = abap_true.
wa_pritemx-prio_requirement = abap_true.
wa_pritemx-acctasscat = abap_true.
wa_pritemx-preq_price = abap_true.
wa_pritemx-currency = abap_true.
wa_pritemx-preq_name = abap_true.
APPEND wa_pritemx TO itab_pritemx.
CLEAR: wa_pritemx.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = ls_items-vbeln
IMPORTING
output = ls_items-vbeln.
wa_praccount-preq_item = lv_bnfpo. "'00010'.
wa_praccount-serial_no = '01'.
wa_praccount-sd_doc = ls_items-vbeln.
wa_praccount-itm_number = ls_items-vbelp.
APPEND wa_praccount TO itab_praccount.
CLEAR: wa_praccount.
wa_praccountx-preq_item = lv_bnfpo. "'00010'.
wa_praccountx-serial_no = '01'.
wa_praccountx-sd_doc = abap_true.
wa_praccountx-itm_number = abap_true.
APPEND wa_praccountx TO itab_praccountx.
CLEAR: wa_praccountx.
ENDLOOP.
CALL FUNCTION 'BAPI_PR_CREATE'
EXPORTING
prheader = wa_prheader
prheaderx = wa_prheaderx
IMPORTING
number = lv_number
TABLES
return = itab_return
pritem = itab_pritem
pritemx = itab_pritemx
praccount = itab_praccount
praccountx = itab_praccountx.
READ TABLE itab_return INTO wa_return WITH KEY type = lc_e.
IF sy-subrc = 0.
lv_num = lv_num + 1.
wa_final-sno = lv_num.
wa_final-type = wa_return-type.
wa_final-banfn = lv_number.
wa_final-message = wa_return-message.
APPEND wa_final TO itab_final.
CLEAR: wa_final.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
READ TABLE itab_return INTO wa_return WITH KEY number = '402'
type = lc_s.
IF sy-subrc = 0.
lv_num = lv_num + 1.
wa_final-sno = lv_num.
wa_final-type = wa_return-type.
wa_final-banfn = lv_number.
wa_final-message = wa_return-message.
APPEND wa_final TO itab_final.
CLEAR: wa_final.
ENDIF.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
CLEAR: itab_item, itab_accassign, itab_return, lv_number,
itab_pritem, itab_pritemx, itab_praccount, itab_praccountx,
wa_prheader,wa_prheaderx.
ENDLOOP.
ENDFORM. " PR_CREATE
*&---------------------------------------------------------------------*
*& Form DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM display .
wa_fieldcat-col_pos = 1.
wa_fieldcat-fieldname = 'SNO'.
wa_fieldcat-seltext_l = 'SNO'.
APPEND wa_fieldcat TO itab_fieldcat.
CLEAR: wa_fieldcat.
wa_fieldcat-col_pos = 2.
wa_fieldcat-fieldname = 'TYPE'.
wa_fieldcat-seltext_l = 'Type'.
APPEND wa_fieldcat TO itab_fieldcat.
CLEAR: wa_fieldcat.
wa_fieldcat-col_pos = 3.
wa_fieldcat-fieldname = 'BANFN'.
wa_fieldcat-seltext_l = 'PR Number'.
wa_fieldcat-outputlen = 10.
APPEND wa_fieldcat TO itab_fieldcat.
CLEAR: wa_fieldcat.
wa_fieldcat-col_pos = 4.
wa_fieldcat-fieldname = 'MESSAGE'.
wa_fieldcat-seltext_l = 'Message'.
wa_fieldcat-outputlen = 100.
APPEND wa_fieldcat TO itab_fieldcat.
CLEAR: wa_fieldcat.
wa_layout-colwidth_optimize = abap_true.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
is_layout = wa_layout
it_fieldcat = itab_fieldcat
TABLES
t_outtab = itab_final
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'No Data found' TYPE 'E'.
ENDIF.
ENDFORM. " DISPLAY
Comments
Post a Comment