[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Numeracja stron w ramach jednego strumienia
On 19 Dec 97 at 10:48, Jerzy Sitarz wrote:
> P.S.
>
> Dobrze byloby miec mozliwosc obslugi trygera:
>
> ON PAGE-CHANGE ON STREAM ss DO :
>
> END . /* On */
>
>
> Ktos ma jakis pomysl ?
Ja.
(Opis ponizej kodu.)
-------------------------------------------------------
def var v_i as int no-undo.
def var v_page_no as int initial 1 no-undo.
output to zzz.txt paged page-size 10.
do v_i = 1 to 200:
form header
fill( " ", 40 ) format "x(40)"
v_page_no format ">9" "/" page-number format ">9" skip(1)
with frame a page-top no-box.
view frame a.
if line-counter = page-size + 1 then /* Zmienila sie strona */
do:
v_page_no = v_page_no + 1. /* L1 */
put "Pierwszy wiersz ponizej naglowka." skip. /* L2 */
end.
put v_i skip.
end.
output close.
-----------------------------------------------------
Powyzszy przyklad mozna uzupelnic o przestawianie v_page_no na 1 przy
zmianie kontrahenta, aby uzyskac efekt, o ktory oryginalnie chodzilo.
Warunek "line-counter = page-size + 1" okresla moment zmiany strony.
Trzeba jednakze dobrze rozumiec, jak Progress obsluguje naglowki i
numeracje stron, aby uniknac pomylki. Np. zamiana kolejnosci wierszy
okreslonych /* L1 */ i /* L2 */ spowoduje bledne dzialanie. Jesli
wiesz dlaczego to mozesz dalej nie czytac.
Po wydrukowaniu ostatniego wiersza na stronie znajdujemy sie "przed"
pierwszym wierszem na kolejnej stronie. To wtedy zachodzi:
"line-counter = page-size + 1". Komenda "view frame a." niczego nie
wypisze, bo moze nic juz nie bedzie wydrukowane i powstalby naglowek
na poczatku pustej strony. Natomiast po dojsciu do komendy "put"
wiadomo, ze cos sie wydrukuje, wiec najpierw zwieksza sie
page-number, nastepnie drukuje sie naglowek, a potem realizuje sie
"put". Dlatego zwiekszenie v_page_no przed put'em powoduje, ze
zwiekszona wartosc zostanie wypisana w naglowku.
Powodzenia!
Tomasz Judycki tjudycki@elbacsb.com.pl
ELBA-CSB SA, tel (48 22) 610 85 80 ext. 335
Plowiecka 1, fax (48 22) 612 20 61
04-204 Warsaw,
Poland
http://www.elbacsb.com.pl