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

Voucher Printing for multiple Documents in SMARTFORMS

Former Member
0 Likes
989

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

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
788

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

4 REPLIES 4
Read only

Former Member
0 Likes
788

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

Read only

Former Member
0 Likes
789

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

Read only

0 Likes
788

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

Read only

0 Likes
788

Hi Uma

My problem is not yet solved. Can you please help me.

Regards,

Bibhu