‎2007 May 16 7:23 AM
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
‎2007 May 16 7:30 AM
first Debug ,find out what values its carrying out.
Regards
Peram
‎2007 May 16 7:32 AM
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...
‎2007 May 16 7:34 AM
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
‎2007 May 16 7:44 AM
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