{------------------------------------------------------------------------------- PROGRAMA : CCPRRP052 OBJETIVO : PROGRAMADOR : Valentin Rodriguez. FECHA REALIZACION : Agosto 2019 -------------------------------------------------------------------------------} SCHEMA "smarmotech" GLOBALS DEFINE datos RECORD fecha_final DATE END RECORD, usuarios VARCHAR(20), clave VARCHAR(20), selec STRING, selec2 STRING, pcompanias RECORD LIKE companias.*, idx, idz INT, valortemp1, valortemp2 DECIMAL(12,2) DEFINE balancesCE RECORD cliente CHAR(50), tipo_cliente LIKE cctb00001.tipo_cliente, sec_cliente LIKE cctb00001.sec_cliente, valor LIKE cctb00001.valor, valor2 LIKE cctb00001.valor, diferencia LIKE cctb00001.valor, fecha_factura DATE END RECORD DEFINE estados RECORD impresas, diferentes, iguales, estilo INT , --porciento10, cond_pago VARCHAR(20), valortemp1, valortemp2 DECIMAL(12,2) END RECORD END GLOBALS MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "marmotech" AS "SQL_E" USER usuarios USING clave CONNECT to "smarmotech" AS "SQL_C" USER usuarios USING clave SELECT * INTO pcompanias.* FROM companias CALL VariacionPrecios() END MAIN FUNCTION VariacionPrecios() 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 criterio STRING OPEN WINDOW HOME_FRM WITH FORM 'ccfmrp053' DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME datos .* BEFORE INPUT LET datos.fecha_final = TODAY AFTER FIELD fecha_final IF datos.fecha_final IS NULL THEN CALL fgl_winmessage("INFO", "DEBE INDICAR UNA FECHA FINAL DE BUSQUEDA", "INFO") NEXT FIELD fecha_final END IF END INPUT CONSTRUCT criterio ON a.tipo_cliente, a.sec_cliente FROM tipo_cliente, sec_cliente ON ACTION Mostrar LET selec = "select rtrim(b.nombre)+ '('+cast(a.tipo_cliente as varchar(5))+'-'+cast(a.sec_cliente as varchar(5))+')', a.tipo_cliente, a.sec_cliente from cctb00001 a inner join vetb00004 b on a.tipo_cliente = b.tipo_cliente and a.sec_cliente = b.sec_cliente where " , criterio CLIPPED, " and "," a.tipo_cliente not in(18,19) and a.fecha_orig < '", datos.fecha_final USING "mm/dd/yyyy","'", " and a.status_t is null group by b.nombre, a.tipo_cliente, a.sec_cliente" DISPLAY selec PREPARE comando FROM selec DECLARE variaciones CURSOR FOR comando LET r_filename ="ccprrp053.4rp" LET idx = 1 LET idz = 0 LET estados.impresas = 0 LET estados.diferentes = 0 LET estados.iguales = 0 --LET estados.porciento10 = 0 LET estados.cond_pago = '' LET estados.estilo = 0 DELETE FROM tmpcxccompara FOREACH variaciones INTO balancesCE.* CALL busca_be(balancesCE.tipo_cliente,balancesCE.sec_cliente,datos.fecha_final) RETURNING balancesCE.valor2 CALL busca_bc(balancesCE.tipo_cliente,balancesCE.sec_cliente,datos.fecha_final) RETURNING balancesCE.valor CALL fecha_factura(balancesCE.tipo_cliente, balancesCE.sec_cliente) RETURNING balancesCE.fecha_factura IF balancesCE.valor != 0 AND balancesCE.valor2 != 0 THEN LET estados.valortemp1 = balancesCE.valor LET estados.valortemp2 = balancesCE.valor2 IF balancesCE.valor < 0 THEN LET estados.valortemp1 = balancesCE.valor * -1 END IF IF balancesCE.valor2 < 0 THEN LET estados.valortemp2 = balancesCE.valor2 * -1 END IF LET balancesCE.diferencia = estados.valortemp1 - estados.valortemp2 IF balancesCE.diferencia < 0 THEN LET balancesCE.diferencia = balancesCE.diferencia * -1 END IF --LET estados.porciento10 = (balancesCE.diferencia / estados.valortemp1)*100 select b.descrip INTO estados.cond_pago from vetb00004 a inner join vetb00012 b on a.cond_pago = b.cond_pago where tipo_cliente = balancesCE.tipo_cliente and sec_cliente = balancesCE.sec_cliente LET estados.impresas = estados.impresas + 1 IF balancesCE.diferencia != 0 THEN LET estados.diferentes = estados.diferentes + 1 { IF estados.porciento10 > 10 THEN LET estados.estilo = 2 ELSE LET estados.estilo = 1 END IF} ELSE LET estados.iguales = estados.iguales + 1 LET estados.estilo = 0 END IF IF idx = 1 THEN IF fgl_report_loadCurrentSettings(r_filename) THEN LET preview=1 CALL seleccionarsalida() RETURNING r_output -- load the .4rp file IF r_output = 'XLSX' THEN CALL fgl_report_configureXLSXDevice ( NULL, #fromPage INTEGER, NULL, #toPage INTEGER, TRUE, #removeWhitespace BOOLEAN, NULL, #ignoreRowAlignment BOOLEAN, NULL, #ignoreColumnAlignment BOOLEAN, NULL, #removeBackgroundImages BOOLEAN, TRUE ) #mergePages TRUE END IF CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes END IF LET idx = 2 START REPORT balancesCE_prod_rpt TO XML HANDLER HANDLER END IF INSERT INTO tmpcxccompara (tipo_cliente,sec_cliente,balance1,balance2) VALUES (balancesCE.tipo_cliente,balancesCE.sec_cliente, balancesCE.valor,balancesCE.valor2) OUTPUT TO REPORT balancesCE_prod_rpt(balancesCE.*, datos.fecha_final,estados.*) END IF END FOREACH IF idx > 1 THEN FINISH REPORT balancesCE_prod_rpt ELSE CALL fgl_winmessage("INFO", "NO HAY REGISTROS CON LOS PARAMETROS INDICADOS O EL BALANCE DEL CLIENTE INDICADO ES IGUAL 0", "INFO") NEXT FIELD fecha_final END IF END CONSTRUCT ON ACTION CANCEL CALL msg(2) LET INT_FLAG = FALSE EXIT PROGRAM END DIALOG CLOSE WINDOW HOME_FRM END FUNCTION REPORT balancesCE_prod_rpt(x,y,z) DEFINE x RECORD cliente CHAR(50), tipo_cliente LIKE cctb00001.tipo_cliente, sec_cliente LIKE cctb00001.sec_cliente, valor LIKE cctb00001.valor, valor2 LIKE cctb00001.valor, diferencia LIKE cctb00001.valor, fecha_factura DATE END RECORD DEFINE y RECORD fecha_final CHAR(12) END RECORD DEFINE z RECORD impresas, diferentes, iguales, estilo INT , --porciento10, cond_pago VARCHAR(20), valortemp1, valortemp2 DECIMAL(12,2) END RECORD DEFINE titulo_iguales, titulo_diferentes CHAR(20) DEFINE fecha_reporte CHAR(16) DEFINE fecha CHAR(30) DEFINE hora CHAR(5) DEFINE porc_iguales, porc_diferentes DECIMAL(12,2) ORDER BY x.diferencia ASC FORMAT PAGE HEADER LET fecha = y.fecha_final LET hora = TIME LET fecha_reporte = TODAY,' ',hora ON EVERY ROW PRINTX fecha_reporte, fecha, pcompanias.nombre, x.cliente, x.valor, x.valor2, z.estilo, x.diferencia,z.cond_pago --,z.porciento10 ON LAST ROW LET titulo_iguales = "CUENTAS IGUALES" LET titulo_diferentes = "CUENTAS DIFERENTES" LET porc_iguales = (z.iguales * 100) / z.impresas LET porc_diferentes = (z.diferentes * 100) / z.impresas PRINTX z.impresas, z.diferentes, z.iguales, titulo_iguales, titulo_diferentes, porc_iguales, porc_diferentes END REPORT #---------------------------------- #BUSCAMOS EL BALANCE EN CONSOLIDADO #---------------------------------- FUNCTION busca_bc(t_cliente,s_cliente,fecha_lim) DEFINE sbalance,sbalance1 DEC(12,2) DEFINE t_cliente,s_cliente SMALLINT DEFINE fecha_lim DATE SET CONNECTION "SQL_C" # BUSCA BALANCE DEL CLIENTE PARA IMPRIMIRLO SELECT SUM(a.valor+a.monto_desc) INTO sbalance FROM cctb00001 a WHERE (a.tipo_cliente = t_cliente AND a.sec_cliente = s_cliente) AND (a.fecha_orig <= fecha_lim) AND a.tipo_doc NOT IN ("AV","PC","AP") AND a.status_t IS NULL SELECT SUM(a.valor+a.monto_desc) INTO sbalance1 FROM cctb00001 a WHERE (a.tipo_cliente = t_cliente AND a.sec_cliente = s_cliente) AND (a.fecha_orig <= fecha_lim) AND (a.tipo_doc IN ("AV") AND a.num_doc=a.aplica_a) AND a.status_t IS NULL IF sbalance IS NULL THEN LET sbalance = 0 END IF IF sbalance1 IS NULL THEN LET sbalance1 = 0 END IF LET sbalance = sbalance - sbalance1 RETURN sbalance END FUNCTION #---------------------------------- #BUSCAMOS EL BALANCE EN FINANZAS #---------------------------------- FUNCTION busca_be(t_cliente,s_cliente,fecha_lim) DEFINE sbalance,sbalance1 DEC(12,2) DEFINE t_cliente,s_cliente SMALLINT DEFINE fecha_lim DATE SET CONNECTION "SQL_E" # BUSCA BALANCE DEL CLIENTE PARA IMPRIMIRLO SELECT SUM(a.valor+a.monto_desc) INTO sbalance FROM cctb00001 a WHERE (a.tipo_cliente = t_cliente AND a.sec_cliente = s_cliente) AND (a.fecha_orig <= fecha_lim) AND a.tipo_doc NOT IN ("AV","PC","AP") AND a.status_t IS NULL SELECT SUM(a.valor+a.monto_desc) INTO sbalance1 FROM cctb00001 a WHERE (a.tipo_cliente = t_cliente AND a.sec_cliente = s_cliente) AND (a.fecha_orig <= fecha_lim) AND (a.tipo_doc IN ("AV") AND a.num_doc=a.aplica_a) AND a.status_t IS NULL IF sbalance IS NULL THEN LET sbalance = 0 END IF IF sbalance1 IS NULL THEN LET sbalance1 = 0 END IF LET sbalance = sbalance - sbalance1 RETURN sbalance END FUNCTION FUNCTION fecha_factura(tCliente,sCliente) DEFINE tcliente, sCliente INT, fecha_fact DATE SET CONNECTION "SQL_C" SELECT MAX(fecha_factura) INTO fecha_fact FROM vetb00002 WHERE tipo_cliente = tCliente AND sec_cliente = sCliente IF fecha_fact IS NULL OR fecha_fact == '' THEN LET fecha_fact= '01/01/1990' END IF RETURN fecha_fact END FUNCTION