{ ----------------------------------------------------------------------------- PROGRAMA : veprmt019 OBJETIVO : Control de Entrega de Factura a Vendedor REALIZADO POR : Tadeo A. Ferreras FECHA : Junio 17, 1993 ----------------------------------------------------------------------------- } GLOBALS "veprgb000.4gl" DEFINE hoy DATE DEFINE aplicar INTEGER DEFINE nomb_cli,nomb_vend CHAR(30) #Variable para almacenar nombre del cliente DEFINE apellido CHAR(15) # Variable para almacenar datos del vendedor ###### Registro que almacena la informacion principal DEFINE busca RECORD fecha DATE, factura INTEGER, fech_factura DATE, tipo_cliente SMALLINT, sec_cliente SMALLINT, sec_vend SMALLINT, monto DECIMAL(12,2), debito DECIMAL(12,2), credito DECIMAL(12,2) END RECORD, total1,total2,total3,total4,balance DECIMAL(12,2) FUNCTION veprmt019() OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 22, PROMPT LINE 23 CALL pantalla() OPEN FORM vefmmt019 FROM "vefmmt019" DISPLAY FORM vefmmt019 DISPLAY "veprmt019" AT 4,3 DISPLAY "Control Entrega Facturas al Vendedor" AT 6,22 MENU "OPCION" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" CLEAR FORM CALL cppcad000() COMMAND "Consultar-modificar" " Busca Registro Cancela Operacion" CLEAR FORM CALL cppcmf000() COMMAND "Salir" CLEAR FORM EXIT MENU END MENU END FUNCTION ###### Funcion para adicinar informacion FUNCTION cppcad000() DEFINE hoy DATE LET hoy = null LET hoy = today LABEL volver: ##### Captura de informacion a imprimir INPUT BY NAME busca.* BEFORE FIELD fecha LET busca.fecha = hoy DISPLAY BY NAME busca.fecha AFTER FIELD fecha IF busca.fecha IS NULL THEN LET busca.fecha = today END IF LET hoy = busca.fecha DISPLAY BY NAME busca.fecha AFTER FIELD factura IF busca.factura IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD factura END IF ######## Chequea que el numero de factura a procesar no exista en la tabla ######## de control de entregar de factura SELECT a.factura FROM vetb00031 a WHERE a.fecha = busca.fecha AND a.factura = busca.factura IF STATUS != NOTFOUND THEN LET numero_msg = 12 CALL msg(numero_msg) NEXT FIELD factura END IF ####### Seleciona informacion referente a la maestra de ventas SELECT UNIQUE a.fecha_factura,a.tipo_cliente,a.sec_cliente, a.sec_vend,a.neto,a.factura INTO busca.fech_factura,busca.tipo_cliente,busca.sec_cliente, busca.sec_vend,busca.monto,busca.factura FROM vetb00002 a WHERE a.factura=busca.factura and a.fecha_factura>"010194" AND a.status_t IS NULL IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD factura END IF ####### Seleciona nombre del cliente SELECT a.nombre INTO nomb_cli FROM vetb00004 a WHERE a.tipo_cliente = busca.tipo_cliente AND a.sec_cliente = busca.sec_cliente AND a.status_t IS NULL DISPLAY BY NAME busca.tipo_cliente,busca.sec_cliente,nomb_cli ####### Seleciona nombre del vendedor SELECT a.nom1_emp,apell1_emp INTO nombre,apellido FROM adtb00003 a WHERE a.num_emp = busca.sec_vend AND a.status_t IS NULL LET nomb_vend = nombre clipped," ",apellido clipped DISPLAY BY NAME busca.sec_vend,nomb_vend ##### Seleciona el balance de la factura requerida para una nota de ##### debito aplicada a la misma SELECT sum(a.valor) INTO total2 FROM cctb00001 a WHERE a.tipo_cliente = busca.tipo_cliente AND a.sec_cliente=busca.sec_cliente AND a.aplica_a=busca.factura AND a.tipo_doc = "ND" AND a.status_t IS NULL IF total2 IS NULL THEN LET total2 = 0 END IF LET busca.debito = total2 ##### Seleciona total pago aplicado a la factura requerida SELECT sum(b.valor+b.monto_desc) INTO total3 FROM cctb00001 b WHERE b.tipo_cliente = busca.tipo_cliente AND b.sec_cliente=busca.sec_cliente AND b.aplica_a=busca.factura AND b.tipo_doc= "PG" AND b.status_t IS NULL ##### Seleciona total de nota de credito aplicado a la factura requerida SELECT sum(b.valor) INTO total4 FROM cctb00001 b WHERE b.tipo_cliente = busca.tipo_cliente AND b.sec_cliente=busca.sec_cliente AND b.aplica_a=busca.factura AND b.tipo_doc = "NC" AND b.status_t IS NULL IF total3 IS NULL THEN LET total3 = 0 END IF IF total4 IS NULL THEN LET total4 = 0 END IF ##### Suma el total de nota de credito y pago para igualarlo a credito ##### aplicado a la factura. LET busca.credito = total3 + total4 ##### balancea la informacion LET balance = busca.monto + busca.debito + busca.credito ##### Para fines de calculo convierte en valor positivo los creditos aplicado LET busca.credito = busca.credito * -1 DISPLAY BY NAME busca.*,balance,nomb_cli,nomb_vend IF balance <= 0 THEN LET numero_msg = 143 CALL msg(numero_msg) NEXT FIELD factura END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF PROMPT "Informacion Correcta [S/N] ..." FOR CHAR opcion LET opcion = UPSHIFT(opcion) #### En caso de que este seguro que la informacion es correcta inserta la #### la informacion. IF opcion = "S" THEN INSERT INTO vetb00031 VALUES (busca.fecha,busca.factura,busca.fech_factura, busca.tipo_cliente,busca.sec_cliente,null, busca.sec_vend,busca.monto,busca.debito, busca.credito,NULL,USER,CURRENT,NULL,NULL) LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM GOTO volver ELSE GOTO volver END IF END FUNCTION ##### Funcion para modificar datos FUNCTION cppcmf000() # WHENEVER ERROR CONTINUE ##### Creando criterio de busqueda CONSTRUCT CRITERIO ON b.fecha,b.factura FROM fecha,factura IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE CLEAR FORM RETURN END IF ###### Selecionando la informacion a consultar y/o modificar LET selec = "SELECT UNIQUE b.fecha,b.factura,b.fech_factura,b.tipo_cliente, ", " b.sec_cliente,b.sec_vend,b.monto,b.debito,b.credito, ", " a.nombre ", "FROM vetb00031 b,vetb00004 a ", "WHERE a.tipo_cliente=b.tipo_cliente AND a.sec_cliente=b.sec_cliente AND ", " b.status_t is null AND a.status_t IS NULL AND ",criterio clipped, " ORDER BY 1,2,4,5" PREPARE buscar FROM selec DECLARE datos SCROLL CURSOR FOR buscar OPEN datos ##### Trae el primer registro selecionado FETCH FIRST datos INTO busca.*,nomb_cli IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF SELECT a.nom1_emp,apell1_emp INTO nombre,apellido FROM adtb00003 a WHERE a.num_emp = busca.sec_vend LET nomb_vend = nombre clipped," ",apellido clipped LET balance = busca.debito - (busca.credito * -1) DISPLAY BY NAME busca.*,balance,nomb_cli,nomb_vend MENU "OPCION" COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO busca.*,nomb_cli IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF SELECT a.nom1_emp,apell1_emp INTO nombre,apellido FROM adtb00003 a WHERE a.num_emp = busca.sec_vend LET nomb_vend = nombre clipped," ",apellido clipped LET balance = busca.debito - (busca.credito * -1) DISPLAY BY NAME busca.*,balance,nomb_cli,nomb_vend ##### Localiza registro anterior al presentado en la pantalla COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO busca.*,nomb_cli IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF SELECT a.nombre INTO nomb_cli FROM vetb00004 a WHERE a.tipo_cliente = busca.tipo_cliente AND a.sec_cliente = busca.sec_cliente AND a.status_t IS NULL SELECT a.nom1_emp,apell1_emp INTO nombre,apellido FROM adtb00003 a WHERE a.num_emp = busca.sec_vend AND a.status_t IS NULL LET nomb_vend = nombre clipped," ",apellido clipped LET balance = busca.debito - (busca.credito * -1) DISPLAY BY NAME busca.*,balance,nomb_cli,nomb_vend COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO busca.*,nomb_cli IF status = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF SELECT a.nom1_emp,apell1_emp INTO nombre,apellido FROM adtb00003 a WHERE a.num_emp = busca.sec_vend LET nomb_vend = nombre clipped," ",apellido clipped LET balance = busca.debito - (busca.credito * -1) DISPLAY BY NAME busca.*,balance,nomb_cli,nomb_vend COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO busca.*,nomb_cli IF status = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF SELECT a.nombre INTO nomb_cli FROM vetb00004 a WHERE a.tipo_cliente = busca.tipo_cliente AND a.sec_cliente = busca.sec_cliente AND a.status_t IS NULL SELECT a.nom1_emp,apell1_emp INTO nombre,apellido FROM adtb00003 a WHERE a.num_emp = busca.sec_vend AND a.status_t IS NULL LET nomb_vend = nombre clipped," ",apellido clipped LET balance = busca.debito - (busca.credito * -1) DISPLAY BY NAME busca.*,balance,nomb_cli,nomb_vend COMMAND "Escoger" " Actualiza Registro Cancela Operacion" ####### Entrada del nuevo valor INPUT BY NAME busca.fecha WITHOUT DEFAULTS AFTER FIELD fecha IF busca.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF ##### Actualiza la informacion requerida UPDATE vetb00031 SET (fecha,us_mod,fech_mod)=(busca.fecha,USER,CURRENT) WHERE @factura = busca.factura LET numero_msg = 13 CALL msg(numero_msg) ###### Elimina un registro en forma logica COMMAND KEY ("N") "aNular" UPDATE vetb00031 set (status_t,us_mod,fech_mod) = ("E",USER,CURRENT) WHERE factura = busca.factura LET numero_msg = 82 CALL msg(numero_msg) COMMAND "Retornar" CLEAR FORM EXIT MENU END MENU END FUNCTION