Files
MBS/PROYECTO/cgdir/cgprmt004-marmotecnologia.4gl
T

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