356 lines
13 KiB
Plaintext
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
|
|
|