{ ------------------------------------------------------------------------------- PROGRAMA : CCPRRP001 OBJETIVO : Clientes sin Ventas en un Rango de dias PROGRAMADOR : Lic. Abner Montalvo FECHA REALIZACION : Marzo 26, 1993 ------------------------------------------------------------------------------- } GLOBALS "ccprgb000.4gl" DEFINE fecha_corte DATE DEFINE idx_1, idx_2,idx_b,idx_f SMALLINT DEFINE dia_minimo, dia_maximo INTEGER DEFINE selec10 CHAR(500) DEFINE valor_de DECIMAL(12,2) DEFINE valor_fact RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, nombre CHAR(30), fecha_factura DATE END RECORD DEFINE vendcli RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, nombre CHAR(30), sec_vend SMALLINT, factura INTEGER, fecha DATE, valor DECIMAL(12,2), balance DECIMAL(12,2) END RECORD DEFINE vendc RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, factura INTEGER, fecha DATE, valor DECIMAL(12,2) END RECORD DEFINE balance_cliente DECIMAL(10,2) DEFINE balancli RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, balance DECIMAL(10,2) END RECORD DEFINE reg_vend RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, sec_vend SMALLINT, nombre CHAR(30), apellido CHAR(30) END RECORD MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" USER usuarios USING clave SELECT * INTO p_companias.* FROM companias CALL ccprrp001() END MAIN FUNCTION ccprrp001() DEFINE salir2,salir,salir1 CHAR(1) DEFINE r_output STRING DEFINE handler om.SaxDocumentHandler DEFINE hay SMALLINT # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM ccfmrp001 FROM "ccfmrp001" DISPLAY FORM ccfmrp001 #CALL pantalla() DISPLAY "ccprrp001" AT 4,3 DISPLAY "Clientes sin Ventas" AT 6,30 LET tipo_papel = 1 CALL msgrp000(tipo_papel) INPUT BY NAME dia_minimo,dia_maximo,fecha_corte AFTER FIELD dia_minimo IF dia_minimo is null OR dia_minimo = 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD dia_minimo END IF AFTER FIELD dia_maximo IF dia_maximo is null OR dia_maximo = 0 THEN LET dia_maximo = 365 END IF IF dia_maximo < dia_minimo THEN LET numero_msg = 124 CALL msg(numero_msg) NEXT FIELD dia_maximo END IF BEFORE FIELD fecha_corte LET fecha_corte = today AFTER FIELD fecha_corte IF fecha_corte is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_corte END IF END INPUT CONSTRUCT BY NAME criterio ON d.sec_cliente IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF LET selec10 = "SELECT d.tipo_cliente,d.sec_cliente,a.nombre,MAX(d.fecha_orig) ", "FROM cctb00001 d,vetb00004 a ", "WHERE d.fecha_orig <= ? AND d.tipo_cliente = a.tipo_cliente AND ", criterio CLIPPED," AND d.status_t IS NULL AND d.sec_cliente= a.sec_cliente ", " AND d.tipo_doc[1] = 'F' AND a.status_t is null AND ", criterio clipped, " GROUP BY d.tipo_cliente,d.sec_cliente,a.nombre" DISPLAY "<< Buscando Factura del Cliente... Espere Por Favor. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE comando FROM selec10 DECLARE busca CURSOR FOR comando OPEN busca USING fecha_corte LET r_output = getPreviewDevice() IF NOT fgl_report_loadCurrentSettings("ccprrp001.4rp") THEN CALL fgl_winmessage("ERROR", "No se pudo cargar ccprrp001.4rp", "stop") RETURN END IF CALL fgl_report_selectDevice(r_output) CALL fgl_report_selectPreview(TRUE) LET handler = fgl_report_commitCurrentSettings() START REPORT ventas TO XML HANDLER handler LET hay = 0 DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) LET idx_b = 1 LET salir1 = "N" WHILE salir1 = "N" FETCH busca INTO valor_fact.* IF STATUS = NOTFOUND THEN LET salir1 = "S" EXIT WHILE END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET vendcli.tipo_cliente = valor_fact.tipo_cliente LET vendcli.sec_cliente = valor_fact.sec_cliente LET vendcli.nombre = valor_fact.nombre LET vendcli.fecha = valor_fact.fecha_factura LET vendcli.balance = 0 LET vendcli.valor = 0 IF (fecha_corte - vendcli.fecha) >= dia_minimo AND (fecha_corte - vendcli.fecha) <= dia_maximo THEN SELECT MAX(c.num_doc) INTO vendcli.factura FROM cctb00001 c WHERE c.fecha_orig=vendcli.fecha AND c.tipo_cliente=vendcli.tipo_cliente AND c.sec_cliente=vendcli.sec_cliente AND c.status_t IS NULL AND c.tipo_doc[1] = "F" SELECT c.neto INTO vendcli.valor FROM vetb00002 c WHERE c.factura = vendcli.factura SELECT a.sec_vend INTO vendcli.sec_vend FROM vetb00028 a WHERE tipo_cliente = vendcli.tipo_cliente AND sec_cliente = vendcli.sec_cliente LET balancli.balance = 0 SELECT sum(a.valor+a.monto_desc) INTO balancli.balance FROM cctb00001 a WHERE a.fecha_orig<=fecha_corte AND a.tipo_cliente=vendcli.tipo_cliente AND a.sec_cliente= vendcli.sec_cliente and a.status_t IS NULL AND a.tipo_doc NOT IN ("PC","AV") IF balancli.balance = 0 is null THEN LET balancli.balance = 0 END IF LET valor_de = 0 SELECT sum(a.valor+a.monto_desc) INTO valor_de FROM cctb00001 a WHERE a.fecha_orig<=fecha_corte AND a.tipo_cliente=vendcli.tipo_cliente AND a.sec_cliente= vendcli.sec_cliente and a.status_t IS NULL AND a.tipo_doc = "AV" and a.num_doc = a.aplica_a IF valor_de is null THEN LET valor_de = 0 END IF LET vendcli.balance = balancli.balance - valor_de OUTPUT TO REPORT ventas(vendcli.*,fecha_corte) LET hay = 1 END IF END WHILE FINISH REPORT ventas IF NOT hay THEN CALL fgl_winmessage("INFO", "NO EXISTEN REGISTROS PARA ESTOS PARAMETROS", "info") END IF END FUNCTION REPORT ventas(x,fecha5) DEFINE x RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, nombre CHAR(30), sec_vend SMALLINT, factura INTEGER, fecha DATE, valor DECIMAL(12,2), balance DECIMAL(12,2) END RECORD DEFINE nombre1,apellido CHAR(30) DEFINE fecha5 DATE DEFINE empresa, titulo, vendedor, cli, fec STRING DEFINE dias_c INTEGER ORDER BY x.sec_vend,x.sec_cliente FORMAT BEFORE GROUP OF x.sec_vend INITIALIZE nombre1, apellido TO NULL SELECT nom1_emp,apell1_emp INTO nombre1,apellido FROM adtb00003 WHERE status_t IS NULL AND num_emp = x.sec_vend LET descrip5 = NULL LET descrip5 = nombre1 CLIPPED," ",apellido CLIPPED IF descrip5 IS NULL OR LENGTH(descrip5 CLIPPED) = 0 THEN LET descrip5 = "Vendedor no Existe. Verifique." END IF LET vendedor = "Vendedor : ", x.sec_vend USING "&&&&", " ", descrip5 CLIPPED LET empresa = p_companias.nombre CLIPPED IF dia_maximo != 3650 THEN LET titulo = "Clientes sin Ventas de ", dia_minimo USING "<<<<<", " a ", dia_maximo USING "<<<<<", " dias Al ", fecha5 USING "dd/mm/yyyy" ELSE LET titulo = "Clientes sin Ventas a mas de ", dia_minimo USING "<<<<<", " dias Al ", fecha5 USING "dd/mm/yyyy" END IF PRINTX empresa, titulo, vendedor ON EVERY ROW LET cli = x.tipo_cliente USING "&&", "-", x.sec_cliente USING "&&&&&", " ", x.nombre CLIPPED LET fec = x.fecha USING "dd/mm/yyyy" LET dias_c = fecha5 - x.fecha PRINTX cli, x.factura, fec, x.valor, dias_c, x.balance END REPORT