Skip to Content
0
Former Member
May 11, 2008 at 08:46 AM

Printing multiple smartforms at once

1553 Views

HI Experts,

I have a small problem with smartforms. I have developed a smart form which will print customer monthly statement. In the selection screen I have restricted the selection to one customer only. Everything is working fine, but now my functional consultant wants customer range instead of single customer. I don't know how to print statements for multiple customers in smartforms. In SAPscripts, I can do this by start_form and close_form, but how to do it in smartforms? The following is the working code for single customer.

Please reply.

Thanks and regards,

M.Madhusudan Rao.

REPORT ZRFI001.

*-> Data declaration

*-> tables

TABLES: BSID,

VBRK.

*-> selection screen

PARAMETER: PA_BUKRS TYPE BUKRS OBLIGATORY. " company code

  • pa_kunnr type kunnr obligatory, " customer no

SELECT-OPTIONS: SO_KUNNR FOR BSID-KUNNR NO INTERVALS NO-EXTENSION.

PARAMETER: PA_BUDAT TYPE BUDAT OBLIGATORY. " date

*-> smartforms parameter

DATA: LV_FM_NAME TYPE RS38L_FNAM.

DATA: TP_TABIX LIKE SY-TABIX.

*-> internal tables

DATA: LIT_BSID TYPE TABLE OF BSID WITH HEADER LINE,

LIT_VBRK TYPE TABLE OF VBRK WITH HEADER LINE,

LIT_BSAD TYPE TABLE OF BSAD WITH HEADER LINE.

*-> work areas

DATA: LWA_BSID TYPE BSID,

LWA_VBRK TYPE VBRK,

LWA_BSAD TYPE BSAD.

START-OF-SELECTION.

*-> fetch tables

SELECT * INTO TABLE LIT_BSID

FROM BSID

WHERE BUKRS = PA_BUKRS

AND KUNNR IN SO_KUNNR

AND BUDAT <= PA_BUDAT.

IF LIT_BSID[] IS NOT INITIAL.

SELECT * INTO TABLE LIT_BSAD

FROM BSAD

FOR ALL ENTRIES IN LIT_BSID

WHERE BELNR = LIT_BSID-BELNR

AND BUKRS = PA_BUKRS

AND BUDAT <= PA_BUDAT

AND AUGDT > PA_BUDAT.

ENDIF.

*-> check cleared account items

LOOP AT LIT_BSID INTO LWA_BSID.

TP_TABIX = SY-TABIX.

READ TABLE LIT_BSAD WITH KEY BELNR = LWA_BSID-BELNR

BUKRS = LWA_BSID-BUKRS.

IF SY-SUBRC = 0.

DELETE LIT_BSID INDEX TP_TABIX.

ENDIF.

ENDLOOP.

*-> fetch billing data

IF LIT_BSID[] IS NOT INITIAL.

SELECT * INTO TABLE LIT_VBRK

FROM VBRK

FOR ALL ENTRIES IN LIT_BSID

WHERE VBELN = LIT_BSID-VBELN.

ENDIF.

*-> sort table

SORT LIT_VBRK BY FKDAT VBELN.

SORT LIT_BSID BY BLDAT BELNR.

*-> clear itab

CLEAR: LIT_BSAD.

REFRESH: LIT_BSAD.

*break-point.

LOOP AT LIT_BSID INTO LWA_BSID.

IF LWA_BSID-BLART EQ 'DG'.

LWA_BSID-DMBTR = LWA_BSID-DMBTR * -1.

LWA_BSID-WRBTR = LWA_BSID-WRBTR * -1.

MODIFY LIT_BSID FROM LWA_BSID.

ENDIF.

ENDLOOP.

*-> call smartforms

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

FORMNAME = 'ZHFI001'

  • VARIANT = ' '

  • DIRECT_CALL = ' '

IMPORTING

FM_NAME = LV_FM_NAME

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.

CALL FUNCTION LV_FM_NAME

EXPORTING

GV_BUDAT = PA_BUDAT

GV_BUKRS = PA_BUKRS

TP_KUNNR1 = SO_KUNNR-LOW

TABLES

GIT_BSID = LIT_BSID

GIT_VBRK = LIT_VBRK

EXCEPTIONS

FORMATTING_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.