Marengo97
23 de febrero de 2023, 04:22
Hola familia, aquí mi duda. Estoy realizando un programa como estudio donde registro ventas de productos de una tienda, el programa tiene que generar un reporte de las ventas realizadas para luego utilizarla en otro programa que aun no he hecho, mi duda es la siguiente, para hacerlo mas desafiante se me ocurrio que podria por medio de logica automatizar al programa para que pueda reconocer cuando un producto que se vendio se repite y asi en uno de los campos del archivo indexado (el reporte de ventas) vaya sumando la cantidad que se vendio de ese producto..y no se realmente si es posible algo así y no se como hacerlo o no es posible, estoy entre varias ideas pero que no llegan a ningun lado y apreciaría mucho una ayuda, espero se haya entendio lo que hace el programa y mi duda existencial :lamet:
Entre otras cosas tambien el programa genera un ticket para el cliente, esa parte aun no llegue porque estoy estancado en el reporte.
E aqui el código, cualquier consejo o mejora que pueda aplicar seria genial porque soy un principiante aun en esto :) hasta ahora me han ayudado mucho en esta comunidad y he mejorado gracias a eso!
IDENTIFICATION DIVISION.
PROGRAM-ID. VENTAS-LOCAL.
DATE-WRITTEN. 19/2/2023.
AUTHOR. LUCAS GALEANO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT REPORTE-VENTAS ASSIGN TO "VENTAS.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS ID-PRODUCTO.
SELECT STOCK-MAESTRO ASSIGN TO "STOCK-MAESTRO.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS LLAVE-NUMERO-PRODUCTO.
SELECT TICKET ASSIGN TO "TICKET.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD REPORTE-VENTAS.
01 VENTA.
05 LLAVE-VENTAS.
10 ID-PRODUCTO PIC 9(2).
05 NOMBRE PIC X(20).
05 U-VENDIDAS PIC 9(2).
05 PRECIO-BASE PIC 9(4).
FD STOCK-MAESTRO.
01 LLAVE.
05 LLAVE-NUMERO-PRODUCTO PIC 9(2).
01 REG-PRODUCTOS.
05 NOMBRE-PRO PIC X(20).
05 CANTIDAD-INICIAL PIC 9(3).
05 ENTRADA PIC 9(3).
05 SALIDA PIC 9(3).
05 TOTAL PIC 9(3).
05 VALOR-VENTA PIC 9(5).
FD TICKET.
01 TICKET-DATOS.
05 TABLA OCCURS 100.
10 CANTIDAD PIC 9(2).
10 NOMBRE-PRO-T PIC X(20).
10 PRECIO PIC 9(5).
10 TOTAL-T PIC 9(5).
10 RECIBIMOS PIC 9(5).
10 VUELTO PIC 9(5).
WORKING-STORAGE SECTION.
*>************************************************** *********************
*> * MENU INTERFAZ *
*>************************************************** *********************
01 WS-TITULO.
05 FILLER PIC X(38).
05 FILLER PIC X(4) VALUE "MENU".
05 FILLER PIC X(38).
01 WS-OPC-1.
05 FILLER PIC X(36) VALUE SPACES.
05 FILLER PIC X(17) VALUE "1.REGISTRAR VENTA".
05 FILLER PIC X(36) VALUE SPACES.
01 WS-OPC-2.
05 FILLER PIC X(36) VALUE SPACES.
05 FILLER PIC X(17) VALUE "2.PROCESAR TICKET".
05 FILLER PIC X(36) VALUE SPACES.
01 WS-OPC-3.
05 FILLER PIC X(36) VALUE SPACES.
05 FILLER PIC X(17) VALUE "3.IMPRIMIR TICKET".
05 FILLER PIC X(36) VALUE SPACES.
01 WS-OPC-0.
05 FILLER PIC X(36) VALUE SPACES.
05 FILLER PIC X(7) VALUE "0.SALIR.".
05 FILLER PIC X(36) VALUE SPACES.
*>************************************************** *********************
*>* TICKET *
*>************************************************** *********************
01 WS-COLUMNA1.
05 FILLER PIC X(10) VALUE SPACES.
05 FILLER PIC X(59) VALUE ALL "=".
05 FILLER PIC X(10) VALUE SPACES.
01 WS-COLUMNA2.
05 FILLER PIC X(10) VALUE SPACES.
05 FILLER PIC X(59) VALUE ALL "=".
05 FILLER PIC X(10) VALUE SPACES.
01 WS-LINEA-PRODUCTO.
05 FILLER PIC X(15) VALUE SPACES.
05 WS-CANTIDAD PIC 9(2).
05 WS-NOMBRE-PRO PIC X(20).
05 FILLER PIC X(30) VALUE SPACES.
05 WS-PRECIO PIC 9(5).
05 FILLER PIC X(15) VALUE SPACES.
01 WS-LINEA-TOTAL.
05 FILLER PIC X(37).
05 FILLER PIC X(7) VALUE "TOTAL: ".
05 WS-TOTAL PIC 9(5).
05 FILLER PIC X(37).
01 WS-LINEA-RECIBO.
05 FILLER PIC X(34).
05 FILLER PIC X(11) VALUE "RECIBIMOS: ".
05 WS-RECIBIMOS PIC 9(5).
05 FILLER PIC X(34).
01 WS-LINEA-VUELTO.
05 FILLER PIC X(36).
05 FILLER PIC X(8) VALUE "VUELTO: ".
05 WS-VUELTO PIC 9(5).
05 FILLER PIC X(36).
77 WS-TERMINAR-PROG PIC X(2) VALUE "NO".
77 WS-CONTINUAR PIC X(2) VALUE "SI".
77 WS-REG-EXISTE PIC X VALUE "T".
77 WS-OPC PIC 9.
PROCEDURE DIVISION.
010-MENU.
OPEN OUTPUT REPORTE-VENTAS.
OPEN I-O STOCK-MAESTRO.
OPEN OUTPUT TICKET.
PERFORM UNTIL WS-TERMINAR-PROG = "SI"
DISPLAY WS-TITULO
DISPLAY " "
DISPLAY WS-OPC-1
DISPLAY " "
DISPLAY WS-OPC-2
DISPLAY " "
DISPLAY WS-OPC-3
DISPLAY " "
DISPLAY WS-OPC-0
ACCEPT WS-OPC
EVALUATE WS-OPC
WHEN 1 PERFORM 020-REGISTRAR-VENTA
WHEN 2 PERFORM PROCESAR-TICKET
WHEN 3 PERFORM IMPRIMIR-TICKET
WHEN 0 MOVE "SI" TO WS-TERMINAR-PROG
END-EVALUATE
END-PERFORM.
CLOSE REPORTE-VENTAS.
CLOSE STOCK-MAESTRO.
CLOSE TICKET.
STOP RUN.
020-REGISTRAR-VENTA.
PERFORM UNTIL WS-CONTINUAR = "NO"
DISPLAY "INGRESE ID DEL PRODUCTO: " WITH NO ADVANCING
ACCEPT LLAVE-NUMERO-PRODUCTO
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 " "
DISPLAY "PRODUCTO: " WITH NO ADVANCING
DISPLAY NOMBRE-PRO WITH NO ADVANCING
DISPLAY "STOCK: " WITH NO ADVANCING
DISPLAY TOTAL WITH NO ADVANCING
DISPLAY "PRECIO: " WITH NO ADVANCING
DISPLAY VALOR-VENTA
DISPLAY " "
DISPLAY "INGRESE EL MES ACTUAL: " WITH NO ADVANCING
MOVE LLAVE-NUMERO-PRODUCTO TO ID-PRODUCTO
MOVE NOMBRE-PRO TO NOMBRE
WRITE VENTA
Entre otras cosas tambien el programa genera un ticket para el cliente, esa parte aun no llegue porque estoy estancado en el reporte.
E aqui el código, cualquier consejo o mejora que pueda aplicar seria genial porque soy un principiante aun en esto :) hasta ahora me han ayudado mucho en esta comunidad y he mejorado gracias a eso!
IDENTIFICATION DIVISION.
PROGRAM-ID. VENTAS-LOCAL.
DATE-WRITTEN. 19/2/2023.
AUTHOR. LUCAS GALEANO.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT REPORTE-VENTAS ASSIGN TO "VENTAS.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS ID-PRODUCTO.
SELECT STOCK-MAESTRO ASSIGN TO "STOCK-MAESTRO.DAT"
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS LLAVE-NUMERO-PRODUCTO.
SELECT TICKET ASSIGN TO "TICKET.DAT"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD REPORTE-VENTAS.
01 VENTA.
05 LLAVE-VENTAS.
10 ID-PRODUCTO PIC 9(2).
05 NOMBRE PIC X(20).
05 U-VENDIDAS PIC 9(2).
05 PRECIO-BASE PIC 9(4).
FD STOCK-MAESTRO.
01 LLAVE.
05 LLAVE-NUMERO-PRODUCTO PIC 9(2).
01 REG-PRODUCTOS.
05 NOMBRE-PRO PIC X(20).
05 CANTIDAD-INICIAL PIC 9(3).
05 ENTRADA PIC 9(3).
05 SALIDA PIC 9(3).
05 TOTAL PIC 9(3).
05 VALOR-VENTA PIC 9(5).
FD TICKET.
01 TICKET-DATOS.
05 TABLA OCCURS 100.
10 CANTIDAD PIC 9(2).
10 NOMBRE-PRO-T PIC X(20).
10 PRECIO PIC 9(5).
10 TOTAL-T PIC 9(5).
10 RECIBIMOS PIC 9(5).
10 VUELTO PIC 9(5).
WORKING-STORAGE SECTION.
*>************************************************** *********************
*> * MENU INTERFAZ *
*>************************************************** *********************
01 WS-TITULO.
05 FILLER PIC X(38).
05 FILLER PIC X(4) VALUE "MENU".
05 FILLER PIC X(38).
01 WS-OPC-1.
05 FILLER PIC X(36) VALUE SPACES.
05 FILLER PIC X(17) VALUE "1.REGISTRAR VENTA".
05 FILLER PIC X(36) VALUE SPACES.
01 WS-OPC-2.
05 FILLER PIC X(36) VALUE SPACES.
05 FILLER PIC X(17) VALUE "2.PROCESAR TICKET".
05 FILLER PIC X(36) VALUE SPACES.
01 WS-OPC-3.
05 FILLER PIC X(36) VALUE SPACES.
05 FILLER PIC X(17) VALUE "3.IMPRIMIR TICKET".
05 FILLER PIC X(36) VALUE SPACES.
01 WS-OPC-0.
05 FILLER PIC X(36) VALUE SPACES.
05 FILLER PIC X(7) VALUE "0.SALIR.".
05 FILLER PIC X(36) VALUE SPACES.
*>************************************************** *********************
*>* TICKET *
*>************************************************** *********************
01 WS-COLUMNA1.
05 FILLER PIC X(10) VALUE SPACES.
05 FILLER PIC X(59) VALUE ALL "=".
05 FILLER PIC X(10) VALUE SPACES.
01 WS-COLUMNA2.
05 FILLER PIC X(10) VALUE SPACES.
05 FILLER PIC X(59) VALUE ALL "=".
05 FILLER PIC X(10) VALUE SPACES.
01 WS-LINEA-PRODUCTO.
05 FILLER PIC X(15) VALUE SPACES.
05 WS-CANTIDAD PIC 9(2).
05 WS-NOMBRE-PRO PIC X(20).
05 FILLER PIC X(30) VALUE SPACES.
05 WS-PRECIO PIC 9(5).
05 FILLER PIC X(15) VALUE SPACES.
01 WS-LINEA-TOTAL.
05 FILLER PIC X(37).
05 FILLER PIC X(7) VALUE "TOTAL: ".
05 WS-TOTAL PIC 9(5).
05 FILLER PIC X(37).
01 WS-LINEA-RECIBO.
05 FILLER PIC X(34).
05 FILLER PIC X(11) VALUE "RECIBIMOS: ".
05 WS-RECIBIMOS PIC 9(5).
05 FILLER PIC X(34).
01 WS-LINEA-VUELTO.
05 FILLER PIC X(36).
05 FILLER PIC X(8) VALUE "VUELTO: ".
05 WS-VUELTO PIC 9(5).
05 FILLER PIC X(36).
77 WS-TERMINAR-PROG PIC X(2) VALUE "NO".
77 WS-CONTINUAR PIC X(2) VALUE "SI".
77 WS-REG-EXISTE PIC X VALUE "T".
77 WS-OPC PIC 9.
PROCEDURE DIVISION.
010-MENU.
OPEN OUTPUT REPORTE-VENTAS.
OPEN I-O STOCK-MAESTRO.
OPEN OUTPUT TICKET.
PERFORM UNTIL WS-TERMINAR-PROG = "SI"
DISPLAY WS-TITULO
DISPLAY " "
DISPLAY WS-OPC-1
DISPLAY " "
DISPLAY WS-OPC-2
DISPLAY " "
DISPLAY WS-OPC-3
DISPLAY " "
DISPLAY WS-OPC-0
ACCEPT WS-OPC
EVALUATE WS-OPC
WHEN 1 PERFORM 020-REGISTRAR-VENTA
WHEN 2 PERFORM PROCESAR-TICKET
WHEN 3 PERFORM IMPRIMIR-TICKET
WHEN 0 MOVE "SI" TO WS-TERMINAR-PROG
END-EVALUATE
END-PERFORM.
CLOSE REPORTE-VENTAS.
CLOSE STOCK-MAESTRO.
CLOSE TICKET.
STOP RUN.
020-REGISTRAR-VENTA.
PERFORM UNTIL WS-CONTINUAR = "NO"
DISPLAY "INGRESE ID DEL PRODUCTO: " WITH NO ADVANCING
ACCEPT LLAVE-NUMERO-PRODUCTO
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 " "
DISPLAY "PRODUCTO: " WITH NO ADVANCING
DISPLAY NOMBRE-PRO WITH NO ADVANCING
DISPLAY "STOCK: " WITH NO ADVANCING
DISPLAY TOTAL WITH NO ADVANCING
DISPLAY "PRECIO: " WITH NO ADVANCING
DISPLAY VALOR-VENTA
DISPLAY " "
DISPLAY "INGRESE EL MES ACTUAL: " WITH NO ADVANCING
MOVE LLAVE-NUMERO-PRODUCTO TO ID-PRODUCTO
MOVE NOMBRE-PRO TO NOMBRE
WRITE VENTA