Thursday, 19 March 2015

                                  ZMM_GPR_CREATE


Screens
100. GPR main screen.


101. Dialogue box for selection of gpr type

110. Screen for returnable and non returnable


200. Screen for organization data

210. Sub screen for vendor details

220. Sub screen for transport details

230. Sub screen for text/reason

240. Sub screen for  ship to address

250. Sub screen for long text

                                               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