Thursday, 19 March 2015

                                               ZMM_GE_PRINT

*&---------------------------------------------------------------------*
*& Report  ZMM_GE_PRINT
*&
*&---------------------------------------------------------------------*
*&     To Print Gate Entry/Exit details
*&
*&     Developer: Raghu Ramadugu
*&---------------------------------------------------------------------*

REPORT  zmm_ge_print MESSAGE-ID zmm_ge_msg.

INCLUDE zmm_ge_print_top.    "Declarations
INCLUDE zmm_ge_print_s01.    "Selection Screen and validations
INCLUDE zmm_ge_print_d01.    "Fetching data

INCLUDE zmm_ge_print_f01.    "Subroutines

*****************************************************************************************************************
*&---------------------------------------------------------------------*
*&  Include           ZMM_GE_PRINT_TOP
*&---------------------------------------------------------------------*
TYPES: BEGIN OF tty_entry,
          gate_trans_no     TYPE  zzm_transno ,             "Gate Entry/Exit Number
          zyear             TYPE  zzm_gate_year ,           "Creation year
          trans_type        TYPE  zzm_trans_typ ,           "Transit Type
          werks             TYPE  werks_d ,                 "Plant
          deleted           TYPE  zzm_delflag,              "Deleted Flag
          entry_crdt        TYPE  zzm_ge_date ,             "Gate Entry Date
          entry_crtim       TYPE  zzm_ge_time ,             "Entry Time
          entry_crby        TYPE  zzm_ge_id ,               "Entry Created By
          enty_entby        TYPE  zzm_ge_name1  ,           "Gate Entry Entered By
          entry_gate_no     TYPE  zzm_gatenum ,             "Gate No
          exit_crdt         TYPE  zzm_ex_date ,             "Exit date
          exit_crtim        TYPE  zzm_ex_time ,             "Exit Time
          exit_crby         TYPE  zzm_ex_id ,               "Exit Created By
          enty_exby         TYPE  zzm_ge_name2  ,           "Exit Entered By Name
          exit_gate_no      TYPE  zzm_gatenum ,             "Gate No
          trans_mode        TYPE  zzm_mode  ,               "Mode of Transport
          vhcl_type         TYPE  zzm_vhcl_type ,           "Vehicle type
          vhcl_no           TYPE  zzm_vhcl_no ,             "vehicle No
          drvr_name         TYPE  zzm_drvr_nm ,             "Driver name
          drvr_no           TYPE  zzm_drvr_no ,             "Driver Licence no
          vhcl_stat         TYPE  zzm_vhcl_stat ,           "Vehicle Status
          lifnr             TYPE  lifnr,                    "Account Number of Vendor or Creditor
       END OF tty_entry,

       BEGIN OF tty_zmm_ge_vtd,
         vhcl_type          TYPE zzm_vhcl_type,             "Vehicle type
         vhcl_des           TYPE zzm_vhcl_des,              "Vehicle Description
       END OF tty_zmm_ge_vtd,

       BEGIN OF tty_zmm_ge_gno,
         entry_gate_no      TYPE zzm_gatenum,                 "Gate No
         entry_gate_name    TYPE zzm_gatename,                "Gate Name
         exit_gate_name     TYPE zzm_gatename1,               "Gate Name(Exit)
         END OF tty_zmm_ge_gno,

       BEGIN OF tty_lifnr,
         lifnr              TYPE lifnr,                       "Account Number of Vendor or Creditor
         name1              TYPE name1,                       "Vendor Name
       END OF tty_lifnr.

DATA: gi_entry          TYPE TABLE OF zmm_ge_print_s,
      li_entry          TYPE TABLE OF tty_entry,
      gi_lifnr          TYPE TABLE OF tty_lifnr,
      gi_vhcl           TYPE TABLE OF tty_zmm_ge_vtd,
      gi_gate           TYPE TABLE OF tty_zmm_ge_gno,
      gs_entry          TYPE zmm_ge_print_s,
      gi_field          TYPE slis_t_fieldcat_alv,
      gs_field          TYPE slis_fieldcat_alv,
      li_entry1         LIKE li_entry,
      ls_entry          TYPE tty_entry,
      gs_vhcl           TYPE tty_zmm_ge_vtd,
      gs_lifnr          TYPE tty_lifnr,
      v_gate_entry      TYPE zmm_ge-gate_trans_no,
      v_gate_exit       TYPE zmm_ge-gate_trans_no,
      v_year            TYPE zzm_gate_year,
      v_werks           TYPE t001w-werks,
      gs_gate           TYPE tty_zmm_ge_gno,

      wa_funcnm         TYPE funcname,
      fp_outputparams   TYPE sfpoutputparams,
      fp_docparams      TYPE sfpdocparams,
      fp_formoutput     TYPE fpformoutput,
      output_file       TYPE string,
      data_tab          TYPE TABLE OF x255,
      filename          TYPE string,
      path              TYPE string,
      fullpath          TYPE string,
      wt_file           TYPE filetable,
      default_extension TYPE string                  VALUE 'PDF',

      lv_filelength     TYPE i,
      lt_rawtab         TYPE TABLE OF char255,

      wa_data_tab       LIKE LINE OF lt_rawtab,
      wa_data_tab1      TYPE xstring,
      lo_fp             TYPE REF TO if_fp            VALUE IS INITIAL,
      lo_fpex           TYPE REF TO cx_fp_runtime    VALUE IS INITIAL,
      lo_pdfobj         TYPE REF TO if_fp_pdf_object VALUE IS INITIAL,
      pdf_data          TYPE xstring,

      xml_data          TYPE xstring,
      lt_xml_data       TYPE STANDARD TABLE OF xstring,

      t_return          TYPE STANDARD TABLE OF bapiret2,
      t_per_info        TYPE STANDARD TABLE OF smum_xmltb,
      tag_open          TYPE tdsfflag,
      user_data         TYPE soudatai1,
      user              TYPE soudnamei1,
      lv_xml_data_string  TYPE string.

CONSTANTS: c_s                  TYPE c             VALUE 'S',
           c_e                  TYPE c             VALUE 'E',
           c_x                  TYPE c             VALUE 'X',
           c_struc              TYPE dd02l-tabname VALUE 'ZMM_GE_PRINT_S',
           c_fname              TYPE fpname        VALUE 'ZMM_GE_ADOBE',
           c_sel(3)             TYPE c             VALUE 'SEL',
           c_entry_gate_no(20)  TYPE c             VALUE 'ENTRY_GATE_NO',
           c_exit_gate_no(20)   TYPE c             VALUE 'EXIT_GATE_NO',
           c_created_by(20)     TYPE c             VALUE 'CREATED_BY',
           c_pf_status          TYPE slis_formname VALUE 'ZMM_PF_STATUS_F05',
           c_second_page        TYPE slis_formname VALUE 'ZMM_SECOND_PAGE_F04',
           c_01(2)              TYPE c             VALUE '01',
           c_02(2)              TYPE c             VALUE '02',
           c_print              TYPE syst-ucomm    VALUE 'PRINT',
           c_menu               TYPE gui_status    VALUE 'ZMM_GE_MENU',
           c_zgent_print        TYPE sy-tcode      VALUE 'ZGENT_PRINT',
           c_zgext_print        TYPE sy-tcode      VALUE 'ZGEXT_PRINT',
           c_0                  TYPE c             VALUE '0',
           c_md1(3)             TYPE c             VALUE 'MD1',
           c_md2(3)             TYPE c             VALUE 'MD2'.


FIELD-SYMBOLS: <fs_fcat> LIKE gi_field,
               <fs>      LIKE gs_field,
               <fs_gs>   LIKE gs_entry,
               <fs_ls>   LIKE ls_entry,
               <fs_gi>   LIKE gi_entry,
               <fs_li>   LIKE li_entry.

**********************************************************************
*&---------------------------------------------------------------------*
*&  Include           ZMM_GE_PRINT_S01
*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-a01.
SELECT-OPTIONS: s_gent  FOR v_gate_entry MODIF ID md1,
                s_gext  FOR v_gate_exit MODIF ID md2,
                s_year  FOR v_year NO INTERVALS OBLIGATORY,
                s_werks FOR v_werks.
SELECTION-SCREEN END OF BLOCK b1.

AT SELECTION-SCREEN ON s_gent.
  SELECT gate_trans_no INTO v_gate_entry FROM zmm_ge UP TO 1 ROWS
                       WHERE gate_trans_no IN s_gent.
  ENDSELECT.
  IF sy-subrc <> 0.
    MESSAGE e101 DISPLAY LIKE c_s.
  ENDIF.

  AT SELECTION-SCREEN ON s_gext.
  SELECT gate_trans_no INTO v_gate_exit FROM zmm_ge UP TO 1 ROWS
                       WHERE gate_trans_no IN s_gext.
  ENDSELECT.
  IF sy-subrc <> 0.
    MESSAGE e106 DISPLAY LIKE c_s.
  ENDIF.

AT SELECTION-SCREEN ON s_year.
  SELECT zyear INTO v_year FROM zmm_ge UP TO 1 ROWS
                WHERE zyear IN s_year.
  ENDSELECT.
  IF sy-subrc <> 0.
    MESSAGE e102 DISPLAY LIKE c_s.
  ENDIF.

AT SELECTION-SCREEN ON s_werks.
  SELECT werks INTO v_werks FROM t001w UP TO 1 ROWS
               WHERE werks IN s_werks.
  ENDSELECT.
  IF sy-subrc <> 0.
    MESSAGE e103 DISPLAY LIKE c_s.
  ENDIF.

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN.
    IF sy-tcode = c_zgent_print.
      IF screen-group1 = c_md2.
        screen-active = c_0.
        MODIFY SCREEN.
      ENDIF.
    ELSEIF sy-tcode = c_zgext_print.
      IF screen-group1 = c_md1.
        screen-active = c_0.
        MODIFY SCREEN.
      ENDIF.
    ENDIF.
  ENDLOOP.

***************************************************************************************************************************
*&---------------------------------------------------------------------*
*&  Include           ZMM_GE_PRINT_D01
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM zmm_get_data_f01.              "Fetch data from database tables
END-OF-SELECTION.
  PERFORM zmm_display_data_f02.          "Display data

***************************************************************************
*&---------------------------------------------------------------------*
*&  Include           ZMM_GE_PRINT_F01
*&---------------------------------------------------------------------*



*&---------------------------------------------------------------------*
*&      Form  second_page
*&---------------------------------------------------------------------*
*        Subroutine to select radiobutton in ALV Grid display
*----------------------------------------------------------------------*
*      -->P_UCOMM    Function code that PAI triggered
*      -->P_SELFIELD Information cursor position ALV
*----------------------------------------------------------------------*
FORM zmm_second_page_f04 USING  p_ucomm    TYPE sy-ucomm
                        p_selfield TYPE slis_selfield.

  ASSIGN:  gs_entry TO <fs_gs>,
           gi_entry TO <fs_gi>.

  IF sy-ucomm = c_print.
    EXIT.
  ENDIF.

  IF p_selfield-fieldname = c_sel.
    SORT <fs_gi> BY sel.
    READ TABLE <fs_gi> ASSIGNING <fs_gs> WITH KEY sel = icon_radiobutton BINARY SEARCH.
    IF sy-subrc = 0.
      <fs_gs>-sel = icon_wd_radio_button_empty.
    ENDIF.
    SORT <fs_gi> BY gate_trans_no.
    READ TABLE <fs_gi> ASSIGNING <fs_gs> INDEX p_selfield-tabindex.
    <fs_gs>-sel = icon_radiobutton.
  ENDIF.

  p_selfield-refresh = c_x.
  CLEAR <fs_gs>.
ENDFORM.                    "second_page

*&---------------------------------------------------------------------*
*&      Form  pf_status
*&---------------------------------------------------------------------*
*       Subroutine to print Gate Entry/Exit details
*----------------------------------------------------------------------*
*      -->RT_EXTAB   Excluding table (function codes)
*----------------------------------------------------------------------*
FORM zmm_pf_status_f05 USING rt_extab TYPE slis_t_extab.
  SET PF-STATUS c_menu.
  IF sy-ucomm = c_print.
    SORT gi_entry BY sel.
    READ TABLE gi_entry INTO gs_entry WITH KEY sel = icon_radiobutton BINARY SEARCH.
    IF sy-subrc = 0.
      user-sapname = sy-uname.
      PERFORM zmm_user_name_f03 USING user CHANGING user_data.      "Get user fullname
      gs_entry-created_by = user_data-fullname.

      CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
        EXPORTING
          i_name     = c_fname
        IMPORTING
          e_funcname = wa_funcnm.

      fp_outputparams-reqnew = c_x.

      CALL FUNCTION 'FP_JOB_OPEN'
        CHANGING
          ie_outputparams = fp_outputparams
        EXCEPTIONS
          cancel          = 1
          usage_error     = 2
          system_error    = 3
          internal_error  = 4
          OTHERS          = 5.
      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.

      fp_docparams-langu = sy-langu.
      fp_docparams-fillable = c_x.
      fp_docparams-dynamic = c_x.

      CALL FUNCTION wa_funcnm
        EXPORTING
          /1bcdwb/docparams  = fp_docparams
          struct             = gs_entry
        IMPORTING
          /1bcdwb/formoutput = fp_formoutput
        EXCEPTIONS
          usage_error        = 1
          system_error       = 2
          internal_error     = 3
          OTHERS             = 4.

      IF sy-subrc <> 0.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.

      CALL FUNCTION 'FP_JOB_CLOSE'
        EXCEPTIONS
          usage_error    = 1
          system_error   = 2
          internal_error = 3
          OTHERS         = 4.
      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.
      IF sy-tcode = c_zgent_print.
        MESSAGE i100 DISPLAY LIKE c_s.
      ELSEIF sy-tcode = c_zgext_print.
        MESSAGE i104 DISPLAY LIKE c_s.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    "pf_status
*&---------------------------------------------------------------------*
*&      Form  USER_NAME
*&---------------------------------------------------------------------*
*       Get user fullname
*----------------------------------------------------------------------*
*      -->P_USER       SAPoffice: SAP Name and SAPoffice Name of a User
*      <--P_USER_DATA  SAPoffice: Data of an Office User
*----------------------------------------------------------------------*
FORM zmm_user_name_f03  USING    p_user TYPE soudnamei1
                CHANGING p_user_data TYPE soudatai1.
  CLEAR p_user_data.
  CALL FUNCTION 'SO_USER_READ_API1'
    EXPORTING
      user            = p_user
    IMPORTING
      user_data       = p_user_data
    EXCEPTIONS
      user_not_exist  = 1
      parameter_error = 2
      x_error         = 3
      OTHERS          = 4.

ENDFORM.                    " USER_NAME
*&---------------------------------------------------------------------*
*&      Form  ZMM_GET_DATA_F01
*&---------------------------------------------------------------------*
*       Fetch data from database tables
*----------------------------------------------------------------------*

FORM zmm_get_data_f01 .

  IF sy-tcode = c_zgent_print.
    SELECT gate_trans_no
            zyear
            trans_type
            werks
            deleted
            entry_crdt
            entry_crtim
            entry_crby
            enty_entby
            entry_gate_no
            exit_crdt
            exit_crtim
            exit_crby
            enty_exby
            exit_gate_no
            trans_mode
            vhcl_type
            vhcl_no
            drvr_name
            drvr_no
            vhcl_stat
            lifnr FROM zmm_ge INTO TABLE li_entry
                      WHERE gate_trans_no IN s_gent
                        AND zyear IN s_year
                        AND werks IN s_werks
                        AND trans_type = c_01
                        AND deleted NE c_x.
    IF sy-subrc <> 0.
      MESSAGE s105 DISPLAY LIKE c_e.
      LEAVE LIST-PROCESSING.
    ENDIF.

  ELSEIF sy-tcode = c_zgext_print.
    SELECT gate_trans_no
          zyear
          trans_type
          werks
          deleted
          entry_crdt
          entry_crtim
          entry_crby
          enty_entby
          entry_gate_no
          exit_crdt
          exit_crtim
          exit_crby
          enty_exby
          exit_gate_no
          trans_mode
          vhcl_type
          vhcl_no
          drvr_name
          drvr_no
          vhcl_stat
          lifnr FROM zmm_ge INTO TABLE li_entry
                    WHERE gate_trans_no IN s_gext
                      AND zyear IN s_year
                      AND werks IN s_werks
                      AND trans_type = c_02
                      AND deleted NE c_x.
    IF sy-subrc <> 0.
      MESSAGE s105 DISPLAY LIKE c_e.
      CALL TRANSACTION c_zgext_print.
      LEAVE LIST-PROCESSING.
    ENDIF.
  ENDIF.
  IF li_entry IS NOT INITIAL.

    SELECT vhcl_type
           vhcl_des  FROM zmm_ge_vtd INTO TABLE gi_vhcl.

    SELECT entry_gate_no
           entry_gate_name
           exit_gate_name
             FROM zmm_ge_gno INTO TABLE gi_gate.

    SORT li_entry BY lifnr.
    li_entry1[] = li_entry[].
    DELETE ADJACENT DUPLICATES FROM li_entry1 COMPARING lifnr.
    SELECT lifnr
           name1 INTO TABLE gi_lifnr FROM lfa1
                 FOR ALL ENTRIES IN li_entry
                 WHERE lifnr = li_entry-lifnr.
  ENDIF.
ENDFORM.                    " ZMM_GET_DATA_F01
*&---------------------------------------------------------------------*
*&      Form  ZMM_DISPLAY_DATA_F02
*&---------------------------------------------------------------------*
*       Display data
*----------------------------------------------------------------------*

FORM zmm_display_data_f02 .

  SORT gi_gate BY entry_gate_no.
  SORT gi_lifnr BY lifnr.
  SORT gi_vhcl BY vhcl_type.
  LOOP AT li_entry INTO ls_entry.
    READ TABLE gi_vhcl INTO gs_vhcl WITH KEY vhcl_type = ls_entry-vhcl_type.
    MOVE: ls_entry-drvr_name        TO gs_entry-drvr_name,
          ls_entry-drvr_no          TO gs_entry-drvr_no,
          ls_entry-entry_crdt       TO gs_entry-entry_crdt,
          ls_entry-entry_crtim      TO gs_entry-entry_crtim,
          ls_entry-entry_gate_no    TO gs_entry-entry_gate_no,
          ls_entry-enty_entby       TO gs_entry-enty_entby,
          ls_entry-enty_exby        TO gs_entry-enty_exby,
          ls_entry-exit_crdt        TO gs_entry-exit_crdt,
          ls_entry-exit_crtim       TO gs_entry-exit_crtim,
          ls_entry-exit_gate_no     TO gs_entry-exit_gate_no,
          ls_entry-gate_trans_no    TO gs_entry-gate_trans_no,
          ls_entry-lifnr            TO gs_entry-lifnr,
          ls_entry-trans_mode       TO gs_entry-trans_mode,
          ls_entry-vhcl_no          TO gs_entry-vhcl_no,
          ls_entry-vhcl_stat        TO gs_entry-vhcl_stat,
          ls_entry-werks            TO gs_entry-werks,
          ls_entry-zyear            TO gs_entry-zyear.


    READ TABLE gi_lifnr INTO gs_lifnr WITH KEY lifnr = ls_entry-lifnr BINARY SEARCH.
    IF sy-subrc = 0.
      gs_entry-v_name = gs_lifnr-name1.
    ENDIF.

    READ TABLE gi_gate  INTO gs_gate WITH KEY entry_gate_no = ls_entry-entry_gate_no BINARY SEARCH.
    IF sy-subrc = 0.
      gs_entry-entry_gate_des = gs_gate-entry_gate_name.
    ENDIF.

    READ TABLE gi_gate  INTO gs_gate WITH KEY entry_gate_no = ls_entry-exit_gate_no BINARY SEARCH.
    IF sy-subrc = 0.
      gs_entry-exit_gate_des = gs_gate-exit_gate_name.
    ENDIF.
    IF ls_entry-trans_type = c_01.
      gs_entry-trans_des   = text-t01.
    ELSEIF ls_entry-trans_type = c_02.
      gs_entry-trans_des   = text-t02.
      user-sapname         = ls_entry-exit_crby.
      PERFORM zmm_user_name_f03 USING user CHANGING user_data.        "Get user fullname
      gs_entry-exit_crby   = user_data-fullname.
      CLEAR user_data.
    ENDIF.
    gs_entry-vhcl_des      = gs_vhcl-vhcl_des.
    gs_entry-sel           = icon_wd_radio_button_empty.

    user-sapname           = ls_entry-entry_crby.
    PERFORM zmm_user_name_f03 USING user CHANGING user_data.          "Get user fullname
    gs_entry-entry_crby    = user_data-fullname.
    CLEAR user_data.

    APPEND gs_entry TO gi_entry.
    CLEAR: gs_entry, gs_vhcl, gs_gate, ls_entry, gs_lifnr.
  ENDLOOP.
  REFRESH: gi_vhcl, gi_gate, li_entry, gi_lifnr.
  SORT gi_entry BY gate_trans_no.

  ASSIGN: gi_field TO <fs_fcat>,
          gs_field TO <fs>.

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name         = sy-repid
      i_structure_name       = c_struc
    CHANGING
      ct_fieldcat            = <fs_fcat>
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  IF sy-subrc = 0.
    READ TABLE <fs_fcat> ASSIGNING <fs> WITH KEY fieldname = c_sel.
    <fs>-hotspot = c_x.
    READ TABLE <fs_fcat> ASSIGNING <fs> WITH KEY fieldname = c_created_by.
    <fs>-no_out  = c_x.
    READ TABLE <fs_fcat> ASSIGNING <fs> WITH KEY fieldname = c_entry_gate_no.
    <fs>-no_out  = c_x.
    READ TABLE <fs_fcat> ASSIGNING <fs> WITH KEY fieldname = c_exit_gate_no.
    <fs>-no_out  = c_x.
  ENDIF.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = c_pf_status
      i_callback_user_command  = c_second_page
      it_fieldcat              = <fs_fcat>
    TABLES
      t_outtab                 = gi_entry
    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.                    " ZMM_DISPLAY_DATA_F02

No comments:

Post a Comment