Files
MBS/PROYECTO/tedirbk/Copia/teprmt001.4gl
T

752 lines
29 KiB
Plaintext

{
------------------------------------------------------------------
PROGRAMA : TEPRMT001
OBJETIVO : Capturar, Modificar, Eliminar registros de la
Tabla de Depositos.
PROGRAMADOR : Tadeo A. Ferreras
FECHA REALIZACION : Diciembre 2, 1992.
------------------------------------------------------------------
}
GLOBALS "teprgb000.4gl"
DATABASE smarmotech
DEFINE
proced, idx1 INTEGER,
descrip_s CHAR(30),
suma DEC(12, 2)
DEFINE recibos DYNAMIC ARRAY OF RECORD
check1 CHAR(1),
fecha_doc DATE,
documento1 STRING,
tipo_doc CHAR(2),
tipo_cliente1 INT,
sec_cliente1 INT,
nom_cliente VARCHAR(200),
valor1 DEC(12, 2)
END RECORD
DEFINE bdocumento DYNAMIC ARRAY OF RECORD
num_doc3 INT,
fecha3 DATE,
cuenta_no3 CHAR(19),
valor3 DEC(12, 2)
END RECORD
MAIN
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(5) RETURNING impresor
CALL STARTLOG("teprmt001.txt")
DISPLAY usuarios
DISPLAY clave
CONNECT TO "smarmotech" AS "MSSQL" USER usuarios USING clave
CALL teprmt001()
END MAIN
FUNCTION teprmt001()
CLEAR SCREEN
OPTIONS FORM LINE 9, ERROR LINE 23, MESSAGE LINE 24, COMMENT LINE 21
OPEN FORM tefmmt001 FROM "tefmmt001"
DISPLAY FORM tefmmt001
# CALL pantalla()
# CALL ayuda()
DISPLAY "teprmt001" AT 4, 3 ATTRIBUTE(RED)
DISPLAY "Mantenimiento de Depositos" AT 6, 27 ATTRIBUTE(BLACK)
MENU "OPCIONES"
ON ACTION Adicionar
LET INT_FLAG = FALSE
CLEAR FORM
LET INT_FLAG = FALSE
CALL tepcad001()
ON ACTION Consulta_modifica
LET int_flag = FALSE
CALL tepcmf001()
ON ACTION Salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION tepcad001()
# WHENEVER ERROR CONTINUE
## Captura los datos que va a contener el registro
INITIALIZE deposito.* TO NULL
LET deposito.procedencia = NULL
LET descrip1 = NULL
LET descrip2 = NULL
DIALOG ATTRIBUTES(UNBUFFERED, FIELD ORDER FORM)
INPUT BY NAME deposito.*
BEFORE INPUT
LET deposito.fecha = TODAY
SELECT MAX(num_doc) INTO deposito.num_doc FROM tetb00001
IF deposito.num_doc IS NULL THEN
LET deposito.num_doc = 0
END IF
LET deposito.num_doc = deposito.num_doc + 1
DISPLAY BY NAME deposito.num_doc
CALL cuenta()
CALL busca_procedencia()
LET deposito.procedencia = proced
DISPLAY BY NAME deposito.procedencia
NEXT FIELD fecha
AFTER FIELD sucursal
SELECT a.nombre
INTO descrip_s
FROM companias a
WHERE a.cod_comp = deposito.sucursal
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD sucursal
END IF
DISPLAY BY NAME descrip_s
BEFORE FIELD num_doc
AFTER FIELD cuenta_no
IF deposito.cuenta_no = " " OR deposito.cuenta_no IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cuenta_no
END IF
{ LET descrip1 = NULL
SELECT i.descripcion INTO descrip1
FROM cgtb00001 i,cgtb00012 b
WHERE i.cuenta_no = b.cuenta_no AND
i.cuenta_no= deposito.cuenta_no AND
i.status_t is null
IF descrip1 IS NULL THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cuenta_no
END IF
DISPLAY BY NAME descrip1 }
AFTER FIELD procedencia
IF deposito.cta_banco IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cta_banco
END IF
LET descrip2 = NULL
{ IF deposito.procedencia IS NOT NULL THEN
SELECT unique a.descripcion INTO descrip2 FROM tetb00002 a
WHERE a.status_t IS NULL AND a.procedencia=deposito.procedencia
IF descrip2 IS NULL THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD procedencia
END IF
DISPLAY BY NAME descrip2
END IF}
AFTER FIELD fecha
IF deposito.procedencia IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD procedencia
END IF
IF deposito.fecha IS NOT NULL THEN
IF deposito.fecha > TODAY THEN
LET numero_msg = 189
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
LET p_fechas = deposito.fecha
CALL prd(p_fechas, usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
NEXT FIELD fecha
END IF
END IF
AFTER FIELD monto
IF deposito.fecha IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
IF deposito.monto IS NULL OR deposito.monto = 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD monto
END IF
END INPUT
INPUT ARRAY recibos FROM ri.* ATTRIBUTES(WITHOUT DEFAULTS)
BEFORE INPUT
LET selec =
"select a.tipo_doc,a.num_doc,a.tipo_cliente,a.sec_cliente,b.nombre,a.fecha_orig,",
" a.valor ",
" from cctb00001 a,vetb00004 b",
" where a.tipo_cliente=b.tipo_cliente and a.sec_cliente=b.sec_cliente and a.tipo_doc='PC'",
" and a.banco is null ",
" order by a.num_doc"
PREPARE comando FROM selec
DECLARE busca CURSOR FOR comando
LET idx = 1
FOREACH busca
INTO recibos[idx].tipo_doc,
recibos[idx].documento1,
recibos[idx].tipo_cliente1,
recibos[idx].sec_cliente1,
recibos[idx].nom_cliente,
recibos[idx].fecha_doc,
recibos[idx].valor1
LET idx = idx + 1
END FOREACH
IF deposito.cta_banco IS NULL THEN
CALL fgl_winmessage(
"ERROR",
"CUENTA DE BANCO NO PUEDE ESTAR EN BLANCO",
"CUENTA")
NEXT FIELD cta_banco
END IF
IF deposito.sucursal IS NULL THEN
CALL fgl_winmessage(
"ERROR",
"SUCURSAL NO PUEDE ESTAR EN BLANCO",
"SUCURSAL")
NEXT FIELD sucursal
END IF
IF deposito.monto IS NULL THEN
CALL fgl_winmessage(
"ERROR", "MONTO NO PUEDE ESTAR EN BLANCO", "CUENTA")
NEXT FIELD monto
END IF
END INPUT
ON ACTION recibos
INPUT ARRAY documentos FROM record4.* ATTRIBUTES(WITHOUT DEFAULTS)
BEFORE INPUT
LET suma = 0
FOR idx = 1 TO recibos.getLength()
IF recibos[idx].check1 = "S" THEN
IF recibos[idx].documento1 IS NOT NULL THEN
LET documentos[idx].fecha =
recibos[idx].fecha_doc
LET documentos[idx].documento =
recibos[idx].documento1
LET documentos[idx].tipo_cliente =
recibos[idx].tipo_cliente1
LET documentos[idx].sec_cliente =
recibos[idx].sec_cliente1
LET documentos[idx].cliente =
recibos[idx].nom_cliente
LET documentos[idx].valor = recibos[idx].valor1
LET documentos[idx].tipodocumento =
recibos[idx].tipo_doc
LET suma = documentos[idx].valor + suma
END IF
# display documentos[idx].valor
# END for
END IF
END FOR
ON ACTION guardar
BEGIN WORK
IF suma < 0 THEN
LET suma = suma * -1
END IF
IF suma != deposito.monto THEN
CALL fgl_winmessage(
"ERROR",
"EL VALOR SUMADO DE LOS RECIBOS NO PUEDE SER DIFERENTE AL MONTO DEL DEPOSITO",
"STOP")
NEXT FIELD documento
END IF
INSERT INTO tetb00001 VALUES(deposito.*)
UPDATE tetb00001
SET (us_crea, fech_crea)
= (usuarios, getdate())
WHERE @num_doc = deposito.num_doc
FOR idx = 1 TO documentos.getLength()
IF documentos[idx].documento IS NOT NULL THEN
INSERT INTO tetb00008(
num_doc,
tipo_doc,
documento,
fecha,
tipo_cliente,
sec_cliente,
nombre,
valor,
us_crea,
fech_crea)
VALUES(deposito.num_doc,
documentos[idx].tipodocumento,
documentos[idx].documento,
documentos[idx].fecha,
documentos[idx].tipo_cliente,
documentos[idx].sec_cliente,
documentos[idx].cliente,
documentos[idx].valor,
usuarios,
getdate())
UPDATE cctb00001
SET banco = deposito.cta_banco
WHERE num_doc = documentos[idx].documento
AND tipo_doc = documentos[idx].tipodocumento
END IF
END FOR
IF status < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage(
"error",
"NO SE PUDO INSERTAR LA DATA LA DATA",
"STOP")
ELSE
COMMIT WORK
LET numero_msg = 13
CALL msg(numero_msg)
CALL documentos.clear()
CALL recibos.clear()
CLEAR FORM
RETURN
END IF
DISPLAY ARRAY documentos TO record4.*
END INPUT
ON ACTION CANCEL
LET int_flag = FALSE
CLEAR FORM
EXIT DIALOG
END DIALOG
{ INSERT INTO tetb00001 VALUES (deposito.*)
UPDATE tetb00001 SET (us_crea,fech_crea) = (usuarios,getdate())
WHERE @num_doc = deposito.num_doc}
END FUNCTION
FUNCTION tepcmf001()
## Aqui se prepara para la captura del criterio de seleccion
DIALOG ATTRIBUTES(UNBUFFERED, FIELD ORDER FORM)
CONSTRUCT criterio ON a.num_doc, a.cuenta_no FROM num_doc1, cuenta_no1
BEFORE CONSTRUCT
END CONSTRUCT
ON ACTION buscar
DISPLAY "aqui"
LET selec =
" SELECT UNIQUE a.num_doc,a.fecha,a.cuenta_no,a.monto ",
" FROM tetb00001 a ",
" WHERE a.status_t is null AND ",
criterio CLIPPED,
" ORDER BY a.num_doc "
PREPARE busca1 FROM selec
DECLARE datos SCROLL CURSOR WITH HOLD FOR busca1
LET idx = 1
FOREACH datos
INTO bdocumento[idx].num_doc3,
bdocumento[idx].fecha3,
bdocumento[idx].cuenta_no3,
bdocumento[idx].valor3
LET idx = idx + 1
END FOREACH
IF idx = 1 THEN
CALL FGL_winmessage(
"error", "NO HAY REGISTROS CON ESA CONDICION", "STOP")
CALL b_procedencias.clear()
EXIT DIALOG
END IF
DISPLAY ARRAY bdocumento TO bdoc.*
ON ACTION actualiza
LET p_fechas = deposito.fecha
CALL prd(p_fechas, usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
INPUT BY NAME deposito.* WITHOUT DEFAULTS
BEFORE INPUT
SELECT UNIQUE a.num_doc,
a.cuenta_no,
a.cta_banco,
a.procedencia,
a.fecha,
a.monto,
a.us_crea,
fech_crea,
a.us_mod,
a.fech_mod,
a.sucursal
INTO deposito.num_doc,
deposito.cuenta_no,
deposito.cta_banco,
deposito.procedencia,
deposito.fecha,
deposito.monto,
deposito.us_crea,
deposito.fech_crea,
deposito.us_mod,
deposito.fech_mod,
deposito.sucursal
FROM tetb00001 a
WHERE a.num_doc
=
bdocumento[arr_curr()].num_doc3
CALL cuenta()
CALL busca_procedencia()
# LET deposito.procedencia = proced
DISPLAY BY NAME deposito.*
NEXT FIELD fecha
AFTER FIELD sucursal
SELECT a.nombre
INTO descrip_s
FROM companias a
WHERE a.cod_comp = deposito.sucursal
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD sucursal
END IF
DISPLAY BY NAME descrip_s
BEFORE FIELD num_doc
AFTER FIELD cuenta_no
IF deposito.cuenta_no = " "
OR deposito.cuenta_no IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cuenta_no
END IF
LET descrip1 = NULL
SELECT i.descripcion
INTO descrip1
FROM cgtb00001 i, cgtb00012 b
WHERE i.cuenta_no = b.cuenta_no
AND i.cuenta_no = deposito.cuenta_no
AND i.status_t IS NULL
IF descrip1 IS NULL THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD cuenta_no
END IF
DISPLAY BY NAME descrip1
AFTER FIELD procedencia
IF deposito.cta_banco IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD cta_banco
END IF
LET descrip2 = NULL
IF deposito.procedencia IS NOT NULL THEN
SELECT UNIQUE a.descripcion
INTO descrip2
FROM tetb00002 a
WHERE a.status_t IS NULL
AND a.procedencia = deposito.procedencia
IF descrip2 IS NULL THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD procedencia
END IF
DISPLAY BY NAME descrip2
END IF
AFTER FIELD fecha
IF deposito.procedencia IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD procedencia
END IF
IF deposito.fecha IS NOT NULL THEN
IF deposito.fecha > TODAY THEN
LET numero_msg = 189
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
LET p_fechas = deposito.fecha
CALL prd(p_fechas, usuarios) RETURNING bandera
IF bandera = 1 THEN
LET bandera = 0
NEXT FIELD fecha
END IF
END IF
AFTER FIELD monto
IF deposito.monto IS NULL OR deposito.monto = 0 THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD monto
END IF
END INPUT
INPUT ARRAY documentos
FROM record4.*
ATTRIBUTES(WITHOUT DEFAULTS)
BEFORE INPUT
LET selec =
"select a.tipo_doc,a.documento,a.fecha,a.tipo_cliente,a.sec_cliente,a.nombre,",
" a.valor",
" from tetb00008 a",
" where a.num_doc=",
deposito.num_doc
PREPARE busca2 FROM SELEC
DECLARE datos1 SCROLL CURSOR WITH HOLD FOR busca2
LET idx = 1
FOREACH datos1
INTO documentos[idx].tipodocumento,
documentos[idx].documento,
documentos[idx].fecha,
documentos[idx].tipo_cliente,
documentos[idx].sec_cliente,
documentos[idx].cliente,
documentos[idx].valor
LET idx = idx + 1
END FOREACH
ON ACTION guardar
BEGIN WORK
IF suma < 0 THEN
LET suma = suma * -1
END IF
IF suma != deposito.monto THEN
CALL fgl_winmessage(
"ERROR",
"EL VALOR SUMADO DE LOS RECIBOS NO PUEDE SER DIFERENTE AL MONTO DEL DEPOSITO",
"STOP")
NEXT FIELD documento
END IF
UPDATE tetb00001
SET (cuenta_no,
cta_banco,
procedencia,
fecha,
monto,
us_mod,
fech_mod)
= (deposito.cuenta_no,
deposito.cta_banco,
deposito.procedencia,
deposito.fecha,
deposito.monto,
usuarios,
getdate())
WHERE @num_doc = deposito.num_doc
{ DELETE FROM tetb00008
WHERE num_doc=deposito.num_doc
FOR idx=1 TO documentos.getLength()
IF documentos[idx].documento IS NOT NULL THEN
INSERT INTO tetb00008
(num_doc,tipo_doc,documento,fecha,tipo_cliente,sec_cliente,nombre,valor,us_mod,fech_mod)
VALUES(deposito.num_doc,documentos[idx].tipodocumento,documentos[idx].documento,documentos[idx].fecha,documentos[idx].tipo_cliente,
documentos[idx].sec_cliente,documentos[idx].cliente,documentos[idx].valor,usuarios,getdate())
UPDATE cctb00001
SET banco=deposito.cta_banco
WHERE num_doc=documentos[idx].documento AND tipo_doc=documentos[idx].tipodocumento
END IF
END for}
IF status < 0 THEN
ROLLBACK WORK
CALL fgl_winmessage(
"error",
"NO SE PUDO INSERTAR LA DATA LA DATA",
"STOP")
ELSE
COMMIT WORK
LET numero_msg = 13
CALL msg(numero_msg)
CALL documentos.clear()
CALL recibos.clear()
CLEAR FORM
RETURN
END IF
DISPLAY ARRAY documentos TO record4.*
END INPUT
{ UPDATE tetb00001 SET (cuenta_no,cta_banco,procedencia,
fecha,monto,us_mod,fech_mod)
= (deposito.cuenta_no,deposito.cta_banco,
deposito.procedencia,deposito.fecha,
deposito.monto,USER,CURRENT)
WHERE @num_doc = deposito.num_doc
LET numero_msg = 13
}
CALL msg(numero_msg)
ON ACTION eLiminar
# FOR idx=1 TO bdocumento.getLength()
UPDATE tetb00001
SET status_t = "E"
WHERE num_doc = bdocumento[arr_curr()].num_doc3
UPDATE tetb00008
SET status_t = "E"
WHERE num_doc = bdocumento[arr_curr()].num_doc3
LET selec =
"select a.tipo_doc,a.documento,a.fecha,a.tipo_cliente,a.sec_cliente,a.nombre,",
" a.valor",
" from tetb00008 a",
" where a.num_doc=",
deposito.num_doc
PREPARE busca3 FROM SELEC
DECLARE datos2 SCROLL CURSOR WITH HOLD FOR busca3
LET idx = 1
FOREACH datos2
INTO documentos[idx].tipodocumento,
documentos[idx].documento,
documentos[idx].fecha,
documentos[idx].tipo_cliente,
documentos[idx].sec_cliente,
documentos[idx].cliente,
documentos[idx].valor
UPDATE cctb00001
SET banco = NULL
WHERE num_doc = documentos[idx].documento
LET idx = idx + 1
END FOREACH
LET numero_msg = 39
CALL msg(numero_msg)
# END for
END DISPLAY
ON ACTION CANCEL
LET int_flag = FALSE
CLEAR FORM
EXIT DIALOG
END DIALOG
END FUNCTION
FUNCTION busca_cuenta()
# Esta funcion busca el nombre del cuenta y lo despliega en pantalla
# Esta funcion es valida solamente para la consulta-modificacion.
SELECT i.descripcion
INTO descrip1
FROM cgtb00001 i
WHERE i.cuenta_no = deposito.cuenta_no AND i.status_t IS NULL
IF status >= 0 THEN
IF status = NOTFOUND THEN
LET numero_msg = 68
CALL msg(numero_msg)
ELSE
IF status_reg = "E" THEN
LET numero_msg = 67
CALL msg(numero_msg)
END IF
END IF
ELSE
# CALL integridad()
IF bandera = 1 THEN
LET bandera = 0
RETURN
END IF
END IF
END FUNCTION
FUNCTION busca_procedencia()
# Esta funcion busca el nombre de la Procedencia
DEFINE
kid INT,
kdescripcion CHAR(80),
kprocedencia ui.ComboBox
LET kprocedencia = ui.combobox.forName("formonly.procedencia")
DECLARE buscador CURSOR FOR
SELECT i.procedencia, i.descripcion
FROM tetb00002 i
WHERE i.status_t IS NULL
ORDER BY 1
CALL kprocedencia.clear()
FOREACH buscador INTO kid, kdescripcion
CALL kprocedencia.addItem(kid, kdescripcion)
END FOREACH
END FUNCTION
FUNCTION cuenta()
DEFINE
kcuenta VARCHAR(20),
kdescripcion CHAR(80),
cuenta_no ui.ComboBox,
cuentaForm STRING
LET cuentaForm = "formonly.cuenta_no"
LET cuenta_no = ui.combobox.forname(cuentaForm)
DECLARE busca_cuenta CURSOR FOR
SELECT RTRIM(a.cuenta_no),
'(' + RTRIM(a.cuenta_no) + ')' + RTRIM(a.descripcion)
FROM cgtb00001 a
WHERE a.status_t IS NULL AND a.banco = 'SI'
ORDER BY a.descripcion
CALL cuenta_no.clear()
FOREACH busca_cuenta INTO kcuenta, kdescripcion
CALL cuenta_no.additem(kcuenta, kdescripcion)
END FOREACH
END FUNCTION