2008 Dec 12 12:30 PM
HI,
I am using an ALV type report to show various information relating to readings of Equipment.
I wish to group the results together so that I have a total line for each different Equipment that appears on the report together with a summation of the reading's relating to the Equipment.
I am trying to use the sum functionality but I keep getting a message saying 'Desired operation cannot be performed for column 'reading'.
i have taken the field reading as a packed decimal,but when i am taking the field as a standard db table it doesn't give this error.
Any adivce is appreciated.
Thanks & Regards,
Edited by: ALI SAMI on Dec 13, 2008 6:24 AM
2008 Dec 13 5:54 AM
can u pls show the code you have written??
2008 Dec 13 5:54 AM
2008 Dec 13 6:04 AM
HI,
YA
check this,
REPORT Zalv123 NO STANDARD PAGE HEADING LINE-SIZE 132
LINE-COUNT 66(3)
MESSAGE-ID ZF.
&*********************************************************************
*& TYPE-GROUP DECLARATION
&*********************************************************************
TYPE-POOLS : SLIS.
&*********************************************************************
*& DATABASE TABLES DECLARATION
&*********************************************************************
TABLES : IMPTT,EQKT.
&*********************************************************************
*& INTERNAL TABLE DECLARATIONS
&*********************************************************************
INTERNAL TABLE DECLARATION FOR DELIVERY DOCUMENT HEADER DATA
DATA : BEGIN OF IT_IMPTT OCCURS 0,
POINT LIKE IMPTT-POINT,
MPOBJ LIKE IMPTT-MPOBJ,
MPTYP LIKE IMPTT-MPTYP,
END OF IT_IMPTT,
INTERNAL TABLE DECLARATION FOR DELIVERY DOCUMENT HEADER DATA
BEGIN OF IT_EQUI OCCURS 0,
EQUNR LIKE EQUI-EQUNR,
OBJNR LIKE EQUI-OBJNR,
END OF IT_EQUI,
INTERNAL TABLE DECLARATION FOR DELIVERY DOCUMENT HEADER DATA
BEGIN OF IT_EQKT OCCURS 0,
EQUNR LIKE EQKT-EQUNR,
EQKTX LIKE EQKT-EQKTX,
END OF IT_EQKT,
INTERNAL TABLE DECLARATION FOR Tax/Insurance Data
BEGIN OF IT_IMRG OCCURS 0,
MDOCM LIKE IMRG-MDOCM,
POINT LIKE IMRG-POINT,
IDATE LIKE IMRG-IDATE,
RECDV LIKE IMRG-RECDV,
CNTRR LIKE IMRG-CNTRR,
CDIFF LIKE IMRG-CDIFF,
END OF IT_IMRG,
INTERNAL TABLE DECLARATION FOR Tax/Insurance Data
BEGIN OF IT_J_3GABEST OCCURS 0,
J_3GEMPFAE LIKE J_3GABEST-J_3GEMPFAE,
J_3GRESSOU LIKE J_3GABEST-J_3GRESSOU,
END OF IT_J_3GABEST,
INTERNAL TABLE DECLARATION FOR FINAL OUTPUT
BEGIN OF IT_OUTPUT OCCURS 0,
SLNO TYPE I,
EQUNR LIKE EQUI-EQUNR,
OBJNR LIKE EQUI-OBJNR,
POINT LIKE IMPTT-POINT,
MPOBJ LIKE IMPTT-MPOBJ,
MPTYP LIKE IMPTT-MPTYP,
EQKTX LIKE EQKT-EQKTX,
MDOCM LIKE IMRG-MDOCM,
IDATE LIKE IMRG-IDATE,
CNTRR TYPE P DECIMALS 2,
CDIFF LIKE IMRG-CDIFF,
CDIFF1 LIKE IMRG-CDIFF,
CDIFF2 LIKE IMRG-CDIFF,
ZKM TYPE P DECIMALS 2,
ZSTR TYPE P DECIMALS 2,
ZEND TYPE P DECIMALS 2,
ZDSL TYPE P DECIMALS 2,
ZACTUAL TYPE P DECIMALS 2,
J_3GEMPFAE LIKE J_3GABEST-J_3GEMPFAE,
J_3GRESSOU LIKE J_3GABEST-J_3GRESSOU,
END OF IT_OUTPUT.
&*********************************************************************
*& ALV DECLARATIONS
&*********************************************************************
DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
DATA: W_REPID LIKE SY-REPID.
DATA: W_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
DATA: W_EVENTS TYPE SLIS_ALV_EVENT.
DATA: LAYOUT TYPE SLIS_LAYOUT_ALV.
DATA: LIST_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER,
TOP_OF_PAGE TYPE SLIS_FORMNAME VALUE 'TOP_OF_PAGE'.
DATA : ST_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
ST_EVENT TYPE SLIS_ALV_EVENT,
ST_EVENT1 TYPE SLIS_ALV_EVENT,
IT_EVENT TYPE SLIS_T_EVENT,
IT_EVENT1 TYPE SLIS_T_EVENT.
DATA : ST_LIST TYPE SLIS_LISTHEADER,
IT_LIST TYPE SLIS_T_LISTHEADER,
IT_LIST1 TYPE SLIS_T_LISTHEADER,
IT_LIST2 TYPE SLIS_T_LISTHEADER.
DATA: WA_SORT TYPE SLIS_SORTINFO_ALV, "WORKAREA FOR SORT
IT_SORT TYPE SLIS_T_SORTINFO_ALV. "INTERNAL TABLE FOR SORT
DATA : G_TOP_PAGE TYPE SLIS_FORMNAME.
DATA DECLARATIONS RELATED TO ALV
DATA:
FIELDCAT TYPE SLIS_T_FIELDCAT_ALV, " Fieldcat table
FIELDCAT1 TYPE SLIS_T_FIELDCAT_ALV,
FIELDCAT_LN LIKE LINE OF FIELDCAT, " Line of Fieldcat
G_FIELD TYPE SLIS_FIELDNAME, " Name of field
G_COL_POS TYPE I , " Column Position
G_PGM LIKE SY-REPID, " Program Name
G_FIELD_VALUE(20), " Value of Field
G_DDICTXT(1), " Text type Indicator
G_SELTEXT(30), " Selection Text
G_TABLE_NAME(10). " Table name
USED FOR ALV HEADER & FOOTER
DATA:
GT_EVENTS TYPE SLIS_T_EVENT,
GT_EVENTS1 TYPE SLIS_T_EVENT,
FS_EVENTCAT LIKE LINE OF GT_EVENTS.
DATA SLNO TYPE I.
DATA SUM TYPE P DECIMALS 2.
DATA SUM1 TYPE P DECIMALS 2.
DATA SUM2 TYPE P DECIMALS 2.
DATA SUM3 TYPE P DECIMALS 2.
DATA SUM4 TYPE P DECIMALS 2.
DATA FLAG.
DATA COUNT TYPE I.
DATA V_LINES TYPE I.
&*********************************************************************
*& SELECTION-SCREEN DESIGN
&*********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: S_EQUNR FOR IT_EQUI-EQUNR OBLIGATORY,
S_IDATE FOR IT_IMRG-IDATE.
SELECTION-SCREEN END OF BLOCK BLK1.
&*********************************************************************
*& INITIALIZATION
&*********************************************************************
INITIALIZATION.
W_REPID = SY-REPID.
&*********************************************************************
*& AT SELECTION-SCREEN EVENT
&*********************************************************************
AT SELECTION-SCREEN.
PERFORM SUB_VALIDATION_EQUNR.
&*********************************************************************
*& START-OF-SELECTION EVENT
&*********************************************************************
START-OF-SELECTION.
PERFORM SUB_SELECT_RECORD.
PERFORM SUB_MOVE_RECORD.
&*********************************************************************
*& END-OF-SELECTION EVENT
&*********************************************************************
END-OF-SELECTION.
PERFORM SUB_PREPARE_FIELDCATALOG.
PERFORM SUB_DETERMINE_SORT_SEQUENCE.
PERFORM SUB_SHOW_ALV_LIST.
&----
*& Form SUB_VALIDATION_VBELN
&----
text
----
--> p1 text
<-- p2 text
----
FORM SUB_VALIDATION_EQUNR .
DATA: LV_EQUNR LIKE EQUI-EQUNR.
IF NOT S_EQUNR IS INITIAL.
SELECT SINGLE EQUNR
INTO LV_EQUNR
FROM EQUI
WHERE EQUNR IN S_EQUNR.
IF SY-SUBRC <> 0.
MESSAGE E000(ZF).
ENDIF.
ENDIF.
ENDFORM. " SUB_VALIDATION_EQUNR
&----
*& Form SUB_SELECT_RECORD
&----
text
----
--> p1 text
<-- p2 text
----
FORM SUB_SELECT_RECORD .
SELECT EQUNR OBJNR FROM EQUI INTO TABLE IT_EQUI WHERE EQUNR IN S_EQUNR.
SELECT EQUNR EQKTX FROM EQKT INTO TABLE IT_EQKT
FOR ALL ENTRIES IN IT_EQUI
WHERE EQUNR = IT_EQUI-EQUNR.
SELECT J_3GEMPFAE J_3GRESSOU FROM J_3GABEST INTO TABLE IT_J_3GABEST
FOR ALL ENTRIES IN IT_EQUI
WHERE J_3GRESSOU = IT_EQUI-EQUNR.
SELECT POINT MPOBJ MPTYP FROM IMPTT INTO TABLE IT_IMPTT
FOR ALL ENTRIES IN IT_EQUI
WHERE MPOBJ = IT_EQUI-OBJNR
AND MPTYP IN ('B','F','K').
SELECT MDOCM POINT IDATE RECDV CNTRR CDIFF FROM IMRG INTO TABLE IT_IMRG
FOR ALL ENTRIES IN IT_IMPTT
WHERE POINT = IT_IMPTT-POINT
AND IDATE IN S_IDATE.
SORT IT_IMRG BY IDATE.
DESCRIBE TABLE IT_IMRG LINES V_LINES.
ENDFORM. " SUB_SELECT_RECORD
&----
*& Form SUB_MOVE_RECORD
&----
text
----
--> p1 text
<-- p2 text
----
FORM SUB_MOVE_RECORD .
SUM = 0.
SUM1 = 0.
SUM2 = 0.
FLAG = 'X'.
LOOP AT IT_EQUI.
LOOP AT IT_IMRG WHERE IDATE IN S_IDATE.
COUNT = COUNT + 1.
ON CHANGE OF IT_IMRG-IDATE.
IF FLAG <> 'X'.
APPEND IT_OUTPUT.
CLEAR IT_OUTPUT.
CLEAR: SUM,SUM1,SUM2,SUM3,SUM4.
ENDIF.
ENDON.
IT_OUTPUT-IDATE = IT_IMRG-IDATE.
LOOP AT IT_IMPTT WHERE MPOBJ = IT_EQUI-OBJNR AND POINT = IT_IMRG-POINT.
IT_OUTPUT-EQUNR = IT_EQUI-EQUNR.
READ TABLE IT_EQKT WITH KEY EQUNR = IT_EQUI-EQUNR.
IF SY-SUBRC = 0.
IT_OUTPUT-EQKTX = IT_EQKT-EQKTX.
ENDIF.
IF IT_IMPTT-MPTYP = 'B'.
SUM = SUM + IT_IMRG-CNTRR.
SUM1 = SUM1 + IT_IMRG-CDIFF.
ENDIF.
IF IT_IMPTT-MPTYP = 'F'.
SUM2 = SUM2 + IT_IMRG-RECDV.
ENDIF.
IF IT_IMPTT-MPTYP = 'K'.
SUM3 = SUM3 + IT_IMRG-CNTRR.
SUM4 = SUM4 + IT_IMRG-CDIFF.
ENDIF.
ENDLOOP.
IT_IMRG-CNTRR = SUM.
IT_IMRG-CDIFF = SUM1.
IT_OUTPUT-ZDSL = SUM2.
CALL FUNCTION 'PM_TIME_CONVERSION'
EXPORTING
TIME_IN = IT_IMRG-CNTRR
UNIT_IN = 'S'
UNIT_IN_INT = ' '
UNIT_OUT = 'H'
UNIT_OUT_INT = ' '
IMPORTING
EXTERNAL_UNIT =
INTERNAL_UNIT =
TIME_OUT = IT_IMRG-CNTRR
EXCEPTIONS
INVALID_TIME_UNIT = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IT_OUTPUT-CNTRR = IT_IMRG-CNTRR.
CALL FUNCTION 'PM_TIME_CONVERSION'
EXPORTING
TIME_IN = IT_IMRG-CDIFF
UNIT_IN = 'S'
UNIT_IN_INT = ' '
UNIT_OUT = 'H'
UNIT_OUT_INT = ' '
IMPORTING
EXTERNAL_UNIT =
INTERNAL_UNIT =
TIME_OUT = IT_IMRG-CDIFF
EXCEPTIONS
INVALID_TIME_UNIT = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
IF IT_IMPTT-MPTYP = 'B'.
IT_OUTPUT-ZKM = IT_IMRG-CDIFF.
IT_OUTPUT-ZSTR = IT_OUTPUT-CNTRR - IT_OUTPUT-ZKM.
ENDIF.
IF IT_IMPTT-MPTYP = 'K'.
IT_OUTPUT-ZKM = SUM4.
IT_OUTPUT-ZSTR = SUM3 - SUM4.
ENDIF.
CLEAR FLAG.
ENDLOOP.
IF COUNT = V_LINES.
APPEND IT_OUTPUT.
CLEAR IT_OUTPUT.
ENDIF.
DELETE IT_OUTPUT WHERE EQUNR IS INITIAL.
ENDLOOP.
LOOP AT IT_OUTPUT.
SLNO = SLNO + 1.
IT_OUTPUT-SLNO = SLNO.
MODIFY IT_OUTPUT.
CLEAR IT_OUTPUT.
ENDLOOP.
ENDFORM. " SUB_MOVE_RECORD
&----
*& Form SUB_PREPARE_FIELDCATALOG
&----
text
----
--> p1 text
<-- p2 text
----
FORM SUB_PREPARE_FIELDCATALOG .
S No.
G_FIELD = 'SLNO'.
G_TABLE_NAME = 'IT_OUTPUT '.
G_DDICTXT = 'L'.
FIELDCAT_LN-SELTEXT_L = 'S.No.'(000).
PERFORM FIELDCAT_FILL USING G_FIELD G_TABLE_NAME G_DDICTXT.
S No.
G_FIELD = 'IDATE'.
G_TABLE_NAME = 'IMRG'.
G_DDICTXT = 'L'.
FIELDCAT_LN-SELTEXT_L = 'DATE'(000).
PERFORM FIELDCAT_FILL USING G_FIELD G_TABLE_NAME G_DDICTXT.
Name of the PROFIT CENTER
G_FIELD = 'EQUNR'.
G_TABLE_NAME = 'EQUI'.
G_DDICTXT = 'L'.
FIELDCAT_LN-SELTEXT_L = 'Equipment Number'(001).
PERFORM FIELDCAT_FILL USING G_FIELD G_TABLE_NAME G_DDICTXT.
Name of the PROFIT CENTER
G_FIELD = 'EQKTX'.
G_TABLE_NAME = 'EQKT'.
G_DDICTXT = 'L'.
FIELDCAT_LN-SELTEXT_L = 'Equipment Description'(002).
PERFORM FIELDCAT_FILL USING G_FIELD G_TABLE_NAME G_DDICTXT.
Name of the Company/Non Company
G_FIELD = 'ZSTR'.
G_TABLE_NAME = 'IT_OUTPUT'.
G_DDICTXT = 'L'.
FIELDCAT_LN-SELTEXT_L = 'Starting Reading'(003).
PERFORM FIELDCAT_FILL USING G_FIELD G_TABLE_NAME G_DDICTXT.
Name of the Company/Non Company
G_FIELD = 'CNTRR'.
G_TABLE_NAME = 'IMRG'.
G_DDICTXT = 'L'.
FIELDCAT_LN-SELTEXT_L = 'Closing Reading'(003).
PERFORM FIELDCAT_FILL USING G_FIELD G_TABLE_NAME G_DDICTXT.
PAN No.
G_FIELD = 'ZKM'.
G_TABLE_NAME = 'IT_OUTPUT'.
G_DDICTXT = 'L'.
FIELDCAT_LN-SELTEXT_L = 'Number of KM/HR'(004).
PERFORM FIELDCAT_FILL USING G_FIELD G_TABLE_NAME G_DDICTXT.
PAN No.
G_FIELD = 'ZDSL'.
G_TABLE_NAME = 'IT_OUTPUT'.
G_DDICTXT = 'L'.
FIELDCAT_LN-SELTEXT_L = 'Total Diesel Issued'(005).
PERFORM FIELDCAT_FILL USING G_FIELD G_TABLE_NAME G_DDICTXT.
Name of the Company/Non Company
G_FIELD = 'ZACTUAL'.
G_TABLE_NAME = 'IT_OUTPUT'.
G_DDICTXT = 'L'.
FIELDCAT_LN-SELTEXT_L = 'Actual Consumption per KM/HR'(006).
PERFORM FIELDCAT_FILL USING G_FIELD G_TABLE_NAME G_DDICTXT.
ENDFORM. " BUILD_FIELDCAT
&----
*& Form FIELDCAT_FILL
&----
To set the properties of the FIELDCAT
----
FORM FIELDCAT_FILL USING FIELD_VALUE
F_TABLE_NAME
F_DDICTXT.
ADD 1 TO G_COL_POS.
Assigning values to the Fieldcat
FIELDCAT_LN-REF_TABNAME = F_TABLE_NAME.
FIELDCAT_LN-FIELDNAME = FIELD_VALUE.
FIELDCAT_LN-DDICTXT = F_DDICTXT.
FIELDCAT_LN-KEY = SPACE.
FIELDCAT_LN-DO_SUM = SPACE.
FIELDCAT_LN-COL_POS = G_COL_POS.
FIELDCAT_LN-NO_OUT = SPACE.
FIELDCAT_LN-QFIELDNAME = SPACE.
FIELDCAT_LN-HOTSPOT = SPACE.
IF FIELD_VALUE = 'ZKM'.
FIELDCAT_LN-DO_SUM = 'X'.
ENDIF.
Appending Fieldcat
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
ENDFORM. " SUB_PREPARE_FIELDCATALOG
&----
*& Form FIELDCAT_FILL
&----
To set the properties of the FIELDCAT
----
*FORM FIELDCAT_FILL1 USING FIELD_VALUE
F_TABLE_NAME
F_DDICTXT.
ADD 1 TO G_COL_POS.
Assigning values to the Fieldcat
FIELDCAT_LN-REF_TABNAME = F_TABLE_NAME.
FIELDCAT_LN-FIELDNAME = FIELD_VALUE.
FIELDCAT_LN-DDICTXT = F_DDICTXT.
FIELDCAT_LN-KEY = SPACE.
FIELDCAT_LN-DO_SUM = 'X'.
FIELDCAT_LN-COL_POS = G_COL_POS.
FIELDCAT_LN-NO_OUT = SPACE.
FIELDCAT_LN-QFIELDNAME = SPACE.
FIELDCAT_LN-HOTSPOT = SPACE.
*
Appending Fieldcat
APPEND FIELDCAT_LN TO FIELDCAT.
CLEAR FIELDCAT_LN.
*
*ENDFORM. " SUB_PREPARE_FIELDCATALOG
&----
*& Form SUB_DETERMINE_SORT_SEQUENCE
&----
Defines the sort sequence of the report
----
FORM SUB_DETERMINE_SORT_SEQUENCE.
WA_SORT-FIELDNAME = 'EQUNR'.
WA_SORT-SUBTOT = 'X'.
WA_SORT-UP = 'X'.
APPEND WA_SORT TO IT_SORT.
CLEAR WA_SORT.
ENDFORM. " SUB_DETERMINE_SORT_SEQUENCE
&----
*& Form SUB_SHOW_ALV_LIST
&----
text
----
--> p1 text
<-- p2 text
----
FORM SUB_SHOW_ALV_LIST .
ST_EVENT-NAME = 'USER_COMMAND'.
APPEND ST_EVENT TO IT_EVENT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER = ' '
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = W_REPID
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
I_CALLBACK_TOP_OF_PAGE = G_TOP_PAGE
I_CALLBACK_HTML_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_END_OF_LIST = ' '
I_STRUCTURE_NAME =
I_BACKGROUND_ID = ' '
I_GRID_TITLE =
I_GRID_SETTINGS =
IS_LAYOUT = LAYOUT
IT_FIELDCAT = FIELDCAT
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT = IT_SORT[]
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = 'A'
IS_VARIANT =
IT_EVENTS = GT_EVENTS[]
IT_EVENT_EXIT =
IS_PRINT =
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
I_HTML_HEIGHT_TOP = 0
I_HTML_HEIGHT_END = 0
IT_ALV_GRAPHICS =
IT_HYPERLINK =
IT_ADD_FIELDCAT =
IT_EXCEPT_QINFO =
IR_SALV_FULLSCREEN_ADAPTER =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = IT_OUTPUT
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " SUB_SHOW_ALV_LIST
2008 Dec 13 6:55 AM
Hi,
You should specify fieldcat-datatype for the field you want to sum up.'
Regards
Karthik D
2008 Dec 13 7:08 AM
2008 Dec 13 7:16 AM
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |