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

1091 lines
36 KiB
Plaintext

{
-------------------------------------------------------------------------------
PROGRAMA : CCPRRP014
OBJETIVO : Estado de Cuentas de Clientes a una fecha especifica
tomando en cuenta el historial de debitos y creditos
PROGRAMADOR : Ing. Juan F. Soto
FECHA REALIZACION : Junio 1, 1993
MODIFICADO : Tadeo A. Ferreras
FECHA MODIFICACION : Julio 28, 1993
-------------------------------------------------------------------------------
}
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
####### Variables para desplegar resultados por pantalla ante de la impresion
##### 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)
MAIN
DEFER INTERRUPT
CALL STARTLOG("ccprrp014.log")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CALL ARG_VAL(7) RETURNING strconect
IF strconect = 'marmotech' THEN
CONNECT to strconect USER 'conecta' USING 'conecta'
ELSE
CONNECT to strconect USER usuarios USING clave
END IF
# CONNECT to 'smarmotech' USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of,
doble_on,doble_off,comp_on,comp_off,
doce,normal,archivo,copia
CALL ccprrp014()
END MAIN
FUNCTION ccprrp014()
DEFINE ordenado STRING
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)
CONSTRUCT criterio ON a.tipo_cliente,a.sec_cliente FROM
tipo_cliente, sec_cliente
END CONSTRUCT
##### 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
BEFORE FIELD tipoinfo
LET tipoinfo='AC'
IF strconect = '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 = "SI"
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')
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 strconect ='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
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 ",criterio CLIPPED
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')
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 ",criterio CLIPPED
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
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 strconect='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),
dias int
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
LET imprime ="NO"
IF dias <= 0 THEN
LET cte = j.valor + cte
LET imprime ="SI"
END IF
IF dias > 0 AND dias < 30 THEN
LET v1_30 = v1_30 + j.valor
LET imprime ="SI"
END IF
IF dias > 30 and dias < 60 THEN
LET v31_45 = v31_45 + j.valor
LET imprime ="SI"
END IF
IF dias > 61 and dias < 90 THEN
LET v46_60 = v46_60 + j.valor
LET imprime ="SI"
END IF
IF dias > 90 THEN
LET vm_60 = vm_60 + j.valor
LET imprime ="SI"
END IF
AFTER GROUP OF j.cliente
IF v1_30 < 0 THEN
LET v1_30 = 0
END IF
IF v31_45 < 0 THEN
LET v31_45 = 0
END IF
IF v46_60 < 0 THEN
LET v46_60 = 0
END IF
IF vm_60 < 0 THEN
LET vm_60 = 0
END IF
IF b_balance = 0 THEN
LET cte = 0
LET v1_30 = 0
LET v31_45 = 0
LET v46_60 = 0
LET vm_60 =0
END IF
# Se coloco en comentario porque se debe investigar porque se presentan facturas en el vencimiento
# 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),
dias INT
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
IF v1_30 < 0 THEN
LET v1_30 = 0
END IF
IF v31_45 < 0 THEN
LET v31_45 = 0
END IF
IF v46_60 < 0 THEN
LET v46_60 = 0
END IF
IF vm_60 < 0 THEN
LET vm_60 = 0
END IF
PRINTX cte,v1_30,v31_45,v46_60, vm_60
END REPORT
{
FUNCTION e_ccrp18()
DEFINE primera,imprime_ana,imprime_cliente CHAR(1),
cliente CHAR(70),
codigo_g,codigo_ant,codigo_act CHAR(6),
ret CHAR(30),
ejecuta,localiza CHAR(80),
documento CHAR(9)
--# CALL fgl_init4js()
--# LET archivo = NULL
--# LET filename = NULL
--# LET filename = FGL_GETENV("USPROGRAM")
--# LET archivo = "G:\\\\ESTADO.XLS"
--# LET sysos = FGL_GETENV("OS")
--# IF sysos = "Windows_NT" THEN
--# LET filename = filename CLIPPED," G:\\\\ESTADO.XLS"
--# LET localiza = "G:\\ESTADOS\\"
--# LET ejecuta = "DEL /S /Q ",localiza CLIPPED,"*.*"
RUN ejecuta
LET ejecuta = NULL
--# ELSE
--# LET filename = "C:\\\\ARCHIV~1\\\\MICROS~1\\\\OFFICE\\\\EXCEL.EXE G:\\\\ESTADO.XLS"
--# LET localiza = "G:\\ESTADOS\\"
--# LET archivo = "G:\\\\ESTADO.XLS"
--# LET ejecuta = "DEL ",localiza CLIPPED,"*.xls"
RUN ejecuta
LET ejecuta = NULL
--# END IF
# CREACION TABLA TEMPORAL
CREATE TABLE estado
(
tipo_cliente SMALLINT,
sec_cliente SMALLINT,
aplica_a INTEGER,
fecha_venc DATE,
valor DECIMAL(12,2)
)
LET primera = "S"
LET salir = "N"
WHILE salir != "S"
FETCH movtos_cli INTO movtos.*
IF status = NOTFOUND THEN
LET salir = "S"
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
IF prima IS NOT NULL THEN
LET movtos.valor = movtos.valor * prima
END IF
SELECT MAX(a.fecha_orig)
INTO fecha3
FROM cctb00001 a
WHERE a.num_doc = movtos.aplica_a AND
a.status_t IS NULL AND
a.aplica_a = a.num_doc
INSERT INTO estado VALUES (movtos.tipo_cliente,movtos.sec_cliente,
movtos.aplica_a,fecha3,movtos.valor)
END WHILE
--# IF winexec(filename) THEN
--# IF DDEconnect("EXCEL",archivo) THEN
--# LET cels = "R",6 USING "<<","C3"
--# IF DDEpoke("EXCEL",archivo,cels,fecha_final) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
DECLARE buscate CURSOR FOR
SELECT a.tipo_cliente,a.sec_cliente,a.aplica_a,SUM(a.valor) FROM estado a
GROUP BY 1,2,3
ORDER BY 1,2
LET primera = "S"
LET cnt = 16
LET balance = 0
LET codigo_ant = "1"
LET codigo_Act = NULL
FOREACH buscate INTO movtos.*
LET codigo_Act = movtos.tipo_cliente USING "##",movtos.sec_cliente USING "&&&&"
LET imprime_ana = "N"
IF primera = "S" THEN
LET codigo_ant = codigo_Act
END IF
IF codigo_ant != codigo_act THEN
LET codigo_ant = codigo_Act
LET primera = "S"
LET imprime_ana = "S"
--# LET cels = "R",38 USING "<<","C2"
--# IF DDEpoke("EXCEL",archivo,cels,no_v) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET cels = "R",38 USING "<<","C3"
--# IF DDEpoke("EXCEL",archivo,cels,v1_30) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET cels = "R",38 USING "<<","C4"
--# IF DDEpoke("EXCEL",archivo,cels,v31_45) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET cels = "R",38 USING "<<","C5"
--# IF DDEpoke("EXCEL",archivo,cels,v46_60) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET cels = "R",38 USING "<<","C7"
--# IF DDEpoke("EXCEL",archivo,cels,vm_60) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET command = "Run(\\\"ESTADO.XLS!SALVAR\\\";FALSE)"
--# CALL DDEExecute ("EXCEL",archivo,command) RETURNING ret
--# IF sysos = "Windows_NT" THEN
LET ejecuta = "COPY G:\\ESTADO.XLS G:\\ESTADOS\\",
codigo_g,".xls"
--# ELSE
LET ejecuta = "COPY G:\\ESTADO.XLS G:\\ESTADOS\\",
codigo_g,".xls"
--# END IF
RUN ejecuta
--# LET command = "Run(\\\"ESTADO.XLS!LIMPIAR\\\";FALSE)"
--# CALL DDEExecute ("EXCEL",archivo,command) RETURNING ret
LET cnt = 16
--# END IF
--# IF primera = "S" THEN
LET primera = "N"
LET imprime_cliente = "S"
LET no_v = 0
LET v1_30 = 0
LET v31_45 = 0
LET v46_60 = 0
LET vm_60 = 0
#### Seleciona los datos generales de identificacion del cliente
LET codigo_g = movtos.tipo_cliente USING "##",movtos.sec_cliente USING "&&&&"
SELECT UNIQUE b.nombre,b.limite_credito,b.zona_postal,b.num_rnc,c.calle,
c.casa_num,b.telefono,b.cod_zona,b.cod_provincia,c.barrio
INTO p_nombre,p_limite_credito,p_zona,p_numero,p_calle,p_casa,
ptelefono,pzona,pprovincia,pbarrio
FROM vetb00004 b ,vetb00005 c
WHERE b.tipo_cliente = movtos.tipo_cliente and b.sec_cliente = movtos.sec_cliente and
b.tipo_cliente = c.tipo_cliente and b.sec_cliente = c.sec_cliente and
b.status_t is null
SELECT a.descrip INTO nombre_zona FROM vetb00008 a
WHERE a.cod_zona = pzona
SELECT b.nombre_provincia
INTO nombre_p FROM vetb00009 a, vetb00020 b
WHERE a.cod_zona = pzona AND
a.cod_provincia = pprovincia AND
b.cod_provincia = a.cod_provincia
--# LET cliente = p_nombre CLIPPED," ","(",movtos.tipo_cliente USING "##","-",
movtos.sec_cliente USING "&&&&",")"
--# LET cliente = cliente CLIPPED
--# LET cels = "R",8 USING "<<","C2"
--# IF DDEpoke("EXCEL",archivo,cels,cliente) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
LET balance = 0
--# LET cliente = null
--# LET cliente = p_calle CLIPPED," #",p_casa CLIPPED,", ",pbarrio CLIPPED," Tel. ",ptelefono CLIPPED
--# LET cels = "R",9 USING "<<","C2"
--# IF DDEpoke("EXCEL",archivo,cels,cliente) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET cliente = null
--# LET cliente = "LIMITE: ",p_limite_credito USING "##,###,###.##"," ",
"RNC: ",p_numero
--# LET cels = "R",10 USING "<<","C2"
--# IF DDEpoke("EXCEL",archivo,cels,cliente) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET cliente = null
--# LET cliente = nombre_zona CLIPPED,", ",nombre_p CLIPPED
--# LET cels = "R",11 USING "<<","C2"
--# IF DDEpoke("EXCEL",archivo,cels,cliente) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# END IF
SELECT UNIQUE a.tipo_doc,MIN(a.fecha_orig) INTO tipo,fecha2
FROM cctb00001 a
WHERE a.num_doc = movtos.aplica_a AND a.status_t IS NULL AND
a.aplica_a = a.num_doc
GROUP BY 1
--# LET documento = movtos.aplica_a USING "<<<<<<","-",tipo
--# LET cels = "R",cnt USING "<<","C2"
--# IF DDEpoke("EXCEL",archivo,cels,documento) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET cels = "R",cnt USING "<<","C3"
--# IF DDEpoke("EXCEL",archivo,cels,fecha2) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET balance = balance + movtos.valor
--# LET cels = "R",cnt USING "<<","C5"
--# IF DDEpoke("EXCEL",archivo,cels,movtos.valor) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET balance = balance + movtos.valor
--# LET cels = "R",cnt USING "<<","C7"
--# IF DDEpoke("EXCEL",archivo,cels,balance) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET cels = "R",35 USING "<<","C7"
--# IF DDEpoke("EXCEL",archivo,cels,balance) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
#LET dias = (fecha_final - fecha2) - dias2
LET dias = (fecha_final - fecha3) - dias2
IF dias > 0 AND dias < 31 THEN
LET v1_30 = movtos.valor + v1_30
END IF
IF dias > 30 and dias < 46 THEN
LET v31_45 = movtos.valor + v31_45
END IF
IF dias > 45 and dias < 61 THEN
LET v46_60 = movtos.valor + v46_60
END IF
IF dias > 60 THEN
LET vm_60 = vm_60 + movtos.valor
END IF
--# LET cnt = cnt + 1
--# END FOREACH
IF imprime_ana = "N" THEN
--# LET cels = "R",38 USING "<<","C2"
--# IF DDEpoke("EXCEL",archivo,cels,no_v) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET cels = "R",38 USING "<<","C3"
--# IF DDEpoke("EXCEL",archivo,cels,v1_30) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET cels = "R",38 USING "<<","C4"
--# IF DDEpoke("EXCEL",archivo,cels,v31_45) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET cels = "R",38 USING "<<","C5"
--# IF DDEpoke("EXCEL",archivo,cels,v46_60) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# LET cels = "R",38 USING "<<","C7"
--# IF DDEpoke("EXCEL",archivo,cels,vm_60) THEN
--# ELSE
--# LET numero_msg =391
--# CALL msg(numero_msg)
--# END IF
--# IF sysos = "Windows_NT" THEN
LET ejecuta = "COPY G:\\ESTADO.XLS G:\\ESTADOS\\",
codigo_g,".xls"
--# ELSE
LET ejecuta = "COPY G:\\ESTADO.XLS G:\\ESTADOS\\",
codigo_g,".xls"
--# END IF
RUN ejecuta
--# LET command = "Run(\\\"ESTADO.XLS!LIMPIAR\\\";FALSE)"
--# CALL DDEExecute ("EXCEL",archivo,command) RETURNING ret
END IF
end if
end if
DROP TABLE estado
--# END FUNCTION
}