PO Service Entry Sheet Create ( ML81N) Using BAPI

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

*& Report ZMM_SERVICE_ENTRY_CREATE
*&---------------------------------------------------------------------*
************************************************************************
*      Program        : ZMM_SERVICE_ENTRY_CREATE
*      Description    : PO Service Entry Sheet Create
*      Author         : King Of ABAP'r
*      Created on     : 2023
*      Requested By   : Functional Consultant
*      Transport-No   : 1234567890
*----------------------------------------------------------------------*
*      Description    : Cutover Object
*      Assumption     :
*      Called from    :
*      Called to      : N/A
*      Includes       : N/A
*      Logical DB     : N/A
*----------------------------------------------------------------------*
REPORT zmm_service_entry_create.

INCLUDE zmm_service_entry_create_top.
INCLUDE zmm_service_entry_create_sel.
INCLUDE zmm_service_entry_create_f01.

START-OF-SELECTION.

  PERFORM get_file_data.
  PERFORM create_ses.
  PERFORM display.

*&---------------------------------------------------------------------*
*& Include          ZMM_SERVICE_ENTRY_CREATE_TOP
*&---------------------------------------------------------------------*
TYPESBEGIN OF ty_file,
* Header
         sno(5)            TYPE c,  " Index
         extr_no(16)       TYPE c,  " essr-lblne1 Extranal number
         prps_internal(12TYPE c,  "sbnamag-essr Person Internal
         prps_extranal(16TYPE c,  "sbnaman-essr Person Extranal
         service_loc(25)   TYPE c,  "dlort-essr Location
         period_from(10)   TYPE c,  "lzvon-essr Begin Date
         period_to(10)     TYPE c,  "lzbis-essr End Date
         short_text(40)    TYPE c,  "TXZ01-essr Short Text
         po_no(10)         TYPE c,  "ebeln-essr Po Number
         po_item(5)        TYPE n,  "ebelp-essr Po Item
         doc_date(10)      TYPE c,  "bldat-essr Document Date
         posting_date(10)  TYPE c,  "budat-essr Posting Date
         reference(16)     TYPE c,  "xblnr-essr Reference Doc Number
         acceptance        TYPE c,  "essr-KZABN 
* Item
         cost_center(10)   TYPE c,  "eskn-kostl Cost Center
         service(18)       TYPE c,  "esll-asnum   Activity Number
         service_item(10)  TYPE c,  "esll-EXTROW
         qnty(13)          TYPE c,  "esll-MENGEV  Quantity
         tax_code(2)       TYPE c,  "esll-mwskz   Tax on sales/purchases code
       END OF ty_file.

DATA:
  lt_file  TYPE TABLE OF ty_file.
DATA:
  lt_file1 TYPE TABLE OF ty_file,
  lt_file2 TYPE TABLE OF ty_file,
  gs_file  TYPE ty_file,
  gs_file1 TYPE ty_file,
  gs_file2 TYPE ty_file.


TYPESBEGIN OF ty_alv,
         lblni   TYPE   lblni,
         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          ZMM_SERVICE_ENTRY_CREATE_SEL
*&---------------------------------------------------------------------*

* Selection Screen
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
  PARAMETERS:p_file  LIKE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN END  OF BLOCK b1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
* File Upload
  PERFORM file_upload.

*&---------------------------------------------------------------------*
*& Include          ZMM_SERVICE_ENTRY_CREATE_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form file_upload
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*

FORM file_upload .
* F4 Functionality
  CALL FUNCTION 'F4_FILENAME'
    EXPORTING
      program_name  syst-cprog
      dynpro_number syst-dynnr
      field_name    'P_FILE'
    IMPORTING
      file_name     p_file.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form get_file_data
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*

FORM get_file_data .
  DATA:  lt_raw TYPE   truxs_t_text_data.
* Convert the XL file to Internal Table
  REFRESH lt_file.
  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
      i_line_header        abap_true
      i_tab_raw_data       lt_raw
      i_filename           p_file
    TABLES
      i_tab_converted_data lt_file
    EXCEPTIONS
      conversion_failed    1
      OTHERS               2.
  IF sy-subrc <> 0.
    CASE sy-subrc.
      WHEN 1.
        MESSAGE 'File Conversion Error' TYPE 'E' DISPLAY LIKE 'S'.
    ENDCASE.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*& Form create_ses
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*

FORM create_ses .

** bapi Declarations
  DATAls_bapihdr  TYPE bapiessrc.
  DATAlv_entry_no TYPE bapiessr-sheet_no.

  DATAlt_cost    TYPE TABLE OF bapiesknc,
        ls_cost    TYPE bapiesknc,
        lt_service TYPE TABLE OF bapiesllc,
        ls_service TYPE bapiesllc,
        lt_account TYPE TABLE OF bapiesklc,
        ls_account TYPE bapiesklc,
        lt_return  TYPE TABLE OF bapiret2,
        ls_return  TYPE bapiret2.

  CONSTANTSlc_e TYPE char1 VALUE 'E',
             lc_s TYPE char1 VALUE 'S'.

  DATAlv_date  TYPE datum,
        lv_date1 TYPE datum,
        lv_date2 TYPE datum,
        lv_date3 TYPE datum,
        l_line   TYPE i,
        l_count  TYPE n LENGTH 5,
        counter  TYPE i,
        counter1 TYPE i.
  DATAl_packno     TYPE ekpo-packno,
        l_sub_packno TYPE esll-sub_packno.

  DATAlv_count TYPE sy-tabix,
        lv_pack  TYPE packno VALUE '0000000001'.

  lt_file1[] lt_file[].
  SORT lt_file1[] BY po_no po_item.
***Fetch the Package Number from EKPO Table
  IF lt_file1 IS NOT INITIAL.
    SELECT  ebeln,
            ebelp,
            packno,
            mwskz,         
            kostl          
            FROM ekpo INTO TABLE @DATA(lt_ekpo)
            FOR ALL ENTRIES IN @lt_file1
             WHERE ebeln @lt_file1-po_no
             AND   ebelp @lt_file1-po_item.
***Fetch the line items From the table ESll
    IF lt_ekpo IS NOT INITIAL.
      SELECT  packno,
              introw,
              extrow,
              sub_packno
              FROM esll INTO TABLE @DATA(lt_esll)
              FOR ALL ENTRIES IN @lt_ekpo
              WHERE packno @lt_ekpo-packno.
***Pass the packag Number and get the Sub package number
      IF lt_esll IS NOT INITIAL.
        SELECT packno,
               introw,
               extrow,
               sub_packno
               FROM esll INTO TABLE @DATA(lt_esll_sub)
               FOR ALL ENTRIES IN @lt_esll
               WHERE packno @lt_esll-sub_packno.
      ENDIF.
    ENDIF.
  ENDIF.

  LOOP AT lt_file1 INTO DATA(ls_file.
    gs_file1 ls_file.

    READ TABLE lt_ekpo INTO DATA(ls_ekpoWITH KEY ebeln gs_file1-po_no
                                                     ebelp gs_file1-po_item.
    AT NEW sno.
*************************Header Data****************************************
      ls_bapihdr-ext_number   gs_file1-extr_no.
      ls_bapihdr-person_int   gs_file1-prps_internal.
      ls_bapihdr-person_ext   gs_file1-prps_extranal.
      ls_bapihdr-location     gs_file1-service_loc.
** Begin Date
      REPLACE ALL OCCURRENCES OF '.' IN gs_file1-period_from WITH space.
      CONDENSE gs_file1-period_from NO-GAPS.
      CLEAR:lv_date.
      CONCATENATE gs_file1-period_from+4(4gs_file1-period_from+2(2gs_file1-period_from+0(2INTO lv_date.
      ls_bapihdr-begdate      lv_date.
** End Date
      REPLACE ALL OCCURRENCES OF '.' IN gs_file1-period_to WITH space.
      CONDENSE gs_file1-period_to NO-GAPS.
      CLEARlv_date1.
      CONCATENATE gs_file1-period_to+4(4gs_file1-period_to+2(2gs_file1-period_to+0(2INTO lv_date1.
      ls_bapihdr-enddate      lv_date1.

      ls_bapihdr-pckg_no      lv_pack.
      ls_bapihdr-short_text   gs_file1-short_text.

      ls_bapihdr-po_number    gs_file1-po_no.
      ls_bapihdr-po_item      gs_file1-po_item.
** Document Date
      REPLACE ALL OCCURRENCES OF '.' IN gs_file1-doc_date WITH space.
      CONDENSE gs_file1-doc_date NO-GAPS.
      CLEAR:lv_date2.
      CONCATENATE gs_file1-doc_date+4(4gs_file1-doc_date+2(2gs_file1-doc_date+0(2INTO lv_date2.
      ls_bapihdr-doc_date     lv_date2.
** Posting Date
      REPLACE ALL OCCURRENCES OF '.' IN gs_file1-posting_date WITH space.
      CONDENSE gs_file1-posting_date NO-GAPS.
      CLEAR:lv_date3.
      CONCATENATE gs_file1-posting_date+4(4gs_file1-posting_date+2(2gs_file1-posting_date+0(2INTO lv_date3.
      ls_bapihdr-post_date    lv_date3.

      ls_bapihdr-ref_doc_no   gs_file1-reference.
      ls_bapihdr-acceptance   gs_file1-acceptance.

********************************Entrysheet Account Assignment******************
      ls_cost-pckg_no         lv_pack.
      ls_cost-serial_no       '01'.
      IF gs_file1-cost_center IS NOT INITIAL.
        ls_cost-costcenter      gs_file1-cost_center.
      ELSE.
        ls_cost-costcenter ls_ekpo-kostl.
      ENDIF.
      APPENDls_cost TO lt_cost.
      CLEARls_cost.
*******************************Entrysheet Account Services********************
      ls_service-pckg_no      lv_pack.
      ls_service-line_no      lv_pack.
      ls_service-ext_line     '0000000000'.
      ls_service-outl_ind     abap_true.
      ls_service-subpckg_no   lv_pack + 1.

      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
        EXPORTING
          input  gs_file1-service
        IMPORTING
          output gs_file1-service.

      APPEND ls_service TO lt_service.
      CLEARls_service.
*******************************ENTRYSHEETSRVACCASSVALUES********************
      ls_account-pckg_no     lv_pack.
      ls_account-line_no     lv_pack.
      ls_account-serial_no   '01'.
      APPENDls_account TO lt_account.
      CLEAR:ls_account.
    ENDAT.

    ls_service-pckg_no lv_pack + 1.
    counter counter + 1.
    ls_service-line_no counter.
    counter1 counter1 + 10.
    ls_service-ext_line counter1.

*    READ TABLE lt_ekpo INTO DATA(ls_ekpo) WITH KEY ebeln = gs_file1-po_no
*                                                   ebelp = gs_file1-po_item.
*    IF sy-subrc EQ 0.

    READ TABLE lt_esll INTO DATA(ls_esllWITH KEY packno ls_ekpo-packno.
    IF sy-subrc EQ 0.

      READ TABLE lt_esll_sub INTO DATA(ls_esll_subWITH KEY packno ls_esll-sub_packno
                                                             extrow  gs_file1-service_item.
      IF sy-subrc EQ 0.
        ls_service-pln_pckg  ls_esll_sub-packno.
        ls_service-pln_line  ls_esll_sub-introw.
      ENDIF.
*      ENDIF.
    ENDIF.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  gs_file1-service
      IMPORTING
        output gs_file1-service.

    ls_service-service  gs_file1-service.
    ls_service-quantity gs_file1-qnty.

    IF gs_file1-tax_code IS NOT INITIAL.
      ls_service-tax_code gs_file1-tax_code.
    ELSE.
      ls_service-tax_code ls_ekpo-mwskz.
    ENDIF.

    APPEND ls_service TO lt_service.
    CLEARls_servicel_packnol_sub_packno,gs_file1.

    AT END OF sno.
      CALL FUNCTION 'BAPI_ENTRYSHEET_CREATE'
        EXPORTING
          entrysheetheader            ls_bapihdr
        IMPORTING
          entrysheet                  lv_entry_no
        TABLES
          entrysheetaccountassignment lt_cost
          entrysheetservices          lt_service
          entrysheetsrvaccassvalues   lt_account
          return                      lt_return.

      READ TABLE lt_return INTO ls_return WITH KEY type lc_e.
      IF sy-subrc 0.
        LOOP AT lt_return INTO ls_return.
          gs_alv-lblni   =  lv_entry_no.
          gs_alv-type    ls_return-type.
          gs_alv-message ls_return-message.
          APPEND gs_alv TO gt_alv.
          CLEAR gs_alv.
        ENDLOOP.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait abap_true.

        gs_alv-lblni    lv_entry_no.
        gs_alv-type     lc_s.
        gs_alv-message  TEXT-002.
        APPEND gs_alv TO gt_alv.
        CLEAR gs_alv.
        CLEAR:ls_service,ls_cost,ls_account,ls_return,lv_count,lt_cost,lt_service,lt_account,lv_count.
        CLEARls_ekpo,ls_esll,ls_esll_sub.
        CLEARcounter ,counter1.
        WAIT UP TO SECONDS.
      ENDIF.
      CLEARls_return.
    ENDAT.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM display .
  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.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname      'LBLNI'.
  ls_fieldcat-tabname        'GT_ALV'.
  ls_fieldcat-seltext_m      'Entry Sheet 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 Output
  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.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
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)