Hola soy nuevo en el foro como tambien un principiante en COBOL.
Estoy estudiando el lenguaje hace ya casi un mes y estoy intentando desarrollar este programita como forma de práctica y me he encontrado con varios problemas.
Lo que tiene que hacer el programa:
"Una compania de seguros tiene contratados a n vendedores. Cada vendedor realiza
multiples ventas a la semana. La politica de pagos de la compania es que cada vendedor
recibe un sueldo base más un 10% extra por comisiones de sus ventas. El gerente de la
compania desea saber, por un lado, cuanto dinero deber¡a pagar en la semana a cada
vendedor por concepto de comisiones de las ventas realizadas, y por otro lado, cua¡nto
deberia pagar a cada vendedor como sueldo total (sueldo base + comisiones). Para cada
vendedor ingresar cuanto es su sueldo base, cuantas ventas realizó y cuanto cobró por
cada venta."
Mi código (incompleto):
Código COBOL:
IDENTIFICATION DIVISION.
PROGRAM-ID. PROG-PAGOS-F.
AUTHOR. LUCAS GALEANO.
DATE-WRITTEN. 1/2/2023.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT REG-VENDEDORES ASSIGN TO "REG-MAESTRO.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
SELECT REG-VENTAS ASSIGN TO "REG-VENTAS-MAESTRO.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD REG-VENDEDORES.
01 VENDEDORES PIC 9(14).
FD REG-VENTAS.
01 COB-VENTAS PIC 9(5).
WORKING-STORAGE SECTION.
01 WS-VENDEDORES.
05 WS-EMPLEADO PIC 999.
05 WS-SUELDO-BASE PIC 9(5).
05 WS-CANTIDAD-VENTAS PIC 999.
05 WS-TOTAL-EMPLEADOS PIC 999.
05 WS-COBRO-VENTAS PIC 9(5).
01 WS-TABLAS.
05 WS-REGISTRO-COBROS PIC 9(5)
OCCURS 100 TIMES.
77 CONTADOR PIC 99 VALUE ZEROS.
PROCEDURE DIVISION.
BEGIN-OUTPUT.
OPEN OUTPUT REG-VENDEDORES.
DISPLAY "INGRESE DATOS SOLICITADOS".
DISPLAY "INGRESE CANTIDAD TOTAL DE EMPLEADOS:".
ACCEPT WS-TOTAL-EMPLEADOS.
PERFORM INGRESO-DATOS-EMPLEADOS.
PERFORM VARYING CONTADOR FROM 1 BY 1
UNTIL CONTADOR = WS-TOTAL-EMPLEADOS
WRITE VENDEDORES FROM WS-VENDEDORES
PERFORM INGRESO-DATOS-EMPLEADOS
END-PERFORM.
CLOSE REG-VENDEDORES.
STOP RUN.
INGRESO-DATOS-EMPLEADOS.
DISPLAY "INGRESE NUMERO DE EMPLEADO:".
ACCEPT WS-EMPLEADO.
DISPLAY "INGRESE SUELDO BASE:".
ACCEPT WS-SUELDO-BASE.
DISPLAY "INGRESE CANTIDAD DE VENTAS REALIZADAS:".
ACCEPT WS-CANTIDAD-VENTAS.
PERFORM VARYING WS-CANTIDAD-VENTAS FROM 1 BY 1
UNTIL WS-CANTIDAD-VENTAS = 3
DISPLAY "INGRESE COBRO DE CADA VENTA:"
ACCEPT WS-COBRO-VENTAS
MOVE WS-COBRO-VENTAS TO WS-REGISTRO-COBROS(1)
END-PERFORM.
El problema que es no saber como terminar el perform del parrafo BEGIN-OUTPUT en este caso especial ya que no me escribe los datos de cada empleado solo de uno, probe con contador, con "=Spaces" y el mismo comportamiento.
Solo funciona si ingreso todos los datos de una tira "e.j nnnnMMMMEEEVV, y abajo un accept para ingresar tooodo el registro" y en perform lo condiciono con un "UNTIL...= SPACES", en ese caso si me registra cada empleado pero no tengo claro el por que esto sucede, no puedo entenderlo

, capaz no entiendo los detalles de como escribe cobol en un archivo..
Y bueno ese es mi problema, tambien estaria muy agradecido si podrian darme algun consejo de como realizar el programa, Graciasss
Edit: Asi es como se lee el archivo .dat : 00120000003002 en vez de varios registros.