1754 lines
55 KiB
Plaintext
1754 lines
55 KiB
Plaintext
{
|
|
-----------------------------------------------------------------------------
|
|
PROGRAMA : CGPRMT04
|
|
OBJETIVO : Mantenimiento Transacciones Entradas de diario
|
|
REALIZADO POR : Ing. Juan F. Soto
|
|
FECHA : Octubre 15, 1993.
|
|
-----------------------------------------------------------------------------
|
|
}
|
|
GLOBALS "cgprgb000.4gl"
|
|
|
|
DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings()
|
|
r_filename STRING, -- filename of Report Design Document including .4rp extension
|
|
r_output STRING, -- output format option
|
|
preview INTEGER -- TRUE/FALSE, to set preview option
|
|
|
|
|
|
DEFINE dias,registros,pcod_sp,numero_entrada SMALLINT,
|
|
secuencia_entrada int,
|
|
xentrada VARCHAR(14),
|
|
nom1_emp,nom2_Emp,apell1_Emp,apell2_emp VARCHAR(30),
|
|
num_doccxp,num_doccxc VARCHAR(25)
|
|
|
|
|
|
#DEFINE hoy DATE
|
|
DEFINE blanco,p_dpto CHAR(1)
|
|
DEFINE u_mes SMALLINT
|
|
DEFINE cuadre DECIMAL(12,2),
|
|
cuadrada BOOLEAN
|
|
|
|
DEFINE nombre_aux CHAR(30)
|
|
DEFINE nivel SMALLINT
|
|
DEFINE t_debito,t_credito DECIMAL(12,2),
|
|
tiempo CHAR(4),
|
|
ultimo SMALLINT,
|
|
numero_ent CHAR(2), container INT
|
|
|
|
DEFINE p_ano CHAR(4)
|
|
DEFINE p_entrada RECORD
|
|
fecha DATE,
|
|
entrada_no VARCHAR(25),
|
|
tipo LIKE cgtb00004.tipo,
|
|
detalles LIKE cgtb00004.detalles,
|
|
detalle_1 LIKE cgtb00004.detalles
|
|
END RECORD
|
|
|
|
DEFINE transac DYNAMIC ARRAY OF RECORD
|
|
cuenta CHAR(8),
|
|
departamento LIKE adtb00001.departamento,
|
|
cod_aux LIKE cgtb00004.cod_aux,
|
|
cod_sec LIKE cgtb00004.cod_sec,
|
|
num_doc LIKE cgtb00004.num_doc,
|
|
debito DECIMAL(12,2),
|
|
credito DECIMAL(12,2)
|
|
END RECORD
|
|
|
|
DEFINE cuentas1 DYNAMIC ARRAY OF RECORD
|
|
cuenta_no LIKE cgtb00001.cuenta_no,
|
|
descripcion LIKE cgtb00001.descripcion,
|
|
nivel LIKE cgtb00001.nivel
|
|
END RECORD,
|
|
str_detalles VARCHAR(100),
|
|
cheques CHAR(2),
|
|
pcuenta_no CHAR(10)
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
CALL ARG_VAL(3) RETURNING impresor
|
|
# LET usuarios = "jsoto"
|
|
# LET clave = "1234"
|
|
CONNECT TO "marmotech" AS "IFMX" USER usuarios USING clave
|
|
CONNECT to "smarmotech" AS "MSSQL" USER usuarios USING clave
|
|
SELECT a.* INTO p_compania.* FROM companias a
|
|
|
|
CALL cgprmt004()
|
|
END MAIN
|
|
|
|
FUNCTION cgprmt004()
|
|
|
|
OPTIONS
|
|
FORM LINE 8,
|
|
ERROR LINE 24,
|
|
COMMENT LINE 22,
|
|
PROMPT LINE 23
|
|
|
|
#CALL pantalla()
|
|
OPEN FORM cgfmmt004 FROM "cgfmmt004"
|
|
DISPLAY FORM cgfmmt004
|
|
DISPLAY "cgprmt004" AT 4,3
|
|
DISPLAY "Entradas de diario" AT 6,31
|
|
|
|
MENU "OPCION"
|
|
ON ACTION nuevo
|
|
|
|
CALL cgpcad004()
|
|
ON ACTION buscar
|
|
|
|
CALL cgpcmf004()
|
|
# ON ACTION entradas
|
|
# LET INT_FLAG = FALSE
|
|
# CALL cheques1()
|
|
ON ACTION salir
|
|
EXIT MENU
|
|
END MENU
|
|
END FUNCTION
|
|
|
|
####### Funcion para agregar una entrada de diario
|
|
FUNCTION cgpcad004()
|
|
DEFINE x RECORD
|
|
id INTEGER,
|
|
ref LIKE cgtb00004.ref,
|
|
cuenta_no LIKE cgtb00004.cuenta_no,
|
|
departamento LIKE cgtb00004.departamento,
|
|
cod_aux LIKE cgtb00004.cod_aux,
|
|
cod_sec LIKE cgtb00004.cod_sec,
|
|
num_doc LIKE cgtb00004.num_doc,
|
|
debito LIKE cgtb00004.debito,
|
|
credito LIKE cgtb00004.credito
|
|
END RECORD
|
|
|
|
DEFINE fecha1,fecha2 DATE,
|
|
|
|
pdescripcion CHAR(30)
|
|
|
|
|
|
|
|
LET hoy = today
|
|
LABEL vuelve:
|
|
IF opt is null or opt = "S" THEN
|
|
LET p_entrada.entrada_no = null
|
|
END IF
|
|
INPUT BY NAME p_entrada.*,preview,cheques WITHOUT DEFAULTS
|
|
BEFORE INPUT
|
|
LET preview = 0
|
|
LET p_entrada.tipo = 1
|
|
DISPLAY BY NAME p_entrada.tipo
|
|
BEFORE FIELD fecha
|
|
LET p_entrada.fecha = hoy
|
|
LET p_ano = YEAR(TODAY) USING "&&&&"
|
|
LET p_entrada.entrada_no='ED. - /'
|
|
LET p_entrada.entrada_no[13,14]=MONTH(TODAY) USING "&&"
|
|
LET p_entrada.entrada_no[15,16]=p_ano[3,4]
|
|
DISPLAY BY NAME p_entrada.fecha,p_entrada.entrada_no
|
|
|
|
|
|
AFTER FIELD fecha
|
|
IF p_entrada.fecha IS null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha
|
|
END IF
|
|
IF p_entrada.fecha > TODAY THEN
|
|
CALL msg(57)
|
|
NEXT FIELD fecha
|
|
END IF
|
|
LET hoy = p_entrada.fecha
|
|
#------------------------------------------------------------------------
|
|
LET p_fechas = p_entrada.fecha #USING "dd/mm/yyyy"
|
|
|
|
CALL prd(p_fechas,usuarios) RETURNING bandera
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
NEXT FIELD fecha
|
|
END IF
|
|
LET p_entrada.fecha = hoy
|
|
LET p_ano = YEAR(p_entrada.fecha) USING "&&&&"
|
|
LET p_entrada.entrada_no='ED. - /'
|
|
LET p_entrada.entrada_no[13,14]=MONTH(p_entrada.fecha) USING "&&"
|
|
LET p_entrada.entrada_no[15,16]=p_ano[3,4]
|
|
DISPLAY BY NAME p_entrada.fecha,p_entrada.entrada_no
|
|
|
|
#------------------------------------------------------------------------
|
|
|
|
AFTER FIELD entrada_no
|
|
{ LET p_entrada.entrada_no = p_entrada.entrada_no clipped
|
|
LET p_entrada.entrada_no[13,14] = MONTH(p_entrada.fecha) USING "&&"
|
|
LET tiempo = p_entrada.entrada_no[15,16]
|
|
LET numero_entrada = p_entrada.entrada_no[1,9]
|
|
|
|
IF LENGTH(p_entrada.entrada_no[4,5]) != 2 THEN
|
|
LET numero_msg = 77
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD entrada_no
|
|
END IF
|
|
SELECT UNIQUE CONVERT(varchar(10),a.fecha,103),a.ref INTO p_entrada.fecha,p_entrada.entrada_no
|
|
FROM cgtb00004 a WHERE a.ref = p_entrada.entrada_no
|
|
|
|
IF status != NOTFOUND THEN
|
|
DISPLAY BY NAME p_entrada.*
|
|
LET numero_msg = 12
|
|
CALL msg(numero_msg)
|
|
DISPLAY "En Proceso Busqueda Ultimo Numero...Espere Por Favor"
|
|
AT 23,1 ATTRIBUTE (BOLD)
|
|
LET numero_ent = p_entrada.entrada_no[4,5]
|
|
|
|
SELECT MAX(a.ref[7,9]) INTO ultimo FROM cgtb00004 a
|
|
WHERE a.ref[4,5] = numero_ent and a.ref[11,14] = tiempo
|
|
|
|
IF ultimo is null THEN
|
|
LET ultimo = 0
|
|
END IF
|
|
LET ultimo = ultimo + 1
|
|
LET p_entrada.entrada_no[7,9] = ultimo using "&&&"
|
|
DISPLAY BY NAME p_entrada.entrada_no
|
|
|
|
NEXT FIELD fecha
|
|
END IF
|
|
|
|
-- ALGORITMO VIEJO
|
|
|
|
{ LET numero_ent = p_entrada.entrada_no[4,5]
|
|
|
|
SELECT MAX(a.ref[7,9]) INTO ultimo FROM cgtb00004 a
|
|
WHERE a.ref[4,5] = numero_ent and a.ref[11,14] = tiempo AND
|
|
a.ref[1,2] = "ED"
|
|
|
|
IF ultimo is null THEN
|
|
LET ultimo = 0
|
|
END IF
|
|
LET ultimo = ultimo + 1
|
|
LET p_entrada.entrada_no[7,9] = ultimo using "&&&"
|
|
DISPLAY BY NAME p_entrada.entrada_no}
|
|
|
|
-- NUEVA FUNCION
|
|
LET numero_ent = p_entrada.entrada_no[4,5]
|
|
CALL controlNumericoED(numero_ent, p_entrada.fecha) RETURNING p_entrada.entrada_no
|
|
LET container = numero_ent
|
|
DISPLAY BY NAME p_entrada.entrada_no
|
|
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
LET dias = TODAY - p_entrada.fecha
|
|
END INPUT
|
|
|
|
IF opt = "YES" or opt is null THEN
|
|
|
|
CALL transac.clear()
|
|
END IF
|
|
IF cheques = "ED" THEN
|
|
SET CONNECTION "IFMX"
|
|
INPUT BY NAME xentrada
|
|
AFTER FIELD xentrada
|
|
IF xentrada IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD xentrada
|
|
END IF
|
|
SELECT DISTINCT a.ref FROM cgtb00004 a WHERE a.ref = xentrada AND a.status_t IS NULL
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(3)
|
|
NEXT FIELD xentrada
|
|
END IF
|
|
AFTER INPUT
|
|
IF INT_FLAG THEN
|
|
CALL msg(2)
|
|
LET INT_FLAG = FALSE
|
|
EXIT INPUT
|
|
ELSE
|
|
DECLARE busca_entrada1 CURSOR FOR
|
|
SELECT A.CUENTA_NO,c.DEPARTAMENTO,SUM(c.DEBITO),SUM(c.CREDITO)
|
|
FROM cgtb00001 a,cgtb00004 c
|
|
WHERE a.cuenta_no = c.cuenta_no and c.status_t is NULL AND
|
|
c.ref = xentrada
|
|
group by A.CUENTA_NO,c.DEPARTAMENTO
|
|
|
|
LET idx = 1
|
|
FOREACH busca_entrada1 INTO transac[idx].cuenta,transac[idx].departamento,
|
|
transac[idx].debito,transac[idx].credito
|
|
LET idx = idx + 1
|
|
|
|
END FOREACH
|
|
END IF
|
|
END INPUT
|
|
END IF
|
|
|
|
IF cheques = "CK" THEN
|
|
SET CONNECTION "IFMX"
|
|
INPUT BY NAME fecha1,fecha2,pcuenta_no
|
|
AFTER FIELD pcuenta_no
|
|
SELECT a.descripcion INTO pdescripcion FROM cgtb00001 a
|
|
WHERE a.cuenta_no = pcuenta_no AND
|
|
a.status_t IS NULL
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(3)
|
|
NEXT FIELD pcuenta_no
|
|
END IF
|
|
DISPLAY BY NAME pdescripcion
|
|
|
|
AFTER INPUT
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
DECLARE busca_cheques CURSOR FOR
|
|
SELECT A.CUENTA_NO,c.DEPARTAMENTO,SUM(c.DEBITO),SUM(c.CREDITO)
|
|
FROM cgtb00001 a,cgtb00004 c
|
|
WHERE a.cuenta_no = c.cuenta_no and c.status_t is NULL
|
|
and c.fecha between fecha1 and fecha2 and detalles=pcuenta_no
|
|
group by A.CUENTA_NO,c.DEPARTAMENTO
|
|
order by a.cuenta_no
|
|
|
|
LET idx = 1
|
|
FOREACH busca_cheques INTO transac[idx].cuenta,transac[idx].departamento,
|
|
transac[idx].debito,transac[idx].credito
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
END IF
|
|
IF cheques = "CP" THEN
|
|
SET CONNECTION "IFMX"
|
|
INPUT BY NAME pcod_sp,fecha1,fecha2
|
|
AFTER FIELD pcod_sp
|
|
IF pcod_sp IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD pcod_sp
|
|
END IF
|
|
AFTER FIELD fecha2
|
|
SELECT COUNT(*) INTO registros FROM cptb00003 a
|
|
WHERE a.fecha BETWEEN fecha1 AND fecha2
|
|
AND a.cod_sp = pcod_sp
|
|
AND a.status_t IS NULL
|
|
|
|
IF registros < 0 OR registros IS null THEN
|
|
CALL msg(3)
|
|
NEXT FIELD fecha1
|
|
END IF
|
|
AFTER INPUT
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
DECLARE busca_cxp CURSOR FOR
|
|
SELECT A.CUENTA_NO,a.DEPARTAMENTO,a.cod_aux,a.cod_sec,a.num_doc,SUM(a.DEBITO),SUM(a.CREDITO)
|
|
FROM cptb00003 a
|
|
WHERE a.status_t is NULL
|
|
AND a.cod_sp = pcod_sp
|
|
and a.fecha between fecha1 and fecha2
|
|
group by A.CUENTA_NO,a.DEPARTAMENTO,a.cod_aux,a.cod_Sec,a.num_doc
|
|
order by a.num_doc DESC,6 DESC,2
|
|
|
|
|
|
LET idx = 1
|
|
FOREACH busca_cxp INTO transac[idx].cuenta,transac[idx].departamento,
|
|
transac[idx].cod_aux,transac[idx].cod_sec,
|
|
transac[idx].num_doc,
|
|
transac[idx].debito,transac[idx].credito
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
|
|
END IF
|
|
|
|
SET CONNECTION "MSSQL"
|
|
## AQUI SE INTRODUCEN LOS DATOS DEL ARREGLO
|
|
LABEL volver:
|
|
INPUT ARRAY transac WITHOUT DEFAULTS FROM s_trx.*
|
|
# Para moverse dentro del arreglo
|
|
ON KEY(CONTROL-P)
|
|
NEXT FIELD cuenta
|
|
|
|
## VENTANA PARA BUSCAR LAS CUENTAS CONTABLES
|
|
ON ACTION bcuenta
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
CALL busca_cuenta()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
IF existe = "N" THEN
|
|
LET existe = "S"
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
LET descrip = cuentas1[curr1].descripcion
|
|
LET transac[curr].cuenta = cuentas1[curr1].cuenta_no
|
|
DISPLAY transac[curr].cuenta to s_trx[scr_l].cuenta
|
|
DISPLAY BY NAME descrip
|
|
|
|
LET verdad = "N"
|
|
#CALL otravez()
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
NEXT FIELD cuenta
|
|
ON ACTION empleados
|
|
LET scr_l=scr_line()
|
|
IF transac[curr].cod_aux = '01' THEN
|
|
CALL busca_empleado1() RETURNING transac[curr].cod_sec,nom1_emp,
|
|
nom2_emp ,apell1_emp,apell2_emp
|
|
|
|
LET nombre_aux = nom1_emp CLIPPED,' ',apell1_emp CLIPPED
|
|
DISPLAY BY NAME nombre_aux
|
|
DISPLAY transac[curr].cod_sec TO s_trx[scr_l].cod_Sec
|
|
DISPLAY transac[curr].cod_sec TO s_trx[scr_l].cod_Sec
|
|
|
|
|
|
END IF
|
|
BEFORE ROW
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
|
|
AFTER FIELD cuenta
|
|
IF transac[curr].cuenta IS NOT NULL THEN
|
|
LET verdad = "N"
|
|
#CALL otravez()
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
|
|
SELECT unique a.descripcion,a.depto,a.nivel,a.ref,a.cata
|
|
INTO descrip,p_dpto,nivel,p_ref,p_cata
|
|
FROM cgtb00001 a
|
|
WHERE a.cuenta_no=transac[curr].cuenta and a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
|
|
IF nivel < 3 THEN
|
|
LET numero_msg = 175
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
|
|
DISPLAY BY NAME descrip
|
|
|
|
IF p_dpto = "S" THEN
|
|
NEXT FIELD departamento
|
|
ELSE
|
|
LET transac[curr].departamento = NULL
|
|
LET nombre = null
|
|
END IF
|
|
IF p_cata = "S" THEN
|
|
NEXT FIELD cod_aux
|
|
ELSE
|
|
LET transac[curr].cod_aux = NULL
|
|
LET transac[curr].cod_sec = null
|
|
END IF
|
|
IF p_ref = "S" THEN
|
|
NEXT FIELD num_doc
|
|
ELSE
|
|
LET transac[curr].num_doc = NULL
|
|
END IF
|
|
NEXT FIELD debito
|
|
END IF
|
|
|
|
AFTER FIELD departamento
|
|
IF transac[curr].cuenta is not null THEN
|
|
IF p_dpto = "S" THEN
|
|
IF transac[curr].departamento IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD departamento
|
|
END IF
|
|
|
|
SELECT a.nom_dpto INTO nombre FROM adtb00001 a
|
|
WHERE a.departamento = transac[curr].departamento and
|
|
a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 134
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD departamento
|
|
END IF
|
|
DISPLAY BY NAME nombre
|
|
END IF
|
|
|
|
DISPLAY BY NAME nombre
|
|
|
|
IF p_cata = "S" THEN
|
|
NEXT FIELD cod_aux
|
|
ELSE
|
|
IF p_ref = "S" THEN
|
|
NEXT FIELD num_doc
|
|
ELSE
|
|
NEXT FIELD debito
|
|
END IF
|
|
END IF
|
|
NEXT FIELD debito
|
|
END IF
|
|
|
|
AFTER FIELD cod_aux
|
|
IF transac[curr].cuenta is not null THEN
|
|
IF p_cata = "S" THEN
|
|
IF transac[curr].cod_aux IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_aux
|
|
END IF
|
|
ELSE
|
|
DISPLAY transac[curr].cod_sec TO s_trx[scr_l].cod_sec
|
|
IF p_ref = "S" THEN
|
|
NEXT FIELD num_doc
|
|
ELSE
|
|
NEXT FIELD debito
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
AFTER FIELD num_doc
|
|
IF transac[curr].cuenta is not null THEN
|
|
IF p_ref = "S" THEN
|
|
IF transac[curr].num_doc IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
AFTER FIELD cod_sec
|
|
IF transac[curr].cuenta is not null THEN
|
|
IF p_cata = "S" THEN
|
|
IF transac[curr].cod_sec IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_sec
|
|
END IF
|
|
|
|
LET existe = "S"
|
|
IF transac[curr].cod_aux != 1 THEN
|
|
|
|
# Busqueda de suplidores
|
|
SELECT a.nom_sp INTO nombre_aux FROM cotb00001 a
|
|
WHERE a.cod_sp = transac[curr].cod_aux and
|
|
a.cod_sp_sec = transac[curr].cod_sec and
|
|
a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET existe = "N"
|
|
END IF
|
|
|
|
# Busqueda de clientes
|
|
IF existe = "N" THEN
|
|
SELECT a.nombre INTO nombre_aux FROM vetb00004 a
|
|
WHERE a.tipo_cliente = transac[curr].cod_aux and
|
|
a.sec_cliente = transac[curr].cod_sec and
|
|
a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 200
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_aux
|
|
END IF
|
|
END IF
|
|
|
|
# Busqueda de nombre del empleado
|
|
IF transac[curr].cod_aux = 1 THEN
|
|
SELECT a.nom1_emp INTO nombre_aux FROM adtb00003 a
|
|
WHERE a.num_emp = transac[curr].cod_sec
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_aux
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
DISPLAY BY NAME nombre_aux
|
|
|
|
IF p_ref = "S" THEN
|
|
NEXT FIELD num_doc
|
|
ELSE
|
|
NEXT FIELD debito
|
|
END IF
|
|
END IF
|
|
|
|
AFTER FIELD debito
|
|
LET t_debito = 0
|
|
|
|
FOR idx = 1 TO arr_count()
|
|
IF transac[idx].debito is null THEN
|
|
LET transac[idx].debito = 0
|
|
END IF
|
|
LET t_debito = transac[idx].debito + t_debito
|
|
END FOR
|
|
DISPLAY BY NAME t_debito
|
|
IF p_dpto = "N" THEN
|
|
LET transac[curr].departamento = NULL
|
|
END IF
|
|
IF p_ref = "N" THEN
|
|
LET transac[curr].num_doc= NULL
|
|
END IF
|
|
NEXT FIELD credito
|
|
AFTER FIELD credito
|
|
LET t_credito = 0
|
|
IF transac[curr].credito is not null THEN
|
|
FOR idx = 1 TO arr_count()
|
|
IF transac[idx].credito is null THEN
|
|
LET transac[idx].credito = 0
|
|
END IF
|
|
LET t_credito = transac[idx].credito + t_credito
|
|
END FOR
|
|
END IF
|
|
DISPLAY BY NAME t_credito
|
|
IF transac[curr].cuenta is not null THEN
|
|
IF transac[curr].debito is null or
|
|
transac[curr].debito = 0 THEN
|
|
IF transac[curr].credito is null or
|
|
transac[curr].credito = 0 THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CLEAR FORM
|
|
RETURN
|
|
END IF
|
|
FOR idx=1 TO transac.getLength()
|
|
IF transac[idx].cuenta IS NOT NULL THEN
|
|
SELECT unique a.descripcion,a.depto,a.nivel,a.ref,a.cata
|
|
INTO descrip,p_dpto,nivel,p_ref,p_cata
|
|
FROM cgtb00001 a
|
|
WHERE a.cuenta_no=transac[idx].cuenta and a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET scr_l=scr_line()
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
DISPLAY transac[idx].cuenta TO s_trx[scr_l].cuenta ATTRIBUTE(RED)
|
|
DISPLAY BY NAME descrip ATTRIBUTE(RED)
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
|
|
IF nivel < 3 THEN
|
|
LET numero_msg = 175
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
|
|
END IF
|
|
END FOR
|
|
IF transac[curr].cuenta is not null THEN
|
|
IF transac[curr].debito is null or
|
|
transac[curr].debito = 0 THEN
|
|
IF transac[curr].credito is null or
|
|
transac[curr].credito = 0 THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
END IF
|
|
END IF
|
|
CALL verificada()
|
|
IF NOT cuadrada THEN
|
|
CONTINUE INPUT
|
|
LET numero_msg = 174
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
|
|
|
|
LET opt = fgl_winquestion("Impresion","Toda la Informacion esta correcta?","YES","YES|No","question",1)
|
|
|
|
IF opt = "YES" THEN
|
|
LET cuadre = 0
|
|
LET t_debito = 0
|
|
LET t_credito = 0
|
|
FOR idx = 1 to transac.getLength()
|
|
IF transac[idx].debito is null THEN
|
|
LET transac[idx].debito = 0
|
|
END IF
|
|
IF transac[idx].credito is null THEN
|
|
LET transac[idx].credito = 0
|
|
END IF
|
|
LET t_debito = transac[idx].debito + t_debito
|
|
LET t_credito = transac[idx].credito + t_credito
|
|
LET cuadre = cuadre + (transac[idx].debito - transac[idx].credito)
|
|
END FOR
|
|
DISPLAY BY NAME t_credito
|
|
DISPLAY BY NAME t_debito
|
|
|
|
# Control para que el usuario no digite las cuentas1 en blanco
|
|
LET blanco = "S"
|
|
FOR idx = 1 TO arr_count()
|
|
IF transac[idx].cuenta is not null THEN
|
|
LET blanco = "N"
|
|
END IF
|
|
END FOR
|
|
IF blanco = "S" THEN
|
|
LET numero_msg = 84
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
#------------------------------------------------------------------------------
|
|
IF cuadre != 0 THEN
|
|
LET numero_msg = 174
|
|
CALL msg(numero_msg)
|
|
GOTO volver
|
|
END IF
|
|
#CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrillas_on,negrillas_of,doble_on,doble_off,
|
|
# comp_on,comp_off,doce,normal,archivo
|
|
#CALL seleccionarSalida() RETURNING r_output
|
|
# BUSCA SECUENCIA ENTRADA
|
|
{ LET p_entrada.entrada_no = p_entrada.entrada_no clipped
|
|
LET p_entrada.entrada_no[13,14] = MONTH(p_entrada.fecha) USING "&&"
|
|
LET tiempo = p_entrada.entrada_no[13,16]
|
|
LET numero_entrada = p_entrada.entrada_no[1,11]
|
|
|
|
SELECT UNIQUE CONVERT(varchar(10),a.fecha,103),a.ref INTO p_entrada.fecha,p_entrada.entrada_no
|
|
FROM cgtb00004 a WHERE a.ref = p_entrada.entrada_no
|
|
|
|
IF status != NOTFOUND THEN
|
|
DISPLAY BY NAME p_entrada.*
|
|
LET numero_msg = 12
|
|
CALL msg(numero_msg)
|
|
DISPLAY "En Proceso Busqueda Ultimo Numero...Espere Por Favor"
|
|
AT 23,1 ATTRIBUTE (BOLD)
|
|
LET numero_ent = p_entrada.entrada_no[4,5]
|
|
|
|
SELECT MAX(a.ref[7,9]) INTO ultimo FROM cgtb00004 a
|
|
WHERE a.ref[4,5] = numero_ent and a.ref[11,14] = tiempo
|
|
|
|
IF ultimo is null THEN
|
|
LET ultimo = 0
|
|
END IF
|
|
LET ultimo = ultimo + 1
|
|
LET p_entrada.entrada_no[7,9] = ultimo using "&&&"
|
|
DISPLAY BY NAME p_entrada.entrada_no
|
|
|
|
|
|
END IF
|
|
|
|
-- ALGORITMO VIEJO
|
|
{ LET numero_ent = p_entrada.entrada_no[4,5]
|
|
|
|
SELECT MAX(a.ref[7,9]) INTO ultimo FROM cgtb00004 a
|
|
WHERE a.ref[4,5] = numero_ent and a.ref[11,14] = tiempo AND
|
|
a.ref[1,2] = "ED"
|
|
|
|
IF ultimo is null THEN
|
|
LET ultimo = 0
|
|
END IF
|
|
LET ultimo = ultimo + 1
|
|
LET p_entrada.entrada_no[7,9] = ultimo using "&&&"
|
|
DISPLAY BY NAME p_entrada.entrada_no
|
|
|
|
DISPLAY "entrada ",p_Entrada.entrada_no
|
|
|
|
|
|
-- NUEVA FUNCION
|
|
LET numero_ent = p_entrada.entrada_no[4,5]
|
|
CALL controlNumericoED(numero_ent, p_entrada.fecha) RETURNING p_entrada.entrada_no
|
|
DISPLAY BY NAME p_entrada.entrada_no }
|
|
|
|
LET r_filename ="cgprmt004.4rp"
|
|
LET r_output = "SVG"
|
|
#LET preview = 1
|
|
|
|
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
|
|
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
|
|
CALL fgl_report_selectDevice(r_output) -- changing default
|
|
IF preview = 0 THEN
|
|
CALL fgl_report_selectPreview(1) -- changing default
|
|
CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter")
|
|
ELSE
|
|
CALL fgl_report_selectPreview(preview)
|
|
END if
|
|
|
|
LET handler = fgl_report_commitCurrentSettings() -- commit changes
|
|
ELSE
|
|
EXIT PROGRAM
|
|
END IF
|
|
--run the report
|
|
IF handler IS NOT NULL THEN -- report engine was configured ok
|
|
|
|
START REPORT imp_entrada4 TO XML HANDLER HANDLER
|
|
BEGIN WORK
|
|
# INFORMACIONES GENERALES DE LA INTRADA AL DIARIO
|
|
INSERT INTO cgtb00006 (fecha ,numero_entrada,secuencia_entrada,mes,periodo,
|
|
ref,detalle,informacion,cod_sp,fecha_inicial,fecha_final,
|
|
cuenta_no,us_crea,fech_crea)
|
|
VALUES
|
|
(p_entrada.fecha,numero_entrada,ultimo,u_mes,tiempo,p_entrada.entrada_no,
|
|
str_detalles,cheques,pcod_sp ,fecha1,fecha2,pcuenta_no,usuarios,getdate())
|
|
|
|
|
|
FOR idx = 1 to arr_count()
|
|
IF transac[idx].cuenta is not null THEN
|
|
IF transac[idx].debito is null THEN
|
|
LET transac[idx].debito = 0
|
|
END IF
|
|
IF transac[idx].credito is null THEN
|
|
LET transac[idx].credito = 0
|
|
END IF
|
|
INSERT INTO cgtb00004 (fecha,tipo,ref,cuenta_no,departamento,num_doc,cod_aux,cod_Sec,detalle_1,detalle_2,debito,credito,
|
|
us_crea,fech_crea)
|
|
values (p_entrada.fecha,p_entrada.tipo,
|
|
p_entrada.entrada_no,transac[idx].cuenta,
|
|
transac[idx].departamento,transac[idx].num_doc,
|
|
transac[idx].cod_aux,transac[idx].cod_sec,
|
|
p_entrada.detalles,p_entrada.detalle_1,
|
|
transac[idx].debito,transac[idx].credito,
|
|
usuarios,GETDATE())
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
CALL msg(1663)
|
|
RETURN
|
|
END IF
|
|
|
|
LET x.id = idx
|
|
LET x.ref = p_entrada.entrada_no
|
|
LET x.cuenta_no = transac[idx].cuenta
|
|
LET x.departamento = transac[idx].departamento
|
|
LET x.cod_aux = transac[idx].cod_aux
|
|
LET x.cod_sec = transac[idx].cod_sec
|
|
LET x.num_doc = transac[idx].num_doc
|
|
LET x.debito = transac[idx].debito
|
|
LET x.credito = transac[idx].credito
|
|
OUTPUT TO REPORT imp_entrada4(x.*)
|
|
END IF
|
|
END FOR
|
|
DISPLAY "entrada a actualizar: ", container
|
|
UPDATE cgtb00011
|
|
SET referencia = referencia + 1,
|
|
us_mod = usuarios,
|
|
fech_mod = getdate()
|
|
WHERE entrada_no = container
|
|
COMMIT WORK
|
|
FINISH REPORT imp_entrada4
|
|
|
|
END IF
|
|
CALL integridad()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
|
|
LET numero_msg = 1
|
|
CALL msg(numero_msg)
|
|
CLEAR FORM
|
|
END IF
|
|
CLEAR FORM
|
|
CALL transac.clear()
|
|
GOTO vuelve
|
|
|
|
END FUNCTION
|
|
|
|
## Funcion para consultar/modificar una entrada de diario
|
|
FUNCTION cgpcmf004()
|
|
|
|
DEFINE x RECORD
|
|
id INTEGER,
|
|
ref LIKE cgtb00004.ref,
|
|
cuenta_no LIKE cgtb00004.cuenta_no,
|
|
departamento LIKE cgtb00004.departamento,
|
|
cod_aux LIKE cgtb00004.cod_aux,
|
|
cod_sec LIKE cgtb00004.cod_sec,
|
|
num_doc LIKE cgtb00004.num_doc,
|
|
debito LIKE cgtb00004.debito,
|
|
credito LIKE cgtb00004.credito
|
|
END RECORD
|
|
DEFINE usuario RECORD
|
|
us_crea CHAR(9),
|
|
fech_crea LIKE cgtb00004.fech_crea
|
|
END RECORD
|
|
|
|
# WHENEVER ERROR CONTINUE
|
|
|
|
## SE PREPARA EL CRITERIO PARA CONSULTAR/MODIFICAR UN REGISTRO
|
|
CONSTRUCT CRITERIO ON a.fecha,a.ref FROM fecha,entrada_no
|
|
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CLEAR FORM
|
|
RETURN
|
|
END IF
|
|
|
|
LET selec = "SELECT DISTINCT CONVERT(char(10),a.fecha,103),a.ref,a.tipo,a.detalle_1,a.detalle_2 ",
|
|
|
|
"FROM cgtb00004 a ",
|
|
"WHERE ",criterio clipped,
|
|
" AND a.tipo IN(1,3) ORDER BY CONVERT(char(10),a.fecha,103),a.ref"
|
|
DISPLAY "seleccion: ",selec
|
|
PREPARE busca FROM selec
|
|
DECLARE datos SCROLL CURSOR FOR busca
|
|
OPEN datos
|
|
|
|
FETCH FIRST datos INTO p_entrada.*
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
CALL informacionAux()
|
|
DISPLAY BY NAME p_entrada.*
|
|
|
|
MENU "OPCION"
|
|
COMMAND "Siguiente"
|
|
"Presenta en pantalla el proximo registro encontrado"
|
|
FETCH NEXT datos INTO p_entrada.*
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 4
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
CALL informacionAux()
|
|
DISPLAY BY NAME p_entrada.*
|
|
|
|
COMMAND "Anterior"
|
|
"Presenta en pantalla el registro anterior encontrado"
|
|
FETCH PREVIOUS datos INTO p_entrada.*
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 5
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
CALL informacionAux()
|
|
DISPLAY BY NAME p_entrada.*
|
|
|
|
COMMAND "Primero"
|
|
"Presenta en pantalla el primer registro encontrado"
|
|
FETCH FIRST datos INTO p_entrada.*
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 5
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
CALL informacionAux()
|
|
DISPLAY BY NAME p_entrada.*
|
|
|
|
COMMAND "Ultimo"
|
|
"Presenta en pantalla el ultimo registro encontrado"
|
|
FETCH LAST datos INTO p_entrada.*
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 4
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
CALL informacionAux()
|
|
DISPLAY BY NAME p_entrada.*
|
|
|
|
COMMAND "Escoger"
|
|
"<Esc> Actualiza Registro <Ctrl-C> Cancela Operacion"
|
|
|
|
# IF num_doccxp IS NOT NULL THEN
|
|
# CALL msg(383)
|
|
# CONTINUE MENU
|
|
# END IF
|
|
# IF num_doccxc IS NOT NULL THEN
|
|
# CALL msg(383)
|
|
# CONTINUE MENU
|
|
# END IF
|
|
|
|
## AQUI SE MODIFICAN/ACTUALIZAN LOS DATOS DEL REGISTRO
|
|
|
|
LET p_fechas = p_entrada.fecha
|
|
CALL prd(p_fechas,usuarios) RETURNING bandera
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
INPUT BY NAME p_entrada.fecha,p_entrada.tipo,p_entrada.detalles,p_entrada.detalle_1,preview
|
|
WITHOUT DEFAULTS
|
|
BEFORE INPUT
|
|
LET preview = 0
|
|
AFTER FIELD fecha
|
|
IF p_entrada.fecha is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha
|
|
END IF
|
|
LET hoy = p_entrada.fecha
|
|
LET p_fechas = p_entrada.fecha
|
|
CALL prd(p_fechas,usuarios) RETURNING bandera
|
|
|
|
{IF year(p_fechas) <> year(TODAY) THEN
|
|
LET numero_msg = 59
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha
|
|
END IF}
|
|
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
#NEXT FIELD fecha
|
|
END IF
|
|
AFTER INPUT
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
CALL transac.clear()
|
|
|
|
|
|
DECLARE buscar1 CURSOR FOR
|
|
SELECT a.cuenta_no,a.departamento,a.cod_aux,a.cod_sec,a.num_doc,
|
|
a.debito,a.credito
|
|
FROM cgtb00004 a
|
|
WHERE a.ref = p_entrada.entrada_no and a.status_t is null
|
|
|
|
LET idx = 1
|
|
FOREACH buscar1 INTO transac[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
CALL set_count(idx - 1)
|
|
|
|
## AQUI SE MODIFICAN/ACTUALIZAN LOS CAMPOS DEL ARREGLO
|
|
|
|
LABEL volver1:
|
|
INPUT ARRAY transac WITHOUT DEFAULTS FROM s_trx.*
|
|
ON KEY(CONTROL-P)
|
|
NEXT FIELD cuenta
|
|
|
|
## VENTANA PARA BUSCAR LAS CUENTAS CONTABLES
|
|
ON ACTION bcuenta
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
CALL busca_cuenta()
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
IF existe = "N" THEN
|
|
LET existe = "S"
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
LET descrip = cuentas1[curr1].descripcion
|
|
LET transac[curr].cuenta = cuentas1[curr1].cuenta_no
|
|
DISPLAY transac[curr].cuenta to s_trx[scr_l].cuenta
|
|
DISPLAY BY NAME descrip
|
|
|
|
LET verdad = "N"
|
|
#CALL otravez()
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
NEXT FIELD cuenta
|
|
ON ACTION empleados
|
|
IF transac[curr].cod_aux = '01' THEN
|
|
CALL busca_empleado1() RETURNING transac[curr].cod_sec,nom1_emp,
|
|
nom2_emp ,apell1_emp,apell2_emp
|
|
|
|
LET nombre_aux = nom1_emp CLIPPED,' ',apell1_emp CLIPPED
|
|
DISPLAY BY NAME nombre_aux
|
|
END IF
|
|
|
|
BEFORE ROW
|
|
LET curr = arr_curr()
|
|
LET scr_l = scr_line()
|
|
|
|
AFTER FIELD cuenta
|
|
IF transac[curr].cuenta IS NOT NULL THEN
|
|
LET verdad = "N"
|
|
#CALL otravez()
|
|
IF verdad = "S" THEN
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
|
|
SELECT unique a.descripcion,a.depto,a.nivel,a.ref ,a.cata
|
|
INTO descrip,p_dpto,nivel,p_ref,p_cata FROM cgtb00001 a
|
|
WHERE a.cuenta_no = transac[curr].cuenta and a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
|
|
IF nivel < 3 THEN
|
|
LET numero_msg = 175
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
|
|
DISPLAY BY NAME descrip
|
|
IF p_dpto = "S" THEN
|
|
NEXT FIELD departamento
|
|
ELSE
|
|
LET transac[curr].departamento = NULL
|
|
LET nombre = null
|
|
END IF
|
|
IF p_cata = "S" THEN
|
|
NEXT FIELD cod_aux
|
|
ELSE
|
|
LET transac[curr].cod_aux = NULL
|
|
LET transac[curr].cod_sec = null
|
|
END IF
|
|
IF p_ref = "S" THEN
|
|
NEXT FIELD num_doc
|
|
ELSE
|
|
LET transac[curr].num_doc = NULL
|
|
END IF
|
|
NEXT FIELD debito
|
|
END IF
|
|
|
|
AFTER FIELD departamento
|
|
IF transac[curr].cuenta is not null THEN
|
|
IF p_dpto = "S" THEN
|
|
IF transac[curr].departamento IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD departamento
|
|
END IF
|
|
|
|
SELECT a.nom_dpto INTO nombre FROM adtb00001 a
|
|
WHERE a.departamento = transac[curr].departamento and
|
|
a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 134
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD departamento
|
|
END IF
|
|
DISPLAY BY NAME nombre
|
|
END IF
|
|
|
|
IF p_cata = "S" THEN
|
|
NEXT FIELD cod_aux
|
|
ELSE
|
|
IF p_ref = "S" THEN
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
END IF
|
|
END IF
|
|
NEXT FIELD debito
|
|
|
|
AFTER FIELD cod_aux
|
|
IF transac[curr].cuenta is not null THEN
|
|
IF p_cata = "S" THEN
|
|
IF transac[curr].cod_aux IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_aux
|
|
END IF
|
|
ELSE
|
|
LET transac[curr].cod_aux = null
|
|
DISPLAY transac[curr].cod_aux TO s_trx[scr_l].cod_aux
|
|
IF p_ref = "S" THEN
|
|
NEXT FIELD num_doc
|
|
ELSE
|
|
NEXT FIELD debito
|
|
END IF
|
|
END IF
|
|
END IF
|
|
|
|
AFTER FIELD num_doc
|
|
IF transac[curr].cuenta is not null THEN
|
|
IF p_ref = "S" THEN
|
|
IF transac[curr].num_doc IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD num_doc
|
|
END IF
|
|
END IF
|
|
NEXT FIELD debito
|
|
END IF
|
|
|
|
AFTER FIELD cod_sec
|
|
IF transac[curr].cuenta is not null THEN
|
|
IF p_cata = "S" THEN
|
|
IF transac[curr].cod_sec IS NULL THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_sec
|
|
END IF
|
|
|
|
LET existe = "S"
|
|
IF transac[curr].cod_aux != 1 THEN
|
|
|
|
# Busqueda de suplidores
|
|
SELECT a.nom_sp INTO nombre_aux FROM cotb00001 a
|
|
WHERE a.cod_sp = transac[curr].cod_aux and
|
|
a.cod_sp_sec = transac[curr].cod_sec and
|
|
a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET existe = "N"
|
|
END IF
|
|
|
|
# Busqueda de clientes
|
|
IF existe = "N" THEN
|
|
SELECT a.nombre INTO nombre_aux FROM vetb00004 a
|
|
WHERE a.tipo_cliente = transac[curr].cod_aux and
|
|
a.sec_cliente = transac[curr].cod_sec and
|
|
a.status_t is null
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 200
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_aux
|
|
END IF
|
|
END IF
|
|
|
|
# Busqueda de nombre del empleado
|
|
IF transac[curr].cod_aux = 1 THEN
|
|
SELECT a.nom1_emp INTO nombre_aux FROM adtb00003 a
|
|
WHERE a.num_emp = transac[curr].cod_sec
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cod_aux
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
IF p_ref = "S" THEN
|
|
NEXT FIELD num_doc
|
|
ELSE
|
|
NEXT FIELD debito
|
|
END IF
|
|
DISPLAY BY NAME nombre_aux
|
|
NEXT FIELD debito
|
|
END IF
|
|
|
|
|
|
|
|
AFTER FIELD debito
|
|
LET t_debito = 0
|
|
IF transac[curr].debito is not null THEN
|
|
FOR idx = 1 TO arr_count()
|
|
IF transac[idx].debito is null THEN
|
|
LET transac[idx].debito = 0
|
|
END IF
|
|
LET t_debito = transac[idx].debito + t_debito
|
|
END FOR
|
|
END IF
|
|
DISPLAY BY NAME t_debito
|
|
|
|
AFTER FIELD credito
|
|
LET t_credito = 0
|
|
IF transac[curr].credito is not null THEN
|
|
FOR idx = 1 TO arr_count()
|
|
IF transac[idx].credito is null THEN
|
|
LET transac[idx].credito = 0
|
|
END IF
|
|
LET t_credito = transac[idx].credito + t_credito
|
|
END FOR
|
|
END IF
|
|
DISPLAY BY NAME t_credito
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = FALSE
|
|
CLEAR FORM
|
|
RETURN
|
|
END IF
|
|
|
|
IF transac[curr].cuenta is not null THEN
|
|
IF transac[curr].debito is null or
|
|
transac[curr].debito = 0 THEN
|
|
IF transac[curr].credito is null or
|
|
transac[curr].credito = 0 THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD cuenta
|
|
END IF
|
|
END IF
|
|
END IF
|
|
CALL verificada()
|
|
|
|
IF NOT cuadrada THEN
|
|
CONTINUE INPUT
|
|
LET numero_msg = 174
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
|
|
# Control para que el usuario no digite las cuentas1 en blanco
|
|
LET blanco = "S"
|
|
FOR idx = 1 TO arr_count()
|
|
IF transac[idx].cuenta is not null THEN
|
|
LET blanco = "N"
|
|
END IF
|
|
END FOR
|
|
IF blanco = "S" THEN
|
|
LET numero_msg = 84
|
|
CALL msg(numero_msg)
|
|
RETURN
|
|
END IF
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
## AQUI SE REALIZA LA MODIFICACION DEL REGISTRO
|
|
{
|
|
DELETE FROM cgtb00004 WHERE
|
|
cgtb00004.ref = p_entrada.entrada_no
|
|
}
|
|
#CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
|
|
# doble_on,doble_off,comp_on,comp_off,
|
|
# doce,normal,archivo
|
|
|
|
#CALL seleccionarSalida() RETURNING r_output
|
|
LET r_filename ="cgprmt004.4rp"
|
|
# LET preview = 1
|
|
LET r_output = "SVG"
|
|
|
|
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
|
|
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
|
|
CALL fgl_report_selectDevice(r_output) -- changing default
|
|
IF preview = 0 THEN
|
|
CALL fgl_report_selectPreview(1) -- changing default
|
|
CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter")
|
|
ELSE
|
|
CALL fgl_report_selectPreview(preview)
|
|
END if
|
|
LET handler = fgl_report_commitCurrentSettings() -- commit changes
|
|
ELSE
|
|
EXIT PROGRAM
|
|
END IF
|
|
--run the report
|
|
IF handler IS NOT NULL THEN -- report engine was configured ok
|
|
|
|
START REPORT imp_entrada4 TO XML HANDLER HANDLER
|
|
|
|
BEGIN WORK
|
|
DELETE FROM cgtb00004 WHERE cgtb00004.ref = p_entrada.entrada_no
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
CALL msg(1663)
|
|
RETURN
|
|
END IF
|
|
|
|
FOR idx = 1 to arr_count()
|
|
IF transac[idx].cuenta is not null THEN
|
|
IF transac[idx].debito is null THEN
|
|
LET transac[idx].debito = 0
|
|
END IF
|
|
IF transac[idx].credito is null THEN
|
|
LET transac[idx].credito = 0
|
|
END IF
|
|
INSERT INTO cgtb00004 (fecha,tipo,ref,cuenta_no,departamento,num_doc,cod_aux,cod_Sec,detalle_1,detalle_2,debito,credito,
|
|
us_crea,fech_crea)
|
|
values (p_entrada.fecha,p_entrada.tipo,
|
|
p_entrada.entrada_no,transac[idx].cuenta,
|
|
transac[idx].departamento,transac[idx].num_doc,
|
|
transac[idx].cod_aux,transac[idx].cod_sec,
|
|
p_entrada.detalles,p_entrada.detalle_1,
|
|
transac[idx].debito,transac[idx].credito,
|
|
usuarios,GETDATE())
|
|
IF STATUS < 0 THEN
|
|
ROLLBACK WORK
|
|
CALL msg(1663)
|
|
RETURN
|
|
END IF
|
|
LET x.id = idx
|
|
LET x.ref = p_entrada.entrada_no
|
|
LET x.cuenta_no = transac[idx].cuenta
|
|
LET x.departamento = transac[idx].departamento
|
|
LET x.cod_aux = transac[idx].cod_aux
|
|
LET x.cod_sec = transac[idx].cod_sec
|
|
LET x.num_doc = transac[idx].num_doc
|
|
LET x.debito = transac[idx].debito
|
|
LET x.credito = transac[idx].credito
|
|
OUTPUT TO REPORT imp_entrada4(x.*)
|
|
END IF
|
|
END FOR
|
|
|
|
COMMIT work
|
|
FINISH REPORT imp_entrada4
|
|
END IF
|
|
DISPLAY BY NAME p_entrada.fecha,p_entrada.entrada_no
|
|
|
|
LET numero_msg = 13
|
|
CALL msg(numero_msg)
|
|
|
|
## AQUI SE REALIZA LA ANULACION DE UN REGISTRO
|
|
COMMAND KEY ("N") "aNular"
|
|
SET CONNECTION "MSSQL"
|
|
SELECT unique a.fecha INTO p_fechas FROM cgtb00004 a
|
|
WHERE a.ref = p_entrada.entrada_no
|
|
CALL prd(p_fechas,usuarios) RETURNING bandera
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
LET opt3 = fgl_winquestion("ANULAR","ESTA SEGURO DE ANULAR ESTA ENTRADA?","NO","NO|YES","QUESTION",0)
|
|
|
|
IF opt3 = "YES" THEN
|
|
UPDATE cgtb00004 set status_t = "E",
|
|
us_mod = usuarios,
|
|
fech_mod = getdate()
|
|
WHERE cgtb00004.ref = p_entrada.entrada_no
|
|
|
|
|
|
LET numero_msg = 82
|
|
CALL msg(numero_msg)
|
|
END IF
|
|
ON ACTION imprimir ATTRIBUTE(TEXT="Imprime", IMAGE='print')
|
|
CALL impresion()
|
|
|
|
COMMAND "Retornar"
|
|
CLOSE datos
|
|
CLEAR FORM
|
|
|
|
FOR idx = 1 to 3
|
|
LET transac[idx].cuenta = null
|
|
LET transac[idx].departamento = null
|
|
LET transac[idx].cod_aux = null
|
|
LET transac[idx].cod_sec = null
|
|
LET transac[idx].num_doc = null
|
|
LET transac[idx].debito = null
|
|
LET transac[idx].credito = null
|
|
|
|
DISPLAY transac [idx].cuenta to s_trx[idx].cuenta
|
|
DISPLAY transac[idx].departamento to s_trx[idx].departamento
|
|
DISPLAY transac[idx].cod_aux to s_trx[idx].cod_aux
|
|
DISPLAY transac[idx].cod_sec to s_trx[idx].cod_sec
|
|
DISPLAY transac[idx].num_doc to s_trx[idx].num_doc
|
|
DISPLAY transac[idx].debito to s_trx[idx].debito
|
|
DISPLAY transac[idx].credito to s_trx[idx].credito
|
|
END FOR
|
|
|
|
EXIT MENU
|
|
END MENU
|
|
END FUNCTION
|
|
|
|
FUNCTION otravez()
|
|
DEFINE contar RECORD
|
|
cuenta CHAR(8)
|
|
END RECORD
|
|
|
|
LET contar.cuenta = transac[curr].cuenta
|
|
|
|
FOR idx = 1 to arr_count()
|
|
IF idx != curr THEN
|
|
IF transac[idx].cuenta IS NOT NULL THEN
|
|
|
|
IF transac[idx].cuenta = contar.cuenta THEN
|
|
LET numero_msg = 172
|
|
CALL msg(numero_msg)
|
|
LET verdad = "S"
|
|
ELSE
|
|
IF verdad != "S" THEN
|
|
LET verdad = "N"
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END IF
|
|
END FOR
|
|
END FUNCTION
|
|
|
|
FUNCTION busca_cuenta()
|
|
OPEN WINDOW cons_cuenta AT 10,5 WITH FORM "cgfmwd004" 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,nivel FROM cgtb00001 ",
|
|
"WHERE ",criterio clipped," AND status_t is null ORDER BY 1"
|
|
|
|
PREPARE comando FROM selec
|
|
DECLARE busca2 CURSOR FOR comando
|
|
OPEN busca2
|
|
|
|
LET idx = 1
|
|
WHILE STATUS != NOTFOUND
|
|
FETCH busca2 INTO cuentas1[idx].*
|
|
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 cuentas1 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
|
|
|
|
#### Funcion para dar salida ordenada a la informacion requerida de
|
|
#### una entrada de diario de nominas local
|
|
|
|
REPORT imp_entrada4(x)
|
|
DEFINE x RECORD
|
|
id INTEGER,
|
|
ref LIKE cgtb00004.ref,
|
|
cuenta_no LIKE cgtb00004.cuenta_no,
|
|
departamento LIKE cgtb00004.departamento,
|
|
cod_aux LIKE cgtb00004.cod_aux,
|
|
cod_sec LIKE cgtb00004.cod_sec,
|
|
num_doc LIKE cgtb00004.num_doc,
|
|
debito LIKE cgtb00004.debito,
|
|
credito LIKE cgtb00004.credito
|
|
END RECORD
|
|
|
|
DEFINE fecha1,fecha2 DATE
|
|
DEFINE t_debito,t_credito DECIMAL(12,2)
|
|
DEFINE descripcion CHAR(30)
|
|
DEFINE doble_on CHAR(2)
|
|
DEFINE doble_off CHAR(2)
|
|
DEFINE negrillas_on CHAR(6)
|
|
DEFINE negrillas_off CHAR(6)
|
|
DEFINE comp_on CHAR(2)
|
|
DEFINE comp_off CHAR(2)
|
|
DEFINE doce CHAR(2)
|
|
DEFINE normal CHAR(2)
|
|
DEFINE hora CHAR(5)
|
|
DEFINE dpto INTEGER
|
|
DEFINE nomina1 CHAR(24)
|
|
DEFINE detalle1 CHAR(30),
|
|
total_registro SMALLINT,
|
|
fecha CHAR(40)
|
|
OUTPUT
|
|
LEFT MARGIN 0
|
|
TOP MARGIN 0
|
|
|
|
ORDER BY x.id
|
|
|
|
FORMAT
|
|
FIRST PAGE HEADER
|
|
LET total_registro = 0
|
|
LET t_debito = 0
|
|
LET t_credito = 0
|
|
|
|
LET fecha = TODAY USING "dd/mm/yyyy",":",time
|
|
ON EVERY ROW
|
|
|
|
LET t_credito = t_credito + x.credito
|
|
LET t_debito = t_debito + x.debito
|
|
LET total_registro = total_registro + 1
|
|
SELECT a.descripcion INTO descripcion FROM cgtb00001 a
|
|
WHERE a.cuenta_no = x.cuenta_no AND a.status_t IS NULL
|
|
|
|
PRINTX x.*,descripcion,p_compania.*,p_entrada.*,
|
|
fecha,total_registro,t_credito,t_debito
|
|
END REPORT
|
|
FUNCTION entradas()
|
|
DEFINE des_entra DYNAMIC ARRAY OF RECORD
|
|
procesa CHAR(2),
|
|
descripcion VARCHAR(60),
|
|
estado VARCHAR(30)
|
|
END RECORD
|
|
|
|
OPEN WINDOW win_entradas AT 10,10 WITH FORM "cgfmwd010" ATTRIBUTE
|
|
(BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST)
|
|
|
|
DECLARE busca_Entrada CURSOR FOR
|
|
SELECT 'N',a.descripcion,a.prog_4gl FROM cgtb00011 a
|
|
WHERE referencia IS NULL
|
|
ORDER BY a.descripcion
|
|
|
|
LET idx = 1
|
|
FOREACH busca_entrada INTO des_entra[idx].*
|
|
LET des_Entra[idx].procesa = "N"
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
CALL set_count(idx-1)
|
|
INPUT ARRAY des_entra WITHOUT DEFAULTS FROM s_entradas.*
|
|
AFTER INPUT
|
|
LET idx = arr_curr()
|
|
# IF des_entra[idx].estado = 'funcion1' THEN
|
|
|
|
CALL cheques1()
|
|
SET CONNECTION "MSSQL"
|
|
# END IF
|
|
END INPUT
|
|
CLOSE WINDOW win_entradas
|
|
|
|
END FUNCTION
|
|
FUNCTION cheques1()
|
|
DEFINE kfecha1,kfecha2 DATE,
|
|
kcuenta_no CHAR(10),
|
|
kdescripcion VARCHAR(60),
|
|
kdetalle DYNAMIC ARRAY OF RECORD
|
|
cuenta_no CHAR(10),
|
|
descripcion CHAR(60),
|
|
departamento INT,
|
|
debito DEC(12,2),
|
|
credito DEC(12,2)
|
|
END RECORD
|
|
|
|
OPEN WINDOW cgfmwd011 AT 15,10 WITH FORM "cgfmwd011" ATTRIBUTE
|
|
(BORDER,FORM LINE FIRST + 1,COMMENT LINE LAST)
|
|
SET CONNECTION "IFMX"
|
|
INPUT BY NAME kfecha1,kfecha2,kcuenta_no
|
|
AFTER FIELD kcuenta_no
|
|
IF kcuenta_no IS NOT NULL THEN
|
|
SELECT a.descripcion INTO kdescripcion
|
|
FROM cgtb00001 a
|
|
WHERE a.cuenta_no = kcuenta_no
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
CALL msg(3)
|
|
NEXT FIELD kcuenta_no
|
|
END IF
|
|
DISPLAY BY NAME kdescripcion
|
|
|
|
END IF
|
|
# ON ACTION pcuentas
|
|
# CALL busca_cuenta()
|
|
# DISPLAY BY NAME descripcion
|
|
AFTER INPUT
|
|
IF kfecha2 > kfecha1 THEN
|
|
CALL msg(64)
|
|
NEXT FIELD fecha1
|
|
END IF
|
|
END INPUT
|
|
|
|
|
|
DECLARE busca_ex CURSOR FOR
|
|
SELECT A.CUENTA_NO,A.DESCRIPCION,c.DEPARTAMENTO,SUM(c.DEBITO),SUM(c.CREDITO)
|
|
FROM cgtb00001 a,cgtb00004 c
|
|
WHERE a.cuenta_no = c.cuenta_no and c.status_t is NULL
|
|
and c.fecha between kfecha1 and kfecha2 and detalles=kcuenta_no
|
|
group by A.CUENTA_NO,A.DESCRIPCION,c.DEPARTAMENTO
|
|
order by a.cuenta_no
|
|
|
|
LET idx = 1
|
|
FOREACH busca_ex INTO kdetalle[idx].*
|
|
LET transac[idx].cuenta = kdetalle[idx].cuenta_no
|
|
LET transac[idx].departamento = kdetalle[idx].departamento
|
|
LET transac[idx].debito = kdetalle[idx].debito
|
|
LET transac[idx].credito = kdetalle[idx].credito
|
|
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
CALL set_count(idx-1)
|
|
CLOSE window cgfmwd011
|
|
|
|
|
|
END FUNCTION
|
|
FUNCTION verificada()
|
|
LET cuadrada = FALSE
|
|
LET cuadre = 0
|
|
FOR idx = 1 to transac.getLength()
|
|
IF transac[idx].debito is null THEN
|
|
LET transac[idx].debito = 0
|
|
END IF
|
|
IF transac[idx].credito is null THEN
|
|
LET transac[idx].credito = 0
|
|
END IF
|
|
|
|
LET cuadre = cuadre + (transac[idx].debito - transac[idx].credito)
|
|
END FOR
|
|
IF cuadre = 0 THEN
|
|
LET cuadrada=TRUE
|
|
END IF
|
|
END FUNCTION
|
|
FUNCTION impresion()
|
|
DEFINE x RECORD
|
|
id INTEGER,
|
|
ref LIKE cgtb00004.ref,
|
|
cuenta_no LIKE cgtb00004.cuenta_no,
|
|
departamento LIKE cgtb00004.departamento,
|
|
cod_aux LIKE cgtb00004.cod_aux,
|
|
cod_sec LIKE cgtb00004.cod_sec,
|
|
num_doc LIKE cgtb00004.num_doc,
|
|
debito LIKE cgtb00004.debito,
|
|
credito LIKE cgtb00004.credito
|
|
END RECORD,
|
|
i INT
|
|
|
|
INPUT BY NAME preview
|
|
AFTER INPUT
|
|
IF preview IS NULL THEN
|
|
CALL msg(16)
|
|
NEXT FIELD preview
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
DECLARE buscar2 CURSOR FOR
|
|
SELECT a.cuenta_no,a.departamento,a.cod_aux,a.cod_sec,a.num_doc,
|
|
a.debito,a.credito
|
|
FROM cgtb00004 a
|
|
WHERE a.ref = p_entrada.entrada_no and a.status_t is null
|
|
|
|
LET idx = 1
|
|
FOREACH buscar2 INTO transac[idx].*
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
|
|
LET r_filename ="cgprmt004.4rp"
|
|
# LET preview = 1
|
|
LET r_output = "SVG"
|
|
|
|
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
|
|
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
|
|
CALL fgl_report_selectDevice(r_output) -- changing default
|
|
IF preview = 0 THEN
|
|
CALL fgl_report_selectPreview(1) -- changing default
|
|
CALL fgl_report_configureSVGPreview("PrintOnDefaultPrinter")
|
|
ELSE
|
|
CALL fgl_report_selectPreview(preview)
|
|
END if
|
|
LET handler = fgl_report_commitCurrentSettings() -- commit changes
|
|
ELSE
|
|
EXIT PROGRAM
|
|
END IF
|
|
--run the report
|
|
IF handler IS NOT NULL THEN -- report engine was configured ok
|
|
|
|
START REPORT imp_entrada4 TO XML HANDLER HANDLER
|
|
|
|
END IF
|
|
|
|
FOR i = 1 TO idx
|
|
IF transac[i].cuenta IS NOT NULL THEN
|
|
LET x.id = i
|
|
LET x.ref = p_entrada.entrada_no
|
|
LET x.cuenta_no = transac[i].cuenta
|
|
LET x.departamento = transac[i].departamento
|
|
LET x.cod_aux = transac[i].cod_aux
|
|
LET x.cod_sec = transac[i].cod_sec
|
|
LET x.num_doc = transac[i].num_doc
|
|
LET x.debito = transac[i].debito
|
|
LET x.credito = transac[i].credito
|
|
OUTPUT TO REPORT imp_entrada4(x.*)
|
|
END IF
|
|
END FOR
|
|
FINISH REPORT imp_entrada4
|
|
|
|
END FUNCTION
|
|
FUNCTION informacionAux()
|
|
|
|
LET num_doccxp = NULL
|
|
LET num_doccxc =NULL
|
|
SELECT DISTINCT a.factura_proveedor,a.num_doc_cxc
|
|
INTO num_doccxp,num_doccxc
|
|
FROM cgtb00004 a
|
|
WHERE a.ref = p_entrada.entrada_no
|
|
|
|
END FUNCTION |