- ccprrp018: agrega MAIN, GROUP BY por nombre, y reemplaza la salida Excel/DDE (G:\ESTADO.XLS, DEL G:\ESTADOS) por un reporte Genero (ccprrp018.4rp); carga con un solo INSERT...SELECT en tabla temporal. - ccprrp003: reemplaza el REPORT de texto con codigos de impresora por ccprrp003.4rp; agrega por cliente en una consulta (DATEDIFF, mismas reglas). - ccprrp001: agrega MAIN, GROUP BY por nombre, reporte Genero (ccprrp001.4rp) y registra el formulario ccfmrp001 en FORMULARIOS_CC (faltaba, -1110). - ccprrp052: la validacion del campo Orden estaba al reves. - ccprmt002: cctb00002.fecha es datetime en SQL Server; el formulario, la variable global relacion (ccprgb000) y el CONSTRUCT la manejan como DATE; corrige que eLiminar mostrara exito sin actualizar filas. - mbsERP.4pw: registra los .4rp, libgre y ccfmrp001 (sin credenciales). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
689 lines
22 KiB
Plaintext
689 lines
22 KiB
Plaintext
{
|
|
-------------------------------------------------------------------------------
|
|
PROGRAMA : CCPRRP018
|
|
OBJETIVO : Listar los Estados De Cuentas de los clientes
|
|
(Partidas pendientes de cobros)
|
|
PROGRAMADOR : Tadeo A. Ferreras
|
|
FECHA REALIZACION : Julio 28, 1993
|
|
-------------------------------------------------------------------------------
|
|
}
|
|
GLOBALS "ccprgb000.4gl"
|
|
|
|
DEFINE prima DECIMAL(10,2) ### Varible que equivale a la prima de otra moneda
|
|
DEFINE destino,mov CHAR(1)
|
|
DEFINE idx_1, idx_2, idx_3 SMALLINT ## Variables usadas para formar arreglos
|
|
DEFINE fecha_final DATE ## Varible usada para busqueda por fecha de corte
|
|
DEFINE salir, salir1, salir3, tipo_venta CHAR(1) ## Bandera para control loop
|
|
DEFINE selec5, selec6 CHAR(1500) ## Variables para almacenar busquedas
|
|
DEFINE valor_de DECIMAL(12,2)
|
|
DEFINE dias2 INTEGER,
|
|
command CHAR(120),
|
|
tipo CHAR(2)
|
|
DEFINE dias SMALLINT ## Variable que almacena la diferencia de dias
|
|
DEFINE p_tel LIKE vetb00004.telefono
|
|
DEFINE archivo,filename,sysos CHAR(120),
|
|
cels CHAR(20),
|
|
cnt SMALLINT,
|
|
nombre_zona,nombre_p CHAR(30)
|
|
DEFINE credito, debito, tcredito, tdebito, tbalance,
|
|
limite, b_balance, no_v,v1_30, v31_45, v46_60, vm_60,p_valor DECIMAL(12,2)
|
|
|
|
DEFINE p_prov LIKE vetb00020.cod_provincia,
|
|
nom_prov LIKE vetb00020.nombre_provincia
|
|
|
|
DEFINE p_calle,p_descrip,pbarrio CHAR(30)
|
|
DEFINE p_casa,p_zona,p_numero CHAR(10),
|
|
balance DECIMAL(12,2),
|
|
ptelefono LIKE vetb00004.telefono,
|
|
pzona LIKE vetb00004.cod_zona,
|
|
pprovincia LIKE vetb00004.cod_provincia
|
|
|
|
#DEFINE no_v LIKE cctb00001.aplica_a
|
|
|
|
DEFINE fecha1,fecha2 DATE,
|
|
p_nombre CHAR(30),
|
|
p_limite_credito DECIMAL(10,2)
|
|
####### Variables para desplegar resultados por pantalla ante de la impresion
|
|
|
|
DEFINE tot_gen1 RECORD
|
|
totald DECIMAL(10,2),
|
|
totalc DECIMAL(10,2),
|
|
totalg DECIMAL(10,2)
|
|
END RECORD,
|
|
|
|
##### Registro que almacena la infoprmacion a imprimir ####
|
|
m_tipo_doc LIKE cctb00001.tipo_doc
|
|
|
|
DEFINE movtos RECORD
|
|
tipo_cliente SMALLINT,
|
|
sec_cliente SMALLINT,
|
|
aplica_a LIKE cctb00001.aplica_a,
|
|
valor DECIMAL(12,2)
|
|
END RECORD
|
|
DEFINE fecha3 DATE
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL ARG_VAL(1) RETURNING usuarios
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
|
|
CONNECT TO "smarmotech" USER usuarios USING clave
|
|
|
|
CALL ccprrp018()
|
|
END MAIN
|
|
|
|
FUNCTION ccprrp018()
|
|
|
|
# WHENEVER ERROR CONTINUE
|
|
|
|
OPTIONS
|
|
FORM LINE 8,
|
|
ERROR LINE 23,
|
|
COMMENT LINE 21
|
|
|
|
####### Abriendo y desplegando formulario de captura de datos
|
|
|
|
OPEN FORM ccfmrp018 FROM "ccfmrp018"
|
|
DISPLAY FORM ccfmrp018
|
|
#CALL pantalla()
|
|
DISPLAY "ccprrp018" AT 4,3 ATTRIBUTE(RED)
|
|
DISPLAY "Estado Cuentas Pendiente De Cobros" AT 6,21 ATTRIBUTE(BLACK)
|
|
|
|
LET tipo_papel = 1
|
|
CALL msgrp000(tipo_papel)
|
|
|
|
##### Creando el criterio de busqueda
|
|
|
|
CONSTRUCT criterio ON a.tipo_cliente,a.sec_cliente FROM
|
|
tipo_cliente, sec_cliente
|
|
##### Aceptando la fecha de corte para busqueda de informacion
|
|
|
|
INITIALIZE fecha_final to null
|
|
INPUT BY NAME prima,fecha_final,dias2
|
|
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
|
|
|
|
AFTER FIELD dias2
|
|
IF dias2 is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD dias2
|
|
END IF
|
|
|
|
END INPUT
|
|
|
|
###### Creando facilidad para cancelar operacion mediante la tecla DELETE
|
|
###### o SUPR
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
# Busca los documentos que esten en el rango de fechas especificado
|
|
LET selec5 =
|
|
"SELECT a.tipo_cliente,a.sec_cliente,a.aplica_a,sum(a.valor+a.monto_desc) ",
|
|
"FROM cctb00001 a,vetb00004 c ",
|
|
"WHERE a.status_t IS NULL AND a.fecha_orig <= ? AND ",
|
|
" a.num_doc IS NOT NULL AND a.tipo_doc != ('PC') AND ",
|
|
" a.tipo_cliente = c.tipo_cliente AND ",
|
|
" a.sec_cliente = c.sec_cliente AND ",
|
|
#" a.sec_cliente = b.sec_cliente AND a.tipo_doc in ('FE','FT','NC') AND ",
|
|
criterio CLIPPED," GROUP BY a.tipo_cliente,a.sec_cliente,a.aplica_a HAVING SUM(a.valor+a.monto_desc) <> 0 ",
|
|
"ORDER BY 3 "
|
|
|
|
DISPLAY "<< Buscando los Movimientos del Rango >>" AT 20,14
|
|
ATTRIBUTE (REVERSE,BOLD)
|
|
|
|
PREPARE movi FROM selec5
|
|
DECLARE movtos_cli CURSOR FOR movi
|
|
#OPEN movtos_cli USING fecha_final -- G6: e_ccrp18 carga todo con un INSERT ... SELECT
|
|
LET destino = "E"
|
|
IF destino = "E" THEN
|
|
CALL e_ccrp18()
|
|
RETURN
|
|
END IF
|
|
#START REPORT report18 TO "ccrp18"
|
|
|
|
DISPLAY " " AT 19,14
|
|
DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>"
|
|
AT 19,14 ATTRIBUTE (REVERSE)
|
|
|
|
|
|
###### Comienza el loop para enviar informacion al reporte
|
|
|
|
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 UNIQUE a.tipo_doc
|
|
INTO m_tipo_doc
|
|
FROM cctb00001 a
|
|
WHERE a.status_t IS NULL AND
|
|
a.num_doc = a.aplica_a AND
|
|
a.num_doc=movtos.aplica_a AND
|
|
a.tipo_doc not in ("PG","NC","PC","ND") and
|
|
a.tipo_cliente=movtos.tipo_cliente AND
|
|
a.sec_cliente=movtos.sec_cliente
|
|
GROUP BY 1
|
|
|
|
IF STATUS < 0 THEN
|
|
LET m_tipo_doc = "KK"
|
|
END IF
|
|
|
|
IF m_tipo_doc = "DE" THEN
|
|
#LET doccli16.fecha_venc = NULL
|
|
SELECT SUM(a.valor+a.monto_desc)*-1
|
|
INTO movtos.valor
|
|
FROM cctb00001 a
|
|
WHERE a.fecha_orig<=fecha_final AND a.tipo_cliente=movtos.tipo_cliente
|
|
AND a.sec_cliente=movtos.sec_cliente AND a.status_t IS NULL AND
|
|
a.tipo_doc = "DE" AND a.num_doc = movtos.aplica_a
|
|
END IF
|
|
# OUTPUT TO REPORT report18(movtos.*)
|
|
END WHILE
|
|
|
|
# FINISH REPORT report18
|
|
RUN "type c:\ccrp18 > %USPRINT%"
|
|
#CALL fdestino(destino,archivo,imprime)
|
|
CLEAR SCREEN
|
|
END FUNCTION
|
|
|
|
####### Funcion para dar salida a la informacion
|
|
{
|
|
REPORT report18(x)
|
|
DEFINE x RECORD
|
|
tipo_cliente SMALLINT,
|
|
sec_cliente SMALLINT,
|
|
aplica_a LIKE cctb00001.aplica_a,
|
|
valor DECIMAL(12,2)
|
|
END RECORD
|
|
|
|
DEFINE hora CHAR(5)
|
|
DEFINE imp_cli CHAR(1)
|
|
OUTPUT
|
|
TOP MARGIN 0
|
|
LEFT MARGIN 0
|
|
BOTTOM MARGIN 2
|
|
ORDER BY x.sec_cliente,x.aplica_a
|
|
|
|
#### Proceso para sortear la informacion
|
|
|
|
FORMAT
|
|
PAGE HEADER
|
|
LET hora = time
|
|
|
|
PRINT COLUMN 1, letras.comp_on
|
|
PRINT COLUMN 1, "ccprrp018",
|
|
COLUMN 31, "R A Y - O - V A C D O M I N I C A N A, S. A.",
|
|
COLUMN 101, today using "dd/mm/yyyy"
|
|
PRINT COLUMN 40,"Estado de Cuenta Al ",fecha_final USING "dd/mm/yyyy",
|
|
COLUMN 106, hora
|
|
|
|
IF x.sec_cliente > 9000 AND prima IS NULL THEN
|
|
PRINT COLUMN 53, "US$"
|
|
ELSE
|
|
PRINT COLUMN 53, "RD$"
|
|
END IF
|
|
|
|
##### Si el cliente es local el valor de la prima de la moneda es nulo
|
|
IF x.sec_cliente < 9000 THEN
|
|
LET prima = null
|
|
END IF
|
|
|
|
SKIP 1 LINE
|
|
BEFORE GROUP OF x.sec_cliente
|
|
|
|
LET idx = 0
|
|
LET no_v = 0
|
|
LET v1_30 = 0
|
|
LET v31_45 = 0
|
|
LET v46_60 = 0
|
|
LET vm_60 = 0
|
|
|
|
IF tdebito IS NULL THEN
|
|
LET tdebito = 0
|
|
END IF
|
|
|
|
IF tcredito IS NULL THEN
|
|
LET tcredito = 0
|
|
END IF
|
|
|
|
IF tbalance IS NULL THEN
|
|
LET tbalance = 0
|
|
END IF
|
|
|
|
#### Seleciona los datos generales de identificacion del cliente
|
|
|
|
SELECT UNIQUE b.nombre,b.limite_credito,b.zona_postal,b.num_rnc,c.calle,
|
|
c.casa_num,c.barrio,b.telefono,b.cod_provincia
|
|
INTO p_nombre,p_limite_credito,p_zona,p_numero,p_calle,p_casa,pbarrio,p_tel,p_prov
|
|
FROM vetb00004 b ,vetb00005 c
|
|
WHERE x.tipo_cliente = b.tipo_cliente and x.sec_cliente = b.sec_cliente and
|
|
b.tipo_cliente = c.tipo_cliente and b.sec_cliente = c.sec_cliente and
|
|
b.status_t is null
|
|
|
|
|
|
SELECT a.nombre_provincia INTO nom_prov
|
|
FROM vetb00020 a
|
|
WHERE a.cod_provincia = p_prov
|
|
AND a.status_t IS NULL
|
|
|
|
IF balance IS NULL THEN
|
|
LET balance = 0
|
|
END IF
|
|
|
|
LET b_balance = balance
|
|
|
|
IF limite IS NULL THEN
|
|
LET limite = 0
|
|
END IF
|
|
|
|
LET debito = 0
|
|
LET credito = 0
|
|
|
|
IF prima is not null THEN
|
|
PRINT COLUMN 1,"Prima: ", prima using "###.##"
|
|
END IF
|
|
|
|
PRINT COLUMN 1,
|
|
"--------------------------------------------------",
|
|
"--------------------------------------------------",
|
|
"-----------"
|
|
, letras.negrillas_on
|
|
|
|
PRINT COLUMN 1, "Cliente:",
|
|
COLUMN 10, x.tipo_cliente using "&&","-",
|
|
x.sec_cliente using "&&&&",
|
|
COLUMN 18, p_nombre clipped,
|
|
COLUMN 64, "RNC : ",p_numero
|
|
|
|
PRINT COLUMN 10, p_calle clipped," ",p_casa CLIPPED,pbarrio CLIPPED,", ",
|
|
nom_prov CLIPPED,
|
|
COLUMN 90, "Tel : ",p_tel CLIPPED
|
|
PRINT COLUMN 1,
|
|
"--------------------------------------------------",
|
|
"--------------------------------------------------",
|
|
"-----------"
|
|
|
|
PRINT COLUMN 4, "D O C U M E N T O"
|
|
|
|
PRINT COLUMN 1, "|----------------------|"
|
|
|
|
PRINT COLUMN 3, "Numero",
|
|
COLUMN 11, "Tipo",
|
|
COLUMN 17, "Fecha",
|
|
COLUMN 30, "Vencimiento",
|
|
COLUMN 63, " Valor ",
|
|
COLUMN 99, "B A L A N C E"
|
|
|
|
PRINT COLUMN 1,
|
|
"--------------------------------------------------",
|
|
"--------------------------------------------------" ,
|
|
"-----------"
|
|
# END IF
|
|
|
|
ON EVERY ROW
|
|
|
|
display "aplica ",x.aplica_a
|
|
|
|
SELECT UNIQUE a.tipo_doc,MAX(a.fecha_orig),MAX(a.fecha_ven)
|
|
INTO tipo,fecha2,fecha3
|
|
FROM cctb00001 a
|
|
WHERE a.num_doc = x.aplica_a AND
|
|
a.status_t IS NULL AND
|
|
a.aplica_a = a.num_doc
|
|
GROUP BY 1
|
|
|
|
IF fecha2 IS NULL THEN
|
|
LET fecha2 = fecha_final
|
|
END IF
|
|
IF fecha3 IS NULL THEN
|
|
LET fecha3 = fecha_final
|
|
END IF
|
|
|
|
###### Balanceando la informacion
|
|
|
|
|
|
####### Calculando los dias de vencimiento del documento
|
|
|
|
|
|
# IF (fecha_final - fecha3) >= dias2 THEN
|
|
LET dias = (fecha_final - fecha3) - dias2
|
|
|
|
LET p_valor = x.valor
|
|
IF p_valor <> 0 THEN
|
|
|
|
LET Idx = idx + 1
|
|
display "idx ",idx
|
|
#IF idx > 0 THEN
|
|
|
|
IF tipo != "FT" THEN
|
|
INITIALIZE fecha3 TO NULL
|
|
END IF
|
|
|
|
LET b_balance = b_balance + x.valor
|
|
|
|
IF dias <= 0 THEN
|
|
LET no_v = p_valor + no_v
|
|
END IF
|
|
IF dias > 0 and dias < 31 THEN
|
|
LET v1_30 = p_valor + v1_30
|
|
END IF
|
|
IF dias > 30 and dias < 46 THEN
|
|
LET v31_45 = p_valor + v31_45
|
|
END IF
|
|
IF dias > 45 and dias < 61 THEN
|
|
LET v46_60 = p_valor + v46_60
|
|
END IF
|
|
IF dias > 60 THEN
|
|
LET vm_60 = vm_60 + p_valor
|
|
END IF
|
|
|
|
#display "dos aplica_a ",x.aplica_a
|
|
PRINT COLUMN 3, x.aplica_a using "######",
|
|
COLUMN 12, tipo,
|
|
COLUMN 16, fecha2 using "dd/mm/yyyy",
|
|
COLUMN 29, fecha3 using "dd/mm/yyyy",
|
|
COLUMN 59, x.valor using "(((,(((,(((.&&)",
|
|
COLUMN 97, b_balance using "(((,(((,(((.&&)"
|
|
#END IF
|
|
END IF
|
|
|
|
AFTER GROUP OF x.sec_cliente
|
|
IF no_v <> 0 OR v1_30 <> 0 OR v31_45 <> 0 OR v46_60 <> 0 OR vm_60 <> 0 THEN
|
|
SKIP 1 LINE
|
|
PRINT COLUMN 52," RESUMEN POR VENCIMIENTO "
|
|
PRINT #COLUMN 1, "ANALISIS POR ANTIGUEDAD",letras.negrillas_on,
|
|
COLUMN 32, "No Vencido",
|
|
COLUMN 50, "1 a 30",
|
|
COLUMN 60, "31 a 45",
|
|
COLUMN 74, "46 a 60",
|
|
COLUMN 86, "Mas de 60",letras.negrillas_off
|
|
|
|
PRINT #COLUMN 1, "DE SU APRECIADA CUENTA: ",
|
|
COLUMN 25, no_v using "((,(((,(((.&&)",
|
|
COLUMN 41, v1_30 using "((,(((,(((.&&)",
|
|
COLUMN 54, v31_45 using "((,(((,(((.&&)",
|
|
COLUMN 70, v46_60 using "((,(((,(((.&&)",
|
|
COLUMN 82, vm_60 using "((,(((,(((.&&)"
|
|
|
|
SKIP 1 LINE
|
|
|
|
IF v1_30 = 0 AND v31_45 = 0 AND v46_60 = 0 AND
|
|
vm_60 = 0 THEN
|
|
PRINT COLUMN 1,
|
|
" NOTA : "
|
|
PRINT COLUMN 1,
|
|
" CON LA REMISION DE ESTE ESTADO DE CUENTAS SOLO ESTAMOS CONFIRMANDO EL "
|
|
PRINT COLUMN 1,
|
|
" BALANCE COMPUESTO POR LA(S) FACTURA(S) DETALLADA(S) EN EL MISMO."
|
|
PRINT COLUMN 1,
|
|
" SI EXISTE ALGUNA DIFERENCIA FAVOR COMUNICARSE CON NUESTRO GERENTE DE TESORERIA "
|
|
PRINT COLUMN 1,
|
|
" EL LIC. PEDRO ACOSTA AL TEL. 530-5409, O ENVIARNOS SU RESPUESTA, YA SEA POR "
|
|
PRINT COLUMN 1,
|
|
" LA VIA A NUESTRO FAX No. 530-7966, O POR VIA A NUESTRA DIRECCION ELECTRONICA"
|
|
PRINT COLUMN 1,
|
|
" pacosta@dom.rov.com "
|
|
SKIP 1 LINE
|
|
PRINT COLUMN 1,
|
|
" SALUDOS CORDIALES. "
|
|
END IF
|
|
|
|
IF v1_30 != 0 OR v31_45 != 0 OR v46_60 != 0 OR
|
|
vm_60 != 0 THEN
|
|
PRINT COLUMN 1,
|
|
"NOTA : "
|
|
PRINT COLUMN 1,
|
|
"FAVOR OBSERVAR QUE ESTE ESTADO DE CUENTAS PRESENTA UN BALANCE VENCIDO COMPUESTO "
|
|
PRINT COLUMN 1,
|
|
"POR LA(S) FACTURA(S) QUE LE ESTAMOS SENALANDO."
|
|
PRINT COLUMN 1,
|
|
"EN CASO DE QUE DESEE LE ENVIAMOS A NUESTRO REPRESENTANTE PARA LOS FINES DE "
|
|
PRINT COLUMN 1,
|
|
"RIGOR, FAVOR COMUNICARSE CON NUESTRO GERENTE DE TESORERIA EL LIC. PEDRO ACOSTA "
|
|
PRINT COLUMN 1,
|
|
"AL TELEFONO 530-5409, O ENVIARNOS SU RESPUESTA, YA SEA POR VIA A NUESTRO FAX "
|
|
PRINT COLUMN 1,
|
|
"EL No. 530-7966, O POR VIA A NUESTRA DIRECCION ELECTRONICA pacosta@dom.rov.com "
|
|
SKIP 1 LINE
|
|
PRINT COLUMN 1,
|
|
"SALUDOS CORDIALES. "
|
|
END IF
|
|
|
|
SKIP 1 LINES
|
|
|
|
|
|
PRINT COLUMN 51,
|
|
" LIC. PEDRO ACOSTA "
|
|
|
|
|
|
PRINT COLUMN 51,
|
|
"GERENTE DE TESORERIA"
|
|
|
|
LET b_balance = 0
|
|
SKIP TO TOP OF PAGE
|
|
|
|
END IF
|
|
|
|
PAGE TRAILER
|
|
SKIP 1 LINE
|
|
PRINT COLUMN 1, letras.negrillas_on,
|
|
"PG-Pago FT-Factura Local FE-Factura Exterior ",
|
|
"ND-Nota Debito NC-Nota Credito DE-Devolucion",
|
|
letras.negrillas_off
|
|
|
|
LET no_v = 0
|
|
LET v1_30 = 0
|
|
LET v31_45 = 0
|
|
LET v46_60 = 0
|
|
LET vm_60 = 0
|
|
|
|
END REPORT
|
|
}
|
|
|
|
{ G6: la salida original llenaba una plantilla de Excel por DDE (G:\ESTADO.XLS) y
|
|
copiaba un archivo por cliente a G:\ESTADOS. Ahora se emite un reporte de Genero
|
|
(ccprrp018.4rp): PDF en el navegador, visor en GDC. }
|
|
FUNCTION e_ccrp18()
|
|
DEFINE codigo_act, codigo_ant STRING
|
|
DEFINE handler om.SaxDocumentHandler
|
|
DEFINE r_output STRING
|
|
DEFINE hay SMALLINT
|
|
DEFINE sql_ins STRING
|
|
DEFINE fila RECORD
|
|
codigo STRING,
|
|
cliente STRING,
|
|
direccion STRING,
|
|
limite STRING,
|
|
zona STRING,
|
|
corte STRING,
|
|
documento STRING,
|
|
fecha STRING,
|
|
valor DECIMAL(12,2),
|
|
balance DECIMAL(12,2),
|
|
dias INTEGER
|
|
END RECORD
|
|
|
|
CREATE TEMP TABLE estado
|
|
(
|
|
tipo_cliente SMALLINT,
|
|
sec_cliente SMALLINT,
|
|
aplica_a INTEGER,
|
|
fecha_venc DATE,
|
|
valor DECIMAL(12,2),
|
|
tipo_doc CHAR(2),
|
|
fecha_min DATE
|
|
)
|
|
|
|
LET sql_ins =
|
|
"INSERT INTO estado (tipo_cliente,sec_cliente,aplica_a,fecha_venc,valor,tipo_doc,fecha_min) ",
|
|
"SELECT g.tipo_cliente,g.sec_cliente,g.aplica_a,d.fmax,g.valor,d.tipo_doc,d.fmin FROM ( ",
|
|
" SELECT a.tipo_cliente,a.sec_cliente,a.aplica_a,SUM(a.valor+a.monto_desc) AS valor ",
|
|
" FROM cctb00001 a,vetb00004 c ",
|
|
" WHERE a.status_t IS NULL AND a.fecha_orig <= ? AND ",
|
|
" a.num_doc IS NOT NULL AND a.tipo_doc != 'PC' AND ",
|
|
" a.tipo_cliente = c.tipo_cliente AND ",
|
|
" a.sec_cliente = c.sec_cliente AND ",
|
|
criterio CLIPPED,
|
|
" GROUP BY a.tipo_cliente,a.sec_cliente,a.aplica_a ",
|
|
" HAVING SUM(a.valor+a.monto_desc) <> 0) g ",
|
|
"LEFT JOIN (SELECT num_doc,MIN(tipo_doc) AS tipo_doc,MIN(fecha_orig) AS fmin, ",
|
|
" MAX(fecha_orig) AS fmax ",
|
|
" FROM cctb00001 ",
|
|
" WHERE status_t IS NULL AND aplica_a = num_doc ",
|
|
" GROUP BY num_doc) d ON d.num_doc = g.aplica_a"
|
|
PREPARE p_ins18 FROM sql_ins
|
|
EXECUTE p_ins18 USING fecha_final
|
|
|
|
LET r_output = getPreviewDevice()
|
|
IF NOT fgl_report_loadCurrentSettings("ccprrp018.4rp") THEN
|
|
CALL fgl_winmessage("ERROR", "No se pudo cargar ccprrp018.4rp", "stop")
|
|
DROP TABLE estado
|
|
RETURN
|
|
END IF
|
|
CALL fgl_report_selectDevice(r_output)
|
|
CALL fgl_report_selectPreview(TRUE)
|
|
LET handler = fgl_report_commitCurrentSettings()
|
|
START REPORT estado18 TO XML HANDLER handler
|
|
|
|
DECLARE buscate CURSOR FOR
|
|
SELECT a.tipo_cliente, a.sec_cliente, a.aplica_a, a.valor,
|
|
a.fecha_venc, a.tipo_doc, a.fecha_min
|
|
FROM estado a
|
|
ORDER BY a.tipo_cliente, a.sec_cliente, a.aplica_a
|
|
|
|
LET hay = 0
|
|
LET codigo_ant = NULL
|
|
LET balance = 0
|
|
FOREACH buscate INTO movtos.*, fecha3, tipo, fecha2
|
|
LET hay = 1
|
|
IF prima IS NOT NULL THEN
|
|
LET movtos.valor = movtos.valor * prima
|
|
END IF
|
|
LET codigo_act = movtos.tipo_cliente USING "##", "-",
|
|
movtos.sec_cliente USING "<<<<<<<<&"
|
|
IF codigo_ant IS NULL OR codigo_ant != codigo_act THEN
|
|
LET codigo_ant = codigo_act
|
|
LET balance = 0
|
|
INITIALIZE p_nombre, p_limite_credito, p_zona, p_numero, p_calle,
|
|
p_casa, ptelefono, pzona, pprovincia, pbarrio,
|
|
nombre_zona, nombre_p TO NULL
|
|
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
|
|
END IF
|
|
|
|
LET balance = balance + movtos.valor
|
|
LET fila.codigo = codigo_act
|
|
LET fila.cliente = p_nombre CLIPPED, " (", codigo_act, ")"
|
|
LET fila.direccion = p_calle CLIPPED, " #", p_casa CLIPPED, ", ",
|
|
pbarrio CLIPPED, " Tel. ", ptelefono CLIPPED
|
|
LET fila.limite = "LIMITE: ", p_limite_credito USING "##,###,##&.&&",
|
|
" RNC: ", p_numero CLIPPED
|
|
LET fila.zona = nombre_zona CLIPPED, ", ", nombre_p CLIPPED
|
|
LET fila.corte = "Al ", fecha_final USING "dd/mm/yyyy"
|
|
LET fila.documento = movtos.aplica_a USING "<<<<<<<<<", "-", tipo CLIPPED
|
|
LET fila.fecha = fecha2 USING "dd/mm/yyyy"
|
|
LET fila.valor = movtos.valor
|
|
LET fila.balance = balance
|
|
LET fila.dias = (fecha_final - fecha3) - dias2
|
|
OUTPUT TO REPORT estado18(fila.*)
|
|
END FOREACH
|
|
|
|
FINISH REPORT estado18
|
|
DROP TABLE estado
|
|
|
|
IF NOT hay THEN
|
|
CALL fgl_winmessage("INFO",
|
|
"NO EXISTEN REGISTROS PARA ESTOS PARAMETROS", "info")
|
|
END IF
|
|
END FUNCTION
|
|
|
|
REPORT estado18(x)
|
|
DEFINE x RECORD
|
|
codigo STRING,
|
|
cliente STRING,
|
|
direccion STRING,
|
|
limite STRING,
|
|
zona STRING,
|
|
corte STRING,
|
|
documento STRING,
|
|
fecha STRING,
|
|
valor DECIMAL(12,2),
|
|
balance DECIMAL(12,2),
|
|
dias INTEGER
|
|
END RECORD
|
|
DEFINE nov, d1, d2, d3, d4, total DECIMAL(12,2)
|
|
|
|
ORDER EXTERNAL BY x.codigo
|
|
|
|
FORMAT
|
|
BEFORE GROUP OF x.codigo
|
|
LET nov = 0
|
|
LET d1 = 0
|
|
LET d2 = 0
|
|
LET d3 = 0
|
|
LET d4 = 0
|
|
LET total = 0
|
|
PRINTX x.cliente, x.limite, x.direccion, x.zona, x.corte
|
|
|
|
ON EVERY ROW
|
|
LET total = total + x.valor
|
|
CASE
|
|
WHEN x.dias <= 0
|
|
LET nov = nov + x.valor
|
|
WHEN x.dias < 31
|
|
LET d1 = d1 + x.valor
|
|
WHEN x.dias < 46
|
|
LET d2 = d2 + x.valor
|
|
WHEN x.dias < 61
|
|
LET d3 = d3 + x.valor
|
|
OTHERWISE
|
|
LET d4 = d4 + x.valor
|
|
END CASE
|
|
PRINTX x.documento, x.fecha, x.valor, x.balance, x.dias
|
|
|
|
AFTER GROUP OF x.codigo
|
|
PRINTX nov, d1, d2, d3, d4, total
|
|
END REPORT
|