Hi,

My program/sapscript does not print the 3rd page. It prints the 3rd page details on the 2nd page. The 2nd page info is not printed. In the print program, I do only one write_form. Is that a problem? Or, is it to do with my looping on the internal tables? I have pasted my code below. The sapscript prints on a pre-printed form with many boxes. Each item record details should be printed on a set of boxes. There are 3 sets of boxes (i.e., 3 item details) on the 2nd page. The fourth item should start on the subsequent page.

Any ideas?

Thanks for the help,

Naveen


*----------------------------------------------------------------
REPORT zniw0001

TYPE-POOLS ztyiw.

* Tables
TABLES: ziwcprinthdr,
ziwcprintdtl,
itcpo.

* Local Tables
DATA: lt_printheader TYPE ztyiw_printheader,
lt_printdetail TYPE ztyiw_printdetail.

DATA: BEGIN OF lt_printdtl OCCURS 0,
mandt LIKE ziwdocfield-mandt,
bukrs LIKE ziwdocfield-bukrs,
bwlgnum LIKE ziwdocfield-ibwlgnum,
intnr LIKE ziwcprintdtl-intnr,
intyear LIKE ziwcprintdtl-intyear,
doctype LIKE ziwdocfield-doctype,
spras LIKE ziwdocfield-spras,
stawn LIKE ziwcprintdtl-stawn,
herkl LIKE ziwcprintdtl-herkl,
code LIKE ziwdocfield-code,
seqno LIKE ziwcprintdtl-seqno,
fieldcat LIKE ziwdocfield-fieldcat,
value LIKE ziwcprintdtl-value,
dynamic LIKE ziwdocfield-dynamic,
text LIKE ziwdocfield-text,
fldlen LIKE ziwdocfield-fldlen,
END OF lt_printdtl.

* Local Structures
DATA: ls_printheader LIKE LINE OF lt_printheader,
ls_printdetail LIKE LINE OF lt_printdetail,
ls_printdtl LIKE LINE OF lt_printdtl,
ls_printdtl2 LIKE LINE OF lt_printdtl.

* References to classes
DATA: g_customsprint TYPE REF TO zcliw_customsprint.

* Variables
DATA: v_retcode LIKE sy-subrc, " returncode
v_fonam(15) TYPE C, " form name
v_pdest(10) TYPE C, " printer destination
v_hdrcodeseq(19) TYPE C, " header field code & seqno
v_dtlcodeseq(28) TYPE C, " detail field code & seqno
v_item(05) TYPE C, " item
v_counter TYPE I, " counter
v_mod TYPE I. " mod of counter

DATA: l_hdrlen LIKE ziwdocfield-fldlen,
l_dtllen LIKE ziwdocfield-fldlen.

*&---------------------------------------------------------------
*& Form entry
*&---------------------------------------------------------------
FORM entry USING p_printheader LIKE lt_printheader[]
p_printdetail LIKE lt_printdetail[]
p_pdest TYPE C
p_fonam TYPE C
CHANGING RETURN_CODE.

CLEAR: lt_printheader, lt_printdetail, v_fonam.
MOVE p_printheader TO lt_printheader.
MOVE p_printdetail TO lt_printdetail.
v_fonam = p_fonam.

CLEAR itcpo.
itcpo-tddest = p_pdest. "Printer ID
itcpo-tdimmed = 'X'. "Print Immediately
itcpo-tddelete = 'X'. "Delete after Printing

PERFORM processing.

IF v_retcode NE 0.
RETURN_CODE = 1.
ELSE.
RETURN_CODE = 0.
ENDIF.

ENDFORM. " entry
*&---------------------------------------------------------------
*& Form processing
*&---------------------------------------------------------------
FORM processing.

PERFORM form_open.
CHECK v_retcode = 0.

CLEAR: v_retcode, ls_printheader, ls_printdetail, v_counter,
lt_printdtl.

LOOP AT lt_printheader INTO ls_printheader.
DO ls_printheader-seqno TIMES.
SHIFT ls_printheader-seqno LEFT DELETING LEADING SPACE.
CLEAR: v_hdrcodeseq, l_hdrlen.
CONCATENATE '&' ls_printheader-code '-' ls_printheader-seqno '&' INTO
v_hdrcodeseq.
l_hdrlen = ls_printheader-fldlen.
PERFORM set_text_symbol_value USING v_hdrcodeseq
ls_printheader-value+0(l_hdrlen).
ENDDO.
ENDLOOP.

LOOP AT lt_printdetail INTO ls_printdetail.
MOVE-CORRESPONDING ls_printdetail TO lt_printdtl.
APPEND lt_printdtl.
ENDLOOP.

CLEAR lt_printdtl.
LOOP AT lt_printdtl INTO ls_printdtl.
MOVE-CORRESPONDING ls_printdtl TO ls_printdtl2.
AT NEW herkl.
v_counter = v_counter + 1.
v_mod = v_counter MOD 3.
ENDAT.
DO ls_printdtl2-seqno TIMES.
SHIFT ls_printdtl2-seqno LEFT DELETING LEADING SPACE.
CLEAR: v_dtlcodeseq, l_dtllen.
IF v_counter = 1.
v_item = 'ITEM1'.
PERFORM concat.
ELSEIF v_counter = 2 OR v_mod = 2.
v_item = 'ITEM2'.
PERFORM concat.
ELSEIF v_counter = 3 OR v_mod = 0.
v_item = 'ITEM3'.
Perform concat.
ELSEIF v_counter = 4 OR v_mod = 1.
v_item = 'ITEM4'.
PERFORM concat.
ENDIF.
ENDDO.
ENDLOOP.

PERFORM form_write.
CHECK v_retcode = 0.

PERFORM form_close.
CHECK v_retcode = 0.

ENDFORM. " processing

*&---------------------------------------------------------------
*& Form concat
*&---------------------------------------------------------------
FORM concat.

CONCATENATE '&' v_item '-' ls_printdtl2-code '-'
ls_printdtl2-seqno '&' INTO v_dtlcodeseq.
l_dtllen = ls_printdtl2-fldlen.
PERFORM set_text_symbol_value USING v_dtlcodeseq
ls_printdtl2-value+0(l_dtllen).

ENDFORM. " concat

*&---------------------------------------------------------------
*& Form form_open
*&---------------------------------------------------------------
FORM form_open.

CALL FUNCTION 'OPEN_FORM'
EXPORTING
form = v_fonam "Layout Set Name
language = sy-langu "Language
options = itcpo "Printer Options
device = 'PRINTER' "Printer
dialog = ' '
EXCEPTIONS
canceled = 1
device = 2
form = 3
options = 4
unclosed = 5
others = 6.
v_retcode = sy-subrc.

ENDFORM. " form_open

*&---------------------------------------------------------------
*& Form form_write
*&---------------------------------------------------------------
FORM form_write.

CALL FUNCTION 'WRITE_FORM'
EXPORTING
* ELEMENT = 'ITEM' "execute element
* FUNCTION = 'SET'
TYPE = 'BODY' "normal output
* WINDOW = 'MAIN' "to window MAIN*
EXCEPTIONS
ELEMENT = 1
FUNCTION = 2
TYPE = 3
UNOPENED = 4
UNSTARTED = 5
WINDOW = 6
BAD_PAGEFORMAT_FOR_PRINT = 7
OTHERS = 8.
v_retcode = sy-subrc.

ENDFORM. " form_write

*&---------------------------------------------------------------
*& Form form_close
*&---------------------------------------------------------------
FORM form_close.

CALL FUNCTION 'CLOSE_FORM'
EXCEPTIONS others = 1.
IF sy-subrc NE 0.
v_retcode = 1.
ENDIF.

ENDFORM. " form_close

*&---------------------------------------------------------------
*& Form set_text_symbol_value
*&---------------------------------------------------------------
FORM set_text_symbol_value USING VALUE(NAME)
VALUE(VALUE).

CALL FUNCTION 'TEXT_SYMBOL_SETVALUE'
EXPORTING
NAME = NAME
VALUE = VALUE
EXCEPTIONS
OTHERS = 1.
IF sy-subrc NE 0.
PERFORM protocol_update.
ENDIF.

ENDFORM. " set_text_symbol_value

*----------------------------------------------------------------
* Form protocol_update ----------------------------------------------------------------
FORM protocol_update.

CALL FUNCTION 'NAST_PROTOCOL_UPDATE'
EXPORTING
MSG_ARBGB = SYST-MSGID
MSG_NR = SYST-MSGNO
MSG_TY = SYST-MSGTY
MSG_V1 = SYST-MSGV1
MSG_V2 = SYST-MSGV2
MSG_V3 = SYST-MSGV3
MSG_V4 = SYST-MSGV4
EXCEPTIONS
OTHERS = 1.

ENDFORM. " protocol_update