Subscribe

RSS Feed (xml)



Powered By

Skin Design:
Free Blogger Skins

Powered by Blogger

Thursday, October 21, 2010

abap program for How to determine the number of available lines depending on the font size

Many ABAPERS have this problem, if a batch input has a table control, then the font size changes from machine to machine as
a result the no of entries keeps changing, So how to determine the number of available lines depending on the font size.

I have a solution for this and it works fine.

Here is the code.

thanks
Poonam

*****************************************************************
------------------------------------------------------
* data for controlling paging on screen 0102
DATA: W_MAXLINES(2) TYPE N,
W_NEXT_LINE(3) TYPE N,
W_PAGE(1), "y = page forward, n otherwise
W_SCRLEN(2) TYPE I,
W_SCRLINE(2) TYPE I.
DATA: BEGIN OF W_HDR.
INCLUDE STRUCTURE D020S.
DATA: END OF W_HDR.
DATA: BEGIN OF W_FLD OCCURS 100.
INCLUDE STRUCTURE D021S.
DATA: END OF W_FLD.
DATA: BEGIN OF W_LOG OCCURS 20.
INCLUDE STRUCTURE D022S.
DATA: END OF W_LOG.
DATA: BEGIN OF W_MC OCCURS 20.
INCLUDE STRUCTURE D023S.
DATA: END OF W_MC.
DATA: BEGIN OF W_DYNPRONAME,
PROGRAM(8) VALUE 'SAPMM60X',
DYNPRO(4) VALUE '0102',
END OF W_DYNPRONAME.

************************************************************************
FORM GET_MAX_LINES.
* set w_maxlines to the number of var-loop occurrences on the screen so
* that we know when to page forward on screen 0102
* also initialise w_next_line to zero for GET_NEXT_LINE
* this subroutine caters for all cases - including screens without loops
CLEAR: W_MAXLINES,
W_NEXT_LINE.
IMPORT DYNPRO W_HDR
W_FLD
W_LOG
W_MC
ID W_DYNPRONAME.
LOOP AT W_FLD WHERE LTYP EQ 'L'.
MOVE W_FLD-LINE TO W_SCRLINE. "first var-loop line
MOVE W_FLD-LBLK TO W_SCRLEN. "depth of loop block
EXIT.
ENDLOOP.
IF SY-SUBRC EQ 0
AND W_SCRLEN NE 0.
* sy-srows = total no of lines on screen
* w_scrline = actual first line of loop so that
* w_scrline - 1 = number of heading lines (before loop)
* 4 = no of lines at top of screen - command line, pushbuttons, 2 ulines
* 3 = no of lines after loop - uline & Page count
* w_scrlen = no of lines in loop block
* w_maxlines = sy-srows - ( wscrline - 1 ) - 4 - 3
* and then 1 less but not sure why!
W_MAXLINES = SY-SROWS - W_SCRLINE - 1 - 4 - 3.
W_MAXLINES = W_MAXLINES - 1.
W_MAXLINES = W_MAXLINES DIV W_SCRLEN.
ELSE.
MOVE 99 TO W_MAXLINES. "this required if no screen loop
ENDIF.
ENDFORM.


************************************************************************
FORM GET_NEXT_LINE.
* set w_page if page forward is required
W_NEXT_LINE = W_NEXT_LINE + 1.
IF W_NEXT_LINE GT W_MAXLINES.
W_NEXT_LINE = 1.
W_PAGE = 'Y'.
ELSE.
W_PAGE = 'N'.
ENDIF.
ENDFORM.
------------------------------------------------------


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

No comments:

Blog Archive