Files
MBS/PROYECTO/vedir/veprmt019.4gl
T

389 lines
12 KiB
Plaintext

{
-----------------------------------------------------------------------------
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" "<Esc> Adiciona Registro <Delete> Cancela Operacion"
CLEAR FORM
CALL cppcad000()
COMMAND "Consultar-modificar"
"<Esc> Busca Registro <Delete> 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" "<Esc> Actualiza Registro <Delete> 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