Ver Mensaje Individual
  #1
Antiguo 12 de febrero de 2023, 00:03
Marengo97
Forero Junior
Última Actividad 22.11.2023 00:42
Posts Posts: 26
Likes enviados Enviados: 5
Likes recibidos Recibidos: 0
Predeterminado Agregar,actualizar registros en archivos indexados
0 Inactivo Inactivo

Hola gente recientemente me puse a practicar con archivos indexados, el programa que estoy intentando crear tiene la funcion de agarrar un archivo indexado al que se le desea actualizar y/o insertar nuevos registros
aca el codigo:
Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID.                ACTUALIZAR-STOCK.
  3.        DATE-WRITTEN.              10/2/2023.
  4.        AUTHOR.                    LUCAS GALEANO.
  5.  
  6.        ENVIRONMENT DIVISION.
  7.  
  8.        INPUT-OUTPUT SECTION.
  9.        FILE-CONTROL.
  10.            SELECT STOCK-MAESTRO ASSIGN TO "STOCK-MAESTRO.DAT"
  11.                                   ORGANIZATION IS INDEXED
  12.                                   RECORD KEY IS LLAVE-NUMERO-PRODUCTO
  13.                                   ACCESS MODE IS DYNAMIC.
  14.  
  15.            SELECT ENTRADAS-STOCK ASSIGN TO "STOCK-ENTRADAS.DAT"
  16.                                   ORGANIZATION IS INDEXED
  17.                                   RECORD KEY IS E-LLAVE-NUMERO-ENTRADA
  18.                                   ACCESS MODE IS DYNAMIC.
  19.  
  20.            SELECT STOCK-MAESTRO-ACT ASSIGN TO "STOCK-MAESTRO-ACT.DAT"
  21.                                   ORGANIZATION IS INDEXED
  22.                                   RECORD KEY IS N-LLAVE-NUMERO-ACT
  23.                                   ACCESS MODE IS DYNAMIC.
  24.        DATA DIVISION.
  25.        FILE SECTION.
  26.  
  27.        FD STOCK-MAESTRO.
  28.  
  29.        01 REG-PRODUCTOS.
  30.            88 FIN-ARCHIVO         VALUE HIGH-VALUE.
  31.            05 LLAVE-NUMERO-PRODUCTO PIC 99.
  32.            05 NOMBRE-PRODUCTO     PIC X(12).
  33.            05 CANTIDAD-INICIAL    PIC 9(3).
  34.            05 ENTRADA             PIC 9(3).
  35.            05 SALIDA              PIC 9(3).
  36.            05 TOTAL               PIC 9(3).
  37.            05 VALOR-VENTA         PIC 9(5).
  38.  
  39.        FD ENTRADAS-STOCK.
  40.  
  41.        01 REG-ENTRADA-PRODUCTOS.
  42.            88 FIN-ARCHIVO-ENTRADA VALUE HIGH-VALUE.
  43.            05 E-LLAVE-NUMERO-ENTRADA PIC 99.
  44.            05 E-NOMBRE-PRODUCTO   PIC X(12).
  45.            05 E-CANTIDAD-INICIAL  PIC 9(3).
  46.            05 E-ENTRADA           PIC 9(3).
  47.            05 E-SALIDA            PIC 9(3).
  48.            05 E-TOTAL             PIC 9(3).
  49.            05 E-VALOR-VENTA       PIC 9(5).
  50.  
  51.        FD STOCK-MAESTRO-ACT.
  52.  
  53.        01 REG-PRODUCTOS-ACT.
  54.            88 FIN-ARCHIVO-ACT VALUE HIGH-VALUE.
  55.            05 N-LLAVE-NUMERO-ACT PIC 99.
  56.            05 N-NOMBRE-PRODUCTO   PIC X(12).
  57.            05 N-CANTIDAD-INICIAL  PIC 9(3).
  58.            05 N-ENTRADA           PIC 9(3).
  59.            05 N-SALIDA            PIC 9(3).
  60.            05 N-TOTAL             PIC 9(3).
  61.            05 N-VALOR-VENTA       PIC 9(5).
  62.  
  63.        WORKING-STORAGE SECTION.
  64.        01 BOOLEANO                PIC XX.
  65.            88 WS-VERDADERO        VALUE "SI".
  66.            88 WS-FALSO            VALUE "NO".
  67.  
  68.        PROCEDURE DIVISION.
  69.        005-SALTAR.
  70.            DISPLAY "¿DESEAS VER EN PANTALLA EL STOCK ACTUALIZADO?".
  71.            ACCEPT BOOLEANO.
  72.        IF WS-VERDADERO
  73.            GO TO 045-IMPRIMIR-STOCK-PANTALLA
  74.        ELSE
  75.            EXIT
  76.        END-IF.
  77.  
  78.        010-ABRIR-ARCHIVOS.
  79.            OPEN INPUT STOCK-MAESTRO.
  80.            OPEN OUTPUT ENTRADAS-STOCK.
  81.            OPEN OUTPUT STOCK-MAESTRO-ACT.
  82.  
  83.        020-LEER-ARCHIVO.
  84.            READ STOCK-MAESTRO AT END SET FIN-ARCHIVO TO TRUE
  85.            END-READ.
  86.  
  87.        030-ESCRIBIR-ARCHIVO-ENTRADA.
  88.  
  89.            DISPLAY "INGRESE EL PRODUCTO USANDO LA SIGUIENTE PLANTILLA"
  90.                            " PARA FINALIZAR PRECIONE -ESPACIO-".
  91.            PERFORM 060-INGRESE-PRODUCTO.
  92.            PERFORM UNTIL REG-ENTRADA-PRODUCTOS = SPACES
  93.                WRITE REG-ENTRADA-PRODUCTOS
  94.                PERFORM 060-INGRESE-PRODUCTO
  95.            END-PERFORM.
  96.            CLOSE ENTRADAS-STOCK.
  97.  
  98.        040-ACTUALIZAR-ARCHIVO.
  99.            OPEN INPUT ENTRADAS-STOCK.
  100.            READ ENTRADAS-STOCK AT END SET FIN-ARCHIVO-ENTRADA TO TRUE
  101.            END-READ.
  102.            PERFORM UNTIL FIN-ARCHIVO AND FIN-ARCHIVO-ENTRADA
  103.      *>ESTE IF ACTUALIZA REGISTROS DE SER LA CLAVE LA MISMA DE NO SER ASI NO SE ACTUALIZA.
  104.  
  105.            IF LLAVE-NUMERO-PRODUCTO = E-LLAVE-NUMERO-ENTRADA
  106.                MOVE REG-ENTRADA-PRODUCTOS TO REG-PRODUCTOS-ACT
  107.                WRITE REG-PRODUCTOS-ACT
  108.                READ STOCK-MAESTRO AT END SET FIN-ARCHIVO TO TRUE
  109.                END-READ
  110.                READ ENTRADAS-STOCK AT END SET FIN-ARCHIVO-ENTRADA
  111.                                               TO TRUE
  112.                END-READ
  113.            ELSE
  114.                MOVE REG-PRODUCTOS TO REG-PRODUCTOS-ACT
  115.                WRITE REG-PRODUCTOS-ACT
  116.                READ STOCK-MAESTRO AT END SET FIN-ARCHIVO TO TRUE
  117.                END-READ
  118.            END-IF
  119.      *>ESTE IF AGREGA NUEVOS REGISTROS DE OTRO MODO NO LO HACE.
  120.  
  121.            IF E-LLAVE-NUMERO-ENTRADA < LLAVE-NUMERO-PRODUCTO
  122.                MOVE REG-ENTRADA-PRODUCTOS TO REG-PRODUCTOS-ACT
  123.                WRITE REG-PRODUCTOS-ACT
  124.                READ ENTRADAS-STOCK AT END SET FIN-ARCHIVO-ENTRADA
  125.                                               TO TRUE
  126.                END-READ
  127.            ELSE
  128.                MOVE REG-PRODUCTOS TO REG-PRODUCTOS-ACT
  129.                WRITE REG-PRODUCTOS-ACT
  130.                READ STOCK-MAESTRO AT END SET FIN-ARCHIVO TO TRUE
  131.            END-PERFORM.
  132.            PERFORM 050-CERRAR-ARCHIVOS.
  133.  
  134.        045-IMPRIMIR-STOCK-PANTALLA.
  135.            OPEN INPUT STOCK-MAESTRO-ACT.
  136.            READ STOCK-MAESTRO-ACT AT END SET FIN-ARCHIVO-ACT TO TRUE
  137.            END-READ.
  138.            PERFORM UNTIL FIN-ARCHIVO-ACT
  139.                DISPLAY REG-PRODUCTOS-ACT
  140.                READ STOCK-MAESTRO-ACT AT END SET FIN-ARCHIVO-ACT TO TRUE
  141.            END-READ
  142.            END-PERFORM.
  143.            CLOSE STOCK-MAESTRO-ACT
  144.            STOP RUN.
  145.  
  146.        050-CERRAR-ARCHIVOS.
  147.  
  148.            CLOSE STOCK-MAESTRO.
  149.            CLOSE ENTRADAS-STOCK.
  150.            CLOSE STOCK-MAESTRO-ACT.
  151.  
  152.  
  153.        060-INGRESE-PRODUCTO.
  154.            DISPLAY "NNPPPPPPPPPPPPIIIEEESSSTTT$$$$$".
  155.            ACCEPT REG-ENTRADA-PRODUCTOS.

Los problemas que estoy teniendo pues son de indole variados, tanto para insertar un registro nuevo como para actualizar, y en algunos casos encontre el motivo del problema pero no encuentro una manera optima de lograr lo que quiero lograr...cual es la manera correcta de lograr lo que busco?
Intente separar ambas acciones en dos performs diferentes cerrando los archivos antes de entrear al siguiente perform pero no dio resultados, aparecen otros problemas raros como que ninguna informacion pasa al nuevo archivo y se ve vacio..
Se que el problema es que esta intentando leer mas allá de algun archivo pero no se como arreglarlo, algunos archivos terminan de leerse antes y eso hace que todo se vuelva loco.

Acá dejo algunas capturas de resultados en consola

En esta captura intente actualizar la Key 02
[ATTACH=CONFIG]883[/ATTACH]

En esta captura logre insertar un nuevo registro Key 09
[ATTACH=CONFIG]884[/ATTACH]
[ATTACH=CONFIG]885[/ATTACH]

En esta otra captura se ve que intenté ingresar dos nuevos registros y me tira error en linea 130
[ATTACH=CONFIG]886[/ATTACH]
Imágenes Adjuntas
    
Marengo97 is offline   Responder Con Cita