Cobol en español
MANUALES
TEMATICOS
BASES DE DATOS
COBOL / WINDOWS
COBOL / UNIX
HISTORIA /DOCS
PROGRAMANDO-Dos
TRUCOS
AÑO 2.000
TEORIA POWCOB-3
PROG. POWCOB-3
TEORIA POWCOB-5
PROG. POWCOB-5
OCX-ESCOBOL
Temáticos
TEMARIOCódigos de Error
Ventanas
Palabras Reservadas
Clasificando (Sort)
Tablas
Ficheros (I)
Ficheros (II)
Ficheros (III)

Ficheros (II)

página(s) : 2/3
(1615 palabras totales en este texto)
(36531 Lecturas)   Versión Imprimible



En cuanto a las variables que vamos a utilizar:
Las de estado de cada fichero.
Contadores para la tabla, las líneas y los albaranes leidos.
Las líneas de nuestro listado.

    WORKING-STORAGE SECTION.
    01  ESTADOS.
      02  STA-ALBA PIC XX.
      02  STA-CLIEN PIC XX.
      02  STA-PRODU PIC XX.
    01  CONTA1 PIC 9(6).
    01  CONTALIN PIC 9(6).
    01  CONTA PIC 9(6).
    01  FINFIC PIC X.
    01  TOTAL PIC S9(8)V99.
    01  TOLINEA PIC S9(8)V99.
    01  TOALBA PIC S9(8)V99.

    01  LIN-01.
      02  FILLER PIC X(66) VALUE 'LISTADO DE ALBARANES'.
      02  FILLER PIC X(10) VALUE 'HOJA .. '.
      02  L-HOJA PIC ZZZZ.

    01  LIN-02.
      02  FILLER PIC X(9) VALUE 'ALBARAN'.
      02  FILLER PIC X(12) VALUE ' FECHA'.
      02  FILLER PIC X(46) VALUE 'CLIENTE'.
      02  FILLER PIC X(13) VALUE 'IMPORTE'.

    01  RAYA PIC X(80) VALUE ALL '='.
    01  DETALLE.
      02  L-ALBARAN PIC ZZZ.ZZZBB.
      02  L-FECHA PIC ZZ/ZZ/ZZZZBB.
      02  L-CLIENTE PIC ZZZZB.
      02  L-NOMCLI PIC X(40)B.
      02  L-IMPORTE PIC ZZ.ZZZ.ZZ9,99.

Ahora es el momento de la programación, de que todo salga tal y como hemos planteado.
Voy a ir incluyendo líneas de comentario para que la explicación quede mas detallada. En pocas palabras leemos, actualizamos, listamos, terminamos.

    PROCEDURE DIVISION.
    INICIO.
    Abrimos los ficheros cada uno en su modo adecuado, imprimimos la cabecera del listado e inicializamos las variables.
      OPEN INPUT ALBARANES CLIENTES I-O PRODUCTOS EXTEND IMPRE
      PERFORM CABECERA
      MOVE ' ' TO FINFIC MOVE 0 TO TOTAL CONTA
    Iniciamos el bucle de lectura hasta que se cumpla la condición de fin de fichero y movemos campos del fichero a variables de la línea de impresión.
      PERFORM UNTIL FINFIC = 'S'
        READ ALBARANES NEXT RECORD AT END MOVE 'S' TO FINFIC
        NOT AT END
        MOVE ALB-CODIGO TO L-ALBARAN
        MOVE ALB-FECHA TO L-FECHA
      Nos preparamos para leer clientes, tomamos su nombre y si no existe ponemos una aclaración.
        MOVE ALB-CLIENTE TO CLI-COD
        READ CLIENTES INVALID KEY MOVE 'NO EXISTE EL CLIENTE' TO CLI-NOMBRE
        END-READ
        MOVE CLI-NOMBRE TO L-NOMCLI
      Comenzamos otro bucle interno para acceder a los elementos de la tabla que contiene los productos, la cantidad y el precio del albarán. Además sumamos sus importes para totalizar el albaran. También, si el producto existe le quitamos la cantidad vendida de sus existencias y regrabamos.
        MOVE 0 TO TOALBA
        PERFORM VARYING CONTA1 FROM 1 BY 1 UNTIL CONTA1 > 10
          IF ALB-PRODUCTO (CONTA1) > 0
            MOVE ALB-PRODUCTO TO PRO-CODIGO
            READ PRODUCTO INVALID KEY
              DISPLAY 'PRODUCTO NO ENCONTRADO, NO SE ACTUALIZA'
              NOT INVALID KEY
              SUBTRACT ALB-CANTIDAD FROM PRO-EXISTENCIAS
              REWRITE REGPRODU INVALID KEY DISPLAY 'ERROR'
              END-REWRITE
            END-READ
            COMPUTE TOLINEA ROUNDED = ALB-CANTIDAD * ALB-PRECIO
            COMPUTE TOALBA ROUNDED = TOALBA + TOLINEA
          END-IF
        END-PERFORM
      Al totalizar el albaran imprimimos la linea correspondiente y comprobamos que no hemos llegado al final de la página. El salto lo realizaremos despues de imprimir 54 líneas.
        MOVE TO-ALBA TO L-IMPORTE
        COMPUTE TOTAL ROUNDED = TOTAL + TOALBA
        MOVE 0 TO TOALBA
        WRITE LINEA FROM DETALLE AFTER 1
        ADD 1 TO CONTALIN ADD 1 TO CONTA
        IF CONTALIN > 54 WRITE LINEA FROM RAYA AFTER 1
          PERFORM CABECERA
        END-IF
        END-READ
      END-PERFORM
    Una vez terminado el bucle de lectura. Imprimimos una línea con los totales acumulados, cerramos los ficheros y terminamos el programa.
      WRITE LINEA FROM RAYA AFTER 1
      MOVE CONTA TO L-ALBARAN
      MOVE 0 TO L-FECHA L-CLIENTE
      MOVE 'TOTAL GENERAL' TO L-NOMCLI
      MOVE TOTAL TO L-IMPORTE
      WRITE LINEA FROM DETALLE AFTER 1
      WRITE LINEA FROM RAYA AFTER 1
      CLOSE PRODUCTOS ALBARANES CLIENTES IMPRE
      STOP RUN.

Este párrafo es el que utilizamos para escribir la cabecera, tanto al principio como cada vez que llenamos una página.
    CABECERA.
      MOVE 0 TO CONTALIN ADD 1 TO HOJA MOVE HOJA TO LHOJA
      WRITE LINEA FROM LIN-01 AFTER PAGE
      WRITE LINEA FROM RAYA AFTER 2
      WRITE LINEA FROM LIN-02 AFTER 1
      WRITE LINEA FROM RAYA AFTER 1.
    ...........

(1/3) Anterior |    Inicio de Página    | Siguiente (3/3)
Sitio desarrollado con PHP-Nuke. Todos los Derechos Reservados.
PHP-Nuke es un Software Libre realizado con licencia GNU/GPL.
Página creada en Junio de 1.998, con el proposito de difundir el lenguaje Cobol en nuestra lengua.
Andres Montes [98/11]