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-POOLSslis,truxs .
*
TYPESBEGIN 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(4TYPE 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.

DATAls_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.

DATAlv_number TYPE bapimereqheader-preq_no,
      lv_num    TYPE i,
      lv_bnfpo  TYPE bnfpo.

DATA:lv_matnr TYPE matnr18.

CONSTANTSlc_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_dataitab_excel.

  LOOP AT it_data INTO DATA(ls_data).
    DATA(wa_datals_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.
    CLEARls_itemswa_data ls_data.

  ENDLOOP.

ENDFORM.
**&---------------------------------------------------------------------*
**&      Form  PR_CREATE
**&---------------------------------------------------------------------*
**       text
**----------------------------------------------------------------------*
FORM pr_create .
  CLEARitab_itemitab_accassignlv_numberlv_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(lenstrlenls_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.
      CLEARwa_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.
      CLEARwa_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.
      CLEARwa_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.
      CLEARwa_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.
      CLEARwa_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.
        CLEARwa_final.
      ENDIF.

      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait 'X'.
    ENDIF.

    CLEARitab_itemitab_accassignitab_returnlv_number,
           itab_pritemitab_pritemxitab_praccountitab_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.
  CLEARwa_fieldcat.

  wa_fieldcat-col_pos 2.
  wa_fieldcat-fieldname 'TYPE'.
  wa_fieldcat-seltext_l 'Type'.
  APPEND wa_fieldcat TO itab_fieldcat.
  CLEARwa_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.
  CLEARwa_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.
  CLEARwa_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

Popular posts from this blog

PO rejection notification & rejection comments for Fiori

FB60 Vendor Invoice Post using BAPI

Service Invoice Upload For FB70 (BAPI)