Skip to Content
Author's profile photo Kevin Wilson

SAP EM TIPS #2: Sending the Overdue List of SAP EM in the Background

Scenario

The standard SAP EM overdue list /SAPTRX/EE_OVD_LIST does not support creating it in the background. This report generates a spool list. In the job that creates the spool list we maintain the distribution list to email it to the recipients.


Maintaining a distribution list

Maintain a shared distribution list using transaction SO23


Creating the job

Create a job using transaction SM36 with step ZSAPTRX_EE_OVERDUE_LIST and Spool list recipient being the distribution list created above.


Report

The report below was copied from /SAPTRX/EE_OVD_LIST and modified to work in the backround.


Selection Texts

  • P_AO_ID          Application object ID
  • P_AO_SYS       Application system
  • P_AO_TP          Application Object Type
  • P_EVCODE      Event internal code
  • P_EVGRP         Event code group
  • P_EVTDAT       Expected event date
  • P_MSGDAT      Expected message date
  • P_PARCS         Partner ID Codeset (Sender)
  • P_PARID          Partner ID (Sender)
  • P_TRID             Tracking ID
  • P_TRIDTP         Tracking ID codeset
  • P_TROBTP       Business process type
  • P_TRTP            Event handler type
  • P_VARI             Report Display Variant
  • S_LBL              Participation Label
  • S_MATNR         Material Number
  • S_MRPCRL       MRP Controller
  • S_PLANT          Plant
  • S_PLNDTE       PO Planned Delivery Date
  • S_PONUM        PO Number
  • S_POORG        Purchasing Organization
  • S_POTYP         PO Type
  • S_VNDNO        Vendor Number


Text Symbols

  • 001                   Event handler
  • 002                   Expected event
  • 011                   Appl obj type
  • 013                   Appl System
  • 014                   Appl obj ID
  • 015                   Track ID Codeset
  • 016                   Tracking ID
  • 017                   PO NUMBER
  • 018                   PO LINE
  • 019                   Material
  • 020                   Material
  • 021                   PLANT
  • 022                   PO TYPE
  • 023                   PO ORG
  • 024                   MRP CTL
  • 025                   Planned Deliv Dt
  • 026                   Vendor
  • 027                   Vendor Name
  • 028                   Overdue Days
  • T01                   Variant for Report
  • T02                   Display variant
  • T03                   Report Display Variant
  • T04                   Parameter Selections


ABAP Code

*&———————————————————————*

*& Report ZSAPTRX_EE_OVERDUE_LIST                                     *

*&———————————————————————*

REPORT  ZSAPTRX_EE_OVERDUE_LIST.

TYPE-POOLS: sscr, slis.

TABLES: /saptrx/eh_hdr,

        /saptrx/eh_expev.

CONSTANTS: c_true     VALUE ‘X’,

            report     TYPE rsvar-report VALUE ‘ZSAPTRX_EE_OVERDUE_LIST’.

DATA: variante        LIKE disvariant,          

      def_variante    LIKE disvariant,          

      variant_exit(1) TYPE c,

      variant_save(1) TYPE c,
alv_default_variant    LIKE disvariant-variant,

      layout          TYPE slis_layout_alv,

      fieldcat        TYPE slis_t_fieldcat_alv,

      gs_layout       TYPE lvc_s_layo,

      gs_var_layout   TYPE disvariant,

      ls_fieldcat     TYPE slis_fieldcat_alv,

      lt_fieldcat     TYPE slis_t_fieldcat_alv,

      wa_fieldcat1    TYPE LINE OF slis_t_fieldcat_alv.

TYPES: BEGIN OF to_ex_ev,

         ao_system       LIKE /saptrx/eh_hdr-ao_system,

         ao_type         LIKE /saptrx/eh_hdr-ao_type,

         ao_id           LIKE /saptrx/eh_hdr-ao_id,

         trackingidtype  LIKE /saptrx/eh_hdr-trackingidtype,

         trackingid      LIKE /saptrx/eh_hdr-trackingid.

        INCLUDE STRUCTURE /saptrx/eh_expev_dyn.

TYPES:   po_number(10)   TYPE n,

         po_line(6)      TYPE n,

         matnr(10)       TYPE c,

         matx(33)        TYPE c,

         plant(4)        TYPE c,

         po_type(4)      TYPE c,

         po_org(4)       TYPE c,

         mrp_cntrl(3)    TYPE c,

         po_pln_dte      TYPE sy-datum,

         vendor_no(10)   TYPE c,

         vendor_name(20) TYPE c,

         overdue_days(5) type n,

po_item_qty(10)    type p decimals 0,

         po_gr_qty(10)      type p decimals 0,

         po_gr_diff(10)     type p decimals 0,

         par_lbl(11)   type c.

TYPES: END OF to_ex_ev.

INITIALIZATION.

  variant_save = ‘A’.

  CLEAR variante.

  variante-report = sy-repid.

  def_variante = variante.

  CALL FUNCTION ‘REUSE_ALV_VARIANT_DEFAULT_GET’

    EXPORTING

      i_save     = variant_save

    CHANGING

      cs_variant = def_variante

    EXCEPTIONS

      not_found  = 2.

  IF sy-subrc = 0.

    MOVE  def_variante-variant  TO alv_default_variant.

    p_vari = def_variante-variant.

  ENDIF.

AT SELECTION-SCREEN.

  IF NOT p_vari IS INITIAL.

    MOVE variante TO def_variante.

    MOVE p_vari TO def_variante-variant.

    CALL FUNCTION ‘REUSE_ALV_VARIANT_EXISTENCE’

      EXPORTING

        i_save     = variant_save

      CHANGING

        cs_variant = def_variante.

    variante = def_variante.

  ELSE.

    CLEAR variante.

    variante-report = sy-repid.

  ENDIF.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.

  PERFORM f4_for_variant.

START-OF-SELECTION.

  PERFORM get_data.

  IF g_exp_ev IS INITIAL.

    MESSAGE i252(aq).  ” no records found

    EXIT.

  ENDIF.

END-OF-SELECTION.

*** Main Program

  PERFORM build_fieldcatalog.

  gs_layout-no_hgridln = c_true.

  gs_var_layout-report = report.

  CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’

      EXPORTING

           i_callback_program       = v_pgm

           i_callback_pf_status_set = ‘STATUS’

           i_callback_user_command  = ‘USER_COMMAND’

           is_layout                = layout

           it_fieldcat              = lt_fieldcat[]

           i_default                = ‘X’

           i_save                   = ‘A’              

           is_variant               = variante         

      TABLES

           t_outtab                 = g_exp_ev

           EXCEPTIONS

           OTHERS                   = 2.

  IF  NOT sy-subrc IS INITIAL.        

    MESSAGE ID sy-msgid TYPE  ‘S’     NUMBER sy-msgno

            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ENDIF.

*&———————————————————————*

*&      Module  pbo OUTPUT

*&———————————————————————*

FORM build_fieldcatalog.

  DATA: BEGIN OF l_cols OCCURS 14,

           col_name LIKE ls_fieldcat-fieldname,

           position LIKE ls_fieldcat-col_pos,

        END OF l_cols,

        l_col       LIKE LINE OF l_cols.

  l_cols-col_name = ‘EVENT_CODE’.

  l_cols-position = 6.                  APPEND l_cols.

  l_cols-col_name = ‘MSG_EXP_DATE’.

  l_cols-position = 7.                  APPEND l_cols.

  l_cols-col_name = ‘LATEST_MSG_DATE’.

  l_cols-position = 8.                  APPEND l_cols.

  l_cols-col_name = ‘MSG_RCVD_DATE’.

  l_cols-position = 9.                  APPEND l_cols.

  l_cols-col_name = ‘EVENT_EXP_DATE’.

  l_cols-position = 10.                 APPEND l_cols.

  l_cols-col_name = ‘EVENT_DATE’.

  l_cols-position = 11.                 APPEND l_cols.

  l_cols-col_name = ‘LATEST_EV_DATE’.

  l_cols-position = 12.                 APPEND l_cols.

  l_cols-col_name = ‘PARTNER_ID_TYPE’.

  l_cols-position = 13.                 APPEND l_cols.

  l_cols-col_name = ‘PARTNER_ID’.

  l_cols-position = 14.                 APPEND l_cols.

  l_cols-col_name = ‘LOC_ID_TYPE’.

  l_cols-position = 15.                 APPEND l_cols.

  l_cols-col_name = ‘LOC_ID_1’.

  l_cols-position = 16.                 APPEND l_cols.

  l_cols-col_name = ‘MSG_STATUS’.

  l_cols-position = 17.                 APPEND l_cols.

  ls_fieldcat-fieldname  = ‘AO_TYPE’.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘Appl obj type’ (011).

  ls_fieldcat-intlen     = 4.

  ls_fieldcat-outputlen  = 4.

  ls_fieldcat-col_pos    = 2.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘AO_ID’.

  ls_fieldcat-col_pos    = 3.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘Appl obj ID’ (014).

  ls_fieldcat-intlen     = 30.

  ls_fieldcat-outputlen  = 12.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘AO_SYSTEM’.

  ls_fieldcat-col_pos    = 1.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘Appl System'(013).

  ls_fieldcat-intlen     = 30.

  ls_fieldcat-outputlen  = 12.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘TRACKINGIDTYPE’.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘Track ID Codeset'(015).

  ls_fieldcat-intlen     = 20.

  ls_fieldcat-outputlen  = 10.

  ls_fieldcat-col_pos    = 4.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘TRACKINGID’.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘Tracking ID'(016).

  ls_fieldcat-intlen     = 50.

  ls_fieldcat-outputlen  = 20.

  ls_fieldcat-col_pos    = 5.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘PO_NUMBER’.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘PO NUMBER'(017).

  ls_fieldcat-intlen     = 10.

  ls_fieldcat-outputlen  = 10.

  ls_fieldcat-col_pos    = 18.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘PO_LINE’.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘PO LINE'(018).

  ls_fieldcat-intlen     = 7.

  ls_fieldcat-outputlen  = 7.

  ls_fieldcat-col_pos    = 19.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘MATNR’.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘Material'(019).

  ls_fieldcat-intlen     = 10.

  ls_fieldcat-outputlen  = 10.

  ls_fieldcat-col_pos    = 20.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘MATX’.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘Material'(020).

  ls_fieldcat-intlen     = 33.

  ls_fieldcat-outputlen  = 33.

  ls_fieldcat-col_pos    = 21.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘PLANT’.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘PLANT'(021).

  ls_fieldcat-intlen     = 4.

  ls_fieldcat-outputlen  = 4.

  ls_fieldcat-col_pos    = 22.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘PO_TYPE’.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘PO TYPE'(022).

  ls_fieldcat-intlen     = 4.

  ls_fieldcat-outputlen  = 4.

  ls_fieldcat-col_pos    = 23.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘PO_ORG’.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘PO ORG'(023).

  ls_fieldcat-intlen     = 4.

  ls_fieldcat-outputlen  = 4.

  ls_fieldcat-col_pos    = 24.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘MRP_CNTRL’.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘MRP CTL'(024).

  ls_fieldcat-intlen     = 3.

  ls_fieldcat-outputlen  = 3.

  ls_fieldcat-col_pos    = 25.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘PO_PLN_DTE’.

  ls_fieldcat-inttype    = ‘D’.

  ls_fieldcat-reptext_ddic    = ‘Planned Deliv Dte'(025).

  ls_fieldcat-intlen     = 8.

  ls_fieldcat-outputlen  = 8.

  ls_fieldcat-col_pos    = 26.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘VENDOR_NO’.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘Vendor'(026).

  ls_fieldcat-intlen     = 10.

  ls_fieldcat-outputlen  = 10.

  ls_fieldcat-col_pos    = 27.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘VENDOR_NAME’.

  ls_fieldcat-inttype    = ‘C’.

  ls_fieldcat-reptext_ddic    = ‘Vendor Name'(027).

  ls_fieldcat-intlen     = 20.

  ls_fieldcat-outputlen  = 20.

  ls_fieldcat-col_pos    = 28.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘OVERDUE_DAYS’.

  ls_fieldcat-inttype    = ‘N’.

  ls_fieldcat-reptext_ddic    = ‘Overdue Days'(028).

  ls_fieldcat-intlen     = 5.

  ls_fieldcat-outputlen  = 5.

  ls_fieldcat-col_pos    = 29.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘PO_ITEM_QTY’.

  ls_fieldcat-reptext_ddic    = ‘PO QTY'(029).

  ls_fieldcat-intlen     = 13.

  ls_fieldcat-outputlen  = 13.

  ls_fieldcat-col_pos    = 30.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘PO_GR_QTY’.

  ls_fieldcat-reptext_ddic    = ‘GR QTY'(030).

  ls_fieldcat-intlen     = 13.

  ls_fieldcat-outputlen  = 13.

  ls_fieldcat-col_pos    = 31.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘PO_GR_DIFF’.

  ls_fieldcat-reptext_ddic    = ‘PO/GR QTY DIFF'(031).

  ls_fieldcat-intlen     = 10.

  ls_fieldcat-outputlen  = 10.

  ls_fieldcat-col_pos    = 32.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  ls_fieldcat-fieldname  = ‘PAR_LBL’.

  ls_fieldcat-reptext_ddic    = ‘LBL'(032).

  ls_fieldcat-intlen     = 11.

  ls_fieldcat-outputlen  = 11.

  ls_fieldcat-col_pos    = 33.

  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.

  CALL FUNCTION ‘REUSE_ALV_FIELDCATALOG_MERGE’

    EXPORTING

      i_program_name   = ‘ZSAPTRX_EE_OVERDUE_LIST

      i_structure_name = ‘/SAPTRX/EH_EXPEV’

    CHANGING

      ct_fieldcat      = fieldcat.

  LOOP AT fieldcat INTO wa_fieldcat1.

    READ TABLE l_cols INTO l_col

                       WITH KEY col_name = wa_fieldcat1-fieldname.

    IF sy-subrc = 0.

      wa_fieldcat1-col_pos = l_col-position.

      APPEND wa_fieldcat1 TO lt_fieldcat.

    ENDIF.

  ENDLOOP.

  1. ENDFORM. “build_fieldcatalog

*&———————————————————————*

*&      Form  get_data

*&———————————————————————*

FORM get_data.

  DATA: l_tst       TYPE timestamp,

        save_guid   LIKE /saptrx/eh_info-eh_guid.

  DATA:  lt_exp_ev_guids TYPE TABLE OF to_ex_ev

          WITH HEADER LINE.

  DATA: li_hdr_info TYPE STANDARD TABLE OF zem_pur_eh

          WITH HEADER LINE.

  DATA: BEGIN OF t_params OCCURS 0,

          eh_guid LIKE /saptrx/eh_info-eh_guid,

          param_name  LIKE /saptrx/eh_info-param_name,

          param_value LIKE /saptrx/eh_info-param_value,

        END OF t_params.

  DATA: BEGIN OF li_params OCCURS 0,

          eh_guid         LIKE /saptrx/eh_info-eh_guid,

          po_number(10)   TYPE n,

          po_line(6)      TYPE n,

          matnr(10)       TYPE c,

          matx(33)        TYPE c,

          plant(4)        TYPE c,

          po_type(4)      TYPE c,

          po_org(4)       TYPE c,

          mrp_cntrl(3)    TYPE c,

          po_pln_dte      TYPE sy-datum,

          vendor_no(10)   TYPE c,

          vendor_name(20) TYPE c,

          po_item_qty(10) TYPE p decimals 0,

          po_gr_qty(10)   TYPE p decimals 0,

          par_label(11)   TYPE c,

      END OF li_params.

  CONSTANTS: co_not_expected TYPE /saptrx/ee_msg_status VALUE ‘ ‘.

  GET TIME STAMP FIELD l_tst.

  IF p_msgdat[] IS INITIAL.

    p_msgdat-sign = ‘I’.

    p_msgdat-option = ‘BT’.

    p_msgdat-low = ‘0’.

    p_msgdat-high = l_tst.

    APPEND p_msgdat.

  ENDIF.

  REFRESH meindex.

  LOOP AT p_msgdat.

    meindex-sign = p_msgdat-sign.

    meindex-option = p_msgdat-option.

    meindex-low = p_msgdat-low+1(12).

    meindex-high = p_msgdat-high+1(12).

    APPEND meindex.

  ENDLOOP.

  IF p_evtdat[] IS INITIAL.

    p_evtdat-sign = ‘I’.

    p_evtdat-option = ‘BT’.

    p_evtdat-low = ‘0’.

    p_evtdat-high = l_tst.

    APPEND p_evtdat.

  ENDIF.

  REFRESH eeindex.

  LOOP AT p_evtdat.

    eeindex-sign = p_evtdat-sign.

    eeindex-option = p_evtdat-option.

    eeindex-low = p_evtdat-low+1(12).

    eeindex-high = p_evtdat-high+1(12).

    APPEND eeindex.

  ENDLOOP.

  REFRESH evstat.

  evstat-sign = ‘I’.

  evstat-option = ‘EQ’.

  evstat-low = ‘O’.

  APPEND evstat.

  REFRESH g_exp_ev.

  SELECT o~eh_guid o~ao_system o~ao_type o~ao_id o~trackingidtype

         o~trackingid e~event_code

         e~event_group e~partner_id_type e~msg_exp_date

         e~orig_msg_exp_dte e~earliest_msg_dte e~latest_msg_date

         e~msg_rcvd_date e~event_exp_date e~orig_ev_exp_date

         e~earliest_ev_date e~latest_ev_date e~event_date

         e~msg_status e~partner_id_type e~partner_id

     INTO CORRESPONDING FIELDS OF TABLE t_exp_ev

     FROM /saptrx/eh_hdr AS o INNER JOIN /saptrx/eh_expev AS e

     ON   o~eh_guid = e~eh_guid

     WHERE

     o~eh_active = c_true            AND

     o~trackingidtype    IN p_tridtp AND

     o~trackingid        IN p_trid   AND

     o~ao_system         IN p_ao_sys AND

     o~ao_type           IN p_ao_tp  AND

     o~ao_id             IN p_ao_id  AND

     o~bus_proc_type     IN p_trobtp AND

     o~eh_type           IN p_trtp   AND

     e~event_code        IN p_evcode AND

     e~event_group       IN p_evgrp  AND

     e~partner_id_type   IN p_parcs AND

     e~partner_id        IN p_parid  AND

   ( ( e~msg_status      IN evstat   AND

       e~msg_exp_index   IN meindex ) OR

     ( e~msg_status      = co_not_expected AND

       e~event_status    IN evstat AND

       e~event_exp_index IN eeindex ) ).

  APPEND LINES OF t_exp_ev TO g_exp_ev.

  SORT t_exp_ev BY eh_guid.

  lt_exp_ev_guids[] = t_exp_ev[] .

  DELETE ADJACENT DUPLICATES FROM lt_exp_ev_guids

    COMPARING eh_guid.

  SELECT eh_guid param_name param_value INTO TABLE t_params

      FROM /saptrx/eh_info FOR ALL ENTRIES IN lt_exp_ev_guids

      WHERE  eh_guid = lt_exp_ev_guids-eh_guid.

  SELECT eh_guid param_name param_value APPENDING TABLE t_params

      FROM /saptrx/eh_cntrl FOR ALL ENTRIES IN lt_exp_ev_guids

      WHERE  eh_guid = lt_exp_ev_guids-eh_guid.

  SELECT * INTO TABLE li_hdr_info FROM zem_pur_eh

   FOR ALL ENTRIES IN lt_exp_ev_guids

      WHERE  eh_guid = lt_exp_ev_guids-eh_guid.

  SORT: t_params BY eh_guid, li_hdr_info BY eh_guid.

  CLEAR save_guid.

  LOOP AT t_params.

*combine all parameter values for the same guid

    IF NOT save_guid IS INITIAL.

      IF NOT t_params-eh_guid = save_guid.

        save_guid = t_params-eh_guid.

        APPEND li_params.

        CLEAR li_params.

        li_params-eh_guid = t_params-eh_guid.

      ENDIF.

    ELSE.

      li_params-eh_guid = t_params-eh_guid.

      save_guid = t_params-eh_guid.

    ENDIF.

    READ TABLE li_hdr_info

     WITH KEY eh_guid = t_params-eh_guid

     BINARY SEARCH.

    IF sy-subrc = 0.

      li_params-po_number = li_hdr_info-po_number.

      li_params-plant     = li_hdr_info-plant.

      li_params-po_type   = li_hdr_info-po_type.

      li_params-vendor_no =  li_hdr_info-vendor_no.

    ENDIF.

    IF t_params-param_name = ‘PO_NUMBER’.

      li_params-po_number = t_params-param_value.

    ENDIF.

    IF t_params-param_name = ‘VENDOR_NUMBER’.

      li_params-vendor_no = t_params-param_value.

    ENDIF.

    IF t_params-param_name = ‘VENDOR_NAME’.

      li_params-vendor_name = t_params-param_value.

    ENDIF.

    IF t_params-param_name = ‘PO_LINE_NUMBER’.

      li_params-po_line = t_params-param_value.

    ENDIF.

    IF t_params-param_name = ‘MATERIAL’.

      li_params-matnr = t_params-param_value+8(10).

    ENDIF.

    IF t_params-param_name = ‘MATERIAL_TEXT’.

      li_params-matx = t_params-param_value.

    ENDIF.

    IF t_params-param_name = ‘PURCHASE_ORG’.

      li_params-po_org = t_params-param_value.

    ENDIF.

    IF t_params-param_name = ‘MRP_CONTROLLER’.

      li_params-mrp_cntrl = t_params-param_value.

    ENDIF.

    IF t_params-param_name = ‘PO_LATEST_DLV_DATE’.

      li_params-po_pln_dte = t_params-param_value.

    ENDIF.

    IF t_params-param_name = ‘PO_ITEM_QTY’.

      li_params-po_ITEM_qty = t_params-param_value.

    ENDIF.

    IF t_params-param_name = ‘PO_GR_QTY’.

      li_params-PO_gr_qty = t_params-param_value.

    ENDIF.

    IF t_params-param_name = ‘PARTICIPATION_LABEL’.

      li_params-par_label = t_params-param_value.

    ENDIF.

  ENDLOOP.

*in case of 1st or last

  IF NOT li_params IS INITIAL.

    APPEND li_params.

  ENDIF.

  DELETE li_params WHERE

po_number NOT IN s_ponum  OR

matnr     NOT IN s_matnr  OR

plant     NOT IN s_plant  OR

po_type   NOT IN s_potyp OR

po_org    NOT IN s_poorg   OR

                    mrp_cntrl NOT IN s_mrpcrl  OR

po_pln_dte  NOT IN s_plndte OR

vendor_no NOT IN s_vndno    or

par_label not in s_lbl.

  LOOP AT g_exp_ev ASSIGNING <fs_exp_ev>.

    READ TABLE li_params WITH KEY

       eh_guid =  <fs_exp_ev>-eh_guid

       BINARY SEARCH.

    IF NOT sy-subrc = 0.

      DELETE g_exp_ev.” from <fs_exp_ev>.

    ELSE.

      <fs_exp_ev>-po_number = li_params-po_number.

      <fs_exp_ev>-po_line   = li_params-po_line.

      <fs_exp_ev>-matnr     = li_params-matnr.

      <fs_exp_ev>-matx      = li_params-matx.

      <fs_exp_ev>-plant     = li_params-plant.

      <fs_exp_ev>-po_type   = li_params-po_type.

      <fs_exp_ev>-po_org    = li_params-po_org.

       <fs_exp_ev>-mrp_cntrl = li_params-mrp_cntrl.

      <fs_exp_ev>-po_pln_dte  = li_params-po_pln_dte.

       <fs_exp_ev>-vendor_no = li_params-vendor_no.

      <fs_exp_ev>-vendor_name = li_params-vendor_name.

      <fs_exp_ev>-po_item_qty = li_params-po_item_qty.

       <fs_exp_ev>-po_gr_qty  = li_params-po_gr_qty.

      <FS_EXP_EV>-PAR_LBL  = li_params-par_label.

*get number of overdue days

      IF NOT <fs_exp_ev>-event_exp_date IS INITIAL.

        date1 = <fs_exp_ev>-event_exp_date+1(8).

        date2 = sy-datum.

        time1 = <fs_exp_ev>-event_exp_date+9(6).

        time2 = sy-uzeit.

        PERFORM datetime_difference

                USING date1 time1 date2 time2

                  datediff .

        IF sy-subrc = 0.

           <fs_exp_ev>-overdue_days = datediff.

        ENDIF.

      ENDIF.

*get po/gr qty diff

      <fs_exp_ev>-po_gr_diff =

      <fs_exp_ev>-po_item_qty – <fs_exp_ev>-po_gr_qty .

    ENDIF.

  ENDLOOP.

ENDFORM. ” get_data

*&———————————————————————*

*&      Form  F4_FOR_VARIANT

*&———————————————————————*

FORM f4_for_variant .

  CALL FUNCTION ‘REUSE_ALV_VARIANT_F4’

       EXPORTING

            is_variant          = variante

            i_save              = variant_save

       IMPORTING

            e_exit              = variant_exit

            es_variant          = def_variante

       EXCEPTIONS

            not_found = 2.

  IF sy-subrc = 2.

    MESSAGE ID sy-msgid TYPE ‘S’ NUMBER sy-msgno

            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  ELSE.

    IF variant_exit = space.

      p_vari = def_variante-variant.

    ENDIF.

  ENDIF.

ENDFORM. ” F4_FOR_VARIANT

*&———————————————————————*

*&      Form  PF_STATUS_SET

*&———————————————————————*

FORM status USING     extab TYPE slis_t_extab.

  SET PF-STATUS ‘STANDARD_FULLSCREEN’.   “EXCLUDING EXTAB.

ENDFORM. “STATUS

*&———————————————————————*

*&      Form  USER_COMMAND

*&———————————————————————*

FORM user_command USING r_ucomm LIKE sy-ucomm

               rs_selfield TYPE slis_selfield.

  DATA: ls_ee    TYPE to_ex_ev,

        l_tabix LIKE sy-tabix.

  l_tabix = rs_selfield-tabindex.

  CASE r_ucomm.

    WHEN ‘DETAILS’ OR ‘&IC1’.

      READ TABLE  g_exp_ev INTO ls_ee INDEX l_tabix.

      CALL FUNCTION ‘/SAPTRX/EH_DETAILS’

        EXPORTING

          i_guid = ls_ee-eh_guid.

  ENDCASE.

ENDFORM.                               ” USER_COMMAND

*&———————————————————————*

*&      Form  DATETIME_DIFFERENCE

*&———————————————————————*

*       Calculate difference between two dates/times                   *

*———————————————————————-*

*  –>  date1 Date 1

*  –>  time1 Time 1

*  –>  date2 Date 2

*  –>  time2 Time 2

*  <–  daydiff Datedifference (absolute)

*  <–  hourdiff Timedifference (absolute)

*  <–  earliest Flag to show which datetime is earlier (1 or 2)

*———————————————————————-*

FORM datetime_difference

       USING date1 TYPE d time1 TYPE t

             date2 TYPE d time2 TYPE t

             daydiff TYPE p .

  DATA: d1 TYPE d, d2 TYPE d, t1 TYPE t, t2 TYPE t.

  DATA: timediff TYPE t,

        hourdiff TYPE p,

        earliest TYPE c.

  FIELD-SYMBOLS: <h>, <m>, <s>.

* Which date/time is earlier ?

  IF date1 > date2.

    earliest = ‘2’.

  ELSEIF date2 > date1.

    earliest = ‘1’.

  ELSE.

    IF time1 > time2.

      earliest = ‘2’.

    ELSEIF time2 > time1.

      earliest = ‘1’.

    ELSE.

*—- Both are equal

      earliest = ‘0’.

      daydiff = 0.

      hourdiff = 0.

      EXIT.

    ENDIF.

  ENDIF.

* Assign dates / times and swap it if necessary

  IF earliest = ‘1’.

    d1 = date1.

    t1 = time1.

    d2 = date2.

    t2 = time2.

  ELSE.

    d1 = date2.

    t1 = time2.

    d2 = date1.

    t2 = time1.

  ENDIF.

* Calculate hours difference

  timediff = t2 – t1.

  ASSIGN timediff+0(2) TO <h>.

  ASSIGN timediff+2(2) TO <m>.

  ASSIGN timediff+4(2) TO <s>.

  hourdiff = <h> + ( <m> / 60 ) + ( <s> / 3600 ).

* If no date difference then exit

  IF d2 = d1.

    daydiff = 0.

    EXIT.

  ENDIF.

* Check for time underflow and correct second date

  IF timediff > t2.

    d2 = d2 – 1.

  ENDIF.

* Calculate date difference

  daydiff = d2 – d1.

ENDFORM.                               ” DATETIME_DIFFERENCE

Assigned Tags

      Be the first to leave a comment
      You must be Logged on to comment or reply to a post.