{ -------------------------------------------------------------------------- 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