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.