cancel
Showing results for 
Search instead for 
Did you mean: 

Regarding ranges in smartform

Former Member
0 Kudos

hai ,

i am new to samrtforms,i have on req can any body help to solve this..

my req is i want to print vouchers(fi related),

in my sel screen i designed belnr from ..to..

bukrs

gjahr

in my case i solved for single entry i.e belnr =1803334

bukrs = 123

gjahr =2009.

but i want to print range documents i.e when user gives documents from 1803334 to 1803344.

here i need to print 10 documents each document should on 1 page

1803334 on first page

1803335 on second page

;

;

;

1803344 on 10 the page

this is my req

can any body help me..

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hi Rao

I think it is the most easy to print all documents seperately.

Otherwise you have to change a lot in your smartform. (if all data is delivered bij the program)

To do this you have to builtin in a loop in your program in which the data is gathered and the smartform is called.

Succes,

Gr., Frank

Former Member
0 Kudos

can u explain me more brirfly..

iam new to this smartform

Former Member
0 Kudos

Did you try it seperately (1 smartform call per vouchez) or together (all vpouchez in 1 smartform call)

Former Member
0 Kudos

here the call for function module is once

and for example if there are 10 vouchers then each voucher should be print on each separate page.

Former Member
0 Kudos

For the answer i need to know how much the smartform is called in your logic.

1 time or several times.

Otherwise i have to explain everything twice

The function module is the module which call the smartform. I understand FM is called once. But that is not what i wanted to know.

.

Gr., Frank

Former Member
0 Kudos

here is my code ..here i called smartform only once..

**********************************************************************

  • MODULE : FI

  • FUNCTIONAL : RAMESH

  • DEVELOPER : AJAY

  • MODIFIED BY :

  • DATE OF CREATION : 18.03.2008

  • TRANSPORT REQUEST# :

  • PROGRAM NAME : ZFIS_JVOUCHERS1

  • TITLE : VOUCHERS

  • TRANSACTION CODE :

  • DEVELOPMENT CLASS :

  • DESCRIPTION : FORM

**********************************************************************

  • Change Details

**********************************************************************

  • CHANGED BY :

  • CHANGE DATE :

  • PURPOSE OF CHANGE :

  • TRANSPORT REQUEST# :

  • DESCRIPTION :

**********************************************************************

REPORT zfi_jvouchers.

TABLES:bkpf.

*********************************************************************

  • TYPE DECLARATIONS

*********************************************************************

TYPES:BEGIN OF ty_bseg,

bukrs TYPE bukrs,

belnr TYPE belnr_d,

bschl TYPE bschl,

buzei TYPE buzei,

wrbtr TYPE wrbtr,

zuonr TYPE dzuonr,

sgtxt TYPE sgtxt,

kostl TYPE kostl,

aufnr TYPE aufnr,

hkont TYPE hkont,

END OF ty_bseg.

TYPES:BEGIN OF ty_vbsegs,

belnr TYPE belnr_d,

bukrs TYPE bukrs,

buzei TYPE buzei,

bschl TYPE bschl,

wrbtr TYPE wrbtr,

zuonr TYPE dzuonr,

sgtxt TYPE sgtxt,

kostl TYPE kostl,

aufnr TYPE aufnr,

saknr TYPE saknr,

END OF ty_vbsegs.

TYPES:BEGIN OF ty_skat,

saknr TYPE saknr,

txt20 TYPE txt20_skat,

END OF ty_skat.

TYPES:BEGIN OF ty_final,

BLART TYPE BLART,

BLDAT TYPE BLDAT,

BELNR(12) TYPE c,

BUDAT TYPE BUDAT,

bxtxt type bktxt,

xblnr type xblnr,

buzei TYPE buzei,

bschl TYPE bschl,

saknr TYPE saknr,

txt20 TYPE txt20_skat,

  • wrbtr TYPE wrbtr,

zuonr TYPE dzuonr,

sgtxt TYPE sgtxt,

kostl TYPE kostl,

aufnr TYPE aufnr,

END OF ty_final.

TYPES:BEGIN OF ty_003t,

blart TYPE blart,

ltext TYPE ltext_003t,

END OF ty_003t.

TYPES:BEGIN OF ty_t001,

bukrs TYPE bukrs,

butxt TYPE butxt,

END OF ty_t001.

*********************************************************************

  • DATA DECLARATIONS

*********************************************************************

DATA:wa_bkpf TYPE bkpf,

it_bkpf TYPE TABLE OF bkpf,

fmname TYPE rs38l_fnam,

v_belnr1 TYPE bkpf-belnr,

v_belnr2 TYPE bkpf-belnr,

v_bukrs TYPE bkpf-bukrs,

v_gjahr TYPE bkpf-gjahr,

wa_bseg TYPE ty_bseg,

it_bseg TYPE TABLE OF ty_bseg,

wa_vbsegs TYPE ty_vbsegs,

it_vbsegs TYPE TABLE OF ty_vbsegs,

wa_skat TYPE ty_skat,

it_skat TYPE TABLE OF ty_skat,

wa_final TYPE ty_final,

it_final TYPE TABLE OF ty_final,

wa_t003t TYPE ty_003t,

it_t003t TYPE TABLE OF ty_003t,

wa_t001 TYPE ty_t001,

it_t001 TYPE TABLE OF ty_t001 .

*********************************************************************

  • SELECTION-SCREEN DESIGN

*********************************************************************

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECT-OPTIONS:s_belnr FOR bkpf-belnr.

PARAMETERS: s_bukrs LIKE bkpf-bukrs OBLIGATORY,

s_gjahr LIKE bkpf-gjahr.

SELECTION-SCREEN END OF BLOCK b1.

*********************************************************************

  • VALIDATION OF SELECTION-SCREEN INPUTS

*********************************************************************

AT SELECTION-SCREEN ON s_belnr.

PERFORM validate_docno.

AT SELECTION-SCREEN ON s_bukrs.

PERFORM validate_companycode.

AT SELECTION-SCREEN ON s_gjahr.

PERFORM validate_fiyear.

*********************************************************************

  • START-OF-SELECTION

*********************************************************************

START-OF-SELECTION.

SELECT * FROM bkpf INTO TABLE it_bkpf

WHERE bukrs EQ s_bukrs

AND belnr IN s_belnr

AND gjahr EQ s_gjahr.

  • selecting doc type code Text

SELECT blart

ltext

FROM t003t

INTO TABLE it_t003t

FOR ALL ENTRIES IN it_bkpf

WHERE blart EQ it_bkpf-blart

AND spras EQ 'EN'.

  • selecting Company code Text

SELECT bukrs

butxt

FROM t001

INTO TABLE it_t001

FOR ALL ENTRIES IN it_bkpf

WHERE bukrs EQ it_bkpf-bukrs

AND spras EQ 'EN'.

  • IF NOT wa_bkpf IS INITIAL.

LOOP AT it_bkpf INTO wa_bkpf.

IF wa_bkpf-bstat EQ 'V'.

SELECT

  • SINGLE

belnr

bukrs

buzei

bschl

wrbtr

zuonr

sgtxt

kostl

aufnr

saknr

FROM vbsegs

INTO TABLE it_vbsegs

  • INTO wa_vbsegs

FOR ALL ENTRIES IN it_bkpf

WHERE bukrs EQ it_bkpf-bukrs

AND belnr EQ it_bkpf-belnr

and GJAHR eq s_gjahr.

IF sy-subrc EQ '0'.

SELECT

  • SINGLE

saknr

txt20

FROM skat

INTO TABLE it_skat

FOR ALL ENTRIES IN it_vbsegs

  • INTO wa_skat

WHERE saknr EQ it_vbsegs-saknr.

ENDIF.

ELSE.

SELECT

  • SINGLE

bukrs

belnr

bschl

buzei

wrbtr

zuonr

sgtxt

kostl

aufnr

hkont

FROM bseg

INTO TABLE it_bseg

  • INTO wa_bseg

FOR ALL ENTRIES IN it_bkpf

WHERE bukrs EQ it_bkpf-bukrs

AND belnr EQ it_bkpf-belnr

and gjahr eq s_gjahr.

IF sy-subrc EQ '0'.

SELECT

  • SINGLE

saknr

txt20

FROM skat

INTO TABLE it_skat

  • INTO wa_skat

FOR ALL ENTRIES IN it_bseg

WHERE saknr EQ it_bseg-hkont.

ENDIF.

ENDIF.

ENDLOOP.

CLEAR wa_bkpf.

LOOP AT it_bkpf INTO wa_bkpf.

MOVE wa_bkpf-blart to wa_final-blart.

MOVE wa_bkpf-bldat to wa_final-bldat.

MOVE wa_bkpf-belnr to wa_final-belnr.

MOVE wa_bkpf-budat to wa_final-budat.

move wa_bkpf-bktxt to wa_final-bxtxt.

move wa_bkpf-xblnr to wa_final-xblnr.

IF wa_bkpf-bstat EQ 'V'.

sort it_vbsegs.

LOOP AT it_vbsegs INTO wa_vbsegs.

IF wa_vbsegs-belnr EQ wa_bkpf-belnr.

IF wa_vbsegs-bschl EQ '40' OR wa_vbsegs-bschl EQ '50'.

MOVE-CORRESPONDING wa_vbsegs TO wa_final.

READ TABLE it_skat INTO wa_skat WITH KEY saknr = wa_vbsegs-saknr.

  • IF wa_skat-saknr EQ wa_vbsegs-saknr.

MOVE wa_skat-txt20 TO wa_final-txt20.

  • ENDIF.

APPEND wa_final TO it_final.

ENDIF.

ENDIF.

ENDLOOP.

ELSE.

sort it_bseg.

LOOP AT it_bseg INTO wa_bseg.

IF wa_bseg-belnr EQ wa_bkpf-belnr.

IF wa_bseg-bschl EQ '40' OR wa_bseg-bschl EQ '50'.

MOVE-CORRESPONDING wa_bseg TO wa_final.

READ TABLE it_skat INTO wa_skat WITH KEY saknr = wa_bseg-hkont.

  • IF wa_skat-saknr EQ wa_vbsegs-saknr.

MOVE wa_skat-txt20 TO wa_final-txt20.

  • ENDIF.

APPEND wa_final TO it_final.

ENDIF.

ENDIF.

ENDLOOP.

ENDIF.

  • ENDIF.

ENDLOOP.

PERFORM smartform.

&----


*& Form SMARTFORM

&----


  • text

----


FORM smartform .

CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'

EXPORTING

formname = 'ZFI_JVOCHERS12'

  • VARIANT = ' '

  • DIRECT_CALL = ' '

IMPORTING

fm_name = fmname

  • 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 fmname

  • EXPORTING

*COMPANY_CODE = V_BUKRS

  • EXPORTING

  • v_belnr1 = v_belnr1

  • v_belnr2 = v_belnr2

  • v_bukrs = v_bukrs

  • v_gjahr = v_gjahr

TABLES

  • it_bkpf = it_bkpf

it_final = it_final.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. " SMARTFORM

&----


*& Form VALIDATE_DOCNO

&----


  • Validating Accounting Document Number

----


FORM validate_docno .

DATA:lv_belnr TYPE belnr_d.

IF s_belnr-low IS NOT INITIAL.

LOOP AT s_belnr .

SELECT SINGLE belnr

FROM bkpf

INTO lv_belnr

WHERE belnr EQ s_belnr-low.

IF sy-subrc NE '0'.

MESSAGE e001(zfi) WITH s_belnr-low .

EXIT.

ENDIF.

ENDLOOP.

ENDIF.

CLEAR lv_belnr.

IF s_belnr-high IS NOT INITIAL.

LOOP AT s_belnr .

SELECT SINGLE belnr

FROM bkpf

INTO lv_belnr

WHERE belnr EQ s_belnr-high.

IF sy-subrc NE '0'.

MESSAGE e002(zfi) WITH s_belnr-high.

EXIT.

ENDIF.

ENDLOOP.

ENDIF.

ENDFORM. " VALIDATE_DOCNO

&----


*& Form VALIDATE_COMPANYCODE

&----


  • Validating Company Code

----


FORM validate_companycode .

DATA:lv_bukrs TYPE bukrs.

IF s_bukrs IS NOT INITIAL.

SELECT SINGLE bukrs

FROM t001

INTO lv_bukrs

WHERE bukrs EQ s_bukrs.

IF sy-subrc NE '0'.

MESSAGE e003(zfi) WITH s_bukrs.

ENDIF.

ENDIF.

ENDFORM. " VALIDATE_COMPANYCODE

&----


*& Form VALIDATE_FIYEAR

&----


  • Validating Fiscal Year

----


FORM validate_fiyear .

DATA:lv_gjahr TYPE gjahr.

IF s_gjahr IS NOT INITIAL.

SELECT SINGLE gjahr

FROM bkpf

INTO lv_gjahr

WHERE gjahr EQ s_gjahr.

IF sy-subrc NE '0'.

MESSAGE e004(zfi) WITH s_gjahr.

ENDIF.

ENDIF.

ENDFORM. " VALIDATE_FIYEAR

Former Member
0 Kudos

Hi ayo,

The print program looks pretty good.

Your are calling the smartform once. With all data in it_final.

You have to create in main a loop/table over it_final.

(like it_final into wa_final).

As firstline of this loop you enter a in case of a new documentnumber (not the first one)

a command (FLOW LOGIC). Here you can force a page break.

Take care of the right data in the right variables.

( I think you will use variables as wa_final-??????? )

Lets SF do its job.

if you have 1 it_final record for each voucher it will be easy to do.

Let me know if you have troubles.

Gr.,Frank

Answers (3)

Answers (3)

Former Member
0 Kudos

ok

Former Member
0 Kudos

hi,

i think u have to do it separately. its easy to u.

otherwise u have to do looping where u have to get all data together and then call smartform.

Former Member
0 Kudos

if you want to print seperate form for all the document no then you just need to call the function modul(smart form) in loop and pass the appropriate data through its interface.

if you want to print all the document in seperate page then you need to trigger new page event whenever new document no is encountered.

Former Member
0 Kudos

thanks for u r reply..

i did this but it showing the total 10 pages.

but in page it is not displaying table data..