Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

interactive report

Former Member
0 Likes
698

Hi experts

i have an esisting report: the code is below.

now in the output when the user clicks on Fuctional Location(s763-tplnr) it should call transaction IL03. and when clicks on Equipment(S763-equnr) it should call tcode IE03. in the program it is already written AT USER COMMAND.

plz tell how and wht code needed to be added and where without disturbing existing one.

the code is as follows.

*----


*

  • Program Name : YPMROPFA

  • Program Type : Report Program

  • Developed By : PM (Query P5 Conversion)

  • Date created : 22-02-2002

  • Purpose : Object Part Failure Analysis.

  • Requested By : RP

*----


*

  • CHANGE CONTROL :

**----


  • AUTHOR: DATE: KEY STRING: REQUESTED_BY:

*

  • KEY STRING DESCRIPTION :

*----


*

REPORT ypmropfa NO STANDARD PAGE HEADING LINE-SIZE 160.

INCLUDE <symbol>.

INCLUDE <icon>.

TABLES equz.

TABLES qpct.

TABLES iloa.

TABLES s763.

TABLES eqkt.

DATA: periodfr LIKE s763-spmon.

DATA: periodto LIKE s763-spmon.

DATA: partreq(1) TYPE c.

DATA: fname(30),fvalue(30) TYPE c.

DATA: BEGIN OF i_tab OCCURS 100,

equnr LIKE equz-equnr,

otgrp LIKE s763-otgrp,

soteil LIKE s763-soteil,

sscode LIKE s763-sscode,

END OF i_tab.

PARAMETERS switch(02) TYPE c DEFAULT 'Go' NO-DISPLAY.

DATA : line TYPE i.

DATA : line1 TYPE p DECIMALS 2 .

DATA : line2 TYPE p DECIMALS 2 .

DATA: fild_name(20),

value.

DATA failures(005) TYPE p DECIMALS 00 .

DATA: BEGIN OF t01 OCCURS 100,

qpct-kurztext LIKE qpct-kurztext,

iloa-swerk LIKE iloa-swerk,

s763-equnr LIKE s763-equnr,

failures(05) TYPE p DECIMALS 00 ,

END OF t01.

*RP1203

DATA: BEGIN OF s01 OCCURS 100,

qpct-kurztext LIKE qpct-kurztext,

iloa-swerk LIKE iloa-swerk,

failures(05) TYPE p DECIMALS 00 ,

END OF s01.

*END RP1203

SELECTION-SCREEN: BEGIN OF BLOCK prog

WITH FRAME TITLE text-f59.

SELECT-OPTIONS period FOR s763-spmon OBLIGATORY.

SELECT-OPTIONS ingrp FOR equz-ingrp.

SELECT-OPTIONS swerk FOR iloa-swerk OBLIGATORY.

SELECT-OPTIONS equnr FOR s763-equnr.

SELECT-OPTIONS tplnr FOR s763-tplnr NO INTERVALS.

SELECT-OPTIONS otgrp FOR s763-otgrp NO INTERVALS. "Code group

SELECT-OPTIONS failno FOR failures NO INTERVALS NO-EXTENSION.

SELECT-OPTIONS soteil FOR s763-soteil. "Object part

SELECT-OPTIONS part FOR partreq NO INTERVALS NO-EXTENSION DEFAULT 'Y'.

SELECTION-SCREEN SKIP 1.

SELECTION-SCREEN: END OF BLOCK prog.

SELECT a~equnr a~otgrp a~soteil a~spmon a~stcode a~sscode

a~tplnr a~vrsio equz~equnr equz~iloan

equz~ingrp iloa~iloan iloa~swerk b~code b~codegruppe

b~katalogart b~kurztext b~sprache

INTO (s763-equnr , s763-otgrp , s763-soteil , s763-spmon , s763-stcode ,

s763-sscode , s763-tplnr , s763-vrsio , equz-equnr , equz-iloan ,

equz-ingrp , iloa-iloan , iloa-swerk , qpct-code ,

qpct-codegruppe , qpct-katalogart , qpct-kurztext , qpct-sprache)

FROM ( s763 AS a

INNER JOIN equz

ON equz~equnr = a~equnr

INNER JOIN iloa

ON iloa~iloan = equz~iloan

INNER JOIN qpct AS b

ON b~codegruppe = a~otgrp

AND b~code = a~soteil )

WHERE a~spmon IN period

AND a~equnr IN equnr

AND a~otgrp IN otgrp

AND a~soteil IN soteil

AND a~stcode GT '0'

AND a~tplnr IN tplnr

AND a~vrsio EQ '000'

AND equz~ingrp IN ingrp

AND iloa~swerk IN swerk

AND b~katalogart EQ 'B'

AND b~sprache EQ 'E'

ORDER BY a~tplnr equz~ingrp a~equnr.

DATA : data_flag(1).

data_flag = 'Y'.

IF s763-equnr IS INITIAL.

data_flag = ' '.

ENDIF.

DATA : flag.

IF flag = space.

periodfr = period-low.

periodto = period-high.

SELECT * FROM s763

INTO CORRESPONDING FIELDS OF TABLE i_tab

WHERE

spmon GE periodfr AND spmon LE periodto AND NOT equnr IS null

AND NOT otgrp IS null AND NOT soteil IS null AND vrsio EQ '000'.

SORT i_tab BY equnr otgrp soteil DESCENDING.

flag = 'X'.

ENDIF.

failures = 0.

IF part = ' '.

CLEAR qpct-kurztext.

qpct-kurztext = '*'.

READ TABLE i_tab WITH KEY equnr = s763-equnr.

IF sy-subrc EQ 0.

LOOP AT i_tab WHERE equnr = s763-equnr AND NOT otgrp IS

initial AND NOT soteil IS initial.

failures = failures + i_tab-sscode.

ENDLOOP.

DELETE i_tab WHERE equnr = s763-equnr.

ELSE.

failures = 0.

CHECK 1 EQ 2.

ENDIF.

ELSE.

READ TABLE i_tab WITH KEY equnr = s763-equnr

otgrp = s763-otgrp soteil = s763-soteil.

IF sy-subrc EQ 0.

LOOP AT i_tab WHERE equnr = s763-equnr AND otgrp = s763-otgrp

AND soteil = s763-soteil.

failures = failures + i_tab-sscode.

ENDLOOP.

DELETE i_tab WHERE equnr = s763-equnr AND otgrp = s763-otgrp

AND soteil = s763-soteil.

ELSE.

failures = 0.

CHECK 1 = 2.

ENDIF.

ENDIF.

CHECK failno.

t01-qpct-kurztext = qpct-kurztext.

t01-iloa-swerk = iloa-swerk.

t01-s763-equnr = s763-equnr.

ADD failures TO t01-failures.

COLLECT t01.

CLEAR t01-failures.

SORT BY

iloa-swerk

equz-ingrp

s763-tplnr

s763-equnr.

*RP1203

s01-qpct-kurztext = qpct-kurztext.

s01-iloa-swerk = iloa-swerk.

ADD failures TO s01-failures.

COLLECT s01.

CLEAR s01-failures.

SORT BY

iloa-swerk

equz-ingrp

s763-tplnr

qpct-kurztext.

SELECT SINGLE eqktx

FROM eqkt

INTO eqkt-eqktx

WHERE equnr = equz-equnr

AND spras = 'EN'.

*END RP1203

SET PF-STATUS 'CALL' .

ON CHANGE OF s763-tplnr.

ULINE.

ENDON.

WRITE '|' COLOR OFF INTENSIFIED OFF NO-GAP.

WRITE 002(006) iloa-swerk COLOR OFF INTENSIFIED OFF NO-GAP.

WRITE '|' NO-GAP.

WRITE 009(004) equz-ingrp COLOR OFF INTENSIFIED OFF NO-GAP.

WRITE '|' NO-GAP.

ON CHANGE OF s763-tplnr.

WRITE 014(030) s763-tplnr COLOR 4 INTENSIFIED ON NO-GAP.

WRITE '|' NO-GAP.

ELSE.

WRITE 014(030) s763-tplnr COLOR OFF INTENSIFIED OFF NO-GAP.

WRITE '|' NO-GAP.

ENDON.

WRITE 045(018) s763-equnr COLOR OFF INTENSIFIED OFF NO-GAP.

WRITE '|' NO-GAP.

WRITE 064(040) eqkt-eqktx COLOR OFF INTENSIFIED OFF NO-GAP.

WRITE '|' NO-GAP.

WRITE 105(040) qpct-kurztext COLOR OFF INTENSIFIED OFF NO-GAP.

WRITE '|' NO-GAP.

WRITE 146(014) failures CENTERED COLOR OFF INTENSIFIED OFF NO-GAP.

WRITE '|' COLOR OFF INTENSIFIED OFF NO-GAP.

ENDSELECT.

ULINE.

**Basic List Call up

*AT USER-COMMAND.

*IF SY-UCOMM = 'BL'.

*PERFORM CALLBL.

*ENDIF.

**End of Basic List Call up

AT USER-COMMAND.

IF sy-ucomm = 'OP'.

PERFORM call.

SORT t01 BY iloa-swerk qpct-kurztext.

line = sy-tabix.

LOOP AT t01.

  • New Page Repeat

line = sy-tabix / 42.

line1 = sy-tabix / 42.

line2 = line - line1 .

IF sy-tabix GE 42 AND line2 = 0 .

NEW-PAGE.

PERFORM call.

ENDIF.

  • End Page Repeat

ON CHANGE OF t01-qpct-kurztext.

WRITE : /2 sy-vline, t01-qpct-kurztext

COLOR 6 INVERSE ON NO-GAP , 35 sy-vline,

36 t01-iloa-swerk NO-GAP COLOR OFF INTENSIFIED OFF, 42 sy-vline ,

43 t01-s763-equnr NO-GAP COLOR OFF INTENSIFIED OFF , 61 sy-vline,

62 t01-failures NO-GAP COLOR OFF INTENSIFIED OFF , 77 sy-vline.

WRITE /2(76) sy-uline.

ELSE.

WRITE : /2 sy-vline, t01-qpct-kurztext

COLOR OFF INTENSIFIED OFF NO-GAP , 35 sy-vline ,

36 t01-iloa-swerk NO-GAP COLOR OFF INTENSIFIED OFF, 42 sy-vline ,

43 t01-s763-equnr NO-GAP COLOR OFF INTENSIFIED OFF , 61 sy-vline,

62 t01-failures NO-GAP COLOR OFF INTENSIFIED OFF , 77 sy-vline.

WRITE /2(76) sy-uline.

ENDON.

ENDLOOP.

ENDIF.

*RP1203

AT USER-COMMAND.

IF sy-ucomm = 'OPS'.

PERFORM callops.

SORT s01 BY iloa-swerk qpct-kurztext.

line = sy-tabix.

LOOP AT s01.

  • New Page Repeat

line = sy-tabix / 42.

line1 = sy-tabix / 42.

line2 = line - line1 .

IF sy-tabix GE 42 AND line2 = 0 .

NEW-PAGE.

PERFORM callops.

ENDIF.

  • End Page Repeat

ON CHANGE OF s01-iloa-swerk.

WRITE : /2 sy-vline, s01-qpct-kurztext COLOR OFF INTENSIFIED OFF

NO-GAP , 35 sy-vline,

36 s01-iloa-swerk NO-GAP COLOR 6 INVERSE ON, 42 sy-vline ,

43 s01-failures NO-GAP COLOR OFF INTENSIFIED OFF , 61 sy-vline.

WRITE /2(60) sy-uline.

ELSE.

WRITE : /2 sy-vline, s01-qpct-kurztext

COLOR OFF INTENSIFIED OFF NO-GAP , 35 sy-vline ,

36 s01-iloa-swerk NO-GAP COLOR OFF INTENSIFIED OFF, 42 sy-vline

,

43 s01-failures NO-GAP COLOR OFF INTENSIFIED OFF , 61 sy-vline.

WRITE /2(60) sy-uline.

ENDON.

ENDLOOP.

ENDIF.

  • END RP1203

TOP-OF-PAGE.

PERFORM header.

END-OF-PAGE.

&----


*& Form HEADER

&----


FORM header.

SKIP 1.

WRITE:/48 icon_bw_gis AS ICON, 'Reliance Group.'

COLOR 4 INTENSIFIED OFF.

WRITE:/39(39) sy-uline.

WRITE : /39 sy-vline , icon_overview AS ICON,

'Recurring Failure Analysis Report'

COLOR 1 INVERSE ON, 77 sy-vline.

WRITE:/39(39) sy-uline.

IF data_flag = ' '.

SKIP 1.

WRITE sy-uline.

WRITE : /39 icon_terminated_job AS ICON, 'No Records Found'

COLOR 7 INTENSIFIED OFF.

ELSE.

WRITE:/01 icon_date AS ICON, 'For The Period :'

COLOR 2 INTENSIFIED OFF.

WRITE:22 periodfr COLOR 1 INTENSIFIED OFF,

' TO ' COLOR 1 INTENSIFIED OFF,

periodto COLOR 1 INTENSIFIED OFF .

WRITE:80 'Report As of :'.

WRITE:95 icon_date AS ICON, sy-datum COLOR 7 INTENSIFIED OFF.

WRITE sy-uline.

WRITE AT / '|' NO-GAP.

WRITE 002(006) 'MPlnt' COLOR 6 INVERSE ON NO-GAP.

WRITE '|' NO-GAP.

WRITE 009(004) 'Dept' COLOR 6 INVERSE ON NO-GAP.

WRITE '|' NO-GAP.

WRITE 014(030) 'Functional Location' COLOR 6 INVERSE ON NO-GAP.

WRITE '|' NO-GAP.

WRITE 045(018) 'Equipment Tag No' COLOR 6 INVERSE ON NO-GAP.

WRITE '|' NO-GAP.

WRITE 064(040) 'Equipment Description' CENTERED COLOR 6 INVERSE ON

NO-GAP.

WRITE '|' NO-GAP.

WRITE 105(040) 'Object Part' CENTERED COLOR 6 INVERSE ON NO-GAP.

WRITE '|' NO-GAP.

WRITE 146(014) 'No.of Damages' COLOR 6 INVERSE ON NO-GAP.

WRITE '|' NO-GAP.

WRITE sy-uline.

ENDIF.

ENDFORM. " HEADER

&----


*& Form CALL

&----


FORM call.

NEW-PAGE WITH-HEADING.

SKIP 1.

WRITE:/38 icon_bw_gis AS ICON, 'Reliance Group.'

COLOR 4 INTENSIFIED OFF.

WRITE:/30(37) sy-uline.

WRITE : /30 sy-vline , icon_overview AS ICON,

'Failure Analysis by Object Part'

COLOR 1 INVERSE ON, 66 sy-vline.

WRITE:/30(37) sy-uline.

WRITE:/01 icon_date AS ICON, 'For The Period :'

COLOR 2 INTENSIFIED OFF.

WRITE:22 periodfr COLOR 1 INTENSIFIED OFF,

' TO ' COLOR 1 INTENSIFIED OFF,

periodto COLOR 1 INTENSIFIED OFF .

WRITE:50 'Report As of :'.

WRITE:65 icon_date AS ICON, sy-datum COLOR 7 INTENSIFIED OFF.

WRITE /2(76) sy-uline.

WRITE : /2 sy-vline,'Object Part' COLOR 1

INTENSIFIED OFF,35 sy-vline,

36 'MPlant' COLOR 1 INTENSIFIED OFF, 42 sy-vline ,

43 'Equipment' COLOR 1 INTENSIFIED OFF, 61 sy-vline ,

62 'No.of Failures' COLOR 1 INTENSIFIED OFF, 77 sy-vline.

WRITE /2(76) sy-uline.

ENDFORM. " CALL

&----


*& Form CALLOPS

&----


FORM callops.

NEW-PAGE WITH-HEADING.

SKIP 1.

WRITE:/23 icon_bw_gis AS ICON, 'Reliance Group.'

COLOR 4 INTENSIFIED OFF.

WRITE:/15(37) sy-uline.

WRITE : /15 sy-vline , icon_overview AS ICON,

'Object Part Failure Statistics'

COLOR 1 INVERSE ON, 51 sy-vline.

WRITE:/15(37) sy-uline.

WRITE:/01 icon_date AS ICON, 'Period :'

COLOR 2 INTENSIFIED OFF.

WRITE:14 periodfr COLOR 1 INTENSIFIED OFF,

' TO ' COLOR 1 INTENSIFIED OFF,

periodto COLOR 1 INTENSIFIED OFF .

WRITE:38 'As of :'.

WRITE:48 icon_date AS ICON, sy-datum COLOR 7 INTENSIFIED OFF.

WRITE /2(60) sy-uline.

WRITE : /2 sy-vline,'Object Part' COLOR 1

INTENSIFIED OFF,35 sy-vline,

36 'MPlant' COLOR 1 INTENSIFIED OFF, 42 sy-vline ,

43 'Total Failures' COLOR 1 INTENSIFIED OFF, 61 sy-vline.

WRITE /2(60) sy-uline.

ENDFORM. " CALLOPS

AT LINE-SELECTION.

GET CURSOR FIELD fname VALUE fvalue.

CASE fname.

WHEN 'S763-EQUNR'.

SET PARAMETER ID 'EQN' FIELD fvalue.

CALL TRANSACTION 'IE03' AND SKIP FIRST SCREEN.

ENDCASE.

Thanks in advance

alson

4 REPLIES 4
Read only

Former Member
0 Likes
598

first Debug ,find out what values its carrying out.

Regards

Peram

Read only

aris_hidalgo
Contributor
0 Likes
598

Hi,

I have done a report very similar to yours.It also goes to transaction IE03 and AS03. Please take a look at my report below:


*==================================================================
* Program Name : ZPR_ASSET_VALUE
* Author       : Aris Hidalgo
* Date Created : April 24, 2006
* Description  : The purpose of this report is to list the value of
*                equipment by functional location.
*==================================================================
REPORT zpr_asset_value
       NO STANDARD PAGE HEADING
       LINE-SIZE  254
       LINE-COUNT 0
       MESSAGE-ID zz.

*----------------------------------------------*
* Data dictionary tables                       *
*----------------------------------------------*
TABLES: iloa,
        equz,
        anlc,
        t499s,
        iflo,
        anla,
        eqkt.

*----------------------------------------------*
* Selection screen                             *
*----------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
SELECT-OPTIONS: s_tplnr FOR iloa-tplnr,
                s_stand FOR t499s-stand,
                s_anln1 FOR anlc-anln1.
SELECT-OPTIONS  s_class FOR anla-anlkl.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
PARAMETERS: p_posdep RADIOBUTTON GROUP rb1,
            p_pladep RADIOBUTTON GROUP rb1.
SELECTION-SCREEN END OF BLOCK b3.
PARAMETERS: p_equip AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b1.

*----------------------------------------------*
* Global Structure/s                           *
*----------------------------------------------*
TYPES: BEGIN OF t_output,
            funcloc           TYPE iloa-tplnr,
            asset_dum         TYPE iloa-anlnr,
            asset             TYPE iloa-anlnr,
            parent            TYPE iloa-anlnr,
            asset_subnum(17)  TYPE c,
            parent_subnum(17) TYPE c,
            accq_cost         TYPE anlc-kansw,
            acc_dep           TYPE anlc-kansw,
            asset_book_val    TYPE anlc-kansw,
            location          TYPE t499s-ktext,
            description       TYPE iflo-pltxt,
            asset_sub         TYPE anla-ord42,
            equip_num         TYPE equz-equnr,
            company           TYPE anla-bukrs,
            asset_class       TYPE anla-anlkl,
          END OF t_output.

*----------------------------------------------*
* Global Internal table/s and work area        *
*----------------------------------------------*
DATA: it_output  TYPE STANDARD TABLE OF t_output,
      wa_output  LIKE LINE OF it_output.


*---------------------------------------------------------------------*
*       CLASS lcl_main DEFINITION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_main DEFINITION.
  PUBLIC SECTION.
    METHODS: get_data,
             combine_data,
             get_asset IMPORTING equip_num TYPE equz-equnr
                       EXPORTING value(check) TYPE c,
             get_anlc  IMPORTING value(anln1) TYPE anla-anln1
                                 value(anln2) TYPE anla-anln2
                       EXPORTING accq_cost    TYPE anlc-kansw
                                 acc_dep      TYPE anlc-kansw
                                 netbook_val  TYPE anlc-kansw,
             top_of_page,
             header IMPORTING uline_len TYPE i,
             show_data.
    EVENTS: no_data EXPORTING value(class)   TYPE anla-anlkl.
    CLASS-DATA: v_flag TYPE i.

    TYPES: BEGIN OF t_iloa,
            iloan TYPE iloa-iloan,     "Location and account assignment
            tplnr TYPE iloa-tplnr,     "Functional location
            anlnr TYPE iloa-anlnr,     "Main asset number
            swerk TYPE iloa-swerk,     "Maintenance plant
            stort TYPE iloa-stort,     "Location of maintenance object
           END OF t_iloa.

    TYPES: BEGIN OF t_t499s,
            werks TYPE t499s-werks,    "Plant
            stand TYPE t499s-stand,    "Location
            ktext TYPE t499s-ktext,    "Text (40 characters)
           END OF t_t499s.

    TYPES: BEGIN OF t_equz,
            equnr TYPE equz-equnr,     "Equipment number
            hequi TYPE equz-hequi,     "Superior Equipment
            iloan TYPE equz-iloan,     "Location and account assignment
            iwerk TYPE equz-iwerk,     "Maintenance Planning Plant
           END OF t_equz.

    TYPES: BEGIN OF t_iflo,
            tplnr TYPE iflo-tplnr,     "Functional location
            pltxt TYPE iflo-pltxt,     "Description
           END OF t_iflo.

    TYPES: BEGIN OF t_equz2,
            iwerk TYPE equz-iwerk,     "Data origin indicator
           END OF t_equz2.

    TYPES: BEGIN OF t_anla,
            bukrs TYPE anla-bukrs,     "Company Code
            anln1 TYPE anla-anln1,     "Main asset number
            anln2 TYPE anla-anln2,     "Asset sub-number
            anlkl TYPE anla-anlkl,     "Asset class
            ord42 TYPE anla-ord42,     "Asset Sub-Class
           END OF t_anla.

    TYPES: BEGIN OF t_anlc,
            gjahr TYPE anlc-gjahr, "Fiscal year
            kansw TYPE anlc-kansw, "Cumulative acquisition
            knafa TYPE anlc-knafa, "Accumulated ordinary depreciation
            kaafa TYPE anlc-kaafa, "Cumulative unplanned depreciation
            answl TYPE anlc-answl, "Transactions for the year
            nafav TYPE anlc-nafav, "Proportional accumulated
            nafag TYPE anlc-nafag, "Ordinary dep. posted in the cur.year
            nafal TYPE anlc-nafal, "Proportional ordinary depreciation
            aafav TYPE anlc-aafav, "cumulative unplanned depreciation
            aafag TYPE anlc-aafag, "Unplanned depr. posted for the year
            nafap TYPE anlc-nafap, "Planned ordinary depr. for the year
            aafap TYPE anlc-aafap, "Planned unplanned depr. for the year
          END OF t_anlc.

    TYPES: BEGIN OF t_finaltab,
            funcloc           TYPE iloa-tplnr,
            asset_dum         TYPE iloa-anlnr,
            asset             TYPE iloa-anlnr,
            parent            TYPE iloa-anlnr,
            asset_subnum(17)  TYPE c,
            parent_subnum(17) TYPE c,
            accq_cost         TYPE anlc-kansw,
            acc_dep           TYPE anlc-kansw,
            asset_book_val    TYPE anlc-kansw,
            location          TYPE t499s-ktext,
            description       TYPE iflo-pltxt,
            asset_sub         TYPE anla-ord42,
            equip_num         TYPE equz-equnr,
            company           TYPE anla-bukrs,
            asset_class       TYPE anla-anlkl,
          END OF t_finaltab.

    TYPES: BEGIN OF t_equz_dum,
            hequi TYPE equz-hequi,
           END OF t_equz_dum.

    DATA: it_iloa     TYPE HASHED TABLE OF t_iloa
                            WITH UNIQUE KEY iloan,
          it_t499s    TYPE HASHED TABLE OF t_t499s
                            WITH UNIQUE KEY werks stand,
          it_equz     TYPE SORTED TABLE OF t_equz
                            WITH NON-UNIQUE KEY equnr hequi,
          it_iflo     TYPE STANDARD TABLE OF t_iflo,
          it_anla     TYPE STANDARD TABLE OF t_anla,
          it_anlc     TYPE STANDARD TABLE OF t_anlc,
          it_finaltab TYPE STANDARD TABLE OF t_finaltab.

    DATA: it_equz2    TYPE STANDARD TABLE OF t_equz2,
          wa_equz2    LIKE LINE OF it_equz2,
          lv_bukrs    TYPE t001-bukrs,
          r_iwerk     TYPE RANGE OF t_equz2-iwerk,
          wa_iwerk    LIKE LINE OF r_iwerk,
          wa_iloa     LIKE LINE OF it_iloa,
          wa_finaltab LIKE LINE OF it_finaltab,
          lv_check(1) TYPE c VALUE 'Y',
          it_equz_dum TYPE HASHED TABLE OF t_equz_dum
                           WITH UNIQUE KEY hequi,
          wa_anla     LIKE LINE OF it_anla,
          wa_equz_dum LIKE LINE OF it_equz_dum,
          wa_t499s    LIKE LINE OF it_t499s,
          wa_anlc     LIKE LINE OF it_anlc,
          lv_asset    TYPE t_finaltab-asset.
ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_main IMPLEMENTATION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_main IMPLEMENTATION.

*----------------------------------------------*
*  METHOD get_data                             *
*----------------------------------------------*
  METHOD get_data.
*   get records from ILOA
    SELECT iloan tplnr anlnr swerk stort
    FROM iloa
    INTO TABLE it_iloa
    WHERE tplnr IN s_tplnr
      AND stort IN s_stand
      AND anlnr IN s_anln1
      AND owner = space.

    IF it_iloa[] IS INITIAL.
      MESSAGE i008 WITH 'No data found!'.
      LEAVE LIST-PROCESSING.
    ENDIF.

*   get records from T499S based from records in IT_ILOA
    SELECT werks stand ktext
    FROM t499s
    INTO TABLE it_t499s
    FOR ALL ENTRIES IN it_iloa
    WHERE werks = it_iloa-swerk
      AND stand = it_iloa-stort.

*   get records from EQUZ based from records in IT_ILOA
    SELECT equnr hequi iloan iwerk
    FROM equz
    INTO TABLE it_equz
    FOR ALL ENTRIES IN it_iloa
    WHERE iloan = it_iloa-iloan.

*   get records from IFLO based from records in IT_ILOA
    SELECT tplnr pltxt
    FROM iflo
    INTO TABLE it_iflo
    FOR ALL ENTRIES IN it_iloa
    WHERE tplnr = it_iloa-tplnr.

  ENDMETHOD.

*----------------------------------------------*
*  METHOD combine_data                         *
*----------------------------------------------*
  METHOD combine_data.
    DATA: it_equipment TYPE HASHED TABLE OF t_equz
                            WITH UNIQUE KEY equnr,
          it_equz_dum2 TYPE SORTED TABLE OF t_equz
                            WITH NON-UNIQUE KEY equnr.
    FIELD-SYMBOLS: <fs_equz>      LIKE LINE OF it_equz,
                   <fs_equipment> LIKE LINE OF it_equipment.

    SELECT DISTINCT iwerk
    FROM equz
    INTO TABLE it_equz2
    FOR ALL ENTRIES IN it_equz
    WHERE iloan = it_equz-iloan.

    it_equz_dum2[] = it_equz[].
    DELETE ADJACENT DUPLICATES FROM it_equz_dum2.
    it_equipment[] = it_equz_dum2.

    LOOP AT it_equz ASSIGNING <fs_equz>.
*    get functional location and put in it_finaltab
      READ TABLE it_iloa WITH TABLE KEY iloan = <fs_equz>-iloan
                                                INTO wa_iloa.
      IF sy-subrc = 0.
        wa_finaltab-funcloc = wa_iloa-tplnr.
      ENDIF.

*     if value is present in s_anln1, continue.
      IF s_anln1[] IS INITIAL.

*-----FOR RECORDS IN IT_EQUZ WITH A VALUE IN HEQUI-----*
        IF NOT <fs_equz>-hequi IS INITIAL.
          v_flag = 1.

*         check whether current hequi has already been processed
          READ TABLE it_equz_dum WITH TABLE KEY hequi = <fs_equz>-hequi
                                                       INTO wa_equz_dum.
*         if not found, continue processing
          IF sy-subrc <> 0.
            wa_equz_dum = <fs_equz>-hequi.
            INSERT wa_equz_dum INTO TABLE it_equz_dum.
            CALL METHOD me->get_asset
                             EXPORTING equip_num = <fs_equz>-hequi
                             IMPORTING check     = lv_check.

            IF lv_check <> 'N'.
              wa_finaltab-asset_dum   = iloa-anlnr.
              wa_finaltab-asset       = iloa-anlnr.
              wa_finaltab-description = eqkt-eqktx.
              READ TABLE it_equipment WITH TABLE KEY
                                      equnr = <fs_equz>-hequi
                                      ASSIGNING <fs_equipment>.
              IF sy-subrc = 0.
                wa_finaltab-equip_num = <fs_equipment>-equnr.
              ENDIF.
*             check whether current asset exists in ANLA
              IF NOT s_class IS INITIAL.
                SELECT SINGLE bukrs anln1 anln2 anlkl ord42
                  FROM anla
                  INTO (wa_anla-bukrs, wa_anla-anln1,
                        wa_anla-anln2, wa_anla-anlkl,
                        wa_anla-ord42)
                 WHERE bukrs IN r_iwerk
                   AND anln1 = wa_finaltab-asset
                   AND anlkl IN s_class
                   AND deakt = '00000000'.
              ELSE.
                SELECT SINGLE bukrs anln1 anln2 anlkl ord42
                   FROM anla
                   INTO (wa_anla-bukrs, wa_anla-anln1,
                         wa_anla-anln2, wa_anla-anlkl,
                         wa_anla-ord42)
                  WHERE bukrs IN r_iwerk
                    AND anln1 = wa_finaltab-asset
                    AND deakt = '00000000'.
              ENDIF.

*             if found, continue. Else, delete record and
*             process next record
              IF sy-subrc = 0.
                wa_finaltab-asset_sub   = wa_anla-ord42.
                wa_finaltab-company     = wa_anla-bukrs.
                wa_finaltab-asset_class = wa_anla-anlkl.
                WRITE wa_anla-anln1 TO lv_asset.
                CONCATENATE: lv_asset '-' wa_anla-anln2
                             INTO wa_finaltab-asset_subnum.
                CLEAR lv_asset.
              ELSE.
                DELETE it_equz WHERE equnr = <fs_equz>-equnr.
                CLEAR: v_flag, wa_finaltab.
                CONTINUE.
              ENDIF.

              READ TABLE it_t499s WITH TABLE KEY werks = wa_iloa-swerk
                                                 stand = wa_iloa-stort
                                                 INTO wa_t499s.
              IF sy-subrc = 0.
                wa_finaltab-location = wa_t499s-ktext.
              ENDIF.

*             get records from ANLC based from current asset
              CALL METHOD me->get_anlc
                             EXPORTING
                              anln1 = wa_anla-anln1
                              anln2 = wa_anla-anln2
                             IMPORTING
                              accq_cost   = wa_finaltab-accq_cost
                              acc_dep     = wa_finaltab-acc_dep
                              netbook_val = wa_finaltab-asset_book_val.
            ELSE.
              lv_check = 'Y'.
            ENDIF.
            APPEND wa_finaltab TO it_finaltab.
            CLEAR: wa_finaltab, wa_anla, wa_anlc, wa_iloa,
                   iloa-anlnr, eqkt-eqktx.
          ENDIF.
        ENDIF.
      ENDIF.

*-----FOR RECORDS IN IT_EQUZ WITHOUT A VALUE IN HEQUI-----*
      READ TABLE it_equz_dum WITH TABLE KEY hequi = <fs_equz>-equnr
                                                    INTO wa_equz_dum.
      IF sy-subrc <> 0.
        wa_equz_dum = <fs_equz>-equnr.
        INSERT wa_equz_dum INTO TABLE it_equz_dum.

        CALL METHOD me->get_asset
                         EXPORTING equip_num = <fs_equz>-equnr
                         IMPORTING check     = lv_check.

        IF lv_check <> 'N'.
          wa_finaltab-asset       = iloa-anlnr.
          wa_finaltab-description = eqkt-eqktx.
          READ TABLE it_equipment WITH TABLE KEY
                                  equnr = <fs_equz>-equnr
                                  ASSIGNING <fs_equipment>.

          IF sy-subrc = 0.
            wa_finaltab-equip_num = <fs_equipment>-equnr.
          ENDIF.
*         check whether current asset exists in ANLA
          IF NOT s_class IS INITIAL.
            SELECT SINGLE bukrs anln1 anln2 anlkl ord42
              FROM anla
              INTO (wa_anla-bukrs, wa_anla-anln1,
                    wa_anla-anln2, wa_anla-anlkl,
                    wa_anla-ord42)
             WHERE bukrs IN r_iwerk
               AND anln1 = wa_finaltab-asset
               AND anlkl IN s_class
               AND deakt = '00000000'.
          ELSE.
            SELECT SINGLE bukrs anln1 anln2 anlkl ord42
              FROM anla
              INTO (wa_anla-bukrs, wa_anla-anln1,
                    wa_anla-anln2, wa_anla-anlkl,
                    wa_anla-ord42)
             WHERE bukrs IN r_iwerk
               AND anln1 = wa_finaltab-asset
               AND deakt = '00000000'.
          ENDIF.

*      if found, continue. Else, delete record and get next
          IF sy-subrc = 0.
            wa_finaltab-asset_sub   = wa_anla-ord42.
            wa_finaltab-company     = wa_anla-bukrs.
            wa_finaltab-asset_class = wa_anla-anlkl.
            WRITE wa_anla-anln1 TO lv_asset.
            CONCATENATE: lv_asset '-' wa_anla-anln2
                         INTO wa_finaltab-asset_subnum.
            CLEAR lv_asset.
          ELSE.
            DELETE it_equz WHERE equnr = <fs_equz>-equnr.
            CLEAR: v_flag, wa_finaltab.
            CONTINUE.
          ENDIF.

          IF NOT <fs_equz>-hequi IS INITIAL
             AND v_flag <> 1.
            CALL METHOD me->get_asset
                             EXPORTING equip_num = <fs_equz>-hequi
                             IMPORTING check     = lv_check.

            IF lv_check <> 'N'.
              wa_finaltab-parent    = iloa-anlnr.
              wa_finaltab-asset_dum = iloa-anlnr.

              SELECT SINGLE anln2 ord42
                FROM anla
                INTO (wa_anla-anln2, wa_anla-ord42)
               WHERE bukrs IN r_iwerk
                 AND anln1 = wa_finaltab-parent
                 AND deakt = '00000000'.

*           if found, continue. Else, delete record and get next
              IF sy-subrc = 0.
                WRITE wa_finaltab-parent TO lv_asset.
                CONCATENATE: lv_asset '-' wa_anla-anln2
                             INTO wa_finaltab-parent_subnum.
                CLEAR lv_asset.
              ELSE.
                DELETE it_equz WHERE equnr = <fs_equz>-hequi.
                CLEAR wa_finaltab.
                CONTINUE.
              ENDIF.
            ELSE.
              lv_check = 'Y'.
            ENDIF.
          ENDIF.

*         Parent equipment of child
          IF v_flag = 1.
            CLEAR v_flag.
            CALL METHOD me->get_asset
                             EXPORTING equip_num = <fs_equz>-hequi
                             IMPORTING check     = lv_check.

            IF lv_check <> 'N'.
              wa_finaltab-parent    = iloa-anlnr.
              wa_finaltab-asset_dum = iloa-anlnr.

              SELECT SINGLE anln2 ord42
                FROM anla
                INTO (wa_anla-anln2, wa_anla-ord42)
               WHERE bukrs IN r_iwerk
                 AND anln1 = wa_finaltab-parent
                 AND deakt = '00000000'.

              IF sy-subrc = 0.
                WRITE wa_finaltab-parent TO lv_asset.
                CONCATENATE: lv_asset '-' wa_anla-anln2
                             INTO wa_finaltab-parent_subnum.
                CLEAR lv_asset.
              ENDIF.
            ENDIF.
          ENDIF.

          READ TABLE it_iloa WITH TABLE KEY iloan = <fs_equz>-iloan
                                                    INTO wa_iloa.
          IF sy-subrc = 0.
            wa_finaltab-funcloc = wa_iloa-tplnr.
            READ TABLE it_t499s WITH TABLE KEY werks = wa_iloa-swerk
                                               stand = wa_iloa-stort
                                               INTO wa_t499s.
            IF sy-subrc = 0.
              wa_finaltab-location = wa_t499s-ktext.
            ENDIF.
          ENDIF.

*         get records from ANLC based from current asset
          CALL METHOD me->get_anlc
                          EXPORTING
                           anln1 = wa_anla-anln1
                           anln2 = wa_anla-anln2
                          IMPORTING
                           accq_cost    = wa_finaltab-accq_cost
                           acc_dep      = wa_finaltab-acc_dep
                           netbook_val  = wa_finaltab-asset_book_val.
        ELSE.
          lv_check = 'Y'.
        ENDIF.
        APPEND wa_finaltab TO it_finaltab.
        CLEAR: wa_finaltab, wa_anla, wa_anlc, wa_iloa,
               iloa-anlnr, eqkt-eqktx.
      ENDIF.
    ENDLOOP.

    IF it_finaltab[] IS INITIAL.
      RAISE EVENT no_data EXPORTING class   = s_class-low.
    ENDIF.
  ENDMETHOD.

*----------------------------------------------*
*  METHOD get_asset                            *
*----------------------------------------------*
  METHOD get_asset.
    SELECT iloan datbi FROM equz
     UP TO 1 ROWS
     INTO (equz-iloan, equz-datbi)
     WHERE equnr = equip_num
     ORDER BY datbi DESCENDING.
    ENDSELECT.

    IF sy-subrc = 0.
      SELECT SINGLE anlnr FROM iloa
      INTO iloa-anlnr
      WHERE iloan = equz-iloan
        AND owner = space.
      IF sy-subrc = 0.
        check = 'Y'.
        SELECT SINGLE eqktx FROM eqkt
        INTO eqkt-eqktx
        WHERE equnr = equip_num.
      ELSE.
        check = 'N'.
      ENDIF.
    ENDIF.

  ENDMETHOD.

*----------------------------------------------*
*  METHOD get_anlc                             *
*----------------------------------------------*
  METHOD get_anlc.

    LOOP AT it_equz2 INTO wa_equz2.
      CALL FUNCTION 'HRCA_PLANT_GET_COMPANYCODE'
           EXPORTING
                plant                 = wa_equz2-iwerk
           IMPORTING
                companycode           = lv_bukrs
           EXCEPTIONS
                no_company_code_found = 1
                plant_not_found       = 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.

      wa_iwerk-sign   = 'I'.
      wa_iwerk-option = 'EQ'.
      wa_iwerk-low    = lv_bukrs.
      APPEND wa_iwerk TO r_iwerk.
      CLEAR wa_iwerk.
    ENDLOOP.

    SELECT  gjahr kansw knafa kaafa answl nafav
            nafag nafal aafav aafag nafap aafap
      FROM  anlc UP TO 1 ROWS
      INTO  (wa_anlc-gjahr, wa_anlc-kansw, wa_anlc-knafa,
            wa_anlc-kaafa, wa_anlc-answl, wa_anlc-nafav,
            wa_anlc-nafag, wa_anlc-nafal, wa_anlc-aafav,
            wa_anlc-aafag, wa_anlc-nafap, wa_anlc-aafap)
      WHERE anln1 = anln1
        AND anln2 = anln2
        AND bukrs IN r_iwerk
        AND afabe = '01'
      ORDER BY gjahr DESCENDING.
    ENDSELECT.

    accq_cost = wa_anlc-kansw + wa_anlc-answl.

    IF p_posdep = 'X'.
      acc_dep = wa_anlc-knafa +
                wa_anlc-nafav +
                wa_anlc-nafag +
                wa_anlc-kaafa +
                wa_anlc-aafav +
                wa_anlc-aafag +
                wa_anlc-nafal.
    ELSE.
      acc_dep = wa_anlc-knafa +
                wa_anlc-nafav +
                wa_anlc-kaafa +
                wa_anlc-aafav +
                wa_anlc-nafap +
                wa_anlc-aafap +
                wa_anlc-nafal.
    ENDIF.

    netbook_val = wa_finaltab-accq_cost +
                  wa_finaltab-acc_dep.
  ENDMETHOD.

*----------------------------------------------*
*  METHOD top_of_page                          *
*----------------------------------------------*
  METHOD top_of_page.
    DATA: lv_title_len TYPE i VALUE 113.
    IF NOT p_equip = 'X'.
      lv_title_len = 127.
    ELSE.
      lv_title_len = 117.
    ENDIF.
    WRITE: AT /2  'Fixed Assets Accounting',
           AT lv_title_len 'Cost of Primary and Subordinate Equipment',
           AT /2  'Report Date:', sy-datum MM/DD/YYYY,
           AT /2  'Time of Printing:', sy-uzeit
                  USING EDIT MASK '__:__:__'.
    IF p_posdep = 'X'.
      WRITE: AT /2 'Posted Depreciation'.
    ELSE.
      WRITE: AT /2 'Planned Depreciation'.
    ENDIF.
  ENDMETHOD.

*----------------------------------------------*
*  METHOD header                               *
*----------------------------------------------*
  METHOD header.
    FORMAT COLOR COL_HEADING.
    WRITE:  /     sy-uline(uline_len),
            /     sy-vline,
            (17) 'Asset'               CENTERED,
            (17) 'Parent'              CENTERED,
            (30) 'Functional Location' CENTERED,
            (08) 'Class'               LEFT-JUSTIFIED,
            (40) 'Description'         CENTERED.
    IF p_equip = 'X'.
      WRITE: (18) 'Equipment No.'      CENTERED.
    ENDIF.
    WRITE:  (15) 'Asset Sub-class'     CENTERED,
            (40) 'Location'            CENTERED,
            (15) 'Cost'                CENTERED.
    IF p_posdep = 'X'.
      WRITE: (20) 'Acc. Depreciation'  CENTERED.
    ELSE.
      WRITE: (20) 'Planned'            CENTERED.
    ENDIF.
    WRITE: (20) 'Net Book Value'       CENTERED,
                 sy-vline,
                 sy-uline(uline_len)   NO-GAP.
    FORMAT COLOR OFF.
  ENDMETHOD.

*----------------------------------------------*
*  METHOD show_data                            *
*----------------------------------------------*
  METHOD show_data.
    DELETE it_finaltab WHERE asset IS initial.
    SORT it_finaltab BY funcloc asset_dum DESCENDING
                        asset DESCENDING.
*  local variables
    DATA: lv_color TYPE i VALUE 1,
          lv_subtot(1)   TYPE c,
          lv_total(1)    TYPE c,
          lv_gtotal(1)   TYPE c,
          lv_flag(1)     TYPE c,
          lv_lines       TYPE i,
          lv_grand(1)    TYPE c,
          lv_check_func(1) TYPE c VALUE '1',
          sub_accq_cost  TYPE anlc-kansw,
          sub_acc_dep    TYPE anlc-kansw,
          tot_accq_cost  TYPE anlc-kansw,
          tot_acc_dep    TYPE anlc-kansw,
          gtot_accq_cost TYPE anlc-kansw,
          gtot_acc_dep   TYPE anlc-kansw,
          subtot         TYPE anlc-kansw,
          total          TYPE anlc-kansw,
          gtotal         TYPE anlc-kansw,
          lv_grand_cost(15)   TYPE p DECIMALS 2,
          lv_grand_accdep(15) TYPE p DECIMALS 2,
          lv_grand_net(15)    TYPE p DECIMALS 2,
          lv_old         TYPE iloa-tplnr,
          lv_new         TYPE iloa-tplnr,
          wa_final       LIKE LINE OF it_finaltab,
          wa_output2     LIKE LINE OF it_output.

*   dummy table
    DATA: it_finaltab_dum TYPE STANDARD TABLE OF t_finaltab.

    FIELD-SYMBOLS: <fs_finaltab> LIKE LINE OF it_finaltab,
                   <wa_finaltab> LIKE LINE OF it_finaltab,
                   <fs_finaltab_dum> LIKE LINE OF
                                     it_finaltab_dum,
                   <fs_final>    LIKE LINE OF it_finaltab.

    it_finaltab_dum[] = it_finaltab[].

*/  move records by master data first, parent then child :)
    LOOP AT it_finaltab ASSIGNING <fs_finaltab>.
*/    master/top record
      IF <fs_finaltab>-asset_dum IS INITIAL AND
         <fs_finaltab>-parent    IS INITIAL.
        CLEAR wa_output.
        READ TABLE it_output  WITH KEY funcloc = <fs_finaltab>-funcloc
                                     asset     = <fs_finaltab>-asset
                                     INTO wa_output.
        IF sy-subrc <> 0.
          MOVE-CORRESPONDING <fs_finaltab> TO wa_output.
          APPEND wa_output TO it_output.
          DELETE it_finaltab.
*         check if there any dependent assets on the master data
          LOOP AT it_finaltab ASSIGNING <wa_finaltab>.
            READ TABLE it_finaltab_dum WITH KEY
                               funcloc   = wa_output-funcloc
                               asset_dum = wa_output-asset
                               parent    = wa_output-asset
                               ASSIGNING <fs_finaltab_dum>.

            IF sy-subrc = 0.
              READ TABLE it_output WITH KEY
                                funcloc   = <fs_finaltab_dum>-funcloc
                                asset_dum = <fs_finaltab_dum>-asset_dum
                                asset     = <fs_finaltab_dum>-asset
                                parent    = <fs_finaltab_dum>-parent
                                INTO wa_output.
              IF sy-subrc <> 0.
                APPEND <fs_finaltab_dum> TO it_output.
                DELETE it_finaltab WHERE
                                funcloc    = <fs_finaltab_dum>-funcloc
                            AND asset_dum  = <fs_finaltab_dum>-asset_dum
                            AND asset      = <fs_finaltab_dum>-asset
                            AND parent     = <fs_finaltab_dum>-parent.
              ENDIF.
*             check if there are any dependent child assets
              LOOP AT it_finaltab ASSIGNING <fs_final>.
                IF <fs_final>-funcloc = <fs_finaltab_dum>-funcloc
                AND <fs_final>-parent = <fs_finaltab_dum>-asset.
                  READ TABLE it_output WITH KEY
                                    funcloc   = <fs_final>-funcloc
                                    asset_dum = <fs_final>-asset_dum
                                    asset     = <fs_final>-asset
                                    parent    = <fs_final>-parent
                                    INTO wa_output.
                  IF sy-subrc <> 0.
                    APPEND <fs_final> TO it_output.
                    DELETE it_finaltab.
                  ENDIF.
                ENDIF.
              ENDLOOP.
            ELSE.
              CONTINUE.
            ENDIF.
          ENDLOOP.
        ELSE.
          CONTINUE.
        ENDIF.
*/    parent
      ELSEIF NOT <fs_finaltab>-asset_dum IS INITIAL
             AND <fs_finaltab>-parent    IS INITIAL.
        READ TABLE it_output  WITH KEY funcloc = <fs_finaltab>-funcloc
                                     asset_dum = <fs_finaltab>-asset_dum
                                     asset     = <fs_finaltab>-asset
                                     parent    = <fs_finaltab>-parent
                                     INTO wa_output.
        IF sy-subrc <> 0.
          MOVE-CORRESPONDING <fs_finaltab> TO wa_output.
          APPEND wa_output TO it_output.
          CLEAR wa_output.
*         get child assets of given parent asset
          LOOP AT it_finaltab ASSIGNING <wa_finaltab>.
            IF <wa_finaltab>-funcloc = <fs_finaltab>-funcloc AND
               <wa_finaltab>-parent  = <fs_finaltab>-asset.
              READ TABLE it_output WITH KEY
                                   funcloc   = <wa_finaltab>-funcloc
                                   asset_dum = <wa_finaltab>-asset_dum
                                   asset     = <wa_finaltab>-asset
                                   parent    = <wa_finaltab>-parent
                                   INTO wa_output.
              IF sy-subrc <> 0.
                MOVE-CORRESPONDING <wa_finaltab> TO wa_output.
                APPEND wa_output TO it_output.
                DELETE it_finaltab.
              ENDIF.
*             check if there are stil dependencies on current asset
              LOOP AT it_finaltab ASSIGNING <fs_final>.
                IF  <fs_final>-funcloc = wa_output-funcloc
                AND <fs_final>-parent  = wa_output-asset.
                  READ TABLE it_output WITH KEY
                                       funcloc   = <fs_final>-funcloc
                                       asset_dum = <fs_final>-asset_dum
                                       asset     = <fs_final>-asset
                                       parent    = <fs_final>-parent
                                       INTO wa_output2.
                  IF sy-subrc <> 0.
                    CLEAR wa_output.
                    MOVE-CORRESPONDING <fs_final> TO wa_output.
                    APPEND wa_output TO it_output.
                    CLEAR wa_output.
                    DELETE it_finaltab.
                  ENDIF.
                ENDIF.
              ENDLOOP.
            ELSE.
              CONTINUE.
            ENDIF.
          ENDLOOP.
          CLEAR wa_output.
        ELSE.
          CONTINUE.
        ENDIF.
*/    child
      ELSEIF NOT <fs_finaltab>-asset_dum IS INITIAL
         AND NOT <fs_finaltab>-parent    IS INITIAL.
        CLEAR wa_output.
        READ TABLE it_output WITH KEY funcloc = <fs_finaltab>-funcloc
                                     asset_dum = <fs_finaltab>-asset_dum
                                     asset     = <fs_finaltab>-asset
                                     parent    = <fs_finaltab>-parent
                                     INTO wa_output.
        IF sy-subrc <> 0.
          MOVE-CORRESPONDING <fs_finaltab> TO wa_output.
          IF <fs_finaltab_dum> IS ASSIGNED.
            UNASSIGN <fs_finaltab_dum>.
          ENDIF.
*         get parent of current child asset
*         <fs_finaltab_dum> will store the parent asset
          READ TABLE it_finaltab_dum WITH KEY
                                     funcloc = wa_output-funcloc
                                     asset   = wa_output-parent
                                     ASSIGNING <fs_finaltab_dum>.

          IF <wa_finaltab> IS ASSIGNED.
            UNASSIGN <wa_finaltab>.
          ENDIF.
          IF sy-subrc = 0.
*          check again if current parent asset has a master data
*          if found, store in <wa_finaltab>
            READ TABLE it_finaltab_dum WITH KEY
                               funcloc = <fs_finaltab_dum>-funcloc
                               asset   = <fs_finaltab_dum>-asset_dum
                               asset   = <fs_finaltab_dum>-parent
                               ASSIGNING <wa_finaltab>.
          ENDIF.
*         move master/top data
          IF <wa_finaltab> IS ASSIGNED AND NOT <wa_finaltab> IS INITIAL.
            READ TABLE it_output WITH KEY
                               funcloc   = <wa_finaltab>-funcloc
                               asset     = <wa_finaltab>-asset
                               INTO wa_output.
            IF sy-subrc <> 0.
              CLEAR wa_output.
              MOVE-CORRESPONDING <wa_finaltab> TO wa_output.
              IF wa_output-asset_dum IS INITIAL.
                wa_output-asset_dum = wa_output-asset.
              ENDIF.
              APPEND wa_output TO it_output.
              DELETE it_finaltab WHERE funcloc = wa_output-funcloc
                                   AND asset   = wa_output-asset.
              IF <wa_finaltab> IS ASSIGNED.
                UNASSIGN <wa_finaltab>.
              ENDIF.
*             move dependent assets of master data
              LOOP AT it_finaltab ASSIGNING <wa_finaltab>.
                IF <wa_finaltab>-funcloc   = wa_output-funcloc AND
                   <wa_finaltab>-asset_dum = wa_output-asset   AND
                   <wa_finaltab>-parent    = wa_output-asset.
                  CLEAR wa_output2.
                  READ TABLE it_output WITH KEY
                                funcloc   = <wa_finaltab>-funcloc
                                asset_dum = <wa_finaltab>-asset_dum
                                asset     = <wa_finaltab>-asset
                                parent    = <wa_finaltab>-parent
                                INTO wa_output2.

                  IF sy-subrc <> 0.
                    MOVE-CORRESPONDING <wa_finaltab> TO wa_output2.
                    APPEND wa_output2 TO it_output.
                  ENDIF.
                ENDIF.
              ENDLOOP.
            ENDIF.
          ENDIF.
*         move parent asset
          IF <fs_finaltab_dum> IS ASSIGNED AND
             NOT <fs_finaltab_dum> IS INITIAL.
            READ TABLE it_output WITH KEY
                             funcloc   = <fs_finaltab_dum>-funcloc
                             asset     = <fs_finaltab_dum>-asset
                             INTO wa_output.
            IF sy-subrc <> 0.
              CLEAR wa_output.
              MOVE-CORRESPONDING <fs_finaltab_dum> TO wa_output.
              IF wa_output-asset_dum IS INITIAL.
                wa_output-asset_dum = wa_output-asset.
              ENDIF.
              APPEND wa_output TO it_output.
            ENDIF.
*           move child assets of the given parent asset
            LOOP AT it_finaltab INTO wa_final.
              IF wa_final-funcloc = <fs_finaltab_dum>-funcloc AND
                 wa_final-parent  = <fs_finaltab_dum>-asset.
                READ TABLE it_output WITH KEY
                              funcloc = wa_final-funcloc
                              asset   = wa_final-asset
                              INTO wa_output.
                IF sy-subrc <> 0.
                  CLEAR wa_output2.
                  MOVE-CORRESPONDING wa_final TO wa_output2.
                  APPEND wa_output2 TO it_output.
                ENDIF.
              ELSE.
                CONTINUE.
              ENDIF.
            ENDLOOP.
          ENDIF.
        ELSE.
          CONTINUE.
        ENDIF.
      ENDIF.
    ENDLOOP.

*   check number of records in itab
    DESCRIBE TABLE it_output LINES lv_lines.
    IF lv_lines > 1.
      lv_flag = 1.
    ENDIF.

*   predefined length for display depending
*   if the user wants to show equipment number
    DATA: lv_uline_len TYPE i VALUE 235,
          lv_cost_len  TYPE i VALUE 177,
          lv_dep_len   TYPE i VALUE 193,
          lv_net_len   TYPE i VALUE 214.

    IF p_equip = 'X'.
      ADD 19 TO: lv_uline_len, lv_cost_len,
                 lv_dep_len, lv_net_len.
    ENDIF.

*   write results
    LOOP AT it_output INTO wa_output.
      HIDE wa_output-company.
      IF sy-tabix = 1.
        CALL METHOD me->header EXPORTING uline_len = lv_uline_len..
      ENDIF.

      AT END OF asset_dum.
        lv_subtot = 1.
      ENDAT.

      AT END OF funcloc.
        lv_total = 1.
        lv_gtotal = 1.
      ENDAT.

      AT LAST.
        lv_grand = 1.
      ENDAT.

      lv_new = wa_output-funcloc.
      IF NOT lv_old IS INITIAL.
        IF lv_new <> lv_old.
          CLEAR lv_check_func.
          SKIP 2.
          CALL METHOD me->header EXPORTING uline_len = lv_uline_len.
        ENDIF.
      ENDIF.
      lv_old = lv_new.

      IF lv_color = 1.
        lv_color = 2.
      ELSE.
        lv_color = 1.
      ENDIF.

      FORMAT INTENSIFIED OFF COLOR = lv_color.
      WRITE:  /    sy-vline.
      FORMAT HOTSPOT ON.
      IF wa_output-parent IS INITIAL.
        WRITE: (17) wa_output-asset_subnum    CENTERED.
        HIDE wa_output-asset_subnum.
      ELSE.
        WRITE: (17) wa_output-asset_subnum    RIGHT-JUSTIFIED.
        HIDE wa_output-asset_subnum.
      ENDIF.
      FORMAT HOTSPOT OFF.
      WRITE: (17) wa_output-parent_subnum     CENTERED,
             (30) wa_output-funcloc           CENTERED,
             (08) wa_output-asset_class       CENTERED,
             (40) wa_output-description       CENTERED.
      IF p_equip = 'X'.
        FORMAT HOTSPOT ON.
        WRITE: (18) wa_output-equip_num       CENTERED.
        HIDE wa_output-equip_num.
        FORMAT HOTSPOT OFF.
      ENDIF.
      WRITE: (15) wa_output-asset_sub         CENTERED,
             (40) wa_output-location          CENTERED,
             (15) wa_output-accq_cost         CENTERED,
             (20) wa_output-acc_dep           CENTERED,
             (20) wa_output-asset_book_val    CENTERED,
             sy-vline.

      ADD: wa_output-accq_cost TO sub_accq_cost,
           wa_output-acc_dep   TO sub_acc_dep,

           wa_output-accq_cost TO tot_accq_cost,
           wa_output-acc_dep   TO tot_acc_dep,

           wa_output-accq_cost TO gtot_accq_cost,
           wa_output-acc_dep   TO gtot_acc_dep,

           wa_output-asset_book_val TO subtot,
           wa_output-asset_book_val TO total,
           wa_output-asset_book_val TO gtotal,

           wa_output-accq_cost      TO lv_grand_cost,
           wa_output-acc_dep        TO lv_grand_accdep,
           wa_output-asset_book_val TO lv_grand_net.

*     write subtotal
**     if there is only one record in itab, subtotal would
**     not be displayed
      IF lv_total <> 1.
        IF lv_subtot = 1 AND lv_flag = 1.
          CLEAR lv_subtot.
          FORMAT COLOR COL_TOTAL.
          WRITE: / sy-vline,
                 'Sub-total:',
                 AT lv_cost_len(15) sub_accq_cost CENTERED,
                 AT lv_dep_len(20)  sub_acc_dep   CENTERED,
                 AT lv_net_len(20)  subtot        CENTERED,
                 sy-vline.
          CLEAR: sub_accq_cost, sub_acc_dep,  subtot.
          FORMAT COLOR OFF.
        ENDIF.
      ENDIF.

*     write total for a given parent and child or master data
      IF lv_total = 1.
        CLEAR lv_total.
        FORMAT COLOR COL_TOTAL.
        WRITE: / sy-vline,
               'Total:',
               AT lv_cost_len(15) tot_accq_cost CENTERED,
               AT lv_dep_len(20)  tot_acc_dep   CENTERED,
               AT lv_net_len(20)  total         CENTERED,
               sy-vline.
        CLEAR: tot_accq_cost, tot_acc_dep, total,
               sub_accq_cost, sub_acc_dep,  subtot.
        FORMAT COLOR OFF.
      ENDIF.

*     write total for a given functional location
      IF lv_gtotal = 1.
        CLEAR lv_gtotal.
        FORMAT COLOR COL_TOTAL INTENSIFIED ON.
        WRITE: / sy-uline(lv_uline_len),
               / sy-vline,
               'Total:',    wa_output-funcloc,
                AT lv_cost_len(15) gtot_accq_cost CENTERED,
                AT lv_dep_len(20)  gtot_acc_dep   CENTERED,
                AT lv_net_len(20)  gtotal         CENTERED,
                 sy-vline,
                 sy-uline(lv_uline_len).
        CLEAR: gtot_accq_cost, gtot_acc_dep, gtotal,
               tot_accq_cost, tot_acc_dep, total,
               sub_accq_cost, sub_acc_dep,  subtot.
        FORMAT COLOR OFF.
      ENDIF.

*     Write grand total for all the records
      IF lv_check_func <> 1.
        IF lv_grand = 1.
          CLEAR lv_grand.
          SKIP 1.
          FORMAT COLOR = 4.
          WRITE: / sy-uline(lv_uline_len),
                  sy-vline,
                 'Grand Total:',
                  AT lv_cost_len(15) lv_grand_cost   CENTERED,
                  AT lv_dep_len(20)  lv_grand_accdep CENTERED,
                  AT lv_net_len(20)  lv_grand_net    CENTERED,
                  sy-vline,
                  sy-uline(lv_uline_len).
          CLEAR: lv_grand_cost, lv_grand_accdep, lv_grand_net.
          FORMAT COLOR OFF.
        ENDIF.
      ENDIF.
    ENDLOOP.
    WRITE: / '*Indented assets are child assets'.
  ENDMETHOD.
ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_handler DEFINITION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_handler DEFINITION.
  PUBLIC SECTION.
    METHODS handle_event FOR EVENT no_data OF lcl_main
                             IMPORTING class.
ENDCLASS.

*---------------------------------------------------------------------*
*       CLASS lcl_handler IMPLEMENTATION
*---------------------------------------------------------------------*
*       ........                                                      *
*---------------------------------------------------------------------*
CLASS lcl_handler IMPLEMENTATION.
  METHOD handle_event.
MESSAGE i050 WITH 'Asset class' class 'was not found in given location'
          .
    LEAVE LIST-PROCESSING.
  ENDMETHOD.
ENDCLASS.

*----------------------------------------------*
* Top of page                                  *
*----------------------------------------------*
TOP-OF-PAGE.
  DATA: top TYPE REF TO lcl_main.
  CREATE OBJECT top.
  CALL METHOD top->top_of_page.

*----------------------------------------------*
* Start of selection                           *
*----------------------------------------------*
START-OF-SELECTION.
  DATA: main    TYPE REF TO lcl_main,
        handler TYPE REF TO lcl_handler.

  CREATE OBJECT: main, handler.

  SET HANDLER handler->handle_event FOR ALL INSTANCES.
  CALL METHOD main->get_data.
  CALL METHOD main->combine_data.
  CALL METHOD main->show_data.

*----------------------------------------------*
* At line selection                            *
*----------------------------------------------*
AT LINE-SELECTION.
  DATA: lv_fnam(50)  TYPE c,
        lv_fval(50)  TYPE c,
        lv_asset_dum(12)   TYPE n,
        lv_assetsub_dum(4) TYPE n.

  GET CURSOR FIELD lv_fnam VALUE lv_fval.
  IF sy-subrc = 0.
    CASE lv_fnam.
      WHEN 'WA_OUTPUT-ASSET_SUBNUM'.
        SPLIT lv_fval AT '-' INTO lv_asset_dum lv_assetsub_dum.
        CONDENSE: lv_asset_dum, lv_assetsub_dum.
        SET PARAMETER ID 'BUK' FIELD wa_output-company.
        SET PARAMETER ID 'AN1' FIELD lv_asset_dum.
        SET PARAMETER ID 'AN2' FIELD lv_assetsub_dum.
        CALL TRANSACTION 'AS03' AND SKIP FIRST SCREEN.
      WHEN 'WA_OUTPUT-EQUIP_NUM'.
        SET PARAMETER ID 'EQN' FIELD lv_fval.
        CALL TRANSACTION 'IE03' AND SKIP FIRST SCREEN.
    ENDCASE.
  ENDIF.

Hope it helps...

P.S. Please award points if it helps...

Read only

Former Member
0 Likes
598

Hi

You have to HIDE the bothe fields TPLNR and EQUNR in the Output Loop and in the At user command you have use parameter ID and call the transactions

see the below code and make changes accordingly

report zf_rept_debtor_ageing

no standard page heading

message-id fb

line-count 65

line-size 230.

***********************************************************************

  • Purpose : This ABAP program will fetch the Account Receivables for

  • a Customer for the given period and display the due days.

*----


tables: t001, " Company Codes

t005, " Countries

skb1, " GL Master

kna1. " Customer Master

***********************************************************************

  • Internal Tables

***********************************************************************

  • Internal table for BSID (Open Items) data

data: begin of it_bsid occurs 0,

kunnr like bsid-kunnr, " Customer Number

gjahr like bsid-gjahr, " Fiscal Year

belnr like bsid-belnr, " Acc.Document

buzei like bsid-buzei, " Item

budat like bsid-budat, " Posting Date

shkzg like bsid-shkzg, " Dr/Cr Indicator

dmbtr like bsid-dmbtr, " Amount(Local Curr)

wrbtr like bsid-wrbtr, " Amount(Doc Curr)

dmbe2 like bsid-dmbe2, " Amount(USD)

waers like bsid-waers, " Currency

zterm like bsid-zterm, " Payment Terms

vbeln like bsid-vbeln, " Billing Doc

zfbdt like bsid-zfbdt, " Baseline Date

zbd1t like bsid-zbd1t, " No of days

hkont like bsid-hkont, " GL Account

name1 like kna1-name1, " Customer Name

land1 like kna1-land1, " Country

end of it_bsid.

  • Internal table for BSAD (Closed Items) data

data: begin of it_bsad occurs 0,

kunnr like bsad-kunnr, " Customer Number

gjahr like bsad-gjahr, " Fiscal Year

belnr like bsad-belnr, " Acc.Document

buzei like bsad-buzei, " Item

budat like bsad-budat, " Posting Date

shkzg like bsad-shkzg, " Dr/Cr Indicator

dmbtr like bsad-dmbtr, " Amount(Local Curr)

wrbtr like bsid-wrbtr, " Amount(Doc Curr)

dmbe2 like bsad-dmbe2, " Amount(USD)

waers like bsad-waers, " Currency

zterm like bsid-zterm, " Payment Terms

vbeln like bsid-vbeln, " Billing Doc

zfbdt like bsid-zfbdt, " Baseline Date

zbd1t like bsid-zbd1t, " No of days

hkont like bsid-hkont, " GL Account

name1 like kna1-name1, " Customer Name

land1 like kna1-land1, " Country

end of it_bsad.

  • Internal table for Report Output

data: begin of it_report occurs 0,

kunnr like bsid-kunnr, " Customer Number

belnr like bsid-belnr, " Acc.Document

name1 like kna1-name1, " Customer Name

land1 like kna1-land1, " Country

shkzg like bsid-shkzg, " Dr/Cr Indicator

budat like bsid-budat, " Posting Date

dmbtr like bsid-dmbtr, " Amount(Local Curr)

wrbtr like bsid-wrbtr, " Amount(Doc Curr)

dmbe2 like bsid-dmbe2, " Amount(USD)

waers like bsid-waers, " Currency

due_amnt like bsid-dmbtr, " Amount(Over Due)

d_amnt1 like bsid-dmbtr, " Amount(0-30 Future Due)

d_amnt2 like bsid-dmbtr, " Amount(31-60 Future Due)

d_amnt3 like bsid-dmbtr, " Amount(61-90 Future Due)

d_amnt4 like bsid-dmbtr, " Amount(91-120 Future Due)

d_amnt5 like bsid-dmbtr, " Amount(more than 120)

due_date like bsid-budat, " Due date

zterm like bsid-zterm, " Payment Terms

vbeln like bsid-vbeln, " Billing Doc

end of it_report.

*----


  • Declaration of Data and Variables

*----


data: v_days type i, " Difference days

v_waers like t001-waers, " Co.Code Currency

v_sum1 like bsid-dmbtr, " Totals 1

v_sum2 like bsid-dmbtr, " Totals 2

v_sum3 like bsid-dmbtr, " Totals 3

v_sum4 like bsid-dmbtr, " Totals 4

v_sum5 like bsid-dmbtr, " Totals 5

v_sum6 like bsid-dmbtr, " Totals 6

v_sum7 like bsid-dmbtr, " Totals 7

v_sum8 like bsid-dmbe2. " Totals 8

  • Constants

constants: c_doc_waers(3) value 'USD',

c_mitkz type c value 'D'.

************************************************************************

  • Selection Screen

************************************************************************

selection-screen : begin of block b1 with frame title text-001.

parameters: p_bukrs like t001-bukrs obligatory. " Company Code

select-options:s_kunnr for kna1-kunnr, " Customer Number

s_land1 for t005-land1, " Country

s_hkont for skb1-saknr. " G/L Account

parameters: p_date like sy-datum obligatory. " Report Date

selection-screen: end of block b1.

selection-screen : begin of block b2 with frame title text-002.

selection-screen begin of line.

selection-screen comment 2(30) text-003 for field p_rb1.

parameters: p_rb1 radiobutton group rb.

selection-screen end of line.

selection-screen begin of line.

selection-screen comment 2(30) text-004 for field p_rb2.

parameters: p_rb2 radiobutton group rb.

selection-screen end of line.

selection-screen: end of block b2.

selection-screen : begin of block b4 with frame.

selection-screen begin of line.

selection-screen comment 2(29) text-038 for field p_chk1.

parameters: p_chk1 as checkbox.

selection-screen end of line.

selection-screen: end of block b4.

selection-screen : begin of block b3 with frame title text-030.

selection-screen begin of line.

selection-screen comment 2(30) text-031 for field p_rb3.

parameters: p_rb3 radiobutton group rb1.

selection-screen end of line.

selection-screen begin of line.

selection-screen comment 2(30) text-032 for field p_rb4.

parameters: p_rb4 radiobutton group rb1.

selection-screen end of line.

selection-screen: end of block b3.

*********Initialization**********************************************

initialization.

***********************************************************************

  • At Selection Screen

***********************************************************************

at selection-screen.

  • Checking for the input values of selection screen.

perform screen_check.

***********************************************************************

  • Top-Of-Page

***********************************************************************

top-of-page.

if p_rb3 = 'X'.

if p_chk1 = 'X'.

  • Write the Column Headings for detailed report(in Doc Currency)

perform col_heading2.

else.

  • Write the Column Headings for detailed report

perform col_heading.

endif.

else.

  • Write the Column Headings for summary report

perform col_heading1.

endif.

***********************************************************************

  • Start-Of-Selection

***********************************************************************

start-of-selection.

  • Get the Customer Open Items from BSID

perform get_open_data.

  • Get the Customer Closed Items from BSAD

perform get_close_data.

  • Get the data from BSID,BSAD and KNA1 into one int.table

perform process_data.

***********************************************************************

  • End-Of-Selection

***********************************************************************

end-of-selection.

if it_report[] is initial.

write : 'No Documents found'(005).

else.

if p_rb3 = 'X'.

  • Write the Detailed Report

perform write_report.

else.

  • Write the Summary Report

perform write_report1.

endif.

endif.

***********************************************************************

  • At Line-Selection

***********************************************************************

at line-selection.

  • When double clicked on BELNR leave to transaction FB03

perform line_sel.

***********************************************************************

&----


*& Form SCREEN_CHECK

&----


  • Checking for the input values of selection screen

----


form screen_check.

  • Validation of Company Code

clear t001.

if not p_bukrs is initial.

select bukrs from t001 up to 1 rows

into t001-bukrs

where bukrs = p_bukrs.

endselect.

if sy-subrc ne 0.

message e000 with 'Invalid Company Code'(006).

endif.

endif.

  • Validation of Customer Number

clear kna1.

if not s_kunnr is initial.

select kunnr from kna1 up to 1 rows

into kna1-kunnr

where kunnr in s_kunnr.

endselect.

if sy-subrc ne 0.

message e000 with 'Invalid Customer Number'(007).

endif.

endif.

  • Validation of Country

clear t005.

if not s_land1 is initial.

select land1 from t005 up to 1 rows

into t005-land1

where land1 in s_land1.

endselect.

if sy-subrc ne 0.

message e000 with 'Invalid Country'(036).

endif.

endif.

  • Validation of GL Account

clear skb1.

if not s_hkont is initial.

select saknr from skb1 up to 1 rows

into skb1-saknr

where saknr in s_hkont and

mitkz = c_mitkz.

endselect.

if sy-subrc ne 0.

message e000 with 'Invalid GL Reconciliation Account'(037).

endif.

endif.

endform. " SCREEN_CHECK

&----


*& Form COL_HEADING

&----


  • Write the Column Headings for detailed report

----


form col_heading.

skip .

write: /88 'DEBTOR AGEING REPORT AS AT:'(019) centered,

116 p_date centered, 198 sy-pagno.

skip .

write: /2 'CoCode:'(016),13(4) p_bukrs color 3.

if not s_kunnr is initial.

if not s_kunnr-high is initial.

write: 20 'Customer:'(041),33 s_kunnr-low color 3,

'-', s_kunnr-high color 3.

else.

write: 20 'Customer:'(041),33 s_kunnr-low color 3.

endif.

endif.

if not s_land1 is initial.

if not s_land1-high is initial.

write: /2 'Country:'(042),13(4) s_land1-low color 3,

'-', s_land1-high color 3.

else.

write: /2 'Country:'(042),13(4) s_land1-low color 3.

endif.

if not s_hkont is initial.

if not s_hkont-high is initial.

write: 20 'GL Account:'(043),33 s_hkont-low color 3,

'-', s_hkont-high color 3.

else.

write: 20 'GL Account:'(043),33 s_hkont-low color 3.

endif.

endif.

else.

if not s_hkont is initial.

if not s_hkont-high is initial.

write: /2 'GL Account:'(043),14 s_hkont-low color 3,

'-', s_hkont-high color 3.

else.

write: /2 'GL Account:'(043),14 s_hkont-low color 3.

endif.

endif.

endif.

write: 183 'Run Date:'(029), sy-datum.

format color col_heading.

write at /1(203) sy-uline .

write: / sy-vline, 2(10) 'Customer'(008) centered,

12 sy-vline, 13(30) 'Customer Name'(009),

43 sy-vline, 44(3) 'Cty'(014) centered,

47 sy-vline, 48(15) 'Amount'(013) right-justified,

63 sy-vline, 64(4) 'Curr'(011) centered,

68 sy-vline, 69(15) 'Overdue'(012) centered,

84 sy-vline, 85(15) '0 - 30 Days'(010) centered,

100 sy-vline,101(15) '31 - 60 Days'(028) centered,

116 sy-vline,117(15) '61 - 90 Days'(021) centered,

132 sy-vline,133(15) '91 - 120 Days'(022) centered,

148 sy-vline,149(15) 'Above 120 Days'(023) centered,

164 sy-vline,165(10) 'Due Date'(024) centered,

175 sy-vline,176(5) 'PayT'(025) centered,

181 sy-vline,182(10) 'Bill.Doc.'(026) centered,

192 sy-vline,193(10) 'Doc.No.'(027) centered,

203 sy-vline.

write at /1(203) sy-uline.

format color off.

endform. " COL_HEADING

&----


*& Form COL_HEADING1

&----


  • Write the Column Headings for summary report

----


form col_heading1.

skip .

write: /54 'DEBTOR AGEING REPORT (SUMMARY) AS AT:'(033) centered,

92 p_date centered, 158 sy-pagno.

skip .

write: /2 'CoCode:'(016), 13(4) p_bukrs color 3.

if not s_kunnr is initial.

if not s_kunnr-high is initial.

write: 20 'Customer:'(041),33 s_kunnr-low color 3,

'-', s_kunnr-high color 3.

else.

write: 20 'Customer:'(041),33 s_kunnr-low color 3.

endif.

endif.

if not s_land1 is initial.

if not s_land1-high is initial.

write: /2 'Country:'(042),13(4) s_land1-low color 3,

'-', s_land1-high color 3.

else.

write: /2 'Country:'(042),13(4) s_land1-low color 3.

endif.

if not s_hkont is initial.

if not s_hkont-high is initial.

write: 20 'GL Account:'(043),33 s_hkont-low color 3,

'-', s_hkont-high color 3.

else.

write: 20 'GL Account:'(043),33 s_hkont-low color 3.

endif.

endif.

else.

if not s_hkont is initial.

if not s_hkont-high is initial.

write: /2 'GL Account:'(043),14 s_hkont-low color 3,

'-', s_hkont-high color 3.

else.

write: /2 'GL Account:'(043),14 s_hkont-low color 3.

endif.

endif.

endif.

write: 144 'Run Date:'(029), sy-datum.

format color col_heading.

write at /1(164) sy-uline .

write: / sy-vline, 2(10) 'Customer'(008) centered,

12 sy-vline, 13(30) 'Customer Name'(009),

43 sy-vline, 44(3) 'Cty'(014) centered,

47 sy-vline, 48(15) 'Amount'(013) right-justified,

63 sy-vline, 64(4) 'Curr'(011) centered,

68 sy-vline, 69(15) 'Overdue'(012) centered,

84 sy-vline, 85(15) '0 - 30 Days'(010) centered,

100 sy-vline,101(15) '31 - 60 Days'(028) centered,

116 sy-vline,117(15) '61 - 90 Days'(021) centered,

132 sy-vline,133(15) '91 - 120 Days'(022) centered,

148 sy-vline,149(15) 'Above 120 Days'(023) centered,

164 sy-vline.

write at /1(164) sy-uline.

format color off.

endform. " COL_HEADING1

&----


*& Form COL_HEADING2

&----


  • Write the Column Headings for summary report(in Doc Curr)

----


form col_heading2.

skip .

write: /99 'DEBTOR AGEING REPORT AS AT:'(019) centered,

127 p_date centered, 220 sy-pagno.

skip .

write: /2 'CoCode:'(016),13(4) p_bukrs color 3.

if not s_kunnr is initial.

if not s_kunnr-high is initial.

write: 20 'Customer:'(041),33 s_kunnr-low color 3,

'-', s_kunnr-high color 3.

else.

write: 20 'Customer:'(041),33 s_kunnr-low color 3.

endif.

endif.

if not s_land1 is initial.

if not s_land1-high is initial.

write: /2 'Country:'(042),13(4) s_land1-low color 3,

'-', s_land1-high color 3.

else.

write: /2 'Country:'(042),13(4) s_land1-low color 3.

endif.

if not s_hkont is initial.

if not s_hkont-high is initial.

write: 20 'GL Account:'(043),33 s_hkont-low color 3,

'-', s_hkont-high color 3.

else.

write: 20 'GL Account:'(043),33 s_hkont-low color 3.

endif.

endif.

else.

if not s_hkont is initial.

if not s_hkont-high is initial.

write: /2 'GL Account:'(043),14 s_hkont-low color 3,

'-', s_hkont-high color 3.

else.

write: /2 'GL Account:'(043),14 s_hkont-low color 3.

endif.

endif.

endif.

write: 204 'Run Date:'(029), sy-datum.

format color col_heading.

write at /1(225) sy-uline .

write: / sy-vline, 2(10) 'Customer'(008) centered,

12 sy-vline, 13(30) 'Customer Name'(009),

43 sy-vline, 44(3) 'Cty'(014) centered,

47 sy-vline, 48(15) 'Amount'(013) right-justified,

63 sy-vline, 64(4) 'Curr'(011) centered,

68 sy-vline, 69(15) 'Overdue'(012) centered,

84 sy-vline, 85(15) '0 - 30 Days'(010) centered,

100 sy-vline,101(15) '31 - 60 Days'(028) centered,

116 sy-vline,117(15) '61 - 90 Days'(021) centered,

132 sy-vline,133(15) '91 - 120 Days'(022) centered,

148 sy-vline,149(15) 'Above 120 Days'(023) centered,

164 sy-vline,165(10) 'Due Date'(024) centered,

175 sy-vline,176(5) 'PayT'(025) centered,

181 sy-vline,182(10) 'Bill.Doc.'(026) centered,

192 sy-vline,193(10) 'Doc.No.'(027) centered,

203 sy-vline,204(16) 'Amount(Doc.Curr)'(039),

220 sy-vline,221(4) 'Curr'(040),

225 sy-vline.

write at /1(225) sy-uline.

format color off.

endform. " COL_HEADING2

&----


*& Form GET_OPEN_DATA

&----


  • Get the Customer Open Items from BSID

----


form get_open_data.

select a~kunnr " Customer Number

a~gjahr " Fiscal Year

a~belnr " Acc.Document

a~buzei " Item

a~budat " Posting Date

a~shkzg " Dr/Cr Indicator

a~dmbtr " Amount(Local Curr)

a~wrbtr " Amount(Doc Curr)

a~dmbe2 " Amount(USD)

a~waers " Currency

a~zterm " Payment Terms

a~vbeln " Billing Doc

a~zfbdt " Baseline Date

a~zbd1t " No of days

a~hkont " GL account

b~name1 " Customer Name

b~land1 " Country

into table it_bsid

from bsid as a join kna1 as b

on akunnr = bkunnr

where a~bukrs = p_bukrs and

a~kunnr in s_kunnr and

a~hkont in s_hkont and

b~land1 in s_land1 and

a~budat le p_date.

sort it_bsid by kunnr gjahr belnr buzei budat.

endform. " GET_OPEN_DATA

&----


*& Form GET_CLOSE_DATA

&----


  • Get the Customer closed Items from BSID

----


form get_close_data.

select a~kunnr " Customer Number

a~gjahr " Fiscal Year

a~belnr " Acc.Document

a~buzei " Item

a~budat " Posting Date

a~shkzg " Dr/Cr Indicator

a~dmbtr " Amount(Local Curr)

a~wrbtr " Amount(Doc Curr)

a~dmbe2 " Amount(USD)

a~waers " Currency

a~zterm " Payment Terms

a~vbeln " Billing Doc

a~zfbdt " Baseline Date

a~zbd1t " No of days

a~hkont " GL account

b~name1 " Customer Name

b~land1 " Country

into table it_bsad

from bsad as a join kna1 as b

on akunnr = bkunnr

where a~bukrs = p_bukrs and

a~kunnr in s_kunnr and

a~hkont in s_hkont and

b~land1 in s_land1 and

a~augdt > p_date and

a~budat le p_date.

sort it_bsad by kunnr gjahr belnr buzei budat.

endform. " GET_CLOSE_DATA

&----


*& Form PROCESS_DATA

&----


  • Get the data from BSID,BSAD and KNA1 into one int.table

----


form process_data.

*Move the data from BSID to final output int table

loop at it_bsid.

move-corresponding it_bsid to it_report.

it_report-due_date = it_bsid-zfbdt + it_bsid-zbd1t.

append it_report.

clear it_report.

endloop.

*Move the data from BSAD to final output int table

loop at it_bsad.

move-corresponding it_bsad to it_report.

it_report-due_date = it_bsad-zfbdt + it_bsad-zbd1t.

append it_report.

clear it_report.

endloop.

sort it_report by kunnr belnr.

loop at it_report.

if it_report-shkzg = 'H'. " Credit

it_report-dmbtr = it_report-dmbtr * -1.

it_report-dmbe2 = it_report-dmbe2 * -1.

endif.

v_days = it_report-due_date - p_date.

  • For Company Code Currency

if p_rb1 = 'X'.

if v_days le 0.

it_report-due_amnt = it_report-dmbtr.

elseif v_days between 1 and 30.

it_report-d_amnt1 = it_report-dmbtr.

elseif v_days between 31 and 60.

it_report-d_amnt2 = it_report-dmbtr.

elseif v_days between 61 and 90.

it_report-d_amnt3 = it_report-dmbtr.

elseif v_days between 91 and 120.

it_report-d_amnt4 = it_report-dmbtr.

elseif v_days > 120.

it_report-d_amnt5 = it_report-dmbtr.

endif.

  • For Group Currency

else.

if v_days le 0.

it_report-due_amnt = it_report-dmbe2.

elseif v_days between 1 and 30.

it_report-d_amnt1 = it_report-dmbe2.

elseif v_days between 31 and 60.

it_report-d_amnt2 = it_report-dmbe2.

elseif v_days between 61 and 90.

it_report-d_amnt3 = it_report-dmbe2.

elseif v_days between 91 and 120.

it_report-d_amnt4 = it_report-dmbe2.

elseif v_days > 120.

it_report-d_amnt5 = it_report-dmbe2.

endif.

endif.

modify it_report index sy-tabix.

endloop.

endform. " PROCESS_DATA

&----


*& Form WRITE_REPORT

&----


  • Write the Detailed Report Output

----


form write_report.

clear: v_sum1,v_sum2,v_sum3,v_sum4,v_waers,

v_sum5,v_sum6,v_sum7,v_sum8.

loop at it_report.

  • at new kunnr.

read table it_report index sy-tabix.

write: / sy-vline, 2(10) it_report-kunnr,

12 sy-vline, 13(30) it_report-name1,

43 sy-vline, 44(3) it_report-land1,

47 sy-vline.

  • endat.

if p_rb1 = 'X'.

select single waers from t001

into v_waers where bukrs = p_bukrs.

write: 1 sy-vline, 12 sy-vline,

43 sy-vline,

47 sy-vline,

48(15) it_report-dmbtr currency it_report-waers,

63 sy-vline, 64(4) v_waers,

68 sy-vline.

else.

write: 1 sy-vline, 12 sy-vline,

43 sy-vline,

47 sy-vline,

48(15) it_report-dmbe2 currency it_report-waers,

63 sy-vline,64(4) c_doc_waers,

68 sy-vline.

endif.

write: 69(15) it_report-due_amnt currency it_report-waers,

84 sy-vline,

85(15) it_report-d_amnt1 currency it_report-waers,

100 sy-vline,

101(15) it_report-d_amnt2 currency it_report-waers,

116 sy-vline,

117(15) it_report-d_amnt3 currency it_report-waers,

132 sy-vline,

133(15) it_report-d_amnt4 currency it_report-waers,

148 sy-vline,

149(15) it_report-d_amnt5 currency it_report-waers,

164 sy-vline,165(10) it_report-due_date,

175 sy-vline,176(5) it_report-zterm,

181 sy-vline,182(10) it_report-vbeln,

192 sy-vline,193(10) it_report-belnr,

203 sy-vline.

if p_chk1 = 'X'.

write: 204(16) it_report-wrbtr currency it_report-waers,

220 sy-vline, 221(4) it_report-waers,

225 sy-vline.

endif.

  • new-line.

  • Totals for end of each Customer

at end of kunnr.

if p_chk1 = 'X'.

write at /1(225) sy-uline.

else.

write at /1(203) sy-uline.

endif.

sum.

format color 4.

if p_rb1 = 'X'.

write: /1 sy-vline, 2 'Total:'(015),

12 sy-vline,

13(10) it_report-kunnr,

43 sy-vline,47 sy-vline,

48(15) it_report-dmbtr currency it_report-waers,

63 sy-vline, 64(3) v_waers,

68 sy-vline,

69(15) it_report-due_amnt currency it_report-waers,

84 sy-vline,

85(15) it_report-d_amnt1 currency it_report-waers,

100 sy-vline,

101(15) it_report-d_amnt2 currency it_report-waers,

116 sy-vline,

117(15) it_report-d_amnt3 currency it_report-waers,

132 sy-vline,

133(15) it_report-d_amnt4 currency it_report-waers,

148 sy-vline,

149(15) it_report-d_amnt5 currency it_report-waers,

164 sy-vline, 175 sy-vline,

181 sy-vline, 192 sy-vline,

203 sy-vline.

if p_chk1 = 'X'.

write: 220 sy-vline, 225 sy-vline.

endif.

else.

write: /1 sy-vline, 2 'Total:'(015),

12 sy-vline,

13(10) it_report-kunnr,

43 sy-vline,

47 sy-vline,

48(15) it_report-dmbe2 currency it_report-waers,

63 sy-vline, 64(3) c_doc_waers,

68 sy-vline,

69(15) it_report-due_amnt currency it_report-waers,

84 sy-vline,

85(15) it_report-d_amnt1 currency it_report-waers,

100 sy-vline,

101(15) it_report-d_amnt2 currency it_report-waers,

116 sy-vline,

117(15) it_report-d_amnt3 currency it_report-waers,

132 sy-vline,

133(15) it_report-d_amnt4 currency it_report-waers,

148 sy-vline,

149(15) it_report-d_amnt5 currency it_report-waers,

164 sy-vline, 175 sy-vline,

181 sy-vline, 192 sy-vline,

203 sy-vline.

if p_chk1 = 'X'.

write: 220 sy-vline, 225 sy-vline.

endif.

endif.

format color off.

if p_chk1 = 'X'.

write at /1(225) sy-uline.

else.

write at /1(203) sy-uline.

endif.

endat.

v_sum1 = v_sum1 + it_report-dmbtr.

v_sum2 = v_sum2 + it_report-due_amnt.

v_sum3 = v_sum3 + it_report-d_amnt1.

v_sum4 = v_sum4 + it_report-d_amnt2.

v_sum5 = v_sum5 + it_report-d_amnt3.

v_sum6 = v_sum6 + it_report-d_amnt4.

v_sum7 = v_sum7 + it_report-d_amnt5.

v_sum8 = v_sum8 + it_report-dmbe2.

  • Hiding the Acc doc no for interactic screen.

hide it_report-belnr.

hide it_report-budat.

clear:it_report-belnr, it_report-budat.

endloop.

  • Grand Totals for all customers

format color 3.

write: /1 sy-vline, 2 'Gr.Total'(034),

12 sy-vline,13 'As At:'(035),p_date,

43 sy-vline,

47 sy-vline.

  • For Company Code Currency

if p_rb1 = 'X'.

write: 48(15) v_sum1 currency it_report-waers,

63 sy-vline, 64(4) v_waers,

68 sy-vline.

  • For Group Currency (USD)

else.

write: 48(15) v_sum8 currency it_report-waers,

63 sy-vline, 64(3) c_doc_waers,

68 sy-vline.

endif.

write: 69(15) v_sum2 currency it_report-waers,

84 sy-vline,

85(15) v_sum3 currency it_report-waers,

100 sy-vline,

101(15) v_sum4 currency it_report-waers,

116 sy-vline,

117(15) v_sum5 currency it_report-waers,

132 sy-vline,

133(15) v_sum6 currency it_report-waers,

148 sy-vline,

149(15) v_sum7 currency it_report-waers,

164 sy-vline, 175 sy-vline,

181 sy-vline, 192 sy-vline,

203 sy-vline.

if p_chk1 = 'X'.

write: 220 sy-vline, 225 sy-vline.

endif.

format color off.

if p_chk1 = 'X'.

write at /1(225) sy-uline.

else.

write at /1(203) sy-uline.

endif.

endform. " WRITE_REPORT

&----


*& Form WRITE_REPORT1

&----


  • Write the Summary Report Output

----


form write_report1.

clear: v_sum1,v_sum2,v_sum3,v_sum4,v_waers,

v_sum5,v_sum6,v_sum7,v_sum8.

loop at it_report.

at new kunnr.

read table it_report index sy-tabix.

write: / sy-vline, 2(10) it_report-kunnr,

12 sy-vline, 13(30) it_report-name1,

43 sy-vline, 44(3) it_report-land1,

47 sy-vline.

endat.

at end of kunnr.

sum.

if p_rb1 = 'X'.

select single waers from t001

into v_waers where bukrs = p_bukrs.

write: 1 sy-vline, 12 sy-vline,

43 sy-vline, 47 sy-vline,

48(15) it_report-dmbtr currency it_report-waers,

63 sy-vline, 64(4) v_waers,

68 sy-vline,

69(15) it_report-due_amnt currency it_report-waers,

84 sy-vline,

85(15) it_report-d_amnt1 currency it_report-waers,

100 sy-vline,

101(15) it_report-d_amnt2 currency it_report-waers,

116 sy-vline,

117(15) it_report-d_amnt3 currency it_report-waers,

132 sy-vline,

133(15) it_report-d_amnt4 currency it_report-waers,

148 sy-vline,

149(15) it_report-d_amnt5 currency it_report-waers,

164 sy-vline.

else.

write: 1 sy-vline, 12 sy-vline,

43 sy-vline, 47 sy-vline,

48(15) it_report-dmbe2 currency it_report-waers,

63 sy-vline, 64(4) c_doc_waers,

68 sy-vline,

69(15) it_report-due_amnt currency it_report-waers,

84 sy-vline,

85(15) it_report-d_amnt1 currency it_report-waers,

100 sy-vline,

101(15) it_report-d_amnt2 currency it_report-waers,

116 sy-vline,

117(15) it_report-d_amnt3 currency it_report-waers,

132 sy-vline,

133(15) it_report-d_amnt4 currency it_report-waers,

148 sy-vline,

149(15) it_report-d_amnt5 currency it_report-waers,

164 sy-vline.

endif.

write at /1(164) sy-uline.

endat.

  • Totals

v_sum1 = v_sum1 + it_report-dmbtr.

v_sum2 = v_sum2 + it_report-due_amnt.

v_sum3 = v_sum3 + it_report-d_amnt1.

v_sum4 = v_sum4 + it_report-d_amnt2.

v_sum5 = v_sum5 + it_report-d_amnt3.

v_sum6 = v_sum6 + it_report-d_amnt4.

v_sum7 = v_sum7 + it_report-d_amnt5.

v_sum8 = v_sum8 + it_report-dmbe2.

  • Hiding the Acc doc no for interactic screen.

hide it_report-belnr.

hide it_report-budat.

clear: it_report-belnr,

it_report-budat.

endloop.

  • Calculation of Grand Totals

format color 3.

write: /1 sy-vline, 2 'Gr.Total'(034),

12 sy-vline,13 'As At:'(035),p_date,

43 sy-vline,

47 sy-vline.

  • For Company Code Currency

if p_rb1 = 'X'.

write: 48(15) v_sum1 currency it_report-waers,

63 sy-vline, 64(4) v_waers,

68 sy-vline.

  • For Group Currency (USD)

else.

write: 48(15) v_sum8 currency it_report-waers,

63 sy-vline, 64(3) c_doc_waers,

68 sy-vline.

endif.

write: 69(15) v_sum2 currency it_report-waers,

84 sy-vline,

85(15) v_sum3 currency it_report-waers,

100 sy-vline,

101(15) v_sum4 currency it_report-waers,

116 sy-vline,

117(15) v_sum5 currency it_report-waers,

132 sy-vline,

133(15) v_sum6 currency it_report-waers,

148 sy-vline,

149(15) v_sum7 currency it_report-waers,

164 sy-vline.

format color off.

write at /1(164) sy-uline.

endform. " WRITE_REPORT1

&----


*& Form LINE_SEL

&----


  • When double clicked on BELNR leave to transaction FB03

----


form line_sel.

data: lv_field(20),

lv_value(10),

lv_date(10),

lv_gjahr like bsad-gjahr.

get cursor field lv_field value lv_value.

if lv_field = 'IT_REPORT-BELNR'.

if not lv_value is initial.

read current line field value it_report-budat into lv_date.

lv_gjahr = lv_date+6(4).

set parameter id 'BUK' field p_bukrs.

set parameter id 'GJR' field lv_gjahr.

set parameter id 'BLN' field lv_value.

call transaction 'FB03' and skip first screen.

endif.

endif.

endform. " LINE_SEL

Reward points if useful

Regards

Anji

Read only

harishaginati
Explorer
0 Likes
598

use HIDE itab-field1 key word after WRITE: itab-field1......

then under AT-line selection..

if itab-field1.

write your logic....,

endif.

reward me if usefull.,

Cheers,

Harish