Material PR Creation & Service PR Creation (ME51N) Using BAPI





*----------------------------------------------------------------------*
** Program Name   :  ZMM_AUTO_SERVICE_CREATE
** Description    :  Service & Material PR Uploa
** Created on     :  2024 
** Requestor      :  Functional Consultant
** Transport-No   :  1234567890
*----------------------------------------------------------------------*
REPORT zmm_auto_service_create.

TYPE-POOLSslis,truxs .
TABLESsscrfields.

TYPESBEGIN OF ty_data,
         s_no         TYPE i,
         knttp        TYPE knttp,         "Account assignment category
         pstyp        TYPE pstyp,         "Item category
         header_text  TYPE string,        "" header text
         bnfpo        TYPE bnfpo,         "Item number of purchase requisition
         short_text   TYPE txz01,          "" short text
         dev_date     TYPE eindt,         " delivery date
         mat_grp      TYPE matkl,         " material group
         plant        TYPE ewerk,         " plant
         pur_grp      TYPE ekgrp,         " purchase group
         name_req     TYPE afnam,         ""  name
         track_no     TYPE bednr,         "" tracking no
         pur_org      TYPE ekorg,         "" purchase org
         item_text    TYPE string,        "" item text
         service_line TYPE extrow,        "" service line
         service_no   TYPE srvpos,         " service no
         menge        TYPE mengev,        " quantity
         gross_amount TYPE sbrtwr,        " gross amount
         wbs_element  TYPE ps_posid,      " wbs element
         cost_center  TYPE kostl,
       END OF ty_data.

TYPES BEGIN OF ty_data1,
          s_no         TYPE i,
          doc_type     TYPE bsart,
          knttp        TYPE knttp,         "Account assignment category
          header_text  TYPE string,        "" header text
          bnfpo        TYPE bnfpo,         "Item number of purchase requisition
          material     TYPE matnr,         " MATERIAL
          short_text   TYPE txz01,          "" short text
          qty          TYPE mengev,       ""QUALITY
          uom          TYPE meins,         " MEASURE OF UNIT
          dev_date     TYPE eindt,         " delivery date
          preq_price   TYPE sbrtwr,
          mat_grp      TYPE matkl,         " material group
          plant        TYPE ewerk,         " plant
          sto_loc      TYPE lgort_d,         " plant
          pur_grp      TYPE ekgrp,         " purchase group
          pur_org      TYPE ekorg,         "" purchase org
          item_text    TYPE string,        "" item text
*          service_line TYPE extrow,        "" service line
          menge        TYPE mengev,        " quantity
          gross_amount TYPE sbrtwr,        " gross amount
          cost_center  TYPE kostl,
        END OF ty_data1.

TYPESBEGIN OF ty_final,
         sno        TYPE i,
         type       TYPE char1,
         number(10TYPE c,
         banfn      TYPE banfn,
         message    TYPE bapi_msg,
       END OF ty_final.

DATAgtab_excel TYPE STANDARD TABLE OF ty_data1,
      stab_excel TYPE ty_data1.

DATAitab_final TYPE STANDARD TABLE OF ty_final,
      wa_final   TYPE ty_final.
DATA:
  gs_header       TYPE  bapimereqheader,
  gs_headerx      TYPE bapimereqheaderx,
  gt_item         TYPE TABLE OF bapimereqitemimp,
  gs_item         LIKE  gt_item,
  gt_itemx        TYPE TABLE OF bapimereqitemx,
  gs_itemx        TYPE bapimereqitemx,
  gt_account      TYPE TABLE OF bapimereqaccount,
  gs_account      TYPE bapimereqaccount,
  gt_accountx     TYPE TABLE OF bapimereqaccountx,
  gs_accountx     TYPE  bapimereqaccountx,
  gt_service      TYPE TABLE OF bapi_srv_service_line,
  gs_service      TYPE bapi_srv_service_line,
  gt_servicex     TYPE TABLE OF bapi_srv_service_linex,
  gs_servicex     TYPE  bapi_srv_service_linex,
  gt_service_acc  TYPE TABLE OF bapi_srv_acc_data,
  gs_service_acc  TYPE  bapi_srv_acc_data,
  gt_service_accx TYPE TABLE OF  bapi_srv_acc_datax,
  gs_service_accx TYPE  bapi_srv_acc_datax,
  gt_return       TYPE TABLE OF bapiret2,
  gs_return       TYPE bapiret2,
  gt_header_text  TYPE TABLE OF bapimereqitemtext,
  gt_item_text    TYPE TABLE OF bapimereqheadtext.


DATAgs_header1       TYPE  bapimereqheader,
      gs_headerx1      TYPE bapimereqheaderx,
      gt_item1         TYPE TABLE OF bapimereqitemimp,
      gt_itemx1        TYPE TABLE OF bapimereqitemx,
      gt_account1      TYPE TABLE OF bapimereqaccount,
      gt_accountx1     TYPE TABLE OF bapimereqaccountx,
      gt_service1      TYPE TABLE OF bapi_srv_service_line,
      gt_servicex1     TYPE TABLE OF bapi_srv_service_linex,
      gt_service_acc1  TYPE TABLE OF bapi_srv_acc_data,
      gt_service_accx1 TYPE TABLE OF  bapi_srv_acc_datax,
      gt_return1       TYPE TABLE OF bapiret2,
      gs_return1       TYPE bapiret2,
      gt_item_text1    TYPE TABLE OF bapimereqheadtext,
      gt_header_text1  TYPE TABLE OF bapimereqitemtext.

DATAgt_account2  TYPE TABLE OF bapimereqaccount,
      gt_accountx2 TYPE TABLE OF bapimereqaccountx.

DATA itab_type  TYPE truxs_t_text_data,
       itab_excel TYPE STANDARD TABLE OF ty_data.
CONSTANTSlc_e TYPE char1 VALUE 'E',
           lc_s TYPE char1 VALUE 'S'.
DATAlv_number  TYPE bapimereqheader-preq_no,
      lv_number1 TYPE bapimereqheader-preq_no,
      lv_num     TYPE i,
      lv_bnfpo   TYPE bnfpo,
      lv_item    TYPE ebelp.
DATA:  wa_excel     TYPE ty_data.
DATAitab_fieldcat TYPE slis_t_fieldcat_alv,
      wa_fieldcat   TYPE slis_fieldcat_alv,
      wa_layout     TYPE slis_layout_alv.
***Excel File Dowload Button
DATAh_excel TYPE ole2_object" Excel object
      h_mapl  TYPE ole2_object" list of workbooks
      h_map   TYPE ole2_object" workbook
      h_zl    TYPE ole2_object" cell
      h_f     TYPE ole2_object" font


DATAsl_no TYPE VALUE 1.
DATAno TYPE i.
DATApckg_no      TYPE VALUE 1,
      line_no      TYPE i,
      sub_pckg     TYPE VALUE 1,
      sub_pckg1    TYPE VALUE 3,
      serv_pckg_no TYPE i,
      serv_line_no TYPE i,
      ser_no       TYPE i.
DATAbanfo TYPE i.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS p_file TYPE rlgrap-filename" OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-002.
  PARAMETERS p_file1 TYPE rlgrap-filename" OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE TEXT-003.
  SELECTION-SCREENPUSHBUTTON 2(60cmdgen USER-COMMAND a_gen VISIBLE LENGTH 20.
SELECTION-SCREEN END OF BLOCK b3.

SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME TITLE TEXT-004.
  SELECTION-SCREENPUSHBUTTON 2(60cmdgen1 USER-COMMAND a_gen1 VISIBLE LENGTH 20.
SELECTION-SCREEN END OF BLOCK b4.

INITIALIZATION.
  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      name   icon_xxl
      text   'Generate Template'
      info   'Generate Excel File Template'
    IMPORTING
      result cmdgen
    EXCEPTIONS
      OTHERS 0.

  CALL FUNCTION 'ICON_CREATE'
    EXPORTING
      name   icon_xxl
      text   'Generate Template1'
      info   'Generate Excel File Template'
    IMPORTING
      result cmdgen1
    EXCEPTIONS
      OTHERS 0.

AT SELECTION-SCREEN.
  CASE sscrfields.
    WHEN 'A_GEN'.
      PERFORM generate_template.
    WHEN 'A_GEN1'.
      PERFORM generate_template1.
  ENDCASE.

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.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file1.
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  syst-cprog
      dynpro_number syst-dynnr
    IMPORTING
      file_name     p_file1.

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.

  ELSEIF p_file1 IS NOT INITIAL.

    CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
      EXPORTING
        i_line_header        'X'
        i_tab_raw_data       itab_type
        i_filename           p_file1
      TABLES
        i_tab_converted_data gtab_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.

  IF p_file1 IS NOT INITIAL.
    PERFORM material_pr_create.

  ELSEIF p_file IS NOT INITIAL.
    PERFORM service_pr_create.
  ENDIF.

  PERFORM display.
*&---------------------------------------------------------------------*
*& Form service_pr_create
*&---------------------------------------------------------------------*
FORM service_pr_create .

  IF NOT itab_excel IS INITIAL.
    DATA(it_itemitab_excel.
    DATA(it_item1itab_excel.
    DELETE ADJACENT DUPLICATES FROM it_item COMPARING s_no.
    DELETE ADJACENT DUPLICATES FROM itab_excel COMPARING s_no bnfpo.

    LOOP AT it_item INTO DATA(ls_item).

      line_no line_no + 1.
      serv_line_no serv_line_no + 1.
      LOOP AT itab_excel INTO DATA(wa_excelWHERE s_no ls_item-s_no .
        banfo banfo + 10.
        APPEND INITIAL LINE TO gt_item ASSIGNING FIELD-SYMBOL(<gs_item>).

        <gs_item>-preq_item         wa_excel-bnfpo .
        <gs_item>-pur_group         wa_excel-pur_grp.
        <gs_item>-preq_name         wa_excel-name_req.
        <gs_item>-short_text        wa_excel-short_text.
        <gs_item>-plant             wa_excel-plant.
        <gs_item>-trackingno        wa_excel-track_no.
        <gs_item>-matl_group        wa_excel-mat_grp.
*        wa_excel-service_no         =  |{ <wa_excel>-service_no ALPHA = IN }|.
        PERFORM convert_date USING wa_excel-dev_date.
        <gs_item>-deliv_date        wa_excel-dev_date.
        IF wa_excel-pstyp 'D'.
          <gs_item>-item_cat          '9'.
        ENDIF.
        <gs_item>-acctasscat        wa_excel-knttp.
        <gs_item>-purch_org         wa_excel-pur_org.
        <gs_item>-pckg_no           sl_no.

        APPEND INITIAL LINE TO gt_itemx ASSIGNING FIELD-SYMBOL(<gs_itemx>).

        <gs_itemx>-preq_item        =  wa_excel-bnfpo .
        <gs_itemx>-preq_itemx       =  abap_true.
        <gs_itemx>-pur_group        abap_true.
        <gs_itemx>-preq_name        abap_true.
        <gs_itemx>-material        abap_true.
        <gs_itemx>-short_text       abap_true.
        <gs_itemx>-unit             abap_true.
        <gs_itemx>-plant            abap_true.
        <gs_itemx>-trackingno       abap_true.
        <gs_itemx>-matl_group       abap_true.
        <gs_itemx>-deliv_date       abap_true.
        <gs_itemx>-item_cat         abap_true.
        <gs_itemx>-acctasscat       abap_true.
        <gs_itemx>-purch_org        abap_true.
        <gs_itemx>-pckg_no          abap_true.

        APPEND INITIAL LINE TO gt_header_text ASSIGNING FIELD-SYMBOL(<gs_header_text1>).
        <gs_header_text1>-preq_item wa_excel-bnfpo.
        <gs_header_text1>-text_id 'B01'.
        <gs_header_text1>-text_line wa_excel-header_text.

        APPEND INITIAL LINE TO gt_item_text ASSIGNING FIELD-SYMBOL(<gs_item_text1>).
        <gs_item_text1>-preq_item wa_excel-bnfpo.
        <gs_item_text1>-text_id 'B01'.
        <gs_item_text1>-text_line wa_excel-item_text.

        LOOP AT it_item1 INTO DATA(wa_itemWHERE s_no wa_excel-s_no AND bnfpo wa_excel-bnfpo.

          serv_pckg_no serv_pckg_no + 10.
          ser_no ser_no + 1.

          APPEND INITIAL LINE TO gt_account ASSIGNING FIELD-SYMBOL(<gs_account>).
          <gs_account>-preq_item    banfo.
          <gs_account>-serial_no    ser_no.
          <gs_account>-quantity     wa_item-menge.
          <gs_account>-net_value    wa_item-gross_amount.
          IF wa_excel-knttp 'P'.
            <gs_account>-wbs_element wa_item-wbs_element.
          ELSEIF wa_excel-knttp 'K'.
            <gs_account>-costcenter  wa_item-cost_center.
          ENDIF.

          APPEND INITIAL LINE TO gt_accountx ASSIGNING FIELD-SYMBOL(<gs_accountx>).
          <gs_accountx>-preq_item   banfo.
          <gs_accountx>-serial_no   ser_no.
          <gs_accountx>-preq_itemx  'X'.
          <gs_accountx>-serial_nox  'X'.
          <gs_accountx>-quantity    abap_true.
          <gs_accountx>-net_value   abap_true.
          IF wa_excel-knttp 'P'.
            <gs_accountx>-wbs_element  abap_true.
          ELSEIF wa_excel-knttp 'K'.
            <gs_accountx>-costcenter  abap_true.
          ENDIF.

          APPEND INITIAL LINE TO gt_service ASSIGNING FIELD-SYMBOL(<gs_service>).

          <gs_service>-doc_item     banfo.
          <gs_service>-outline      line_no.
          <gs_service>-srv_line     serv_pckg_no.
          <gs_service>-service      |{ wa_item-service_no ALPHA IN }|.
          <gs_service>-quantity     wa_item-menge.

          SELECT SINGLE meins
                   FROM asmd INTO @DATA(uom)
                   WHERE asnum @wa_item-service_no.
          <gs_service>-uom uom.
          <gs_service>-gross_price wa_item-gross_amount.

          APPEND INITIAL LINE TO gt_servicex ASSIGNING FIELD-SYMBOL(<gs_servicex>).
          <gs_servicex>-doc_item banfo.
          <gs_servicex>-outline line_no.
          <gs_servicex>-srv_line serv_pckg_no.
          <gs_servicex>-service abap_true.
          <gs_servicex>-quantity abap_true.
          <gs_servicex>-uom abap_true.
          <gs_servicex>-gross_price abap_true.

          APPEND INITIAL LINE TO gt_service_acc ASSIGNING FIELD-SYMBOL(<gs_service_acc>).
          <gs_service_acc>-doc_item banfo.
          <gs_service_acc>-outline line_no.
          <gs_service_acc>-srv_line serv_pckg_no.
          <gs_service_acc>-serial_no ser_no.
          <gs_service_acc>-serial_no_item ser_no.
          <gs_service_acc>-percent '100'.

          APPEND INITIAL LINE TO gt_service_accx ASSIGNING FIELD-SYMBOL(<gs_service_accx>).
          <gs_service_accx>-doc_item banfo.
          <gs_service_accx>-outline  line_no.
          <gs_service_accx>-srv_line  =  serv_pckg_no.
          <gs_service_accx>-serial_no ser_no.
          <gs_service_accx>-serial_no_item abap_true.
          <gs_service_accx>-percent abap_true.

          CLEARwa_item.
        ENDLOOP.
        CLEARserv_pckg_no,ser_noCLEARwa_excel.
      ENDLOOP.
      CLEARbanfoline_no.

      gt_item1            gt_item.
      gt_itemx1           gt_itemx.
      gt_account1         gt_account.
      gt_accountx1        gt_accountx.
      gt_service1         gt_service.
      gt_servicex1        gt_servicex.
      gt_service_acc1     gt_service_acc.
      gt_service_accx1    gt_service_accx.
      gt_header_text1     gt_header_text.
      gt_item_text1       gt_item_text.

      gs_header-pr_type          'ZSER'.
      gs_headerx-pr_type         'X'.

      CALL FUNCTION 'BAPI_PR_CREATE'
        EXPORTING
          prheader        gs_header
          prheaderx       gs_headerx
        IMPORTING
          number          lv_number
        TABLES
          return          gt_return
          pritem          gt_item
          pritemx         gt_itemx
          praccount       gt_account
          praccountx      gt_accountx
          pritemtext      gt_item_text
          prheadertext    gt_header_text
          servicelines    gt_service
          servicelinesx   gt_servicex
          serviceaccount  gt_service_acc
          serviceaccountx gt_service_accx.

      IF sy-subrc 0.
        PERFORM bapi_commit.
        PERFORM bapi_return.
      ENDIF.

      READ TABLE gt_return INTO gs_return WITH KEY number '603'.
      IF sy-subrc 0.
        CLEARlv_number.

        gs_header-pr_type          'ZSER'.
        gs_header-memory           'X'.
        gs_header-hold_complete    'X'.
        gs_headerx-pr_type         'X'.
        gs_headerx-memory          'X'.
        gs_headerx-hold_complete   'X'.

        CALL FUNCTION 'BAPI_PR_CREATE'
          EXPORTING
            prheader        gs_header
            prheaderx       gs_headerx
          IMPORTING
            number          lv_number
          TABLES
            return          gt_return
            pritem          gt_item1
            pritemx         gt_itemx1
            praccount       gt_account1
            praccountx      gt_accountx1
            pritemtext      gt_item_text1
            prheadertext    gt_header_text1
            servicelines    gt_service1
            servicelinesx   gt_servicex1
            serviceaccount  gt_service_acc1
            serviceaccountx gt_service_accx1.

        IF sy-subrc 0.
          PERFORM bapi_commit.
          PERFORM bapi_return.
        ENDIF.
      ENDIF.

      REFRESHgt_item,gt_itemx,  gt_accountgt_accountx gt_service,gt_servicex,gt_service_acc,gt_service_accx,gt_return,
      gt_item1gt_itemx1gt_account1gt_accountx1gt_service1gt_servicex1gt_service_acc1gt_service_accx,gt_account2,gt_accountx2.
      CLEARgs_returnwa_excel,
             lv_bnfpolv_itemser_no,serv_pckg_nosl_no.
    ENDLOOP.

  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display
*&---------------------------------------------------------------------*

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 'NUMBER'.
  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.

FORM convert_date USING p_gs_date.
  CALL FUNCTION 'CONVERT_DATE_TO_INTERN_FORMAT'
    EXPORTING
      datum p_gs_date
      dtype 'DATS'
    IMPORTING
      idate p_gs_date.
ENDFORM.

FORM generate_template .
* start Excel
  CREATE OBJECT h_excel 'EXCEL.APPLICATION'.
  SET PROPERTY OF h_excel 'Visible' 1.

* get list of workbooks, initially empty
  CALL METHOD OF
    h_excel
      'Workbooks' h_mapl.

*** Error handle File
  PERFORM err_hdl.

* add a new workbook
  CALL METHOD OF
    h_mapl
      'Add' h_map.

*** Error handle File
  PERFORM err_hdl.

  PERFORM fill_cell USING:   'Sno',
                             'Account Assignment Category',
                             'Item Category',
                             'Header Text',
                             'Item PR',
                             'Short Text',
                             'Delivery Date',
                             'Material Group',
                             'Plant',
                             10 'Purchase Group',
                             11 'Name',
                             12 'Tracking No',
                             13 'Purchase Org',
                             14 'Item Text',
                             15 'Service Line',
                             16 'Service No',
                             17 'Quantity',
                             18 'Gross Amount',
                             19 'WBS Element',
                             20 'Cost Center'.

ENDFORM.

FORM err_hdl .
  IF sy-subrc <> 0.
    CALL METHOD OF
      h_excel
      'QUIT'.
    FREE OBJECT h_excel.
    h_excel-handle -1.
    MESSAGE'Failed to generate template.' TYPE 'E'.
  ENDIF.
ENDFORM.

FORM fill_cell USING j bold val.
  CALL METHOD OF
      h_excel
      'Cells' h_zl
    EXPORTING
      #1      i
      #2      j.
  PERFORM err_hdl.
  SET PROPERTY OF h_zl 'Value' val .
  PERFORM err_hdl.
  GET PROPERTY OF h_zl 'Font' h_f.
  PERFORM err_hdl.
  SET PROPERTY OF h_f 'Bold' bold .
  PERFORM err_hdl.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form BAPI_COMMIT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM bapi_commit .

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait 'X'.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form material_pr_create
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM material_pr_create .

  DATA(lt_itemgtab_excel.

  DELETE ADJACENT DUPLICATES FROM lt_item COMPARING s_no.

  LOOP AT lt_item INTO DATA(la_item).

    line_no line_no + 1.
    serv_line_no serv_line_no + 1.
    LOOP AT gtab_excel INTO stab_excel WHERE s_no la_item-s_no .
      banfo banfo + 10.
      APPEND INITIAL LINE TO gt_item ASSIGNING FIELD-SYMBOL(<gs_item>).

      <gs_item>-preq_item         stab_excel-bnfpo .
      <gs_item>-pur_group         stab_excel-pur_grp.
      <gs_item>-material         |{ stab_excel-material ALPHA IN }|.
      <gs_item>-short_text        stab_excel-short_text.
      <gs_item>-quantity          stab_excel-qty.
      <gs_item>-unit              stab_excel-uom.
      <gs_item>-plant             stab_excel-plant.
      <gs_item>-store_loc         stab_excel-sto_loc.
*      <gs_item>-trackingno        = stab_excel-track_no.
      <gs_item>-matl_group        stab_excel-mat_grp.
*        wa_excel-service_no         =  |{ <wa_excel>-service_no ALPHA = IN }|.
      PERFORM convert_date USING stab_excel-dev_date.
      <gs_item>-deliv_date        stab_excel-dev_date.
      <gs_item>-preq_price        stab_excel-preq_price.
      <gs_item>-acctasscat        stab_excel-knttp.
      <gs_item>-purch_org         stab_excel-pur_org.
      <gs_item>-pckg_no           sl_no.

      APPEND INITIAL LINE TO gt_itemx ASSIGNING FIELD-SYMBOL(<gs_itemx>).

      <gs_itemx>-preq_item        =  stab_excel-bnfpo .
      <gs_itemx>-preq_itemx       =  abap_true.
      <gs_itemx>-pur_group        abap_true.
*      <gs_itemx>-preq_name        = abap_true.
      <gs_itemx>-material        abap_true.
      <gs_itemx>-short_text       abap_true.
      <gs_itemx>-quantity       abap_true.
      <gs_itemx>-unit             abap_true.
      <gs_itemx>-plant            abap_true.
      <gs_itemx>-store_loc            abap_true.
*      <gs_itemx>-trackingno       = abap_true.
      <gs_itemx>-matl_group       abap_true.
      <gs_itemx>-deliv_date       abap_true.
      <gs_itemx>-preq_price       abap_true.
      <gs_itemx>-acctasscat       abap_true.
      <gs_itemx>-purch_org        abap_true.
      <gs_itemx>-pckg_no          abap_true.

      APPEND INITIAL LINE TO gt_account2 ASSIGNING FIELD-SYMBOL(<gs_account1>).
      <gs_account1>-preq_item    banfo.
      <gs_account1>-serial_no    serv_line_no.
      <gs_account1>-quantity     stab_excel-menge.
      <gs_account1>-net_value    stab_excel-gross_amount.
      <gs_account1>-costcenter  stab_excel-cost_center.

      APPEND INITIAL LINE TO gt_accountx2 ASSIGNING FIELD-SYMBOL(<gs_accountx1>).
      <gs_accountx1>-preq_item   banfo.
      <gs_accountx1>-serial_no   serv_line_no.
      <gs_accountx1>-preq_itemx  'X'.
      <gs_accountx1>-serial_nox  'X'.
      <gs_accountx1>-quantity    abap_true.
      <gs_accountx1>-net_value   abap_true.
      <gs_accountx1>-costcenter  abap_true.

      APPEND INITIAL LINE TO gt_header_text ASSIGNING FIELD-SYMBOL(<gs_header_text>).
      <gs_header_text>-preq_item banfo.
      <gs_header_text>-text_id 'B01'.
      <gs_header_text>-text_line stab_excel-header_text.

      APPEND INITIAL LINE TO gt_item_text ASSIGNING FIELD-SYMBOL(<gs_item_text>).
      <gs_item_text>-preq_item banfo.
      <gs_item_text>-text_id 'B01'.
      <gs_item_text>-text_line stab_excel-item_text.

    ENDLOOP.

    gs_header-pr_type          stab_excel-doc_type.
    gs_headerx-pr_type         'X'.

    CALL FUNCTION 'BAPI_PR_CREATE'
      EXPORTING
        prheader     gs_header
        prheaderx    gs_headerx
      IMPORTING
        number       lv_number
      TABLES
        return       gt_return
        pritem       gt_item
        pritemx      gt_itemx
        praccount    gt_account2
        praccountx   gt_accountx2
        pritemtext   gt_item_text
        prheadertext gt_header_text.

    IF sy-subrc 0.
      PERFORM bapi_commit.
      PERFORM bapi_return.
    ENDIF.

  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form generate_template1
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM generate_template1 .

* start Excel
  CREATE OBJECT h_excel 'EXCEL.APPLICATION'.
  SET PROPERTY OF h_excel 'Visible' 1.

* get list of workbooks, initially empty
  CALL METHOD OF
    h_excel
      'Workbooks' h_mapl.

*** Error handle File
  PERFORM err_hdl.

* add a new workbook
  CALL METHOD OF
    h_mapl
      'Add' h_map.

*** Error handle File
  PERFORM err_hdl.

  PERFORM fill_cell USING:   'Sno',
                             'Document Type',
                             'Account Assignment Category',
                             'Headar Text',
                             'Item PR',
                             'Material',
                             'Short Text',
                             'Quanlity',
                             'UOM',
                             10 'Delivery Date',
                             11 'Currency Amount',
                             12 'Material Group',
                             13 'Plant',
                             14 'Storage Location',
                             15 'Purchase Group',
                             16 'Purchase Org',
                             17 'Item Text',
                             18 'Quantity',
                             19 'Gross Amount',
                             20 'Cost Center'.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form BAPI_RETURN
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM bapi_return .

  DELETE gt_return WHERE type 'I'.
  DELETE gt_return WHERE type 'W'.

  LOOP AT gt_return INTO gs_return.

    lv_num            lv_num + 1.
    wa_final-sno      lv_num.
    wa_final-type     gs_return-type.
    wa_final-number   lv_number.
    wa_final-message  gs_return-message.
    APPEND wa_final TO itab_final.
    CLEARwa_final.

  ENDLOOP.

ENDFORM.

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)