{ ----------------------------------------------------------------------------- PROGRAMA : CGPRMT001 OBJETIVO : Catalogo de Cuentas Contables. PROGRAMADOR : Ing. Juan Soto FECHA REALIZACION: Septiembre 27, 1993. ------------------------------------------------------------------------------ } GLOBALS "cgprgb000.4gl" DEFINE tree DYNAMIC ARRAY OF RECORD cuenta,descripcion1,aplica_a1 STRING, nivel1,departamento,catalogo, referencia STRING END RECORD DEFINE xaplica_a CHAR(10), xdescripcion, xdescrip_n CHAR (60), xprimern CHAR(10) DEFINE cuenta_ant CHAR(8) DEFINE modifica CHAR(1), balance DECIMAL(12,2) MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" USER usuarios USING clave SELECT a.* INTO p_compania.* FROM companias a CALL cgprmt001() END MAIN FUNCTION cgprmt001() OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 23 OPEN FORM cgfmmt001 FROM "cgfmmt001" DISPLAY FORM cgfmmt001 DISPLAY "cgprmt001" AT 4,3 DISPLAY "Catalogo de Cuentas" AT 6,30 INITIALIZE presupa.* TO NULL CALL despliega_cuenta() MENU ON ACTION Adicionar LET int_flag = false LET modifica = "N" CALL cgpcad() ON ACTION consultar_modificar CALL despliega_cuenta() ON ACTION Salir # REPORTE AVERIA 156948 EXIT MENU END MENU END FUNCTION FUNCTION cgpcad() # Inicializacion de la variable de captura de informacion en blanco # y captura las informaciones CLEAR FORM LABEL vuelve: INITIALIZE catalogo TO NULL INPUT BY NAME catalogo.* BEFORE INPUT CALL ctipo_impuesto() AFTER FIELD descripcion IF catalogo.descripcion is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD descripcion END IF AFTER FIELD retencion IF catalogo.retencion = 'SI' THEN NEXT FIELD codigo_isr ELSE LET catalogo.codigo_isr =NULL EXIT INPUT END IF AFTER FIELD cuenta_no IF catalogo.cuenta_no is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cuenta_no ELSE # Selecciona los datos para saber si existen en el catalogo la cuenta que # se esta digitando SELECT * INTO catalogo.* FROM cgtb00001 WHERE cuenta_no = catalogo.cuenta_no # Chequea que el registro no este eliminado IF catalogo.status_t = "E" THEN LET numero_msg = 36 CALL msg(numero_msg) NEXT FIELD cuenta_no END IF # Chequea si el registro existe IF status != notfound THEN DISPLAY BY NAME catalogo.* LET numero_msg = 3 CALL msg(numero_msg) INITIALIZE catalogo TO NULL NEXT FIELD cuenta_no END IF END IF DISPLAY BY NAME catalogo.* AFTER FIELD cata IF catalogo.cata is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cata END IF AFTER FIELD aplica_a # Chequeo de las cuentas que se sumarizan en otras cuentas IF catalogo.nivel > 1 THEN IF catalogo.aplica_a is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD aplica_a END IF SELECT nivel,descripcion INTO p_nivel ,descrip FROM cgtb00001 WHERE cuenta_no = catalogo.aplica_a and status_t is null IF status = notfound THEN LET numero_msg = 164 CALL msg(numero_msg) NEXT FIELD aplica_a END IF IF p_nivel = 3 THEN LET numero_msg = 165 CALL msg(numero_msg) NEXT FIELD aplica_a END IF DISPLAY BY NAME descrip END IF ON ACTION guardar ATTRIBUTE(TEXT="Salvar",IMAGE="filesave") IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF catalogo.nivel > 1 THEN IF catalogo.aplica_a is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD aplica_a END IF END IF IF catalogo.retencion = "SI" AND catalogo.codigo_isr IS NULL THEN NEXT FIELD codigo_isr END IF # Inserta los datos en el catalogo de cuentas del sistema INSERT INTO cgtb00001 (cuenta_no,descripcion,descrip_ing, analitico,cata,depto,nivel,ref,origen,estado_a, estado_m, aplica_a,us_crea,fech_crea,cuenta_resultado,grupo,tipo_cuenta, selectivo_consumo,retencion,codigo_isr) VALUES (catalogo.cuenta_no,catalogo.descripcion,catalogo.descrip_ing, catalogo.analitico,catalogo.cata,catalogo.depto,catalogo.nivel, catalogo.ref,catalogo.origen,catalogo.estado_a,catalogo.estado_m, catalogo.aplica_a,usuarios,getdate(),catalogo.cuenta_resultado, catalogo.grupo,catalogo.tipo_cuenta,catalogo.selectivo_consumo,catalogo.retencion, catalogo.codigo_isr) LET xaplica_a = catalogo.cuenta_no LET xdescripcion = catalogo.descripcion LET xprimern = catalogo.aplica_a SELECT a.descripcion INTO xdescrip_n FROM cgtb00001 a WHERE a.nivel <= 2 AND a.cuenta_no = xprimern IF catalogo.nivel <= 2 then Insert into cgtb00083 (primern,descrip_n,aplica_a,descripcion) VALUES (xprimern,xdescrip_n,xaplica_a,xdescripcion) END IF LET numero_msg = 1 CALL msg(numero_msg) CLEAR FORM CONTINUE INPUT END INPUT END FUNCTION FUNCTION cgprmod() DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME catalogo.* ATTRIBUTE(WITHOUT DEFAULTS) BEFORE INPUT IF catalogo.status_t = 'E' THEN CALL fgl_winmessage("INFO","CUENTA DESACTIVADA, NO PUEDE ACTUALIZAR","INFO") RETURN END IF CALL ctipo_impuesto() AFTER FIELD retencion IF catalogo.retencion = 'SI' THEN NEXT FIELD codigo_isr ELSE LET catalogo.codigo_isr =NULL DISPLAY BY NAME catalogo.codigo_isr # EXIT INPUT END IF AFTER FIELD descripcion IF catalogo.descripcion is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD descripcion END IF BEFORE FIELD cuenta_no LET cuenta_ant = catalogo.cuenta_no CLIPPED AFTER FIELD cata IF catalogo.cata is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cata END IF AFTER FIELD aplica_a # Chequeo de las cuentas que se sumarizan en otras cuentas IF catalogo.nivel > 1 THEN IF catalogo.aplica_a is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD aplica_a END IF SELECT nivel,descripcion INTO p_nivel,descrip FROM cgtb00001 WHERE @cuenta_no = catalogo.aplica_a and status_t is null IF status = notfound THEN LET numero_msg = 163 CALL msg(numero_msg) NEXT FIELD aplica_a END IF IF p_nivel = 3 THEN LET numero_msg = 165 CALL msg(numero_msg) NEXT FIELD aplica_a END IF DISPLAY BY NAME descrip END IF ON ACTION guardar ATTRIBUTE(TEXT="Salvar", IMAGE="filesave") IF catalogo.nivel > 1 THEN IF catalogo.aplica_a is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD aplica_a END IF END IF IF catalogo.retencion="NO" THEN LET catalogo.codigo_isr = NULL DISPLAY BY NAME catalogo.codigo_isr END IF IF catalogo.retencion = "SI" AND catalogo.codigo_isr IS NULL THEN NEXT FIELD codigo_isr END IF # Actualizacion de la tabla del catalogo de cuentas UPDATE cgtb00001 set (cuenta_no,descripcion,descrip_ing,analitico,cata, depto,nivel,ref,origen,estado_a,estado_m,aplica_a, us_mod,fech_mod,grupo,cuenta_resultado,tipo_cuenta,selectivo_consumo, retencion,codigo_isr) = (catalogo.cuenta_no,catalogo.descripcion, catalogo.descrip_ing,catalogo.analitico, catalogo.cata,catalogo.depto,catalogo.nivel, catalogo.ref,catalogo.origen,catalogo.estado_a, catalogo.estado_m,catalogo.aplica_a,usuarios,getdate(),catalogo.grupo, catalogo.cuenta_resultado,catalogo.tipo_cuenta,catalogo.selectivo_consumo, catalogo.retencion,catalogo.codigo_isr) WHERE @cuenta_no = cuenta_ant LET xaplica_a = catalogo.cuenta_no LET xdescripcion = catalogo.descripcion LET xprimern = catalogo.aplica_a SELECT a.descripcion INTO xdescrip_n FROM cgtb00001 a WHERE a.nivel <= 2 AND a.cuenta_no = xprimern IF catalogo.nivel <= 2 then UPDATE cgtb00083 SET (primern,descrip_n,aplica_a,descripcion)= (xprimern,xdescrip_n,xaplica_a,xdescripcion) WHERE aplica_a = catalogo.cuenta_no END IF LET numero_msg = 13 CALL msg(numero_msg) CALL busca_criterio() CALL desplegar() END INPUT ON ACTION CANCEL ATTRIBUTE(TEXT="Cancelar",IMAGE="quit") LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END DIALOG END FUNCTION # Funcion para buscar los departamentos FUNCTION busca_depto() OPEN WINDOW ws_busca AT 3,2 WITH FORM "cgfmwd001" ATTRIBUTE (BORDER, FORM LINE FIRST + 1,COMMENT LINE LAST -1) CONSTRUCT BY NAME criterio ON adtb00001.nom_dpto LET selec2 = "SELECT departamento,nom_dpto FROM adtb00001 WHERE ", criterio clipped, "ORDER BY 1" PREPARE comando1 FROM selec2 DECLARE busca2 CURSOR FOR comando1 OPEN busca2 LET idx = 1 WHILE status != notfound FETCH busca2 INTO ws[idx].* IF status = notfound THEN EXIT WHILE END IF LET idx = idx + 1 END WHILE CALL set_count(idx-1) DISPLAY ARRAY ws TO s_ws.* LET curr = scr_line() CLOSE WINDOW ws_busca END FUNCTION FUNCTION despliega_cuenta() DEFINE NAME, id, parentId STRING DEFINE p INT DEFINE i INT CONSTRUCT criterio ON a.cuenta_no FROM cuenta AFTER CONSTRUCT IF int_flag THEN LET int_flag = FALSE RETURN END IF EXIT CONSTRUCT END CONSTRUCT CALL busca_criterio() CALL desplegar() END FUNCTION FUNCTION busca_criterio() LET selec = "SELECT a.cuenta_no,a.descripcion,a.aplica_a,a.nivel,a.cata, a.depto,a.ref FROM cgtb00001 a WHERE a.status_t IS NULL AND ",criterio CLIPPED, " ORDER BY a.cuenta_no" PREPARE comandob FROM selec DECLARE busca_cuenta CURSOR FOR comandob LET i = 1 FOREACH busca_cuenta INTO tree[i].* LET i = i +1 END FOREACH IF i = 1 THEN CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS CON ESTA CONDICION","INFO") RETURN END IF END FUNCTION FUNCTION desplegar() DISPLAY ARRAY tree TO arbol.* BEFORE DISPLAY CALL ctipo_impuesto() ON ACTION modificar ATTRIBUTE(TEXT="Modificar", IMAGE="fa-download") LET catalogo.cuenta_no = tree[arr_curr()].cuenta SELECT a.* INTO catalogo.* FROM cgtb00001 a WHERE a.cuenta_no = catalogo.cuenta_no CALL cgprmod() ON ACTION eliminar ATTRIBUTE(TEXT="Desactivar", IMAGE="delete") CALL eliminar() ON ACTION CANCEL ATTRIBUTE(TEXT="Cancelar",IMAGE="quit") LET int_flag = FALSE EXIT PROGRAM AFTER DISPLAY EXIT DISPLAY END DISPLAY END FUNCTION FUNCTION eliminar() LET balance = 0 SELECT SUM(a.debito-a.credito) INTO balance FROM cgtb00004 a WHERE a.cuenta_no = catalogo.cuenta_no IF balance != 0 THEN LET numero_msg = 381 CALL msg(numero_msg) RETURN END IF UPDATE cgtb00001 set status_t = "E" WHERE cuenta_no = catalogo.cuenta_no LET numero_msg = 39 CALL msg(numero_msg) END FUNCTION