{ ------------------------------------------------------------------------------- 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 FUNCTION ccprrp001() DEFINE salir2,salir,salir1 CHAR(1) # 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 1,2,3" 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 START REPORT ventas TO "C:\\archivo" 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) END IF END WHILE FINISH REPORT ventas CLEAR SCREEN RUN "type C:\\archivo > %USPRINT%" 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 dias_c INTEGER DEFINE fecha5 DATE DEFINE balance, monto_factura DECIMAL(10,2) DEFINE descrip_zone CHAR(30) DEFINE doble_on CHAR(2) DEFINE doble_off CHAR(2) DEFINE negrillas_on CHAR(2) DEFINE negrillas_off CHAR(2) DEFINE comp_on CHAR(2) DEFINE comp_off CHAR(2) DEFINE doce CHAR(2) DEFINE normal CHAR(2) DEFINE hora CHAR(5) DEFINE fecha_factura DATE DEFINE total_monto_zona,total_gral_monto_zona,monto DECIMAL(12,2) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 ORDER BY x.sec_vend,x.sec_cliente FORMAT PAGE HEADER LET doble_on = ASCII 14 LET doble_off = ASCII 20 LET negrillas_on = ASCII 27, ASCII 69 LET negrillas_off = ASCII 27, ASCII 70 LET comp_on = ASCII 15 LET comp_off = ASCII 18 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 LET hora = time IF total_gral_monto_zona is null THEN LET total_gral_monto_zona = 0 END IF LET lj = (96 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT COLUMN 1, doce ,negrillas_on PRINT COLUMN 1, "ccprrp001", COLUMN lj, p_companias.nombre, COLUMN 89, "Pag. ",pageno using "###" PRINT COLUMN 32, "Sistema de Cuentas por Cobrar", COLUMN 89, today using "dd/mm/yyyy" IF dia_maximo != 3650 THEN PRINT COLUMN 30, "Clientes sin Ventas ", "de ",dia_minimo using "<<<", " a ",dia_maximo using "<<<", " dias", COLUMN 92, hora ELSE PRINT COLUMN 29, "Clientes sin Ventas a mas de ", dia_minimo using "<<"," dias", COLUMN 92, hora END IF PRINT COLUMN 41, "Al ", fecha5 using "dd/mm/yyyy" SKIP 1 LINES PRINT COLUMN 1, "--------------------------------------------------", "----------------------------------------------" PRINT COLUMN 44, "|------ULTIMA VENTA------|" PRINT COLUMN 6, "Cliente", COLUMN 44, "Factura", COLUMN 54, "Fecha", COLUMN 65, "Valor", COLUMN 74, "No.dias", COLUMN 86, "Balance" PRINT COLUMN 1, "--------------------------------------------------", "----------------------------------------------" # , negrillas_off BEFORE GROUP OF x.sec_vend SKIP 1 LINE 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 THEN LET descrip5 = "Vendedor no Existe. Verifique." END IF PRINT COLUMN 1," Vendedor : ",x.sec_vend using "&&&&"," ", descrip5 clipped ON EVERY ROW PRINT COLUMN 4, x.tipo_cliente using "&&","-", COLUMN 7, x.sec_cliente using "&&&&", COLUMN 12, x.nombre, COLUMN 44, x.factura using "######", COLUMN 52, x.fecha using "dd/mm/yyyy", COLUMN 61, x.valor using "$,$$$,$$$.$$", COLUMN 73, fecha5 - x.fecha using "###,###", COLUMN 82, x.balance using "---,---,---.##" AFTER GROUP OF x.sec_vend SKIP TO TOP OF PAGE END REPORT