{ ----------------------------------------------------------------------------- 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" " Actualiza Registro 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