       IDENTIFICATION DIVISION.
       PROGRAM-ID.     ABDRUCK.


      * DATE-WRITTEN.     21.3.84.
      * REMARK.           (c) BASYS GmbH, 1983, 1984.
      *
      ****************************************************************
      *                                                              *
      *        Programm: ABDRUCK                                     *
      *                                                              *
      *    Drucken der Abrechnungsergebnisse in komprimierter Form   *
      *                                                              *
      ****************************************************************
      *                                                              *
      *    [nderungen:                                               *
      *                                                              *
      ****************************************************************
      /
       ENVIRONMENT DIVISION.

       CONFIGURATION SECTION.
       SPECIAL-NAMES.
           DECIMAL-POINT IS COMMA.


       INPUT-OUTPUT SECTION.
       FILE-CONTROL.

           COPY SELADAT.CPY.

           COPY SELKONTO.CPY.

           COPY SELWOH.CPY.

           COPY SELET.CPY.

           COPY SELDATUM.CPY.

           COPY SELLISTE.CPY.


       DATA DIVISION.

       FILE SECTION.

       COPY FDADAT.CPY.

       COPY FDKONTO.CPY.

       COPY FDWOH.CPY.

       COPY FDET.CPY.

       COPY FDDATUM.CPY.

       COPY FDLISTE.CPY.

      /
       WORKING-STORAGE SECTION.

       01 PROGRAMM-NAME                 PIC X(08) VALUE "ABDRUCK".

       01 FEHLER-DATEI-NAME             PIC X(30) VALUE SPACE.

       01 CHAIN-NAME                    PIC X(15) VALUE SPACE.

       COPY DATEIVAR.CPY.

       COPY SEITEPAR.CPY.

       COPY TASTCODE.CPY.

       COPY PERIODEN.CPY.

       01 POS                      COMP PIC 9(03) VALUE ZERO.

       01 TAB-1                    COMP PIC 9(03) VALUE    6.
       01 TAB-2                    COMP PIC 9(03) VALUE   32.
       01 TAB-3                    COMP PIC 9(03) VALUE   36.

       01 QUITTUNG                      PIC X(01) VALUE SPACE.
           88 JA-ANTWORT                     VALUE "J" "j".
           88 NEIN-ANTWORT                   VALUE "N" "n".

       01 DRUCKER-STATUS                PIC X(01) VALUE SPACE.
           88 DRUCK-ABBRUCH                  VALUE "1".

       01 WOHNUNG-STATUS                PIC X(01) VALUE SPACE.
           88 WOHNUNG-VORHANDEN              VALUE "1".

       01 KONTO-STATUS                  PIC X(01) VALUE SPACE.
           88 KONTO-VORHANDEN                VALUE "1".

       01 EIGENTUEMER-STATUS            PIC X(01) VALUE SPACE.
           88 EIGENTUEMER-VORHANDEN          VALUE "1".

       01 FALSE                         PIC X(01) VALUE "0".
       01 TRUE                          PIC X(01) VALUE "1".
       01 KOMMA                         PIC X(01) VALUE ",".
       01 EIGENTUEMER-KONTO-KENNUNG     PIC X(01) VALUE "6".
      *
      *    Summenfelder
      *
       01 SUMME-KOSTEN                  PIC 9(06)V9(02).
       01 SUMME-ZAHLUNGEN               PIC 9(06)V9(02).
       01 SUMME-NACH-ZAHLUNGEN          PIC 9(06)V9(02).
       01 SUMME-RUECK-ZAHLUNGEN         PIC 9(06)V9(02).
      *
      *    Druckausgabefelder
      *
       01 D-SUMME-KOSTEN                PIC ZZZ.ZZ9,99.
       01 D-SUMME-ZAHLUNGEN             PIC ZZZ.ZZ9,99.
       01 D-SUMME-NACH-ZAHLUNGEN        PIC ZZZ.ZZ9,99
                                        BLANK ZERO.
       01 D-SUMME-RUECK-ZAHLUNGEN       PIC ZZZ.ZZ9,99
                                        BLANK ZERO.
       01 D-JAHRES-KOSTEN               PIC ZZZ.ZZ9,99.
       01 D-ZAHLUNGEN                   PIC ZZZ.ZZ9,99.
       01 D-NACH-ZAHLUNG                PIC ZZZ.ZZ9,99
                                        BLANK ZERO.
       01 D-RUECK-ZAHLUNG               PIC ZZZ.ZZ9,99
                                        BLANK ZERO.
       01 D-NAME                        PIC X(20) VALUE SPACE.


      /
       SCREEN SECTION.

       01 DRUCK-UNTERBRECHUNG-TEXT.
      *****************************
           02 LINE 21 COLUMN 03 BLINK VALUE
               " Druck unterbrochen ".

       01 WOHNUNG-NUMMER-IN-DRUCK-TEXT.
      *********************************
           02 LINE 19 COLUMN       2 BLANK LINE.
           02         COLUMN      80 "!".
           02         COLUMN       6 BLINK " Wohnung in Druck ".
           02         COLUMN PLUS  1 PIC ZZ9 FROM WOHNUNG-NUMMER.

       COPY LEERBILD.CPY.

       COPY IOERROR.CPY.

      /
       PROCEDURE DIVISION.

       DECLARATIVES.

       COPY DECLADAT.CPY.

       COPY DECLWOH.CPY.

       COPY DECLET.CPY.

       COPY DECLKONT.CPY.

       COPY DECLDAT.CPY.

       FEHLER-AKTIONEN SECTION.

       COPY DATFEHL.CPY.

       END DECLARATIVES.

      /
       ERGEBNISSE-DRUCKEN.
      ********************
      *
      *    Drucken der Abrechnungsergebnisse in gepackter Form
      *    mit einer Zeile pro Wohnung und Summenbildung }ber
      *    alle Wohnungen
      *
           CALL "$CUROF".
      *
      *    Arbeitsdaten lesen
      *
           PERFORM OEFFNE-I-ARBEITS-DATEN-DATEI.
           PERFORM LESE-ARBEITS-DATEN.
      *
      *    Wohnung-Datei |ffnen und erste Wohnung bereitstellen
      *
           PERFORM OEFFNE-I-WOHNUNG-DATEI.
           PERFORM LESE-NAECHSTE-WOHNUNG.	
           IF NOT (EOF)
      *
      *        weitere Daten lesen und Dateien |ffnen
      *
               PERFORM DATUM-LESEN
               PERFORM OEFFNE-I-KONTO-DATEI
               PERFORM OEFFNE-I-EIGENTUEMER-DATEI
      *
      *        Druckparameter einstellen und Drucker |ffnen
      *
               MOVE SEITE-DIN-A-4-HOCH-WERTE TO SEITE-PARAMETER
               COMPUTE FOOTING-WERT = LINAGE-WERT - 5
               PERFORM OEFFNE-O-LISTE
      *
      *        Summenwerte initialisieren
      *
               MOVE ZERO TO SUMME-KOSTEN
               MOVE ZERO TO SUMME-ZAHLUNGEN
               MOVE ZERO TO SUMME-NACH-ZAHLUNGEN
               MOVE ZERO TO SUMME-RUECK-ZAHLUNGEN
      *
      *        alle Wohnungen im Bereich drucken
      *
               PERFORM KOPF-DRUCK-ABDRUCK
               PERFORM
                    DRUCKE-WOHNUNG-ERGEBNIS
               UNTIL (EOF) OR (DRUCK-ABBRUCH)
      *
      *        Summenwerte drucken
      *
               PERFORM DRUCKE-SUMMEN-ERGEBNISSE
      *
      *        Dateien wieder schliessen
      *
               PERFORM SEITE-VORSCHIEBEN
               PERFORM SCHLIESSE-LISTE
               PERFORM SCHLIESSE-EIGENTUEMER-DATEI
               PERFORM SCHLIESSE-KONTO-DATEI.
      *
      *    Arbeitsdatendatei und Wohnungdatei schliessen
      *    Maske l|schen und zur}ck zum Steuerprogramm
      *
           PERFORM SCHLIESSE-WOHNUNG-DATEI.
           PERFORM SCHLIESSE-ARBEITS-DATEN-DATEI.
           DISPLAY LEERE-ZEILEN-21-BIS-23.
           DISPLAY LEERE-ZEILEN-05-BIS-19.
           MOVE "ABRECHNG.COM" TO CHAIN-NAME.
           PERFORM PROGRAMM-AUFRUF.


       COPY PROGRUF.CPY.

       KOPF-DRUCK-ABDRUCK.
      ********************
      *
      *    Drucken des Listenkopfes
      *
           PERFORM KOPF-DRUCK.
           MOVE SPACES TO ZEILE.
      *
      *    48 = 2 * L{nge ("ABRECHNUNGS - ERGEBNISSE"), Zentrierung
      *
           COMPUTE POS = (ZEILEN-LAENGE - 48) / 2.
           STRING
               "A B R E C H N U N G S  -  E R G E B N I S S E"
                                   DELIMITED SIZE
           INTO ZEILE POINTER POS.
           WRITE ZEILE AFTER 2 LINE.

           MOVE SPACES TO ZEILE.
           MOVE TAB-1 TO POS.
           STRING
               "Wohnung"   DELIMITED SIZE
           INTO ZEILE POINTER POS.
           MOVE TAB-3 TO POS.
           STRING
               "Kosten  Zahlungen  Nachzahlg   Guthaben" DELIMITED SIZE
           INTO ZEILE POINTER POS.
           WRITE ZEILE AFTER 2 LINE.
           MOVE SPACES TO ZEILE.
           MOVE TAB-1 TO POS.
           STRING
               "------------------------------------"
               "---------------------------------"    DELIMITED SIZE
           INTO ZEILE POINTER POS.
           WRITE ZEILE AFTER 2 LINE.


       DRUCKE-WOHNUNG-ERGEBNIS.
      **************************
      *
      *    Ausdrucken des Ergebnisse f}r eine Wohnung,
      *    Aufaddieren auf die Summenwerte
      *
      *    Lesen des Eigent}mers der Wohnung und des Eigent}merkontos
      *
           IF NOT (W-ET-NUMMER = SPACE)
               MOVE W-ET-NUMMER TO EIGENTUEMER-NUMMER
               PERFORM LESE-EIGENTUEMER
               STRING
                    EIGENTUEMER-KONTO-KENNUNG
                    EIGENTUEMER-NUMMER            DELIMITED SIZE
               INTO KONTO-NUMMER
               PERFORM LESE-KONTO
           ELSE
               MOVE FALSE TO EIGENTUEMER-STATUS
               MOVE FALSE TO KONTO-STATUS.
      *
      *    Aufaddieren der Wohnungsergebnisse auf die Summenwerte
      *
           ADD W-JAHRES-KOSTEN TO SUMME-KOSTEN.
           IF (KONTO-VORHANDEN)
               ADD K-SALDO ( LETZTE-PERIODE ) TO SUMME-ZAHLUNGEN.

           IF (W-JAHRES-ERGEBNIS > 0)
               ADD W-JAHRES-ERGEBNIS TO SUMME-RUECK-ZAHLUNGEN
           ELSE
               SUBTRACT W-JAHRES-ERGEBNIS FROM SUMME-NACH-ZAHLUNGEN.
      *
      *    Druckaufbereitung der Werte
      *
           MOVE W-JAHRES-KOSTEN TO D-JAHRES-KOSTEN.
           IF (KONTO-VORHANDEN)
               MOVE K-SALDO (LETZTE-PERIODE) TO D-ZAHLUNGEN
           ELSE
               MOVE ZERO TO D-ZAHLUNGEN.
       
           MOVE ZERO TO D-NACH-ZAHLUNG.
           MOVE ZERO TO D-RUECK-ZAHLUNG.
       
           IF (W-JAHRES-ERGEBNIS < 0)
               MOVE W-JAHRES-ERGEBNIS TO D-NACH-ZAHLUNG
           ELSE IF (W-JAHRES-ERGEBNIS > 0)
               MOVE W-JAHRES-ERGEBNIS TO D-RUECK-ZAHLUNG.
      *
      *    Aufbau und Druck der Zeile
      *
           MOVE SPACES TO ZEILE.
           MOVE TAB-1 TO POS.
      *
      *    vom Eigent}mernamen werden nur 20 Zeichen verwendet,
      *    ist kein Eigent}mer vorhanden, werden "?" eingetragen
      *
           IF NOT (EIGENTUEMER-VORHANDEN)
               MOVE "???," TO D-NAME
           ELSE
               MOVE E-NAME TO D-NAME.
           STRING
               WOHNUNG-NUMMER
               " "                 DELIMITED SIZE
               D-NAME              DELIMITED KOMMA
           INTO ZEILE POINTER POS.
           MOVE TAB-2 TO POS.
           STRING
               D-JAHRES-KOSTEN
               " "
               D-ZAHLUNGEN
               " "
               D-NACH-ZAHLUNG
               " "
               D-RUECK-ZAHLUNG     DELIMITED SIZE
           INTO ZEILE POINTER POS.
           WRITE ZEILE
               AT EOP PERFORM KOPF-DRUCK-ABDRUCK.
      *
      *    Lesen der n{chsten Wohnung
      *
           PERFORM LESE-NAECHSTE-WOHNUNG.


       DRUCKE-SUMMEN-ERGEBNISSE.
      **************************
           MOVE SPACES TO ZEILE.
           MOVE TAB-2 TO POS.
           STRING
               "---------- "
               "---------- "
               "---------- "
               "---------- "  DELIMITED SIZE
           INTO ZEILE POINTER POS.
           WRITE ZEILE.
           MOVE SUMME-KOSTEN TO D-SUMME-KOSTEN.
           MOVE SUMME-ZAHLUNGEN TO D-SUMME-ZAHLUNGEN.
           MOVE SUMME-NACH-ZAHLUNGEN TO D-SUMME-NACH-ZAHLUNGEN.
           MOVE SUMME-RUECK-ZAHLUNGEN TO D-SUMME-RUECK-ZAHLUNGEN.
           MOVE SPACES TO ZEILE.
           MOVE TAB-2 TO POS.
           STRING
               D-SUMME-KOSTEN
               " "
               D-SUMME-ZAHLUNGEN
               " "
               D-SUMME-NACH-ZAHLUNGEN
               " "
               D-SUMME-RUECK-ZAHLUNGEN  DELIMITED SIZE
           INTO ZEILE POINTER POS.
           WRITE ZEILE.



       COPY KOPFDRCK.CPY.

       COPY LESKONTO.CPY.

       COPY LESWOH.CPY.

       COPY LESET.CPY.

       COPY OPADAT.CPY.

       COPY DRUCKER.CPY.

       COPY OPLISTE.CPY.

       COPY QUITTUNG.CPY.

       COPY HARDCOPY.CPY.

       COPY LESDATUM.CPY.

       COPY OPDATUM.CPY.
