367 lines
12 KiB
Plaintext
367 lines
12 KiB
Plaintext
{
|
|
--------------------------------------------------------------------------
|
|
PROGRAMA : cpprmt005
|
|
OBJETIVO : Este programa crea tipos de pagos
|
|
REALIZADO POR : Ing. Luis Miguel Soto.
|
|
FECHA : Agosto 16,2024.
|
|
--------------------------------------------------------------------------
|
|
}
|
|
GLOBALS "cpprgb000.4gl"
|
|
DEFINE tipo,tipo1 INT,opt1 CHAR(3)
|
|
DEFINE desc_tipo,obj,us_crea,us_mod CHAR(80)
|
|
DEFINE fech_mod,fech_crea DATE
|
|
|
|
DEFINE cuentas2 ARRAY[300] OF RECORD
|
|
cuenta_no LIKE cgtb00001.cuenta_no,
|
|
descripcion LIKE cgtb00001.descripcion,
|
|
origen LIKE cgtb00001.origen
|
|
END RECORD
|
|
DEFINE tipos DYNAMIC ARRAY OF RECORD
|
|
tipo2 INT,
|
|
descripcion1 CHAR(80),
|
|
obj1 CHAR(80),
|
|
us_mod1 CHAR(50),
|
|
fech_mod1 DATE,
|
|
us_crea1 CHAR(50),
|
|
fech_crea1 date
|
|
END record
|
|
|
|
DEFINE cuentas DYNAMIC ARRAY OF RECORD
|
|
cuenta_no LIKE cgtb00001.cuenta_no,
|
|
descripcion char(80),
|
|
origen CHAR(1)
|
|
END RECORD
|
|
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
|
|
|
|
CONNECT to "sistemas" AS "MSSQL" USER usuarios USING clave
|
|
|
|
CALL cpprmt005()
|
|
END MAIN
|
|
|
|
|
|
FUNCTION cpprmt005()
|
|
|
|
CLEAR SCREEN
|
|
OPEN WINDOW cpfmmt005 AT 4,3 with FORM "cpfmmt005"
|
|
MENU
|
|
ON ACTION adicionar
|
|
CALL cpcad005()
|
|
ON ACTION consultar_modificar
|
|
CALL cpprmf005()
|
|
ON ACTION salir
|
|
EXIT menu
|
|
END menu
|
|
END FUNCTION
|
|
|
|
FUNCTION cpcad005()
|
|
DIALOG ATTRIBUTES (UNBUFFERED,FIELD ORDER FORM )
|
|
|
|
INPUT BY NAME desc_tipo,obj
|
|
BEFORE INPUT
|
|
LET tipo=0
|
|
LET scr_l = scr_line()
|
|
LET idx = arr_curr()
|
|
SELECT MAX (a.tipo)INTO tipo FROM cptb00008 a
|
|
|
|
IF tipo IS NULL OR tipo=0 THEN
|
|
LET tipo=1
|
|
ELSE
|
|
LET tipo=tipo+1
|
|
END IF
|
|
DISPLAY BY NAME tipo
|
|
|
|
END INPUT
|
|
INPUT ARRAY cuentas FROM scuentas.* ATTRIBUTE(WITHOUT DEFAULTS)
|
|
BEFORE INPUT
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
ON ACTION cuenta
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
CALL busca_cuenta()
|
|
LET cuentas[curr].cuenta_no=cuentas2[curr].cuenta_no
|
|
LET cuentas[curr].descripcion=cuentas2[curr].descripcion
|
|
LET cuentas[curr].origen=cuentas2[curr].origen
|
|
DISPLAY cuentas[curr].cuenta_no TO scuentas[scr_l].cuenta_no
|
|
DISPLAY cuentas[curr].descripcion TO scuentas[scr_l].descripcion
|
|
DISPLAY cuentas[curr].origen TO scuentas[scr_l].origen
|
|
|
|
|
|
AFTER FIELD cuenta_no
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
IF cuentas[curr].cuenta_no IS NOT NULL THEN
|
|
|
|
SELECT unique a.descripcion,a.origen
|
|
INTO cuentas[curr].descripcion,cuentas[curr].origen
|
|
FROM cgtb00001 a
|
|
WHERE a.cuenta_no=cuentas[curr].cuenta_no and a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cuenta_no
|
|
END IF
|
|
END IF
|
|
DISPLAY cuentas[curr].cuenta_no TO scuentas[scr_l].cuenta_no
|
|
DISPLAY cuentas[curr].descripcion TO scuentas[scr_l].descripcion
|
|
DISPLAY cuentas[curr].origen TO scuentas[scr_l].origen
|
|
END INPUT
|
|
ON ACTION guardar
|
|
IF desc_tipo IS NULL THEN
|
|
CALL fgl_winmessage("ERROR","LA DESCRIPCION NO PUEDE ESTAR VACIO","STOP")
|
|
NEXT FIELD DESC_TIPO
|
|
END IF
|
|
BEGIN WORK
|
|
INSERT INTO cptb00008
|
|
VALUES(tipo,desc_tipo,obj,null,usuarios,getdate(),NULL,NULL)
|
|
|
|
FOR idx=1 TO cuentas.getLength()
|
|
IF cuentas[idx].cuenta_no IS NOT NULL THEN
|
|
INSERT INTO cptb00009
|
|
VALUES(tipo,cuentas[idx].cuenta_no,cuentas[idx].descripcion,cuentas[idx].origen,NULL,usuarios,getdate(),NULL,null)
|
|
END IF
|
|
END FOR
|
|
|
|
IF status<0 THEN
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("error","NO SE PUDO ACTUALIZAR","STOP")
|
|
ELSE
|
|
COMMIT WORK
|
|
LET numero_msg = 13
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
ON ACTION CANCEL
|
|
LET int_flag = FALSE
|
|
CALL cuentas.clear()
|
|
CLEAR FORM
|
|
EXIT DIALOG
|
|
END DIALOG
|
|
END FUNCTION
|
|
|
|
FUNCTION cpprmf005()
|
|
DIALOG ATTRIBUTES (UNBUFFERED, FIELD ORDER FORM)
|
|
CONSTRUCT criterio ON a.tipo
|
|
FROM tipo1
|
|
BEFORE CONSTRUCT
|
|
END CONSTRUCT
|
|
|
|
ON ACTION buscar
|
|
CALL tipos.clear()
|
|
LET curr=arr_curr()
|
|
LET selec= "select unique a.tipo,a.desc_tipo,a.obj,us_crea,fech_crea,us_mod,fech_mod ",
|
|
"from cptb00008 a ",
|
|
"where a.status_t is null and ", criterio CLIPPED
|
|
PREPARE busca FROM selec
|
|
DECLARE datos SCROLL CURSOR WITH HOLD FOR busca
|
|
LET idx=1
|
|
FOREACH datos INTO tipos[idx].*
|
|
LET idx=idx+1
|
|
END FOREACH
|
|
|
|
IF idx= 1 THEN
|
|
CALL fgl_winmessage("ERROR","NO HAY REGISTROS CON ESA CONDICION","STOP")
|
|
EXIT DIALOG
|
|
END IF
|
|
DISPLAY ARRAY tipos TO stipo.*
|
|
BEFORE ROW
|
|
ON ACTION escoger
|
|
LET curr=arr_curr()
|
|
SELECT tipo FROM cptb00008
|
|
WHERE status_t IS NULL AND tipo=tipos[curr].tipo2
|
|
|
|
IF status!= NOTFOUND THEN
|
|
LET numero_msg=36
|
|
CALL msg(numero_msg)
|
|
ELSE
|
|
CALL actualizar()
|
|
END IF
|
|
ON ACTION borrar
|
|
LET curr=arr_curr()
|
|
LET tipo=tipos[curr].tipo2
|
|
LET OPT1 = FGL_WINQUESTION("WARNING","ESTA SEGURO DE ELIMINAR ESTE REGISTRO?","NO","YES|NO","QUESTION",0)
|
|
|
|
IF OPT1 = "YES" THEN
|
|
|
|
UPDATE cptb00008
|
|
SET status_t="E",
|
|
us_mod=usuarios,
|
|
fech_mod=getdate()
|
|
WHERE @tipo=tipos[curr].tipo2
|
|
UPDATE cptb00009
|
|
SET status_t="E",
|
|
us_mod=usuarios,
|
|
fech_mod=getdate()
|
|
WHERE @tipo=tipos[curr].tipo2
|
|
DISPLAY "tipo",tipos[curr].tipo2
|
|
LET numero_msg = 39
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
END DISPLAY
|
|
ON ACTION CANCEL
|
|
LET int_flag= FALSE
|
|
call tipos.clear()
|
|
CLEAR FORM
|
|
EXIT DIALOG
|
|
|
|
END DIALOG
|
|
END FUNCTION
|
|
|
|
FUNCTION busca_cuenta()
|
|
OPEN WINDOW cons_cuenta AT 10,5 WITH FORM "cpfmwd006" ATTRIBUTE
|
|
(BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST)
|
|
|
|
CONSTRUCT BY NAME criterio ON descripcion
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
LET selec =
|
|
"SELECT cuenta_no,descripcion,origen FROM cgtb00001 ",
|
|
"WHERE ",criterio clipped," AND status_t is null ORDER BY 1"
|
|
|
|
PREPARE comando FROM selec
|
|
DECLARE busca2 CURSOR FOR comando
|
|
OPEN busca2
|
|
|
|
|
|
WHILE STATUS != NOTFOUND
|
|
LET idx = 1
|
|
FETCH busca2 INTO cuentas2[idx].cuenta_no,cuentas[idx].descripcion,cuentas[idx].origen
|
|
IF status = notfound THEN
|
|
EXIT WHILE
|
|
END IF
|
|
|
|
LET idx = idx + 1
|
|
END WHILE
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
|
|
CALL set_count (idx - 1)
|
|
DISPLAY ARRAY cuentas2 TO s_cuentas.*
|
|
LET curr1 = arr_curr()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
|
|
CLOSE WINDOW cons_cuenta
|
|
END FUNCTION
|
|
|
|
FUNCTION actualizar()
|
|
DIALOG ATTRIBUTES (UNBUFFERED, FIELD ORDER FORM)
|
|
INPUT BY NAME desc_tipo,obj
|
|
BEFORE INPUT
|
|
LET tipo=tipos[curr].tipo2
|
|
LET desc_tipo=tipos[curr].descripcion1
|
|
LET obj=tipos[curr].obj1
|
|
LET us_crea=tipos[curr].us_crea1
|
|
LET fech_crea=tipos[curr].fech_crea1
|
|
LET us_mod=tipos[curr].us_mod1
|
|
LET fech_mod=tipos[curr].fech_mod1
|
|
DISPLAY BY NAME tipo,desc_tipo,obj,us_crea,
|
|
fech_crea,us_mod,fech_mod
|
|
END INPUT
|
|
INPUT ARRAY cuentas FROM scuentas.* ATTRIBUTES(WITHOUT DEFAULTS )
|
|
BEFORE INPUT
|
|
LET scr_l=scr_line()
|
|
LET curr = arr_curr()
|
|
LET selec= "select a.cuenta_no,a.descripcion,a.origen ",
|
|
" from cptb00009 a",
|
|
" where a.tipo=",tipos[curr].tipo2,
|
|
" order by a.cuenta_no"
|
|
PREPARE comando1 FROM selec
|
|
DECLARE busca4 CURSOR FOR comando1
|
|
LET idx=1
|
|
FOREACH busca4 INTO cuentas[idx].cuenta_no,
|
|
cuentas[idx].descripcion,cuentas[idx].origen
|
|
|
|
DISPLAY cuentas[idx].cuenta_no TO scuentas[idx].cuenta_no
|
|
DISPLAY cuentas[idx].descripcion TO scuentas[idx].descripcion
|
|
DISPLAY cuentas[idx].origen TO scuentas[idx].origen
|
|
LET idx =idx+1
|
|
END FOREACH
|
|
|
|
ON ACTION cuenta
|
|
LET scr_l=scr_line()
|
|
LET curr = arr_curr()
|
|
CALL busca_cuenta()
|
|
LET cuentas[curr].cuenta_no=cuentas2[curr].cuenta_no
|
|
LET cuentas[curr].descripcion=cuentas2[curr].descripcion
|
|
LET cuentas[curr].origen=cuentas2[curr].origen
|
|
DISPLAY cuentas[curr].cuenta_no TO scuentas[scr_l].cuenta_no
|
|
DISPLAY cuentas[curr].descripcion TO scuentas[scr_l].descripcion
|
|
DISPLAY cuentas[curr].origen TO scuentas[scr_l].origen
|
|
|
|
|
|
AFTER FIELD cuenta_no
|
|
LET scr_l=scr_line()
|
|
LET curr = arr_curr()
|
|
IF cuentas[curr].cuenta_no IS NOT NULL THEN
|
|
LET verdad = "N"
|
|
#CALL otravez()
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
|
|
SELECT unique a.descripcion,a.origen
|
|
INTO cuentas[curr].descripcion,cuentas[curr].origen
|
|
FROM cgtb00001 a
|
|
WHERE a.cuenta_no=cuentas[curr].cuenta_no and a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cuenta_no
|
|
END IF
|
|
END IF
|
|
DISPLAY cuentas[curr].cuenta_no TO scuentas[scr_l].cuenta_no
|
|
DISPLAY cuentas[curr].descripcion TO scuentas[scr_l].descripcion
|
|
DISPLAY cuentas[curr].origen TO scuentas[scr_l].origen
|
|
END INPUT
|
|
ON ACTION guardar
|
|
IF desc_tipo IS NULL THEN
|
|
CALL fgl_winmessage("ERROR","LA DESCRIPCION NO PUEDE ESTAR VACIO","STOP")
|
|
NEXT FIELD DESC_TIPO
|
|
END IF
|
|
BEGIN WORK
|
|
UPDATE cptb00008 SET desc_tipo=desc_tipo,
|
|
obj=obj,
|
|
us_mod=usuarios,
|
|
fech_mod=getdate()
|
|
DELETE FROM cptb00009
|
|
WHERE tipo=tipo
|
|
FOR idx=1 TO cuentas.getLength()
|
|
IF cuentas[idx].cuenta_no IS NOT NULL THEN
|
|
INSERT INTO cptb00009
|
|
VALUES(tipo,cuentas[idx].cuenta_no,cuentas[idx].descripcion,cuentas[idx].origen,NULL,NULL,null,usuarios,getdate())
|
|
END IF
|
|
END FOR
|
|
IF status<0 THEN
|
|
ROLLBACK WORK
|
|
CALL fgl_winmessage("error","NO SE PUDO ACTUALIZAR","STOP")
|
|
ELSE
|
|
COMMIT WORK
|
|
LET numero_msg=13
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
ON ACTION CANCEL
|
|
LET int_flag = FALSE
|
|
CALL cuentas.clear()
|
|
CLEAR FORM
|
|
EXIT dialog
|
|
END DIALOG
|
|
END FUNCTION |