[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 */
/* -------------------------------------------------------- */