Software World By Sumit

Thursday 22 February 2024

Automatic Billing through Order Delivery - SAP ABAP

 &---------------------------------------------------------------------

*& Report ZSD_BILLING_CREATE

&---------------------------------------------------------------------

*&DEVELOPER : SUMIT

&---------------------------------------------------------------------

REPORT zsd_billing_create.


TABLES : zdi_data .


DATA: itbill_data TYPE STANDARD TABLE OF bapivbrk,

      wtbill_data TYPE  bapivbrk,

      it_return   TYPE STANDARD TABLE OF bapiret1,

      wa_return   TYPE bapiret1,

      it_success  TYPE STANDARD TABLE OF bapivbrksuccess,

      wa_success  TYPE bapivbrksuccess.


DATA: s_dlv   TYPE likp-vbeln,

      wa_likp TYPE likp,

      wa_lips TYPE lips,

      wa_vbak TYPE vbak.

DATA : LV_VBELN TYPE VBELN .

DATA : LV_MSG TYPE CHAR100 .


TYPES:BEGIN OF ty_data,

        vbeln TYPE vbeln,

*      ref_doc type char10 ,

      END OF ty_data.


TYPES:BEGIN OF ty_final,

        vbeln_de   TYPE vbeln,

        vbeln(120) TYPE c,

      END OF ty_final.


      TYPES : BEGIN OF TY_FF ,

        SELECT(1) ,

        MSG(100) .

        INCLUDE STRUCTURE zdi_data .

      TYPES END OF TY_FF .



DATA: it_data TYPE STANDARD TABLE OF TY_FF , "" TY_DATA,

      wa_data TYPE TY_FF.

DATA:it_final TYPE TABLE OF ty_final,

     wa_final TYPE ty_final.

DATA:it_fcat TYPE slis_t_fieldcat_alv,

     wa_fcat TYPE slis_fieldcat_alv.

DATA:w_col       TYPE i.

DATA: it_raw TYPE truxs_t_text_data.


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.

  SELECT-OPTIONS : s_del FOR zdi_data-delivery .

  SELECT-OPTIONS : s_di FOR zdi_data-di_number .

  SELECT-OPTIONS : s_ul FOR zdi_data-unloading_location .

  SELECT-OPTIONS : s_pl FOR zdi_data-plant_location .

  SELECT-OPTIONS : s_dd FOR zdi_data-del_date .

  SELECT-OPTIONS : s_dt FOR zdi_data-del_time .

SELECTION-SCREEN END OF BLOCK b1.

**

**AT SELECTION-SCREEN ON VALUE-REQUEST FOR  P_FNAME.

**  PERFORM GET_FILE_NAME.


START-OF-SELECTION.


  SELECT * FROM zdi_data INTO CORRESPONDING FIELDS OF TABLE it_data

      WHERE delivery IN s_del AND di_number IN s_di AND unloading_location IN s_ul AND plant_location IN s_pl

    AND del_date IN s_dd AND del_time IN s_dt AND billed  = '' .

  REFRESH:it_final[].


  PERFORM display.

*  PERFORM CALL_BAPI_FOR_BILLING.


END-OF-SELECTION.

&---------------------------------------------------------------------

*& Form PREPARE_BILLING_DATA

&---------------------------------------------------------------------

*& text

&---------------------------------------------------------------------

*& -->  p1        text

*& <--  p2        text

&---------------------------------------------------------------------

FORM prepare_billing_data .


ENDFORM.

&---------------------------------------------------------------------

*& Form CALL_BAPI_FOR_BILLING

&---------------------------------------------------------------------

*& text

&---------------------------------------------------------------------

*& -->  p1        text

*& <--  p2        text

&---------------------------------------------------------------------

FORM call_bapi_for_billing .


  DATA: blg_msg TYPE string.

  REFRESH: it_success[], it_return[].

  CLEAR: wa_success, blg_msg.


  IF itbill_data[] IS NOT INITIAL.


    CALL FUNCTION 'BAPI_BILLINGDOC_CREATEMULTIPLE'

      TABLES

        billingdatain = itbill_data

        return        = it_return

        success       = it_success.


**   Check the return table.

    LOOP AT it_return INTO wa_return WHERE type = 'E' OR type = 'A'.

*      WRITE: / WA_RETURN-MESSAGE.

      wa_final-vbeln_de = wa_data-delivery.

      wa_final-vbeln    = wa_return-message.

      lv_msg            = wa_return-message.

      APPEND wa_final TO it_final.

      CLEAR: wa_return,wa_final.

    ENDLOOP.


    IF it_success[] IS NOT INITIAL.

      COMMIT WORK AND WAIT.

      READ TABLE it_success INTO wa_success INDEX 1.

      CLEAR: blg_msg.

      wa_final-vbeln_de = wa_data-delivery.

      wa_final-vbeln    = wa_success-bill_doc.

      LV_VBELN    = wa_success-bill_doc.

      APPEND wa_final TO it_final.

      CLEAR: wa_final.

      UPDATE zdi_data SET billed = 'X' bill_NO = wa_success-bill_doc  WHERE delivery = wa_data-delivery .

    ENDIF.


  ENDIF.


ENDFORM.

&---------------------------------------------------------------------

*& Form GET_FILE_NAME

&---------------------------------------------------------------------

*& text

&---------------------------------------------------------------------

*& -->  p1        text

*& <--  p2        text

&---------------------------------------------------------------------

FORM get_file_name .

**    CALL FUNCTION 'KD_GET_FILENAME_ON_F4'

**    EXPORTING

**      FIELD_NAME = 'P_FNAME'

**    CHANGING

**      FILE_NAME  = P_FNAME.

ENDFORM.

&---------------------------------------------------------------------

*& Form READ_EXCEL_DATA

&---------------------------------------------------------------------

*& text

&---------------------------------------------------------------------

*& -->  p1        text

*& <--  p2        text

&---------------------------------------------------------------------

FORM read_excel_data .

** DATA L_FNAME TYPE RLGRAP-FILENAME.

**  L_FNAME = P_FNAME.

**  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'

**    EXPORTING

**      I_LINE_HEADER        = '1'

**      I_TAB_RAW_DATA       = IT_RAW

**      I_FILENAME           = L_FNAME

**    TABLES

**      I_TAB_CONVERTED_DATA = IT_DATA.


ENDFORM.

&---------------------------------------------------------------------

*& Form DISPLAY

&---------------------------------------------------------------------

*& text

&---------------------------------------------------------------------

*& -->  p1        text

*& <--  p2        text

&---------------------------------------------------------------------

FORM display .


  CLEAR wa_fcat.

  wa_fcat-fieldname = 'SELECT'.

  wa_fcat-tabname   = 'IT_DATA'.

  wa_fcat-edit   = 'X'.

  wa_fcat-checkbox   = 'X'.

  wa_fcat-seltext_m = 'Select'.

  APPEND wa_fcat TO it_fcat.


  CLEAR wa_fcat.

  wa_fcat-fieldname = 'DELIVERY'.

  wa_fcat-tabname   = 'IT_DATA'.

  wa_fcat-seltext_m = 'Delivery No.'.

  APPEND wa_fcat TO it_fcat.


  CLEAR wa_fcat.

  wa_fcat-fieldname = 'DI_NUMBER'.

  wa_fcat-tabname   = 'IT_DATA'.

  wa_fcat-seltext_m = 'DI Number'.

  APPEND wa_fcat TO it_fcat.


  CLEAR wa_fcat.

  wa_fcat-fieldname = 'DEL_DATE'.

  wa_fcat-tabname   = 'IT_DATA'.

  wa_fcat-seltext_m = 'Del Date'.

  APPEND wa_fcat TO it_fcat.


  CLEAR wa_fcat.

  wa_fcat-fieldname = 'DEL_TIME'.

  wa_fcat-tabname   = 'IT_DATA'.

  wa_fcat-seltext_m = 'Del Time'.

  APPEND wa_fcat TO it_fcat.


  CLEAR wa_fcat.

  wa_fcat-fieldname = 'KDMT'.

  wa_fcat-tabname   = 'IT_DATA'.

  wa_fcat-seltext_m = 'Customer Part'.

  APPEND wa_fcat TO it_fcat.


  CLEAR wa_fcat.

  wa_fcat-fieldname = 'UNLOADING_LOCATION'.

  wa_fcat-tabname   = 'IT_DATA'.

  wa_fcat-seltext_m = 'Unload LOcation'.

  APPEND wa_fcat TO it_fcat.


  CLEAR wa_fcat.

  wa_fcat-fieldname = 'PLANT_LOCATION'.

  wa_fcat-tabname   = 'IT_DATA'.

  wa_fcat-seltext_m = 'P Location'.

  APPEND wa_fcat TO it_fcat.


  CLEAR wa_fcat.

  wa_fcat-fieldname = 'LFIMG'.

  wa_fcat-tabname   = 'IT_DATA'.

  wa_fcat-seltext_m = 'Inv Qty'.

  APPEND wa_fcat TO it_fcat.


  CLEAR wa_fcat.

  wa_fcat-fieldname = 'BILL_NO'.

  wa_fcat-tabname   = 'IT_DATA'.

  wa_fcat-seltext_m = 'Billing No'.

  APPEND wa_fcat TO it_fcat.


  CLEAR wa_fcat.

  wa_fcat-fieldname = 'MSG'.

  wa_fcat-tabname   = 'IT_DATA'.

  wa_fcat-seltext_m = 'Remarks'.

  APPEND wa_fcat TO it_fcat.




  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

    EXPORTING

      i_callback_program       = sy-repid

      i_callback_user_command  = 'USER_COMMAND'

      i_callback_pf_status_set = 'SET_PF'

      I_DEFAULT = 'X'

*     IS_LAYOUT                = LAYOUT

      it_fieldcat              = it_fcat

      i_save                   = 'A'

    TABLES

      t_outtab                 = it_data[]

    EXCEPTIONS

      program_error            = 1

      OTHERS                   = 2.


ENDFORM.


FORM set_pf USING rt_extab TYPE slis_t_extab.

  SET PF-STATUS 'ZSTATUS'.

ENDFORM.


FORM user_command USING r_ucomm LIKE sy-ucomm

                        rs_selfield TYPE slis_selfield.


  data : ref_grid type ref to cl_gui_alv_grid.


  if ref_grid is initial.

    call function 'GET_GLOBALS_FROM_SLVC_FULLSCR'

      importing

        e_grid = ref_grid.

  endif.


  if not ref_grid is initial.

    call method ref_grid->check_changed_data.

  endif.


  DATA: lv_message TYPE c LENGTH 100.

  CASE r_ucomm.

    WHEN 'DBILL' .


  .

      LOOP AT it_data ASSIGNING FIELD-SYMBOL(<FSSS>) WHERE SELECT = 'X'  .


        CLEAR: wtbill_data, wa_vbak, wa_likp, wa_lips , LV_VBELN , lv_msg .

        REFRESH: itbill_data[].


        s_dlv = <FSSS>-delivery.

        SELECT SINGLE * FROM likp INTO wa_likp WHERE vbeln = s_dlv.

        SELECT SINGLE * FROM lips INTO wa_lips WHERE vbeln = s_dlv.

        SELECT SINGLE * FROM vbak INTO wa_vbak WHERE vbeln = wa_lips-vgbel.


        wtbill_data-ref_doc    = <FSSS>-delivery.

        wtbill_data-ref_doc_ca = 'J'.

        APPEND wtbill_data TO itbill_data.

          PERFORM call_bapi_for_billing.


          <FSSS>-BILL_NO = LV_VBELN .

          if LV_VBELN is INITIAL .

          <FSSS>-msg = lv_msg .

          else .

          <FSSS>-msg = 'SUCCESS' .

            endif .

*        CLEAR <FSSS>.


      ENDLOOP .


  ENDCASE.


  RS_SELFIELD-REFRESH = 'X'.


ENDFORM.