Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol COBOL - General
COBOL - General Discusiones de temática general sobre el lenguaje COBOL y todo lo relacionado con él.
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] [AYUDA] problemas con file-status Marengo97 GnuCOBOL (OpenCOBOL) 7 30 de julio de 2023 22:26
[Compilador] PowerCobol Status 30 - Problema Joseg PowerCOBOL (ActiveX, v4 - v11) 7 1 de abril de 2022 19:17
[Sintaxis] Problema con scalable drvedia1981 Fujitsu COBOL 3 21 de julio de 2021 00:01
[Herramienta] Urgente: Status 98,9 RM-COBOL joaoalpande RM/COBOL 25 9 de enero de 2021 05:38
[Componente] Problema con ComboBox Josber PowerCOBOL (ActiveX, v4 - v11) 3 3 de marzo de 2015 21:18

Respuesta

  #1
Antiguo 7 de febrero de 2023, 17:18
Marengo97
Forero Junior
Última Actividad 22.11.2023 00:42
Posts Posts: 26
Likes enviados Enviados: 5
Likes recibidos Recibidos: 0
Predeterminado COBOL problema con READ, status = 46
0 Inactivo Inactivo

Hola comunidad, necesito ayuda.
Recibo un error que luce así en consola:
[ATTACH=CONFIG]880[/ATTACH]
Mi pregunta es por que sucede esto y como solucionarlo, claramente hay un error que estoy cometiendo pero no puedo verlo , y cada que vez que ejecuto el programa no importa que haga siempre me repite una linea con valor de " " (espacios) en RECAUDACION DE EMPLEADO..., capaz esta relacionado al error que estoy teniendo.
Y el IMPLICIT CLOSE tambien me tiene atascado.
Ojala puedan ayudarme

Codigo:
Código COBOL:
  1. IDENTIFICATION DIVISION.
  2.        PROGRAM-ID.                PROG-PAGOS-F.
  3.        AUTHOR.                    LUCAS GALEANO.
  4.        DATE-WRITTEN.              1/2/2023.
  5.  
  6.        ENVIRONMENT DIVISION.
  7.        INPUT-OUTPUT SECTION.
  8.        FILE-CONTROL.
  9.            SELECT REG-VENDEDORES ASSIGN TO "REG-MAESTRO.DAT"
  10.                ORGANIZATION IS LINE SEQUENTIAL.
  11.  
  12.            SELECT REG-VENTAS     ASSIGN TO "REG-VENTAS-MAESTRO.DAT"
  13.                ORGANIZATION IS LINE SEQUENTIAL.
  14.  
  15.        DATA DIVISION.
  16.        FILE SECTION.
  17.        FD REG-VENDEDORES.
  18.        01 VENDEDORES.
  19.            88 FIN-DEL-ARCHIVO        VALUE HIGH-VALUE.
  20.            05 EMPLEADO               PIC 9(2).
  21.            05 SUELDO-BASE            PIC 9(5).
  22.            05 CANTIDAD-VENTAS        PIC 9.
  23.            05 TOTAL-RECAUDACION      PIC 9(5) VALUE ZEROS.
  24.            
  25.  
  26.        FD REG-VENTAS.
  27.        01 COBRO-VENTAS.
  28.            05 VENDEDOR              PIC 9(2) OCCURS 100 TIMES.
  29.  
  30.        WORKING-STORAGE SECTION.
  31.        01 WS-VENDEDORES.
  32.            05 WS-EMPLEADO            PIC 9(2).
  33.            05 WS-SUELDO-BASE         PIC 9(5).
  34.            05 WS-CANTIDAD-VENTAS     PIC 9.
  35.            05 WS-TOTAL-RECAUDACION   PIC 9(5).
  36.  
  37.  
  38.        77 WS-PRECIO-PRODUCTO         PIC 9(5).
  39.        77 WS-TOTAL-EMPLEADOS         PIC 99.
  40.        77 WS-CONTADOR                PIC 99 VALUE ZEROS.
  41.        77 WS-INDICE                  PIC 99.
  42.  
  43.  
  44.  
  45.        PROCEDURE DIVISION.
  46.        GO TO BEGIN-INPUT.
  47.        BEGIN-OUTPUT.
  48.            OPEN OUTPUT REG-VENDEDORES.
  49.            OPEN OUTPUT REG-VENTAS.
  50.            DISPLAY "INGRESE DATOS SOLICITADOS".
  51.            DISPLAY " ".
  52.            DISPLAY "INGRESE TOTAL DE EMPLEADOS DE LA COMPANIA".
  53.            ACCEPT WS-TOTAL-EMPLEADOS.
  54.            PERFORM VARYING WS-CONTADOR FROM 01 BY 1
  55.                                  UNTIL WS-CONTADOR > WS-TOTAL-EMPLEADOS
  56.                PERFORM INGRESO-DATOS
  57.                WRITE VENDEDORES FROM WS-VENDEDORES
  58.                WRITE COBRO-VENTAS
  59.                END-WRITE
  60.                MOVE ZEROS TO WS-TOTAL-RECAUDACION
  61.            END-PERFORM.
  62.            DISPLAY COBRO-VENTAS
  63.            DISPLAY VENDEDORES
  64.            CLOSE REG-VENDEDORES.
  65.            CLOSE REG-VENTAS.
  66.          
  67.            
  68.        BEGIN-INPUT.
  69.            OPEN INPUT REG-VENDEDORES.
  70.            OPEN INPUT REG-VENTAS.
  71.            READ REG-VENDEDORES AT END SET FIN-DEL-ARCHIVO TO TRUE
  72.            END-READ
  73.            PERFORM VARYING WS-INDICE FROM 01 BY 1
  74.                              UNTIL VENDEDOR(WS-INDICE) > EMPLEADO
  75.                            
  76.            DISPLAY "RECAUDACION DE LA SEMANA DE EMPLEADO ",EMPLEADO
  77.                                   "ES: ",TOTAL-RECAUDACION
  78.            READ REG-VENDEDORES AT END SET FIN-DEL-ARCHIVO TO TRUE
  79.            END-READ
  80.            END-PERFORM.
  81.            CLOSE REG-VENDEDORES REG-VENTAS.
  82.            STOP RUN.
  83.  
  84.        INGRESO-DATOS.
  85.            DISPLAY "INGRESE NUMERO DE EMPLEADO:".
  86.            ACCEPT WS-EMPLEADO.
  87.            DISPLAY "INGRESE SUELDO BASE:".
  88.            ACCEPT WS-SUELDO-BASE.
  89.            DISPLAY "INGRESE CANTIDAD DE VENTAS REALIZADAS:".
  90.            ACCEPT WS-CANTIDAD-VENTAS.
  91.            INITIALIZE COBRO-VENTAS
  92.               PERFORM VARYING WS-INDICE FROM 01 BY 1 UNTIL
  93.                            WS-INDICE > WS-CANTIDAD-VENTAS
  94.            DISPLAY "PRECIO DEL PRODUCTO:"
  95.            ACCEPT WS-PRECIO-PRODUCTO
  96.            ADD WS-PRECIO-PRODUCTO    TO WS-TOTAL-RECAUDACION
  97.            END-PERFORM.
  98.            MOVE WS-EMPLEADO          TO VENDEDOR(WS-INDICE).
  99.  
  100.  
  101.  
  102.       *Una compañía de seguros tiene contratados a n vendedores. Cada vendedor realiza
  103.      *múltiples ventas a la semana. La política de pagos de la compañía es que cada vendedor
  104.      *recibe un sueldo base más un 10% extra por comisiones de sus ventas. El gerente de la
  105.      *compañía desea saber, por un lado, cuánto dinero deberá pagar en la semana a cada
  106.      *vendedor por concepto de comisiones de las ventas realizadas, y por otro lado, cuánto
  107.      *deberá pagar a cada vendedor como sueldo total (sueldo base + comisiones). Para cada
  108.      *vendedor ingresar cuanto es su sueldo base, cuantas ventas realizó y cuanto cobró por
  109.      *cada venta.

Miniatura de Adjuntos
Pulsar la imagen para la versión amplia
Nombre:  Sin título.png
Vistas: 72
Tamaño:  73,2 KB  
Marengo97 is offline   Responder Con Cita
  #2
Antiguo 7 de febrero de 2023, 17:33
Marengo97
Forero Junior
Última Actividad 22.11.2023 00:42
Posts Posts: 26
Likes enviados Enviados: 5
Likes recibidos Recibidos: 0

EDIT = Ignoren el "Go to begin-imput" eso solo lo utiilizo para testear el parrafo "BEGIN-IMPUT" ignorando el primer parrafo.
Marengo97 is offline   Responder Con Cita
  #3
Antiguo 7 de febrero de 2023, 17:52
Armando
Forero Junior
Última Actividad 27.08.2026 19:00
Posts Posts: 34
Likes enviados Enviados: 5
Likes recibidos Recibidos: 19

Hola, como están?

Por lo que veo estás leyendo 2 veces (2 registros), y poniendo una llave si llega al fin.
Pero no preguntás si llega al fin (FIN-DEL-ARCHIVO)
El error 46 en si es que estás intentando leer más allá del fin del archivo,

espero que te sea útil.
saludos
Armando
Armando is offline   Responder Con Cita
  #4
Antiguo 7 de febrero de 2023, 18:14
Marengo97
Forero Junior
Última Actividad 22.11.2023 00:42
Posts Posts: 26
Likes enviados Enviados: 5
Likes recibidos Recibidos: 0

Honestamente no se como resolverlo, probe quitando el read fuera del Perform Varying...y genera un loop infinito, si saco el de dentro, me repite el status = 46...tambien probe con Set vendedores to high-values y tampoco funciona.
Marengo97 is offline   Responder Con Cita
  #5
Antiguo 7 de febrero de 2023, 18:21
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Marengo97,

Código COBOL:
  1.           PERFORM VARYING WS-INDICE FROM 01 BY 1
  2.                              UNTIL VENDEDOR(WS-INDICE) > EMPLEADO
  3.                              OR FIN-DEL-ARCHIVO



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #6
Antiguo 7 de febrero de 2023, 18:31
Marengo97
Forero Junior
Última Actividad 22.11.2023 00:42
Posts Posts: 26
Likes enviados Enviados: 5
Likes recibidos Recibidos: 0

Eres un genio, muchisimas gracias me funciono!!
Por que funciono? soy principiante en cobol y cosas basicas aun no las entiendo al 100%
Marengo97 is offline   Responder Con Cita
  #7
Antiguo 7 de febrero de 2023, 19:46
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Marengo97, no te preocupes, ya irás cogiéndole el truco

En el bucle te basabas sólo en el contador, como te ha dicho @Armando, el File-Status 46 significa lectura después de haber llegado ya al último registro del fichero.
Con lo cual, si te fijas en la condición, la única manera de que se diera el caso de FS=46 era que la condición VENDEDOR(WS-INDICE) > EMPLEADO no se haya cumplido aún pero que ya hayas llegado al último registro del fichero que estás leyendo.

Controlar siempre el fin del fichero es algo que tienes que tatuarte en la mente para cada programa que crees y/o modifiques.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
Respuesta


Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:56.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.