2010 Jun 21 7:43 AM
Hi Developers,
I want to change my driver program which calls a smartform. I need to print multiple forms according to the input given.
I want to print multiple Smartforms for a range of Documents.
Example:
Document Number: 2000000002 to 2000000005
I want to print Separate Smartforms for each Document Number.
I dont have any idea about printing multiple smartforms.Pls Help me.
My Program code Below.
TABLES : BKPF,
BSEG,
ZFI_BSEG.
TYPES : BEGIN OF TY_BKPF,
BUKRS TYPE BKPF-BUKRS,
BELNR TYPE BKPF-BELNR,
GJAHR TYPE BKPF-GJAHR,
BUDAT TYPE BKPF-BUDAT,
XBLNR TYPE BKPF-XBLNR,
BKTXT TYPE BKPF-BKTXT,
BLART TYPE BKPF-BLART,
END OF TY_BKPF.
DATA : IT_BKPF TYPE TABLE OF TY_BKPF WITH HEADER LINE,
IT_BSEG TYPE TABLE OF ZFI_BSEG.
DATA : WA_BKPF LIKE LINE OF IT_BKPF,
WA_BSEG LIKE LINE OF IT_BSEG.
DATA : WRK_KTOPL TYPE T001-KTOPL,
WRK_FRMNAME TYPE RS38L_FNAM.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : PA_BELNR FOR BKPF-BELNR.
PARAMETERS :
PA_BUKRS TYPE BKPF-BUKRS,
PA_GJAHR TYPE BKPF-GJAHR.
SELECTION-SCREEN END OF BLOCK B1.
PERFORM DATA_SELECTION.
FORM DATA_SELECTION .
SELECT BUKRS
BELNR
GJAHR
BUDAT
XBLNR
BKTXT
BLART
FROM BKPF
INTO CORRESPONDING FIELDS OF TABLE IT_BKPF
WHERE BUKRS = PA_BUKRS
AND BELNR IN PA_BELNR
AND GJAHR = PA_GJAHR.
LOOP AT IT_BKPF.
IF IT_BKPF IS NOT INITIAL.
SELECT BUKRS
BELNR
GJAHR
BUZEI
BSCHL
SHKZG
DMBTR
HKONT
SGTXT
LIFNR
KUNNR
AUGBL
AUGGJ
FROM BSEG
INTO CORRESPONDING FIELDS OF TABLE IT_BSEG
WHERE BELNR = IT_BKPF-BELNR
AND BUKRS = IT_BKPF-BUKRS
AND GJAHR = IT_BKPF-GJAHR.
ENDIF.
SELECT SINGLE KTOPL
FROM T001
INTO WRK_KTOPL
WHERE BUKRS = PA_BUKRS.
LOOP AT IT_BSEG INTO WA_BSEG.
SELECT SINGLE SAKNR
TXT50
FROM SKAT
INTO (WA_BSEG-SAKNR,WA_BSEG-TXT50)
WHERE SAKNR = WA_BSEG-HKONT
AND KTOPL = WRK_KTOPL.
MODIFY IT_BSEG FROM WA_BSEG INDEX SY-TABIX TRANSPORTING SAKNR
TXT50.
ENDLOOP.
SORT IT_BSEG BY SHKZG DESCENDING.
PERFORM CALL_SMARTFORM.
CLEAR : WRK_KTOPL , WA_BSEG.
FREE : IT_BSEG .
ENDLOOP.
ENDFORM. " data_selection
FORM CALL_SMARTFORM .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZFI_VOUCHER'
VARIANT = ' '
DIRECT_CALL = ' '
IMPORTING
FM_NAME = WRK_FRMNAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 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.
IF WRK_FRMNAME IS NOT INITIAL.
CALL FUNCTION WRK_FRMNAME
EXPORTING
HEADER_DATA = IT_BKPF
TABLES
ITEM_DATA = IT_BSEG
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELLED = 4
OTHERS = 5.
ENDIF.
ENDFORM. " call_smartform
2010 Jun 21 8:01 AM
Hi ,
When you say multiple smartform , do you mean seperate spool ?
or do you mean every document on new page ?
1 > if you want new spool to be generated then call the smartform multiple times .
Driver program
loop in itb_document
SSF_FUNCTION_MODULE_NAME
call function fname.
endloop.
2 > if u want output to be printed in same spool but every new document should start on new page then
call the above function modules only once with header and item table as parameters. and in msratform have a loop on header , create command node create AT FIRST IN loop and call new page conditionally , then for that documnet number loop on item table and print them.
Hope this is helpful,
Regards,
Uma Dave
Hi Developers,
I want to change my driver program which calls a smartform. I need to print multiple forms according to the input given.
I want to print multiple Smartforms for a range of Documents.
Example:
Document Number: 2000000002 to 2000000005
I want to print Separate Smartforms for each Document Number.
I dont have any idea about printing multiple smartforms.Pls Help me.
My Program code Below.
TABLES : BKPF,
BSEG,
ZFI_BSEG.
TYPES : BEGIN OF TY_BKPF,
BUKRS TYPE BKPF-BUKRS,
BELNR TYPE BKPF-BELNR,
GJAHR TYPE BKPF-GJAHR,
BUDAT TYPE BKPF-BUDAT,
XBLNR TYPE BKPF-XBLNR,
BKTXT TYPE BKPF-BKTXT,
BLART TYPE BKPF-BLART,
END OF TY_BKPF.
DATA : IT_BKPF TYPE TABLE OF TY_BKPF WITH HEADER LINE,
IT_BSEG TYPE TABLE OF ZFI_BSEG.
DATA : WA_BKPF LIKE LINE OF IT_BKPF,
WA_BSEG LIKE LINE OF IT_BSEG.
DATA : WRK_KTOPL TYPE T001-KTOPL,
WRK_FRMNAME TYPE RS38L_FNAM.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : PA_BELNR FOR BKPF-BELNR.
PARAMETERS :
PA_BUKRS TYPE BKPF-BUKRS,
PA_GJAHR TYPE BKPF-GJAHR.
SELECTION-SCREEN END OF BLOCK B1.
PERFORM DATA_SELECTION.
FORM DATA_SELECTION .
SELECT BUKRS
BELNR
GJAHR
BUDAT
XBLNR
BKTXT
BLART
FROM BKPF
INTO CORRESPONDING FIELDS OF TABLE IT_BKPF
WHERE BUKRS = PA_BUKRS
AND BELNR IN PA_BELNR
AND GJAHR = PA_GJAHR.
LOOP AT IT_BKPF.
IF IT_BKPF IS NOT INITIAL.
SELECT BUKRS
BELNR
GJAHR
BUZEI
BSCHL
SHKZG
DMBTR
HKONT
SGTXT
LIFNR
KUNNR
AUGBL
AUGGJ
FROM BSEG
INTO CORRESPONDING FIELDS OF TABLE IT_BSEG
WHERE BELNR = IT_BKPF-BELNR
AND BUKRS = IT_BKPF-BUKRS
AND GJAHR = IT_BKPF-GJAHR.
ENDIF.
SELECT SINGLE KTOPL
FROM T001
INTO WRK_KTOPL
WHERE BUKRS = PA_BUKRS.
LOOP AT IT_BSEG INTO WA_BSEG.
SELECT SINGLE SAKNR
TXT50
FROM SKAT
INTO (WA_BSEG-SAKNR,WA_BSEG-TXT50)
WHERE SAKNR = WA_BSEG-HKONT
AND KTOPL = WRK_KTOPL.
MODIFY IT_BSEG FROM WA_BSEG INDEX SY-TABIX TRANSPORTING SAKNR
TXT50.
ENDLOOP.
SORT IT_BSEG BY SHKZG DESCENDING.
PERFORM CALL_SMARTFORM.
CLEAR : WRK_KTOPL , WA_BSEG.
FREE : IT_BSEG .
ENDLOOP.
ENDFORM. " data_selection
FORM CALL_SMARTFORM .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZFI_VOUCHER'
VARIANT = ' '
DIRECT_CALL = ' '
IMPORTING
FM_NAME = WRK_FRMNAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 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.
IF WRK_FRMNAME IS NOT INITIAL.
CALL FUNCTION WRK_FRMNAME
EXPORTING
HEADER_DATA = IT_BKPF
TABLES
ITEM_DATA = IT_BSEG
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELLED = 4
OTHERS = 5.
ENDIF.
ENDFORM. " call_smartform
2010 Jun 21 7:59 AM
Hi,
if you have values from 100 - 200 get all the values of that in an internal table. If you want to do some calcluation do it in the driver program and modify the internal table. Then pass that internal table to the smartform.
Then in the smartform check the conditions.
We have condition tab in the smartforms.
Just check sy-tabx ne 1.
After that enable the next page in the Condition tab.
With Regards,
Sumodh.P
2010 Jun 21 8:01 AM
Hi ,
When you say multiple smartform , do you mean seperate spool ?
or do you mean every document on new page ?
1 > if you want new spool to be generated then call the smartform multiple times .
Driver program
loop in itb_document
SSF_FUNCTION_MODULE_NAME
call function fname.
endloop.
2 > if u want output to be printed in same spool but every new document should start on new page then
call the above function modules only once with header and item table as parameters. and in msratform have a loop on header , create command node create AT FIRST IN loop and call new page conditionally , then for that documnet number loop on item table and print them.
Hope this is helpful,
Regards,
Uma Dave
2010 Jun 21 8:47 AM
Hi Uma,
Thank you for the post. I want to print every new document in new page. But I haven't understand properly what you said for the 2nd case. my smartform contains only 1 window, should i change anything in the smartforms?
i have posted my driver program code. pls tell me where to change. i am doing it for the first time so having some problem. pls help
Waiting for your favorable Reply.
Bibhu
2010 Jun 24 6:27 AM
Hi Uma
My problem is not yet solved. Can you please help me.
Regards,
Bibhu
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |