@Marengo97, la sugerencia de no repetir campos era porque nombre lo puedes leer de stock-maestro.
El problema que veo en la reforma que has hecho es que debes marcar lo que hay que ejecutar despues del else. Eso se hace con end-if.
Código COBOL:
REGISTRAR-VENTA.
PERFORM varying I from 1 by 1 until WS-CONTINUAR
equals "n" or
I > 100
INITIALIZE REG-PRODUCTOS LLAVE WS-VENTA
DISPLAY "INGRESE ID DEL PRODUCTO: " WITH NO ADVANCING
ACCEPT LLAVE-NUMERO-PRODUCTO
MOVE LLAVE-NUMERO-PRODUCTO TO WS-ID-AUX
READ STOCK-MAESTRO
INVALID KEY MOVE "F" TO WS-REG-EXISTE
END-READ
IF WS-REG-EXISTE = "F" THEN
DISPLAY " "
DISPLAY "PRODUCTO FUERA DE STOCK."
ELSE
DISPLAY "INGRESE EL MES ACTUAL: " WITH NO ADVANCING
ACCEPT WS-MES(I)
MOVE LLAVE-NUMERO-PRODUCTO TO WS-ID-PRODUCTO(I)
MOVE NOMBRE-PRO TO WS-NOMBRE(I)
COMPUTE VALOR-VENTA = FUNCTION NUMVAL(VALOR-VENTA)
MOVE VALOR-VENTA TO WS-PRECIO-BASE(I)
SEARCH ALL WS-TABLA
AT END MOVE "T" TO WS-REG-EXISTE
WHEN WS-ID-PRODUCTO(I) = WS-AUX-INDICE
COMPUTE WS-U-VENDIDAS(I) = WS-U-VENDIDAS(I)+ 1
DISPLAY "SE ACTUALIZÓ EL REGISTRO."
DISPLAY WS-TABLA(I)
END-SEARCH
end-if
END-PERFORM.