‎2007 Aug 17 11:08 AM
Hi,
I want the sales order details to be displayed for a particular customer in the main window. I want each page total and atlast i want the total sum for this one. Plz let me know how to get that.
PARAMETERS:
P_KUNNR TYPE KUNNR.
TYPES:
BEGIN OF TY_KNA1,
KUNNR TYPE KNA1-KUNNR,
LAND1 TYPE KNA1-LAND1,
NAME1 TYPE KNA1-NAME1,
ORT01 TYPE KNA1-ORT01,
END OF TY_KNA1,
BEGIN OF TY_VBAK,
VBELN TYPE VBAK-VBELN,
AUDAT TYPE VBAK-AUDAT,
AUART TYPE VBAK-AUART,
NETWR TYPE VBAK-NETWR,
END OF TY_VBAK.
DATA:
STKNA1 TYPE TY_KNA1,
STVBAK TYPE TY_VBAK,
ITVBAK TYPE TABLE OF TY_VBAK.
START-OF-SELECTION.
SELECT SINGLE KUNNR LAND1 NAME1 ORT01
FROM KNA1 INTO STKNA1
WHERE KUNNR EQ P_KUNNR.
IF SY-SUBRC EQ 0.
SELECT VBELN AUDAT AUART NETWR
FROM VBAK INTO TABLE ITVBAK
WHERE KUNNR EQ P_KUNNR.
ENDIF.
CALL FUNCTION 'OPEN_FORM'
EXPORTING
FORM = 'ZFRM1'
LANGUAGE = SY-LANGU
OPTIONS =
MAIL_SENDER =
MAIL_RECIPIENT =
MAIL_APPL_OBJECT =
RAW_DATA_INTERFACE = '*'
SPONUMIV =
IMPORTING
LANGUAGE =
NEW_ARCHIVE_PARAMS =
RESULT =
EXCEPTIONS
CANCELED = 1
DEVICE = 2
FORM = 3
OPTIONS = 4
UNCLOSED = 5
MAIL_OPTIONS = 6
ARCHIVE_ERROR = 7
INVALID_FAX_NUMBER = 8
MORE_PARAMS_NEEDED_IN_BATCH = 9
SPOOL_ERROR = 10
CODEPAGE = 11
OTHERS = 12
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT ITVBAK INTO STVBAK.
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'E'
FUNCTION = 'SET'
TYPE = 'BODY'
WINDOW = 'MAIN'.
IMPORTING
PENDING_LINES =
EXCEPTIONS
ELEMENT = 1
FUNCTION = 2
TYPE = 3
UNOPENED = 4
UNSTARTED = 5
WINDOW = 6
BAD_PAGEFORMAT_FOR_PRINT = 7
SPOOL_ERROR = 8
CODEPAGE = 9
OTHERS = 10
ENDLOOP.
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'CLOSE_FORM'
IMPORTING
RESULT =
RDI_RESULT =
TABLES
OTFDATA =
EXCEPTIONS
UNOPENED = 1
BAD_PAGEFORMAT_FOR_PRINT = 2
SEND_ERROR = 3
SPOOL_ERROR = 4
CODEPAGE = 5
OTHERS = 6
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Thanks
Ram
‎2007 Aug 17 11:31 AM
Hi ..
And one more thing ..
You should also make the Changes in PRINT PROGRAM AS BELOW.
PARAMETERS:
P_KUNNR TYPE KUNNR.
TYPES:
BEGIN OF TY_KNA1,
KUNNR TYPE KNA1-KUNNR,
LAND1 TYPE KNA1-LAND1,
NAME1 TYPE KNA1-NAME1,
ORT01 TYPE KNA1-ORT01,
END OF TY_KNA1,
BEGIN OF TY_VBAK,
VBELN TYPE VBAK-VBELN,
AUDAT TYPE VBAK-AUDAT,
AUART TYPE VBAK-AUART,
NETWR TYPE VBAK-NETWR,
END OF TY_VBAK.
DATA:
STKNA1 TYPE TY_KNA1,
STVBAK TYPE TY_VBAK,
ITVBAK TYPE TABLE OF TY_VBAK.
START-OF-SELECTION.
SELECT SINGLE KUNNR LAND1 NAME1 ORT01
FROM KNA1 INTO STKNA1
WHERE KUNNR EQ P_KUNNR.
IF SY-SUBRC EQ 0.
SELECT VBELN AUDAT AUART NETWR
FROM VBAK INTO TABLE ITVBAK
WHERE KUNNR EQ P_KUNNR.
ENDIF.
CALL FUNCTION 'OPEN_FORM'
EXPORTING
FORM = 'ZFRM1'
LANGUAGE = SY-LANGU
OPTIONS =
MAIL_SENDER =
MAIL_RECIPIENT =
MAIL_APPL_OBJECT =
RAW_DATA_INTERFACE = '*'
SPONUMIV =
IMPORTING
LANGUAGE =
NEW_ARCHIVE_PARAMS =
RESULT =
EXCEPTIONS
CANCELED = 1
DEVICE = 2
FORM = 3
OPTIONS = 4
UNCLOSED = 5
MAIL_OPTIONS = 6
ARCHIVE_ERROR = 7
INVALID_FAX_NUMBER = 8
MORE_PARAMS_NEEDED_IN_BATCH = 9
SPOOL_ERROR = 10
CODEPAGE = 11
OTHERS = 12
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT ITVBAK INTO STVBAK.
<b>CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'ELE_TOP'
FUNCTION = 'SET'
TYPE = 'TOP'
WINDOW = 'MAIN'.</b>
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'E'
FUNCTION = 'SET'
TYPE = 'BODY'
WINDOW = 'MAIN'.
IMPORTING
PENDING_LINES =
EXCEPTIONS
ELEMENT = 1
FUNCTION = 2
TYPE = 3
UNOPENED = 4
UNSTARTED = 5
WINDOW = 6
BAD_PAGEFORMAT_FOR_PRINT = 7
SPOOL_ERROR = 8
CODEPAGE = 9
OTHERS = 10 .
<b>CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = ' '
FUNCTION = 'SET'
TYPE = 'BOTTOM'
WINDOW = 'MAIN'.</b>
ENDLOOP.
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'CLOSE_FORM'
IMPORTING
RESULT =
RDI_RESULT =
TABLES
OTFDATA =
EXCEPTIONS
UNOPENED = 1
BAD_PAGEFORMAT_FOR_PRINT = 2
SEND_ERROR = 3
SPOOL_ERROR = 4
CODEPAGE = 5
OTHERS = 6
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
‎2007 Aug 17 11:27 AM
Hi..
You can Acheive this by calling Subroutine from Layout set.
Detailed procedure:
1. IN THE LAYOUT SET MAIN WINDOW
/: TOP
/E ELE_TOP
/: DEFINE &PAGE_TOTAL& = '0'
/: ENDTOP
/: MAIN
/E E
/: PERFORM GET_PAGE_TOTAL IN PROGRAM <YOUR PRINT PROGRAM>
/: USING &STVBAK-NETWR&
/: CHANGING &PAGE_TOTAL&
/: ENDPERFORM
/: BOTTOM
'Page total for NETWR = ' , &PAGE_TOTAL&
/: ENDBOTTOM
<b>CREATE THIS SUBROTINE IN YOUR PROGRAM</b>
FORM GET_PAGE_TOTAL
TABLE INTAB STRUCTURE ITCSY
OUTTAB STRUCTURE ITCSY.
DATA : L_AMT TYPE P DECIMALS 2,
L_TOTAL TYPE P DECIMALS 2.
Read Table INTAB with KEY NAME = 'STVBAK-NETWR'.
IF SY-SUBRC = 0.
L_AMT = INTAB-VALUE.
ENDIF.
Read Table OUTTAB with KEY NAME = 'PAGE_TOTAL'.
IF SY-SUBRC = 0.
L_TOTAL = OUTTAB-VALUE.
ADD L_AMT TO L_TOTAL.
WRITE L_TOTAL TO OUTTAB-VALUE LEFT-JUSTIFIED.
MODIFY OUTTAB INDEX SY-TABIX.
ENDIF.
ENDFORM.
<b>Reward if Helpful</b>
‎2007 Aug 17 11:27 AM
one solution i can think of rite now is to split ur data into multiple internal tables and print sum at end.
start printing data of ur next internal table from new page(i.e apply page break at end of each internal table data).
for grand total sum the totals of all internal tables..
u can split ur internal table on the basis of sy-tabix..first read sy-tabix of ur origninal internal table and then move data from sy-tabix 1 to say 30 to 1st internal table, 31 to 60 to second internal table and so on....
‎2007 Aug 17 11:31 AM
Hi ..
And one more thing ..
You should also make the Changes in PRINT PROGRAM AS BELOW.
PARAMETERS:
P_KUNNR TYPE KUNNR.
TYPES:
BEGIN OF TY_KNA1,
KUNNR TYPE KNA1-KUNNR,
LAND1 TYPE KNA1-LAND1,
NAME1 TYPE KNA1-NAME1,
ORT01 TYPE KNA1-ORT01,
END OF TY_KNA1,
BEGIN OF TY_VBAK,
VBELN TYPE VBAK-VBELN,
AUDAT TYPE VBAK-AUDAT,
AUART TYPE VBAK-AUART,
NETWR TYPE VBAK-NETWR,
END OF TY_VBAK.
DATA:
STKNA1 TYPE TY_KNA1,
STVBAK TYPE TY_VBAK,
ITVBAK TYPE TABLE OF TY_VBAK.
START-OF-SELECTION.
SELECT SINGLE KUNNR LAND1 NAME1 ORT01
FROM KNA1 INTO STKNA1
WHERE KUNNR EQ P_KUNNR.
IF SY-SUBRC EQ 0.
SELECT VBELN AUDAT AUART NETWR
FROM VBAK INTO TABLE ITVBAK
WHERE KUNNR EQ P_KUNNR.
ENDIF.
CALL FUNCTION 'OPEN_FORM'
EXPORTING
FORM = 'ZFRM1'
LANGUAGE = SY-LANGU
OPTIONS =
MAIL_SENDER =
MAIL_RECIPIENT =
MAIL_APPL_OBJECT =
RAW_DATA_INTERFACE = '*'
SPONUMIV =
IMPORTING
LANGUAGE =
NEW_ARCHIVE_PARAMS =
RESULT =
EXCEPTIONS
CANCELED = 1
DEVICE = 2
FORM = 3
OPTIONS = 4
UNCLOSED = 5
MAIL_OPTIONS = 6
ARCHIVE_ERROR = 7
INVALID_FAX_NUMBER = 8
MORE_PARAMS_NEEDED_IN_BATCH = 9
SPOOL_ERROR = 10
CODEPAGE = 11
OTHERS = 12
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
LOOP AT ITVBAK INTO STVBAK.
<b>CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'ELE_TOP'
FUNCTION = 'SET'
TYPE = 'TOP'
WINDOW = 'MAIN'.</b>
CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = 'E'
FUNCTION = 'SET'
TYPE = 'BODY'
WINDOW = 'MAIN'.
IMPORTING
PENDING_LINES =
EXCEPTIONS
ELEMENT = 1
FUNCTION = 2
TYPE = 3
UNOPENED = 4
UNSTARTED = 5
WINDOW = 6
BAD_PAGEFORMAT_FOR_PRINT = 7
SPOOL_ERROR = 8
CODEPAGE = 9
OTHERS = 10 .
<b>CALL FUNCTION 'WRITE_FORM'
EXPORTING
ELEMENT = ' '
FUNCTION = 'SET'
TYPE = 'BOTTOM'
WINDOW = 'MAIN'.</b>
ENDLOOP.
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'CLOSE_FORM'
IMPORTING
RESULT =
RDI_RESULT =
TABLES
OTFDATA =
EXCEPTIONS
UNOPENED = 1
BAD_PAGEFORMAT_FOR_PRINT = 2
SEND_ERROR = 3
SPOOL_ERROR = 4
CODEPAGE = 5
OTHERS = 6
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
‎2007 Aug 17 11:32 AM