Files
MBS/PROYECTO/cgdir/cgprmt001.4gl
T

434 lines
12 KiB
Plaintext

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