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