[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Numeracja stron w ramach jednego strumienia
Mialem przygotowac raport,
ktory zawieralby kolejne listy do kontrahentow.
Dodatkowym wymaganiem bylo, aby raport ten byl w jednym
pliku (drukarskim , dyskowym), ale z podzialem na strony.
Sam problem wydruku zawartosci nie jest tu wazny,
ale "meczylo" mnie jedno zagadnienie:
- jak zrobic, aby numeracja stron na liscie do kazdego
kontrahenta zaczynala sie od 1?
Typowym rozwiazaniem jest:
FORM HEADER
"Str: "
STRING (PAGE-NUMBER) FORMAT "x(8)"
WITH FORM nag .
ale wowczas numeracja stron jest ciagla dla wszystkich
kontrahentow.
Mozna zastosowac wielokrotne:
OUTPUT STREAM ss TO plik APPEND .
gdzie numeracja stron jest juz prawidlowa, ale:
- trwa to dlugo (zamykanie i otwieranie plikow);
- strumien byl otwierany poza procedura.
Ponizej zamieszczam rozwiazanie, ktore drukuje nastepujace naglowki:
------
Str: 1 (Rap: 1) Kontrahent 1
------
Str: 2 (Rap: 2) Kontrahent 1
------
Str: 1 (Rap: 3) Kontrahent 2
------
Str: 2 (Rap: 4) Kontrahent 2
------
Str: 3 (Rap: 5) Kontrahent 2
------
Str: 1 (Rap: 6) Kontrahent 3
------
Polecam
JSitarz
-----------------
P.S.
Dobrze byloby miec mozliwosc obslugi trygera:
ON PAGE-CHANGE ON STREAM ss DO :
END . /* On */
Ktos ma jakis pomysl ?
/* ------------------ Program numeracji stron -------------------- */
/* Granica, za ktora zmieniac strone */
DEFINE VARIABLE v_line_b AS INTEGER NO-UNDO .
/* Czy mozna zmieniac strone */
DEFINE VARIABLE v_zmiana_st AS LOGICAL NO-UNDO .
/* Numer strony */
DEFINE VARIABLE v_strona AS INTEGER NO-UNDO .
/*---------------------------------------------------- */
/* Okreslamy granice dla zmian strony:
*
* - Jest to rozmiar strony, odjac
* - wielkosc ramki dla naglowka (5),
* - wielkosc pojedynczej ramki (2),
* - ramki dla podsumowania (6),
* - zapas (2).
*
* Razem = - 15 .
*/
ASSIGN
v_line_b = PAGE-SIZE - 15 /* Po tym wierszu zmienimy numer strony */
.
/* ----------------------------------------------------------- */
FOR EACH kontrahent
NO-LOCK .
FORM HEADER
/* Inne elementy naglowka strony */
"Str: " + TRIM (STRING (v_strona))
+ " (Rap: "
+ TRIM (STRING (PAGE-NUMBER))
+ ")" FORMAT "x(20)"
/* Inne elementy naglowka strony */
WITH FRAME phead
PAGE-TOP
WIDTH 80
NO-BOX
.
v_strona = 1 .
VIEW FRAME phead .
FOR EACH faktura OF kontrahent
NO-LOCK .
/* Wydruk:
* - naglowka faktury ;
* - naglowka dla kolumn pozycji, oraz (wazne)
* - przygotowanie naglowka (HEADER) pozycji dla ewentualnych
* nastepnych stron tekstu.
*/
FOR EACH pozycja OF faktura
NO-LOCK .
/* Wydruk pozycji faktury (w kilku wierszach) */
IF LINE-COUNT < v_line_b THEN DO .
v_zmiana_st = TRUE .
END . ELSE DO . /* If LINE-COUNT >= v_line_b */
IF v_zmiana_st THEN DO .
v_zmiana_st = FALSE .
v_strona = v_strona + 1 .
END . /* If v_zmiana_st */
END . /* If LINE-COUNT >= v_line_b */
END . /* For Each pozycja */
/* Wydruk:
* - podsumowan oraz
* - zablokowanie naglowka pozycji .
*/
END . /* For Each faktura */
/* Wydruk:
* - podsumowan dla faktury.
*/
HIDE FRAME phead .
END . /* For Each kontrahent */
/* -------------------------------------------------------- */