Files

356 lines
13 KiB
Plaintext

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