389 lines
12 KiB
Plaintext
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
|