Files
MBS/PROYECTO/ccdir/visualiza_estado.4gl
T

651 lines
22 KiB
Plaintext

GLOBALS "ccprgb000.4gl"
DEFINE prima DECIMAL(10,2) ## Variable que equivale a la prima de otra moneda
,
imprimeencabezado VARCHAR(2)
DEFINE fecha_inicial,fecha_final DATE ## Varible busqueda por fecha de corte
DEFINE selec5,selec6,selec7 STRING ## Variables para almacenar busquedas
DEFINE tipo1 CHAR(2)
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
##### Registro que almacena la infoprmacion a imprimir ####
DEFINE mvtos1 RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
limite DECIMAL(12,2),
num_rnc CHAR(10),
zona SMALLINT,
num_doc INTEGER,
aplica_a INTEGER,
tipo CHAR(2),
fecha DATE,
valor DECIMAL(10,2),
cotizacion_no INT,
cliente CHAR(20),
orden INT,
conduce INT
END RECORD,
valor2,balance DEC(12,2),
borden INT,
psimbolo CHAR(3),
xcotizacion,xorden INT,
tipoinfo CHAR(2)
FUNCTION visualiza_estado(tcliente,scliente,sqlconnect)
DEFINE ordenado,sqlconnect STRING,
tcliente,scliente INT
OPTIONS
FORM LINE 8,
ERROR LINE 23,
COMMENT LINE 21
####### Abriendo y desplegando formulario de captura de datos
OPEN FORM ccfmrp014 FROM "ccfmrp014"
DISPLAY FORM ccfmrp014
#CALL pantalla()
DISPLAY "ccprrp014" AT 4,3
DISPLAY "Estado de Cuentas" AT 6,31
LET tipo_papel = 1
CALL msgrp000(tipo_papel)
##### Creando el criterio de busqueda
DIALOG ATTRIBUTE (FIELD ORDER FORM, UNBUFFERED)
##### Aceptando la fecha de corte para busqueda de informacion
INPUT BY NAME prima,fecha_inicial,fecha_final,borden,salida,tipoinfo,ordenado
BEFORE INPUT
LET prima =1
DISPLAY BY NAME prima
DISPLAY tcliente TO tipo_cliente
DISPLAY scliente TO sec_cliente
BEFORE FIELD tipoinfo
LET tipoinfo='AC'
IF sqlconnect = 'marmotech' THEN
NEXT FIELD ordenado
END IF
AFTER FIELD fecha_inicial
IF fecha_inicial is null OR fecha_inicial > fecha_final THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_inicial
END IF
AFTER FIELD borden
IF borden IS NOT NULL THEN
SELECT a.num_oc FROM prtb00012 a WHERE a.num_oc = borden AND
a.status_t IS NULL
IF STATUS <> NOTFOUND THEN
CALL fgl_winmessage("INFO","ORDEN NO EXISTE","INFO")
NEXT FIELD borden
END IF
END IF
BEFORE FIELD fecha_final
LET fecha_final = today
AFTER FIELD fecha_final
IF fecha_final is null THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD fecha_final
END IF
ON ACTION busca_informacion
# Busca los documentos que esten en el rango de fechas especificado
LET progreso = 20
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
LET idx = 1
IF ordenado = "orden" THEN
LET r_filename = 'ccprrp014.4rp'
ELSE
LET r_filename = 'ccprrp014a.4rp'
END IF
IF prima IS NULL THEN
LET prima = 1
END IF
LET imprime = "NO"
LET selec3=
"SELECT a.num_doc,a.aplica_a,a.tipo_doc,CONVERT(CHAR(10),a.fecha_orig,103),
(a.valor+a.monto_desc),a.documento_ref
FROM cctb00001 a
WHERE a.tipo_cliente=? AND a.sec_cliente=? AND
a.status_t is null AND a.fecha_orig BETWEEN ? AND ? AND
a.tipo_doc in ('PG','FT','FE','NC','ND','DV','OC','OD','RC','PC','BI','RC')
UNION
SELECT a.num_doc,a.aplica_a,a.tipo_doc,CONVERT(CHAR(10),a.fecha_orig,103),
(a.valor+a.monto_desc)*-1,a.documento_ref
FROM cctb00001 a
WHERE a.tipo_cliente=? AND a.sec_cliente= ? AND
a.status_t is null AND a.fecha_orig BETWEEN ? AND ? AND
a.tipo_doc = 'AV' AND a.aplica_a = a.num_doc "
LET selec = "SELECT SUM(a.valor+a.monto_desc) FROM cctb00001 a
WHERE a.tipo_cliente = ? AND a.sec_cliente =? AND
a.tipo_doc in ('PG','FT','FE','NC','ND','DV','OC','OD','RC','PC','BI') AND
a.fecha_orig < ? AND
a.status_t IS NULL"
LET selec1 = "SELECT SUM(a.valor+a.monto_desc) FROM cctb00001 a
WHERE a.tipo_cliente = ? AND a.sec_cliente = ? AND
a.tipo_doc IN ('AV') AND a.num_doc = a.aplica_a AND
a.fecha_orig < ? AND
a.status_t IS NULL"
IF sqlconnect ='smarmotech' THEN
LET selec4 =
"SELECT MAX(a.orden),MAX(a.cotizacion_no) FROM vetb00002 a
WHERE (a.factura = ?) AND
(a.tipo_cliente = ? AND a.sec_cliente=?)"
ELSE
LET selec4 =
"SELECT MAX(a.orden),MAX(a.conduce) FROM vetb00002 a
WHERE (a.factura = ?) AND
(a.tipo_cliente = ? AND a.sec_cliente=?)"
END IF
SELECT a.nombre INTO p_companias.nombre FROM companias a
LET selec6=
"SELECT MAX(a.documento_ref) FROM cctb00001 a
WHERE a.num_doc = ? AND a.num_doc = a.aplica_a AND a.tipo_doc ='AV' AND
a.tipo_cliente = ? AND a.sec_cliente = ?"
LET selec7 =
"SELECT MAX(a.num_oc) FROM prtb00012 a WHERE a.cotizacion_no=? AND
a.tipo_cliente = ? AND a.sec_cliente = ? AND
a.status_t IS NULL"
LET selec5 = "SELECT a.tipo_cliente,a.sec_cliente,a.nombre,a.limite_credito,a.num_rnc,a.cod_zona ",
" FROM vetb00004 a WHERE a.tipo_cliente = ? and a.sec_cliente = ? "
LET selec1 = "SELECT SUM(a.valor+a.monto_desc) FROM cctb00001 a
WHERE a.tipo_cliente = ? AND a.sec_cliente = ? AND
a.tipo_doc IN ('AV') AND a.num_doc = a.aplica_a AND
a.fecha_orig < ? AND
a.status_t IS NULL"
# QUERYS PARA LA BUSQUEDA DE LA INFORMACION EN EL HISTORICO
IF tipoinfo='HT' THEN
LET selec3=
"SELECT a.num_doc,a.aplica_a,a.tipo_doc,CONVERT(CHAR(10),a.fecha_orig,103),
(a.valor+a.monto_desc),a.documento_ref
FROM historicomtech.dbo.cctb00001 a
WHERE a.tipo_cliente=? AND a.sec_cliente=? AND
a.status_t is null AND a.fecha_orig BETWEEN ? AND ? AND
a.tipo_doc in ('PG','FT','FE','NC','ND','DV','OC','OD','RC','PC','BI','RC')
UNION
SELECT a.num_doc,a.aplica_a,a.tipo_doc,CONVERT(CHAR(10),a.fecha_orig,103),
(a.valor+a.monto_desc)*-1,a.documento_ref
FROM historicomtech.dbo.cctb00001 a
WHERE a.tipo_cliente=? AND a.sec_cliente= ? AND
a.status_t is null AND a.fecha_orig BETWEEN ? AND ? AND
a.tipo_doc = 'AV' AND a.aplica_a = a.num_doc "
LET selec = "SELECT SUM(a.valor+a.monto_desc) FROM historicomtech.dbo.cctb00001 a
WHERE a.tipo_cliente = ? AND a.sec_cliente =? AND
a.tipo_doc in ('PG','FT','FE','NC','ND','DV','OC','OD','RC','PC') AND
a.fecha_orig < ? AND
a.status_t IS NULL"
LET selec1 = "SELECT SUM(a.valor+a.monto_desc) FROM historicomtech.dbo.cctb00001 a
WHERE a.tipo_cliente = ? AND a.sec_cliente = ? AND
a.tipo_doc IN ('AV') AND a.num_doc = a.aplica_a AND
a.fecha_orig < ? AND
a.status_t IS NULL"
LET selec5 = "SELECT a.tipo_cliente,a.sec_cliente,a.nombre,a.limite_credito,a.num_rnc,a.cod_zona ",
" FROM historicomtech.dbo.vetb00004 a WHERE a.tipo_cliente = ? and a.sec_cliente = ? "
END IF
#--------------------------------------------------------------------------------------------------------
PREPARE bcotizacion2 FROM selec4
PREPARE bdclientes FROM selec3
PREPARE balance1 FROM selec
PREPARE balance2 FROM selec1
PREPARE cotizacion1 FROM selec6
PREPARE orden1 FROM selec7
PREPARE clientes FROM selec5
DECLARE bclientes CURSOR FOR clientes
OPEN bclientes USING tcliente,scliente
FOREACH bclientes INTO mvtos1.tipo_cliente,mvtos1.sec_cliente,mvtos1.nombre,mvtos1.limite,mvtos1.num_rnc,
mvtos1.zona
IF idx = 1 THEN
IF fgl_report_loadCurrentSettings(r_filename) THEN
LET preview=1
CALL fgl_report_selectDevice(salida) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
IF ordenado = "orden" THEN
START REPORT report14 TO XML HANDLER HANDLER
ELSE
START REPORT report14b TO XML HANDLER HANDLER
END IF
END IF
LET mvtos1.cliente = mvtos1.tipo_cliente using "&&","-",
mvtos1.sec_cliente using "&&&&&&"
# BALANCE INICIAL
LET valor1 = 0
LET valor2 = 0
# busca balance1
EXECUTE balance1 INTO valor1 USING mvtos1.tipo_cliente,mvtos1.sec_cliente,fecha_inicial
IF valor1 IS NULL THEN
LET valor1 = 0
END IF
# busca balance 2
EXECUTE balance2 INTO valor2 USING mvtos1.tipo_cliente,mvtos1.sec_cliente,fecha_inicial
IF valor2 IS NULL THEN
LET valor2 = 0
END IF
PREPARE comando1 FROM SELEC5
LET balance = valor1 - valor2
LET balance = balance*prima
LET mvtos1.valor = 0
LET mvtos1.fecha = fecha_inicial
#### Seleciona los datos generales de identificacion del cliente
IF ordenado = "orden" THEN
OUTPUT TO REPORT report14(mvtos1.*)
ELSE
OUTPUT TO REPORT report14b(mvtos1.*)
END IF
LET idx = idx +1
# ENVIO DETALLE
DECLARE dclientes CURSOR FOR bdclientes
OPEN dclientes USING mvtos1.tipo_cliente,mvtos1.sec_cliente,fecha_inicial,fecha_final, mvtos1.tipo_cliente,mvtos1.sec_cliente,fecha_inicial,fecha_final
FOREACH dclientes INTO mvtos1.num_doc,mvtos1.aplica_a,mvtos1.tipo,mvtos1.fecha,
mvtos1.valor
LET mvtos1.valor = mvtos1.valor * prima
LET tipo1 = mvtos1.tipo
LET mvtos1.orden = NULL
LET xcotizacion = NULL
IF sqlconnect='marmotech' THEN
SELECT a.simbolo INTO psimbolo
FROM vetb00060 a,vetb00061 b
WHERE b.tipo_cliente = mvtos1.tipo_cliente AND
a.ventas = b.ventas
EXECUTE bcotizacion2 INTO mvtos1.orden,mvtos1.cotizacion_no USING mvtos1.aplica_a,mvtos1.tipo_cliente,mvtos1.sec_cliente
IF tipo1='AV' THEN
# busqueda de la cotizacion en cxc
EXECUTE cotizacion1 INTO mvtos1.cotizacion_no USING mvtos1.aplica_a,mvtos1.tipo_cliente,mvtos1.sec_cliente
EXECUTE orden1 INTO mvtos1.orden USING mvtos1.cotizacion_no,mvtos1.tipo_cliente,mvtos1.sec_cliente
END IF
ELSE
SELECT a.simbolo INTO psimbolo
FROM vetb00061 a,vetb00060 b
WHERE b.tipo_cliente = mvtos1.tipo_cliente AND
a.ventas = b.ventas
# busca orden y cotizacion
EXECUTE bcotizacion2 INTO mvtos1.orden,mvtos1.cotizacion_no USING mvtos1.aplica_a,mvtos1.tipo_cliente,mvtos1.sec_cliente
IF tipo1='AV' THEN
# busqueda de la cotizacion en cxc
EXECUTE cotizacion1 INTO mvtos1.cotizacion_no USING mvtos1.aplica_a,mvtos1.tipo_cliente,mvtos1.sec_cliente
EXECUTE orden1 INTO mvtos1.orden USING mvtos1.cotizacion_no,mvtos1.tipo_cliente,mvtos1.sec_cliente
ELSE
#CONDUCE ALMACEN
SELECT MAX(a.conduce),MAX(a.cotizacion_no),MAX(a.orden)
INTO mvtos1.conduce,mvtos1.cotizacion_no,mvtos1.orden FROM vetb00002 a
WHERE a.factura = mvtos1.aplica_a AND
a.tipo_cliente = mvtos1.tipo_cliente and
a.sec_cliente = mvtos1.sec_cliente and
a.status_t IS NULL
END IF
END IF
IF borden IS NOT NULL THEN
IF borden = mvtos1.orden THEN
IF ordenado = "orden" THEN
OUTPUT TO REPORT report14(mvtos1.*)
ELSE
OUTPUT TO REPORT report14b(mvtos1.*)
END IF
END IF
ELSE
IF ordenado = "orden" THEN
OUTPUT TO REPORT report14(mvtos1.*)
ELSE
OUTPUT TO REPORT report14b(mvtos1.*)
END IF
END IF
LET progreso = progreso + 10
IF progreso > 50 THEN
LET progreso = 50
END IF
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
END FOREACH
END FOREACH
IF idx > 1 THEN
IF ordenado = "orden" THEN
FINISH REPORT report14
ELSE
FINISH REPORT report14b
END IF
ELSE
CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS CON ESE CRITERIO DE BUSQUEDA","INFO")
END IF
EXIT DIALOG
END INPUT
ON ACTION CANCEL
LET INT_FLAG = FALSE
EXIT PROGRAM
END DIALOG
END FUNCTION
####### Funcion para dar salida a la informacion
REPORT report14(j)
DEFINE j RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
limite DECIMAL(12,2),
num_rnc CHAR(10),
zona SMALLINT,
num_doc INTEGER,
aplica_a INTEGER,
tipo CHAR(2),
fecha DATE,
valor DECIMAL(10,2),
cotizacion_no INT,
cliente CHAR(20),
orden INT,
conduce INT
END RECORD
DEFINE p_calle,p_descrip CHAR(30), c_direccion VARCHAR(100)
DEFINE p_casa CHAR(10)
DEFINE hora CHAR(5)
DEFINE d_debito,d_credito,d_balance, credito,debito,tcredito,tdebito,tbalance,limite,b_balance,
cte,v1_30,v31_45,v46_60,vm_60,balance_orden,bvalor1,bvalor2 DECIMAL(12,2),
chfecha CHAR(20)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 2
#### Proceso para sortear la informacion
ORDER BY j.cliente,j.orden,j.fecha
###### Diseno de la salida de la informacion
FORMAT
PAGE HEADER
LET hora = TIME
IF j.tipo_cliente =19 OR j.tipo_cliente=18 THEN
LET imprimeencabezado="NO"
ELSE
LET imprimeencabezado = 'SI'
END IF
LET chfecha = today using "dd/mm/yyyy"," ",hora
##### Si el cliente es local el valor de la prima de la moneda es nulo
SKIP 1 LINES
BEFORE GROUP OF j.cliente
LET b_balance = 0
LET v1_30 = 0
LET v31_45 = 0
LET v46_60 = 0
LET vm_60 = 0
LET cte = 0
SELECT c.calle,c.casa_num INTO p_calle,p_casa FROM vetb00005 c
WHERE c.tipo_cliente=j.tipo_cliente and c.sec_cliente = j.sec_cliente and
c.status_t is null
SELECT d.descrip INTO p_descrip FROM vetb00008 d
WHERE d.cod_zona = j.zona AND d.status_t IS NULL
LET c_direccion = p_calle CLIPPED,' ',p_casa CLIPPED,' ',p_descrip
IF limite IS NULL THEN
LET limite = 0
END IF
PRINTX j.cliente, j.nombre,j.limite,prima,p_companias.nombre,
fecha_final,chfecha,p_calle,p_casa,j.num_rnc,c_direccion,fecha_inicial,balance,imprime,
imprimeencabezado
LET debito = 0
LET credito = 0
LET b_balance = balance
BEFORE GROUP OF j.orden
LET balance_orden = 0
LET bvalor1 = 0
LET bvalor2 = 0
SELECT SUM(a.valor+a.monto_desc) INTO bvalor1 FROM cctb00001 a
WHERE a.tipo_cliente = mvtos1.tipo_cliente AND a.sec_cliente = mvtos1.sec_cliente AND
a.tipo_doc in ('PG','FT','FE','NC','ND','DV','OC','OD','RC','BI') AND
a.documento_ref = j.cotizacion_no AND
a.fecha_orig < fecha_inicial AND
a.status_t IS NULL
IF bvalor1 IS NULL THEN
LET bvalor1 = 0
END IF
SELECT SUM(a.valor+a.monto_desc) INTO bvalor2 FROM cctb00001 a
WHERE a.tipo_cliente = mvtos1.tipo_cliente AND a.sec_cliente = mvtos1.sec_cliente AND
a.tipo_doc IN ('AV') AND a.num_doc = a.aplica_a AND
a.fecha_orig < fecha_inicial AND a.documento_ref = j.cotizacion_no AND
a.status_t IS NULL
IF bvalor2 IS NULL THEN
LET bvalor2 = 0
END IF
LET balance_orden = bvalor1 - bvalor2
ON EVERY ROW
IF b_balance IS NULL THEN
LET b_balance = 0
END IF
# IF j.fecha >= fecha_inicial THEN
LET b_balance = b_balance + j.valor
LET d_credito = 0
LET d_debito = 0
IF j.valor < 0 THEN
LET d_credito = j.valor
LET credito = credito + j.valor
ELSE
LET d_debito = j.valor
LET debito = debito + j.valor
END IF
LET balance_orden = balance_orden + j.valor
#END IF
PRINTX j.num_doc, j.tipo, j.fecha, j.aplica_a,j.orden,j.cotizacion_no,d_debito,d_credito,d_balance,
psimbolo,b_balance,balance_orden,j.conduce
{
LET dias = 0
LET dias = fecha_final - j.fecha
IF dias <= 0 THEN
LET cte = j.valor + cte
END IF
IF dias > 0 AND dias < 30 THEN
LET v1_30 = v1_30 + j.valor
END IF
IF dias > 30 and dias < 60 THEN
LET v31_45 = v31_45 + j.valor
END IF
IF dias > 61 and dias < 90 THEN
LET v46_60 = v46_60 + j.valor
END IF
IF dias > 90 THEN
LET vm_60 = vm_60 + j.valor
END IF}
AFTER GROUP OF j.cliente
PRINTX cte,v1_30,v31_45,v46_60, vm_60
END REPORT
REPORT report14b(j)
DEFINE j RECORD
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
nombre CHAR(30),
limite DECIMAL(12,2),
num_rnc CHAR(10),
zona SMALLINT,
num_doc INTEGER,
aplica_a INTEGER,
tipo CHAR(2),
fecha DATE,
valor DECIMAL(10,2),
cotizacion_no INT,
cliente CHAR(20),
orden INT,
conduce INT
END RECORD
DEFINE p_calle,p_descrip CHAR(30), c_direccion VARCHAR(100)
DEFINE p_casa CHAR(10)
DEFINE hora CHAR(5)
DEFINE d_debito,d_credito,d_balance, credito,debito,tcredito,tdebito,tbalance,limite,b_balance,
cte,v1_30,v31_45,v46_60,vm_60 DECIMAL(12,2),
chfecha CHAR(20)
OUTPUT
TOP MARGIN 0
LEFT MARGIN 0
BOTTOM MARGIN 2
#### Proceso para sortear la informacion
ORDER BY j.cliente,j.fecha
###### Diseno de la salida de la informacion
FORMAT
PAGE HEADER
LET hora = TIME
IF j.tipo_cliente =19 OR j.tipo_cliente=18 THEN
LET imprimeencabezado="NO"
ELSE
LET imprimeencabezado = 'SI'
END IF
LET chfecha = today using "dd/mm/yyyy"," ",hora
##### Si el cliente es local el valor de la prima de la moneda es nulo
SKIP 1 LINES
BEFORE GROUP OF j.cliente
LET b_balance = 0
LET v1_30 = 0
LET v31_45 = 0
LET v46_60 = 0
LET vm_60 = 0
LET cte = 0
SELECT c.calle,c.casa_num INTO p_calle,p_casa FROM vetb00005 c
WHERE c.tipo_cliente=j.tipo_cliente and c.sec_cliente = j.sec_cliente and
c.status_t is null
SELECT d.descrip INTO p_descrip FROM vetb00008 d
WHERE d.cod_zona = j.zona AND d.status_t IS NULL
LET c_direccion = p_calle CLIPPED,' ',p_casa CLIPPED,' ',p_descrip
IF limite IS NULL THEN
LET limite = 0
END IF
PRINTX j.cliente, j.nombre,j.limite,prima,p_companias.nombre,
fecha_final,chfecha,p_calle,p_casa,j.num_rnc,c_direccion,fecha_inicial,balance,imprime,
j.tipo_cliente,imprimeencabezado
LET debito = 0
LET credito = 0
LET b_balance = balance
ON EVERY ROW
IF b_balance IS NULL THEN
LET b_balance = 0
END IF
# IF j.fecha >= fecha_inicial THEN
LET b_balance = b_balance + j.valor
LET d_credito = 0
LET d_debito = 0
IF j.valor < 0 THEN
LET d_credito = j.valor
LET credito = credito + j.valor
ELSE
LET d_debito = j.valor
LET debito = debito + j.valor
END IF
#END IF
PRINTX j.num_doc, j.tipo, j.fecha, j.aplica_a,j.orden,j.cotizacion_no,d_debito,d_credito,d_balance,
psimbolo,b_balance,j.conduce
{
LET dias = 0
LET dias = fecha_final - j.fecha
IF dias <= 0 THEN
LET cte = j.valor + cte
END IF
IF dias > 0 AND dias < 30 THEN
LET v1_30 = v1_30 + j.valor
END IF
IF dias > 30 and dias < 60 THEN
LET v31_45 = v31_45 + j.valor
END IF
IF dias > 61 and dias < 90 THEN
LET v46_60 = v46_60 + j.valor
END IF
IF dias > 90 THEN
LET vm_60 = vm_60 + j.valor
END IF}
AFTER GROUP OF j.cliente
PRINTX cte,v1_30,v31_45,v46_60, vm_60
END REPORT