12.6 Voorbeeld: acceptgiro's

Een energiebedrijf vervaardigt acceptgiro's met het programma accepten. Een acceptgiro is 4 inch hoog en wordt bedrukt met 6 regels per inch. De bovenste twee en de onderste twee regels zijn altijd leeg. Van de 20 regels bedrukt het programma de nummers 1, 3, 6, 11, 12, 13 en 20. Elke regel kan maximaal 70 tekens bevatten.

De gegevens komen uit het sequentiële schijfbestand accept-gegevens. Gegevens die op elke acceptgiro gelijk zijn, staan in het eerste record. Daarna volgen de records met de variabele gegevens. Elk record heeft een lengte van 128 tekens. De blokkingsfactor is 8.

illustratie: Geert Nijmolen

radiator met acceptgiro eraan

Het eerste record bevat de betrokken periode (posities 1-20) die op elke acceptgiro moet komen te staan op de eerste regel vanaf positie 25. De posities 21-27 bevatten het gironummer van het energiebedrijf. Dat moet op de posities 53-60 van regel 20 staan, voorzien van een plusteken aan de rechterkant. De posities 28 en 29 bevatten een codenummer. Dat nummer moet op de posities 62-64 van regel 20 staan, voorzien van een groter-dan-teken aan de rechterkant. De rest van het eerste record is leeg.

Elk volgend record bevat een bedrag in centen (posities 1-8). Dit bedrag moet tweemaal op de acceptgiro komen. Op de posities 3-12 van regel 3 moet het bedrag worden voorzien van een F aan de linkerzijde, nulonderdrukking over maximaal 5 cijfers en een komma tussen de guldens en de centen. Zonder opmaak moet het bedrag staan op de posities 32-39 van regel 20.

Na het bedrag staat in het record een betalingskenmerk van 16 cijfers. Dit getal moet eveneens twee keer op de acceptgiro staan. Eenmaal op regel 3 vanaf positie 25, waarbij na elke vier cijfers een spatie moet staan. De tweede maal is op de posities 3-19 van regel 20, met een plusteken aan de rechterkant.

De posities 25-33 van het record bevatten het giro- of banknummer van degene die moet betalen. Is het getal kleiner dan 10 miljoen, dan betreft het een gironummer, anders een banknummer. Het nummer moet met nulonderdrukking op de posities 21-30 staan met een kleiner-dan-teken aan de rechterzijde. Een gironummer moet met nulonderdrukking ook nog komen op de posities 6-14 van regel 6. Een banknummer moet op regel 6 vanaf positie 25 staan met een punt na het tweede, vierde en zesde cijfer.

Het restant van het record bevat de naam, het adres en de woonplaats. Deze drie delen staan achter elkaar, gescheiden door een schuine streep. Deze gegevens moeten op de regels 12, 12 en 13 van de acceptgiro komen, te beginnen op positie 8. De woonplaats begint met de postcode (eerste 6 posities; zonder spaties). Op de acceptgiro moet tussen de vier cijfers en de twee letters van de postcode één spatie staan, tussen de twee letters en de woonplaatsnaam twee spaties.

 identification division.
 program-id. accepten.
************ vervaardigen van acceptgiro's
************ door Andree Hollander, 1988/10/22

 environment divison.
 configuration section.
 special-names.
     currency sign is "F";
     decimal-point is comma.
 input-output section.
 file-control.
     select accept-gegevens assign to disk.
     select regeldrukker assign to printer.

 data division.
 file section.
 fd accept-gegevens; block contains 8 records.
 01 eerste-record.
    03 ag-periode       pic X(20).
    03 ag-naar-rekening pic 9(07).
    03 ag-codenummer    pic X(02).
    03 filler           pic X(99).
 01 volgende-records.
    03 ag-bedrag        pic 9(6)V99.
    03 ag-kenmerk       pic 9(16).
    03 ag-van-rekening  pic 9(09).
    03 ag-naw           pic X(95).
 fd regeldrukker; linage 20 lines, top 2, bottom 2.
 01 regel               pic X(70).

 working-storage section.
 01 regel-1             pic B(24)X(20).
 01 regel-3.
    03                  pic XX, value spaces.
    03 regel-3-bedrag   pic FZZZZZ9,99.
    03 regel-3-kenmerk  pic B(12)9999B9999B9999B9999.
 01 regel-6.
    03 gironummer       pic B(5)Z(9).
    03 banknummer       pic B(9)99.99.99.999.
 01 regel-11            pic B(8)X(68).
 01 regel-12            pic B(8)X(68).
 01 regel-13            pic B(8)XXXXBXXBBX(57).
 01 regel-20.
    03 regel-20-kenmerk pic BB9(16)+.
    03 rekeningnr       pic BZ(9).
    03                  pic X, value "<".
    03 regel-20-bedrag  pic B9(6)V99.
    03 naar-rekening    pic B(13)9(7)+.
    03 codenummer       pic BXX.
    03                  pic X, value ">".
 01 einde-wissel        pic X, value "N".
    88 einde-accepten   value "J".
 01 naam                pic x(68).
 01 adres               pic x(68).
 01 woonplaats          pic x(68).
*
 procedure division.
 A-basis.
    open input accept-gegevens, output regeldrukker
    perform B-verwerk-eerste-record
    perform with test before until einde-accepten
        read accept-gegevens 
            at end set einde-accepten to true
            not at end perform C-druk-acceptgiro
        end-read
    end-perform
    close accept-gegevens, regeldrukker
    stop run.
*
 B-verwerk-eerste-record.
     read accept-gegevens 
         at end set einde-accepten to true
         not at end 
             move ag-periode to regel-1
             move ag-naar-rekening to naar-rekening
             move ag-codenummer to codenummer
     end-read.
*
 C-druk-acceptgiro.
*    vullen van de velden
     move ag-bedrag to regel-3-bedrag, regel-20-bedrag
     move ag-kenmerk to regel-3-kenmerk, regel-20-kenmerk
     move ag-van-rekening to rekeningnr
     move space to regel-6
     if ag-van-rekening < 10000000 then
         move ag-van-rekening to gironummer
     else
         move ag-van-rekening to banknummer
     end-if
*    resultaatvelden van de unstring-opdracht mogen niet
*    opgemaakt zijn; daarom kunnen de naam, het adres en
*    de woonplaats niet rechtstreeks in regel-11, regel-12
*    en regel-13 worden geplaatst.
     unstring ag-naw delimited by "/"
         into naam, adres, woonplaats
     move naam to regel-11
     move adres to regel-12
     move woonplaats to regel-13
*
*    afdrukken van de regels
     write regel from regel-1 after advancing page
     write regel from regel-3 after advancing 2 lines
     write regel from regel-6 after advancing 3 lines 
     write regel from regel-11 after advancing 5 lines
     write regel from regel 12 after advancing 1 line
     write regel from regel-13 after advancing 1 line
     write regel from regel-20 after advancing 7 lines.
  
omslag leerboek

Serie: leerboeken informatica

Titel: Tijd voor COBOL 2

Auteur: Andree Hollander

naamlogo