Saturday, May 25, 2013

HOW to delete Lock Entries in SAP.


 
REPORT ZDELLOCKENTRIES.

 data : zenq type standard table of seqg3.
    call function 'ENQUE_READ'
      exporting
        gclient = sy-mandt
        gname   = 'LIKP'       """" table name
        guname  = sy-uname
      tables
        enq     = zenq.

    if zenq[] is not initial.
      call function 'ENQUE_DELETE'
        tables
          enq = zenq.
      clear: zenq, zenq[].
    endif.

Monday, May 13, 2013

Convert Number To words Using ABAP


Today I want to share some ABAP code samples that you can use to convert numbers or amount into words using SPELL_AMOUNT function module.

Here’s the ABAP Sample code:

data:
lw_spell LIKE spell,
saywords(150),
lv_text TYPE ltext,
p_amt TYPE eban-preis,
p_amt2(15),
p_waers type eban-waers.
START-OF-SELECTION.
p_amt = ’123450′.
p_waers = ‘USD’.
SELECT SINGLE ktext INTO lv_text
FROM tcurt
WHERE spras = sy-langu
AND waers = p_waers.
TRANSLATE lv_text to UPPER CASE.
CALL FUNCTION ‘SPELL_AMOUNT’
EXPORTING
amount = p_amt
currency = p_waers
filler = ‘ ‘
language = sy-langu
IMPORTING
in_words = lw_spell.
DATA: lv_cent TYPE spell.
lw_spell-decimal = lw_spell-decimal / 10.
IF lw_spell-decimal IS NOT INITIAL.
CALL FUNCTION ‘SPELL_AMOUNT’
EXPORTING
amount = lw_spell-decimal
* currency = lw_vbak-waerk
filler = ‘ ‘
language = sy-langu
IMPORTING
in_words = lv_cent.
ENDIF.

IF NOT lv_cent-word IS INITIAL.
CONCATENATE lw_spell-word ‘AND’ lv_cent-word ‘CENTS’
lv_text INTO saywords
SEPARATED BY space.
ELSE.
CONCATENATE lw_spell-word lv_text INTO saywords
SEPARATED BY space.
ENDIF.
WRITE p_amt to p_amt2 CURRENCY p_waers.
WRITE:/ p_amt2, saywords.
“end code

Run the program and you will see the number has been converted into words.
18-0ct-10-01

How To Know What TCODE Used In ABAP Program


Today I want to teach you how to find out what TCODE that is used by the ABAP Program, to do this we can see the package of the program it self, in order to do this, you can execute TCODE SE80.
Select Program in the “Test Repository” tab, and enter the ABAP Program name, press enter to continue.

Now you can see that this program package consists of several folders such as Dictionary Structures, Fields, Events, Subroutines, etc.

The folder you need to open is the “Transactions” folder, there you will find the TCODE for this ABAP program name.
11092010-onpn

How To Maintain Long Text Object in SAP


Long Text has many usages in SAP, in this text object we can put on information such as names, job position without have to create any tables or user exits.
To read the information in the long text object, we’re can use the “READ_TEXT” function, You can check here to find out how to read from the text object.

The TCODE you can use to maintain long text object in SAP is SO10. Using this tcode you can edit or just display the value of the long text object.

12102010-maintainlt-01
After you execute the TCODE, you need to enter, TEXT NAME, TEXT ID and LANGUAGE. Click Display or Change To maintain the long text values.

SAP Table Maintenance Display


In previous tutorial, you’ve learned how to create table maintenance generator by using TCODE SE54, today you will learn how to create the table display that utilizes TCODE SM30 to maintain the table values.
1. Execute TCODE SE93.
Enter the TCODE name, start with Z or Y.
Choose “Transaction with parameters (Parameter transaction).
Click “OK”
03112010-sm30-00
2. Now you need to fill in these values:
Default Values For:
-Transaction: SM30
-Check “Skip Initial Screen”
Classification:
-Check “Inherit GUI attributes”
Default Values:
VIEWNAME -> Transparent Table Name
UPDATE -> X
See below picture for reference.
SM30
SM30
03112010-sm30-02
3. Click the Save button.
4. Execute the TCODE you just created. Now you can maintain the tables values, such as Adding new entries, delete row.
03112010-sm30-04jpg

How To Change User Password In SAP Login


If you want to change your User password in SAP you can use the front end login to do just that! Here’s the step to change your SAP password
1. Type in you SAP user name and your initial password
Untitled
2. Click on the “New Password” button on your up left corner.
reset password
3. Input your new password and click ok.
changepassq

How To Change SAP Logon Screen Background Color


Today I want to share teach you how to change the SAP logon background color, this tips will be useful to have a different color for each client, for example color green for development, yellow for QA or blue for production.
1. First step is to open you SAP Login screen. On the right corner of your standar toolbar click on the colored icon button and the click the option menu or you can also access it by pressing ALT+F12.
1
2. Change the default Theme into “Enjoy Theme” then click the Apply button.
2
3. After you click on the OK button, close all your sap screen because to access the color system menu you need to start the sap logon screen using the Enjoy theme.
4. Open your SAP logon screen again and click on the CTRL+F12 and click option, now you can see the Colors in System option where you can change the sap system color with your prefered color.
3
5. Click apply and after you logged in you will see the SAP with a brand new color.

Abap Transaction Codes List

Transaction CodeProgram Name
SE01Transport Organizer (Extended View)
SE02Does Not Exist
SE03Transport Organizer Tools
SE04Does Not Exist
SE05Does Not Exist
SE06Post installation actions for Transport organizer
SE07Import Monitor
SE08Does Not Exist
SE09Transport Organizer
SE10Transport Organizer
SE11ABAP Data Dictionary
SE12ABAP Data Dictionary
SE13Technical Settings for dictionary
SE14Dictionary: Database Utility
SE15Object navigator
SE16data browser initial screen
SE17general table display
SE18BADI builder: initial screen for definition
SE19BADI builder: initial screen for implementation
SE20enhancement initial screen
SE21package builder
SE22Does Not Exist
SE23Does Not Exist
SE24class builder
SE25Does Not Exist
SE26Does Not Exist
SE27Does Not Exist
SE28Does Not Exist
SE29application packets
SE30ABAP Runtime analysis
SE31Does Not Exist
SE32Does Not Exist
SE33context builder
SE34Does Not Exist
SE35maintain dialog module
SE36logical database builder
SE37function module
SE38ABAP Editor
SE39split screen editor
SE40menu printer
SE41menu printer: initial screen
SE42Does Not Exist
SE43Area menu maintained
SE44Does Not Exist
SE45Does Not Exist
SE46Does Not Exist
SE47Does Not Exist
SE48Does Not Exist
SE49Does Not Exist
SE50Does Not Exist
SE51screen printer
SE52Does Not Exist
SE53Does Not Exist
SE54generate table maintenance
SE55generate table maintenance
SE56generate table maintenance
SE57generate table maintenance
SE58Does Not Exist
SE59Does Not Exist
SE60Does Not Exist
SE61Document maintenance
SE62short text activation
SE63standard translation environment
SE64Does Not Exist
SE65Does Not Exist
SE66Does Not Exist
SE67Does Not Exist
SE68Does Not Exist
SE69Does Not Exist
SE70Does Not Exist
SE71form printer
SE72style request
SE73Does Not Exist
SE74SAP script format conversion
SE75SAP script format conversion setting
SE76sap script form translation
SE77sap script style conversion
SE78form graphic
SE79Does Not Exist
SE80ABAP Work bench
SE81application hierarchy display
SE82application hierarchy display
SE83Does Not Exist
SE84object navigator
SE85object navigator
SE86Does Not Exist
SE87Does Not Exist
SE88Does Not Exist
SE89R/3 repository maintenance
SE90object navigator
SE91message maintained
SE92system log message maintenance
SE93maintain transaction
SE94simulation: customer
SE95modification browser: object selection
SE96Does Not Exist
SE97maintained transaction call authorization in call transaction
SE98Does Not Exist
SE99Does Not Exist
SE100Does Not Exist

Sunday, May 12, 2013

How to create simple color ALV report

REPORT  zcolorALV.

TABLES: ekko.

type-pools: slis. "ALV Declarations
*Data Declaration*----------------
TYPES: BEGIN OF t_ekko,
ebeln TYPE ekpo-ebeln,
ebelp TYPE ekpo-ebelp,
statu TYPE ekpo-statu,
aedat TYPE ekpo-aedat,
matnr TYPE ekpo-matnr,
menge TYPE ekpo-menge,
meins TYPE ekpo-meins,
netpr TYPE ekpo-netpr,
peinh TYPE ekpo-peinh,
line_color(4) type c, "Used to store row color attributes
END OF t_ekko.

DATA: it_ekko TYPE STANDARD TABLE OF t_ekko INITIAL SIZE 0,
wa_ekko TYPE t_ekko.
*ALV data declarations
data: fieldcatalog type slis_t_fieldcat_alv with header line,
gd_tab_group type slis_t_sp_group_alv,
gd_layout type slis_layout_alv,
gd_repid like sy-repid.

*Start-of-selection.
START-OF-SELECTION.

  perform data_retrieval.

  perform build_fieldcatalog.

  perform build_layout.

  perform display_alv_report.

*&---------------------------------------------------------------------
**& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------
** Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
form build_fieldcatalog.

  fieldcatalog-fieldname = 'EBELN'.
  fieldcatalog-seltext_m = 'Purchase Order'.
  fieldcatalog-col_pos = 0.
  fieldcatalog-outputlen = 10.
  fieldcatalog-emphasize = 'X'.
  fieldcatalog-key = 'X'.
  append fieldcatalog to fieldcatalog.
  clear fieldcatalog.

  fieldcatalog-fieldname = 'EBELP'.
  fieldcatalog-seltext_m = 'PO Item'.
  fieldcatalog-col_pos = 1.
  append fieldcatalog to fieldcatalog.
  clear fieldcatalog.

  fieldcatalog-fieldname = 'STATU'.
  fieldcatalog-seltext_m = 'Status'.
  fieldcatalog-col_pos = 2.
  append fieldcatalog to fieldcatalog.
  clear fieldcatalog.

  fieldcatalog-fieldname = 'AEDAT'.
  fieldcatalog-seltext_m = 'Item change date'.
  fieldcatalog-col_pos = 3.
  append fieldcatalog to fieldcatalog.
  clear fieldcatalog.

  fieldcatalog-fieldname = 'MATNR'.
  fieldcatalog-seltext_m = 'Material Number'.
  fieldcatalog-col_pos = 4.
  append fieldcatalog to fieldcatalog.
  clear fieldcatalog.

  fieldcatalog-fieldname = 'MENGE'.
  fieldcatalog-seltext_m = 'PO quantity'.
  fieldcatalog-col_pos = 5.
  append fieldcatalog to fieldcatalog.
  clear fieldcatalog.

  fieldcatalog-fieldname = 'MEINS'.
  fieldcatalog-seltext_m = 'Order Unit'.
  fieldcatalog-col_pos = 6.
  append fieldcatalog to fieldcatalog.
  clear fieldcatalog.

  fieldcatalog-fieldname = 'NETPR'.
  fieldcatalog-seltext_m = 'Net Price'.
  fieldcatalog-col_pos = 7.
  fieldcatalog-outputlen = 15.
  fieldcatalog-datatype = 'CURR'.
  append fieldcatalog to fieldcatalog.
  clear fieldcatalog.

  fieldcatalog-fieldname = 'PEINH'.
  fieldcatalog-seltext_m = 'Price Unit'.
  fieldcatalog-col_pos = 8.
  append fieldcatalog to fieldcatalog.
  clear fieldcatalog.
endform. " BUILD_FIELDCATALOG

*&---------------------------------------------------------------------
**& Form BUILD_LAYOUT
*&---------------------------------------------------------------------
** Build layout for ALV grid report
*----------------------------------------------------------------------*
form build_layout.
  gd_layout-no_input          = 'X'.
  gd_layout-colwidth_optimize = 'X'.
  gd_layout-totals_text       = 'Totals'(201).
  gd_layout-info_fieldname    = 'LINE_COLOR'.

endform. " BUILD_LAYOUT

*&---------------------------------------------------------------------
**& Form DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------
** Display report using ALV grid
*----------------------------------------------------------------------*
form display_alv_report.
  gd_repid = sy-repid.
  call function 'REUSE_ALV_GRID_DISPLAY'
  exporting
  i_callback_program = gd_repid
  is_layout          = gd_layout
  it_fieldcat        = fieldcatalog[]
  i_save             = 'X'
  tables
  t_outtab          = it_ekko .

endform. " DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------
**& Form DATA_RETRIEVAL
*&---------------------------------------------------------------------
** Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------
form data_retrieval.
  data: ld_color(1) type c.

  select ebeln
  ebelp
  statu
  aedat
  matnr
  menge
  meins
  netpr
  peinh
  up to 10 rows
  from ekpo
  into table it_ekko.

*Populate field with color attributes
  loop at it_ekko into wa_ekko.
    ld_color = ld_color + 1.
* Only 7 colours so need to reset color value
    if ld_color = 8.
      ld_color = 1.
    endif.

    concatenate 'C' ld_color '10' into wa_ekko-line_color.
    modify it_ekko from wa_ekko.
  endloop.

endform. " DATA_RETRIEVAL


Output: 



Create Dynamic parameter

REPORT  zdypara.

DATA: w_carrid TYPE sflight-carrid.

*** Selection Screen
SELECTION-SCREEN: BEGIN OF BLOCK blk1 WITH FRAME TITLE aaa.
 SELECT-OPTIONS:   s_carrid FOR w_carrid.
SELECTION-SCREEN: END   OF BLOCK blk1.
INITIALIZATION.

* Description for the parameter
if sy-uname = 'USER1'.
 %_s_carrid_%_app_%-text = 'Carrier ID'.
else.
 %_s_carrid_%_app_%-text = 'Flight ID'.
endif.

Sunday, May 5, 2013

Example of VENDOR AGEING REPORT



*&---------------------------------------------------------------------*
*& Report  ZFI_VENDOR_AGEING                                           *
*&---------------------------------------------------------------------*
*& Title - Vendor Ageing report to calculate the outstanding days      *


REPORT  zfi_vendor_ageing.

TABLES : bsik, BAPIFVDEXP_VZZBEPP.

DATA : t_bsik LIKE bsik OCCURS 0 WITH HEADER LINE,
       t_bsak LIKE bsak OCCURS 0 WITH HEADER LINE,
       days like BAPIFVDEXP_VZZBEPP-NUM4.

DATA : BEGIN OF t_lfa1 OCCURS 0,
         lifnr LIKE lfa1-lifnr,
         name1 LIKE lfa1-name1,
         adrnr LIKE lfa1-adrnr,
       END OF t_lfa1.

DATA : BEGIN OF t_adrc OCCURS 0,
         adrnr LIKE lfa1-adrnr,
         street LIKE adrc-street,
         city1 LIKE adrc-city1,
       END OF t_adrc.

DATA : BEGIN OF t_BSEG OCCURS 0,
         zfbdt LIKE BSEG-zfbdt,
         KOART LIKE BSEG-KOART,
         KOSTL LIKE BSEG-KOSTL,
         PROJK LIKE BSEG-PROJK,
       END OF t_BSEG.

DATA : BEGIN OF t_prps OCCURS 0,
         POSID like prps-posid,
         OBJNR like prps-objnr,
      END OF t_prps.

DATA : T_KOSTL LIKE BSEG-KOSTL,
       T_PROJK LIKE BSEG-PROJK,
       TEXT(15).

DATA : BEGIN OF t_output OCCURS 0,
         lifnr LIKE lfa1-lifnr,
         name1 LIKE lfa1-name1,
         street LIKE adrc-street,
         city1 LIKE adrc-city1,
         OBJNR LIKE prps-OBJNR,
         posid LIKE prps-posid,
         KOSTL LIKE BSIK-KOSTL, " COST CENTER
         UMSKZ like bsik-UMSKZ,
         belnr like bsik-belnr,
         bukrs like bsik-bukrs,
         gjahr like bsik-gjahr,
         wrbtr like bsik-wrbtr,
         hkont like bsik-hkont,
         dif1  like bsik-wrbtr,
         dif2  like bsik-wrbtr,
         dif3  like bsik-wrbtr,
         dif4  like bsik-wrbtr,
         dif5  like bsik-wrbtr,
         days like BAPIFVDEXP_VZZBEPP-NUM4,
       END OF t_output.

* Alv data declaration
TYPE-POOLS : slis.
DATA :alv_fieldcat            TYPE slis_t_fieldcat_alv,
      alv_fieldcat_line       LIKE LINE OF alv_fieldcat,
      alv_sort                TYPE slis_t_sortinfo_alv,
      alv_sort_line           LIKE LINE OF alv_sort,
      alv_layout              TYPE slis_layout_alv,
      g_repid                 LIKE sy-repid VALUE sy-repid,
      alv_status_set          TYPE slis_formname VALUE 'ALV_STATUS_SET',
      alv_user_comm           TYPE slis_formname VALUE 'ALV_USER_COMM',
      grid_title              TYPE lvc_title,
      alv_fieldcat_acty       TYPE slis_t_fieldcat_alv,
      g_save,
      gs_variant                LIKE disvariant,
      g_exit_caused_by_caller   TYPE c,
      gs_exit_caused_by_user    TYPE slis_exit_by_user.


DATA: alv_fieldcat_line_acty  LIKE LINE OF alv_fieldcat_acty,
      alv_layout_acty         TYPE slis_layout_alv,
      gt_list_top_of_page     TYPE slis_t_listheader,
      gt_events               TYPE slis_t_event,
      message                 TYPE string,

      r_ucomm     LIKE sy-ucomm,
      rs_selfield TYPE slis_selfield.

CONSTANTS:
      gc_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'.


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS : s_bukrs FOR bsik-bukrs,
                 s_gjahr FOR bsik-gjahr,
                 s_lifnr FOR bsik-lifnr,
                 s_umskz FOR bsik-umskz.
parameters     : p_augdt like bsik-augdt OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
SELECT-OPTIONS : s_date1 FOR BAPIFVDEXP_VZZBEPP-NUM4 NO-EXTENSION OBLIGATORY
                 DEFAULT 1 TO 30,
                 s_date2 FOR BAPIFVDEXP_VZZBEPP-NUM4 NO-EXTENSION OBLIGATORY
                 DEFAULT 30 TO 60,
                 s_date3 FOR BAPIFVDEXP_VZZBEPP-NUM4 NO-EXTENSION OBLIGATORY
                 DEFAULT 60 TO 90,
                 s_date4 FOR BAPIFVDEXP_VZZBEPP-NUM4 NO-EXTENSION OBLIGATORY
                 DEFAULT 90 TO 120,
                 s_date5 FOR BAPIFVDEXP_VZZBEPP-NUM4 NO-EXTENSION OBLIGATORY
                 DEFAULT 120 TO 150.
SELECTION-SCREEN END OF BLOCK b2.


INITIALIZATION.

START-OF-SELECTION.
  PERFORM fetch_data.
  PERFORM display.

*&---------------------------------------------------------------------*
*&      Form  fetch_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM fetch_data .

  SELECT *
  INTO TABLE t_bsik
  FROM bsik
  WHERE bukrs IN s_bukrs
  AND   gjahr IN s_gjahr
  AND   lifnr IN s_lifnr
  AND   umskz IN s_umskz
  AND   umskz NOT IN ('F','P','L','G').
*  AND   zfbdt <= P_augdt.

  if sy-subrc = 0.
    SELECT *
    INTO TABLE t_bsak
    FROM bsak
    WHERE bukrs IN s_bukrs
    AND   gjahr IN s_gjahr
    AND   lifnr IN s_lifnr
    AND   umskz IN s_umskz
    AND   umskz NOT IN ('F','P','L','G')
    AND   AUGDT > P_augdt.

    loop at t_bsak.
      move-corresponding t_bsak to t_bsik.
      append t_bsik.
    endloop.

    loop at t_bsik.
      if t_bsik-zfbdt is initial.
        t_bsik-zfbdt = t_bsik-bldat.
        modify t_bsik transporting zfbdt.
      endif.
      if t_bsik-zfbdt > P_augdt.
        delete t_bsik.
      endif.
*      if t_bsik-umskz > P_augdt.

    endloop.

    select lifnr
           name1
           adrnr
    into table t_lfa1
    from lfa1
    for all entries in t_bsik
    where lifnr = t_bsik-lifnr.
    if sy-subrc = 0.
      select ADDRNUMBER as adrnr
             street
             city1
      into table t_adrc
      from adrc
      for all entries in t_lfa1
      where ADDRNUMBER = t_lfa1-adrnr.
    endif.
  endif.
  LOOP AT t_bsik.
    if t_bsik-shkzg = 'S'.
      t_bsik-WRBTR = t_bsik-WRBTR * -1.
    endif.
    REFRESH T_BSEG.
    CLEAR : T_KOSTL, T_PROJK, t_output.
    IF t_bsik-rebzg IS NOT INITIAL.
      SELECT zfbdt
             KOART
             KOSTL
             PROJK
      INTO TABLE T_BSEG "t_bsik-ZFBDT
      FROM bseg
      WHERE bukrs = t_bsik-bukrs
      AND   belnr = t_bsik-rebzg
      AND   gjahr = t_bsik-rebzj
      and   KOART IN ('K','S').
      LOOP AT T_BSEG.
        IF T_BSEG-KOART = 'K' AND T_BSEG-zfbdt IS NOT INITIAL.
          t_bsik-ZFBDT = T_BSEG-ZFBDT.
          MODIFY t_bsik TRANSPORTING ZFBDT.
        ELSEIF T_BSEG-KOART = 'S'.
          T_KOSTL = T_BSEG-KOSTL.
          T_PROJK = T_BSEG-PROJK.
        ENDIF.
      ENDLOOP.
    ELSE.
      SELECT SINGLE KOSTL PROJK
      INTO (T_KOSTL, T_PROJK)
      FROM bseg
      WHERE bukrs = t_bsik-bukrs
      AND   belnr = t_bsik-BELNR
      AND   gjahr = t_bsik-GJAHR
      and   KOART = 'S'.
    ENDIF.
    MOVE-CORRESPONDING t_bsik TO t_output.
    t_output-KOSTL = T_KOSTL.
    CONCATENATE 'PR' T_PROJK INTO T_OUTPUT-OBJNR.
    days = P_augdt - t_bsik-ZFBDT.
    READ TABLE t_lfa1 WITH KEY lifnr = t_output-LIFNR.
    IF SY-SUBRC = 0.
      t_output-NAME1 = t_lfa1-NAME1.
      READ TABLE t_adrc WITH KEY ADRNR = t_lfa1-ADRNR.
      IF SY-SUBRC = 0.
        t_output-street = t_adrc-STREET.
        t_output-city1 = t_adrc-CITY1.
      ENDIF.
    ENDIF.
    t_output-days = days.
    if days >= s_date1-low and days < s_date1-high.
      t_output-dif1 = t_bsik-wrbtr. " days.
    elseif days >= s_date2-low and days < s_date2-high.
      t_output-dif2 = t_bsik-wrbtr. "days.
    elseif days >= s_date3-low and days < s_date3-high.
      t_output-dif3 = t_bsik-wrbtr. "days.
    elseif days >= s_date4-low and days < s_date4-high.
      t_output-dif4 = t_bsik-wrbtr. "days.
    elseif days >= s_date5-low and days < s_date5-high.
      t_output-dif5 = t_bsik-wrbtr. "days.
    endif.
    append t_output.
  ENDLOOP.
  if T_OUTPUT[] is not initial.
    SELECT POSID
           OBJNR
    INTO TABLE T_PRPS
    FROM PRPS
    FOR ALL ENTRIES IN T_OUTPUT
    WHERE OBJNR = T_OUTPUT-OBJNR.
  endif.
  LOOP AT T_OUTPUT.
    read table T_PRPS with key objnr = T_OUTPUT-objnr.
    if sy-subrc = 0.
      T_OUTPUT-POSID = T_PRPS-POSID.
      MODIFY t_output TRANSPORTING POSID.
    endif.
  ENDLOOP.

ENDFORM.                    " fetch_data
*&---------------------------------------------------------------------*
*&      Form  display
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM display .

  PERFORM build_alv_layout.
  PERFORM s_sort_build USING alv_sort[].
  PERFORM build_field_catalogs.
  PERFORM eventtab_build CHANGING gt_events.
*   SORT t_output BY .
  g_save = 'A'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = g_repid
      i_callback_pf_status_set = alv_status_set
      i_callback_user_command  = alv_user_comm
      i_grid_title             = grid_title
      i_save                   = g_save
      is_variant               = gs_variant
      is_layout                = alv_layout
      it_fieldcat              = alv_fieldcat[]
      it_events                = gt_events[]
      it_sort                  = alv_sort[]
    IMPORTING
      e_exit_caused_by_caller  = g_exit_caused_by_caller
      es_exit_caused_by_user   = gs_exit_caused_by_user
    TABLES
      t_outtab                 = t_output.

    PERFORM alv_user_comm USING r_ucomm
                                rs_selfield.
  IF sy-subrc = 0.
    IF g_exit_caused_by_caller = 'X'.
    ELSE.
      IF gs_exit_caused_by_user-back = 'X'.                 " F3
      ELSE.
        IF gs_exit_caused_by_user-exit = 'X'.               " F15
        ELSE.
          IF gs_exit_caused_by_user-cancel = 'X'.           " F12
          ELSE.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.
  ELSE.
*" Fatal error calling ALV
  ENDIF.
ENDFORM.                    " display
*&---------------------------------------------------------------------*
*&      Form  build_alv_layout
*&---------------------------------------------------------------------*
FORM build_alv_layout.
  CLEAR alv_layout.
  alv_layout-colwidth_optimize  = 'X'. "always display full columns
*  alv_layout-box_fieldname      = 'CHK'.
*  alv_layout-box_tabname        = 'T_OUTPUT'.
  alv_layout-info_fieldname     = 'COLOR'. "color a line
  alv_layout-detail_popup       = 'X'.
  alv_layout-zebra              = 'X'. "Zebra output
ENDFORM.                    " build_alv_layout
*---------------------------------------------------------------------*
*       FORM s_sort_build                                             *
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
*  -->  LT_SORT                                                       *
*---------------------------------------------------------------------*
FORM s_sort_build USING lt_sort TYPE slis_t_sortinfo_alv.
  DATA: ls_sort TYPE slis_sortinfo_alv.
  CLEAR  ls_sort.
  ls_sort-spos      =  1.
  ls_sort-fieldname =  'LIFNR'.
  ls_sort-up        =  'X'.
  ls_sort-group     =  'UL'.
  ls_sort-subtot       =  'X'.

  APPEND ls_sort TO lt_sort.
  CLEAR  ls_sort.
  ls_sort-spos      =  2.
  ls_sort-fieldname =  'BELNR'.
  ls_sort-up        =  'X'.
  ls_sort-subtot       =  'X'.
  ls_sort-group     =  'UL'.
  APPEND ls_sort TO lt_sort.
  CLEAR  ls_sort.
ENDFORM.                    "s_sort_build
*&---------------------------------------------------------------------*
*&      Form  eventtab_build
*&---------------------------------------------------------------------*
FORM eventtab_build CHANGING lt_events TYPE slis_t_event.

  FIELD-SYMBOLS: <lt_events> LIKE LINE OF lt_events.

  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type     = 0
    IMPORTING
      et_events       = lt_events
    EXCEPTIONS
      list_type_wrong = 1
      OTHERS          = 2.

* Define TOP_OF_PAGE event
  READ TABLE lt_events WITH KEY name = slis_ev_top_of_page
       ASSIGNING <lt_events>.
  IF sy-subrc EQ 0.
    MOVE gc_formname_top_of_page TO <lt_events>-form.
  ENDIF.

ENDFORM.                    " eventtab_build
*&---------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE
*&---------------------------------------------------------------------*
FORM top_of_page.
  REFRESH gt_list_top_of_page.
  CLEAR gt_list_top_of_page.
  PERFORM comment_build USING gt_list_top_of_page.

* Output GSPC logo on report header

  CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
      it_list_commentary = gt_list_top_of_page
      i_logo             = 'GSPC_LOGO'.
ENDFORM.                    "top_of_page

*&---------------------------------------------------------------------*
*&      Form  COMMENT_BUILD
*&---------------------------------------------------------------------*
* Build comments at top of page
*----------------------------------------------------------------------*
FORM comment_build CHANGING gt_top_of_page TYPE slis_t_listheader.
  DATA: gs_line TYPE slis_listheader.
  CLEAR gs_line.
  gs_line-typ  = 'H'.
  gs_line-info = 'Vendor Ageing'.
  APPEND gs_line TO gt_top_of_page.

  CLEAR gs_line.
  gs_line-typ  = 'S'.
  gs_line-key  = 'Report ID:'.
  gs_line-info = sy-repid.
  APPEND gs_line TO gt_top_of_page.

  CLEAR gs_line.
  gs_line-typ  = 'S'.
  gs_line-key  = 'User:'.
  gs_line-info = sy-uname.
  APPEND gs_line TO gt_top_of_page.

  CLEAR gs_line.
  gs_line-typ  = 'S'.
  gs_line-key  = 'Date:'.
  WRITE sy-datum TO gs_line-info MM/DD/YYYY.
  APPEND gs_line TO gt_top_of_page.

  CLEAR gs_line.
  gs_line-typ  = 'S'.
  gs_line-key  = 'Time:'.
  WRITE sy-uzeit TO gs_line-info USING EDIT MASK '__:__:__'.
  APPEND gs_line TO gt_top_of_page.
  CLEAR gs_line.
  gs_line-typ  = 'S'.
  gs_line-key  = ''.
  WRITE ' '.
  APPEND gs_line TO gt_top_of_page.

* Output data from selection screen

ENDFORM.                    "comment_build
*----------------------------------------------------------------------*
*Build ALV Summary field catalog
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  build_field_catalogs
*&---------------------------------------------------------------------*
 FORM build_field_catalogs.
   CLEAR: alv_fieldcat.
   REFRESH: alv_fieldcat.

* Vendor Number
   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = 'Vendor Number'.
*   alv_fieldcat_line-hotspot = 'X'.
   alv_fieldcat_line-fieldname  = 'LIFNR'.
   APPEND alv_fieldcat_line TO alv_fieldcat.
   CLEAR alv_fieldcat_line.

* Vendor Name
   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = 'Vendor Name'.
   alv_fieldcat_line-fieldname  = 'NAME1'.
   APPEND alv_fieldcat_line TO alv_fieldcat.
   CLEAR alv_fieldcat_line.

* Vendor Address
   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = 'Vendor Address'.
   alv_fieldcat_line-fieldname  = 'STREET'.
   APPEND alv_fieldcat_line TO alv_fieldcat.
   CLEAR alv_fieldcat_line.

* City
   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = 'City'.
   alv_fieldcat_line-fieldname  = 'CITY1'.
   APPEND alv_fieldcat_line TO alv_fieldcat.
   CLEAR alv_fieldcat_line.

* Object number #
   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = 'object #'.
   alv_fieldcat_line-fieldname  = 'OBJNR'.
   alv_fieldcat_line-no_out  = 'X'.
   APPEND alv_fieldcat_line TO alv_fieldcat.
   CLEAR alv_fieldcat_line.

* WBS Element
   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = 'WBS Element'.
   alv_fieldcat_line-fieldname = 'POSID'.
   APPEND alv_fieldcat_line TO alv_fieldcat.

* Cost Center
   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = 'Cost Center'.
   alv_fieldcat_line-fieldname = 'KOSTL'.
   APPEND alv_fieldcat_line TO alv_fieldcat.

* GL Indicator
   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = 'GL Indicator'.
   alv_fieldcat_line-fieldname = 'UMSKZ'.
   APPEND alv_fieldcat_line TO alv_fieldcat.
   CLEAR alv_fieldcat_line.

* General Ledger Account
   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = 'General Ledger Account'.
   alv_fieldcat_line-fieldname = 'HKONT'.
   APPEND alv_fieldcat_line TO alv_fieldcat.

* Document No.
   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-hotspot = 'X'.
   alv_fieldcat_line-seltext_l = 'Document No.'.
   alv_fieldcat_line-fieldname  = 'BELNR'.
   APPEND alv_fieldcat_line TO alv_fieldcat.
   CLEAR alv_fieldcat_line.

* Amount
   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = 'Amount'.
   alv_fieldcat_line-fieldname  = 'WRBTR'.
   alv_fieldcat_line-no_out  = 'X'.
   APPEND alv_fieldcat_line TO alv_fieldcat.

* dif1
   CLEAR TEXT.
   READ TABLE s_date1 INDEX 1.
   CONCATENATE 'DAYS ' s_date1-LOW '-' s_date1-HIGH INTO TEXT.

   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = TEXT.
   alv_fieldcat_line-fieldname = 'DIF1'.
   alv_fieldcat_line-do_sum = 'X'.
   APPEND alv_fieldcat_line TO alv_fieldcat.
   CLEAR alv_fieldcat_line.

* dif2
   CLEAR TEXT.
   READ TABLE s_date2 INDEX 1.
   CONCATENATE 'DAYS ' s_date2-LOW '-' s_date2-HIGH INTO TEXT.

   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = TEXT.
*   alv_fieldcat_line-no_out = 'X'.
   alv_fieldcat_line-fieldname = 'DIF2'.
   APPEND alv_fieldcat_line TO alv_fieldcat.
   CLEAR alv_fieldcat_line.

* dif3
   CLEAR TEXT.
   READ TABLE s_date3 INDEX 1.
   CONCATENATE 'DAYS ' s_date3-LOW '-' s_date3-HIGH INTO TEXT.

   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = TEXT.
   alv_fieldcat_line-fieldname = 'DIF3'.
   APPEND alv_fieldcat_line TO alv_fieldcat.
   CLEAR alv_fieldcat_line.

* dif4
   CLEAR TEXT.
   READ TABLE s_date4 INDEX 1.
   CONCATENATE 'DAYS ' s_date4-LOW '-' s_date4-HIGH INTO TEXT.

   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = TEXT.
   alv_fieldcat_line-fieldname  = 'DIF4'.
   APPEND alv_fieldcat_line TO alv_fieldcat.

* dif5
   CLEAR TEXT.
   READ TABLE s_date5 INDEX 1.
   CONCATENATE 'DAYS ' s_date5-LOW '-' s_date5-HIGH INTO TEXT.

   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = TEXT.
   alv_fieldcat_line-fieldname  = 'DIF5'.
   APPEND alv_fieldcat_line TO alv_fieldcat.

* Days
   alv_fieldcat_line-tabname    = 'T_OUTPUT'.
   alv_fieldcat_line-seltext_l = 'Days'.
   alv_fieldcat_line-fieldname  = 'DAYS'.
*   alv_fieldcat_line-no_out  = 'X'.
   APPEND alv_fieldcat_line TO alv_fieldcat.

ENDFORM.                    " build_field_catalogs

*&---------------------------------------------------------------------*
*&      Form  ALV_USER_COMM
*&---------------------------------------------------------------------*
* Process User Status
*----------------------------------------------------------------------*
 FORM alv_user_comm USING r_ucomm     LIKE sy-ucomm
                          rs_selfield TYPE slis_selfield.

*Determine the main component beign viewed
   READ TABLE T_OUTPUT INDEX rs_selfield-tabindex.
   CASE r_ucomm.

     WHEN '&IC1'.       " single / double click

       CASE rs_selfield-fieldname.
* Display FI document
         WHEN 'BELNR'.
           SET PARAMETER ID 'BLN' FIELD T_OUTPUT-BELNR.
           SET PARAMETER ID 'BUK' FIELD T_OUTPUT-BUKRS.
           SET PARAMETER ID 'GJR' FIELD T_OUTPUT-GJAHR.
           CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
       ENDCASE.


   ENDCASE.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  ALV_STATUS_SET
*&---------------------------------------------------------------------*
* Set the status for the ALV screen
*----------------------------------------------------------------------*
 FORM alv_status_set USING rt_extab TYPE slis_t_extab.
   SET PF-STATUS 'STANDARD' EXCLUDING rt_extab.
 ENDFORM.


Input Parameter:


Output: