{ ------------------------------------------------------------------------------- PROGRAMA : CCPRRP021 OBJETIVO : Resumen de saldo por antiguedad por vendedor porcentual PROGRAMADOR : Tadeo A. Ferreras FECHA REALIZACION : Octubre, 18 1993 ------------------------------------------------------------------------------- } GLOBALS "ccprgb000.4gl" DEFINE salida,mov CHAR(1) DEFINE idx_1, idx_2, idx_3 SMALLINT DEFINE fecha_inicial,fecha_final DATE DEFINE impr,salir7,salir, salir1, salir3, tipo_venta CHAR(1) DEFINE selec1,selec7,selec5, selec6 CHAR(1500) DEFINE cli CHAR(6) DEFINE bal_fact20 RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, aplica_a CHAR(10), valor DECIMAL(12,2) END RECORD DEFINE tot_gen20 RECORD totald DECIMAL(10,2), totalc DECIMAL(10,2), totalg DECIMAL(10,2) END RECORD DEFINE mvto221 RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, nombre CHAR(30), zona CHAR(10), limite_c DECIMAL(12,2), rnc CHAR(10), tipo_doc CHAR(2), num_doc INTEGER, fecha_doc DATE, aplica_a INTEGER, valor DECIMAL(10,2), monto_desc LIKE cctb00001.monto_desc, num_emp SMALLINT, cliente CHAR(6) END RECORD DEFINE mvto220 RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, nombre CHAR(30), zona CHAR(10), limite_c DECIMAL(12,2), rnc CHAR(10), tipo_doc CHAR(2), num_doc INTEGER, fecha_doc DATE, aplica_a INTEGER, valor DECIMAL(10,2), monto_desc LIKE cctb00001.monto_desc, num_emp SMALLINT END RECORD FUNCTION ccprrp021() DEFINE valor_gral DECIMAL(12,2) # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM ccfmrp021 FROM "ccfmrp021" DISPLAY FORM ccfmrp021 CALL pantalla() DISPLAY "ccprrp021" AT 4,3 DISPLAY "Resumen de Saldo Por Antiguedad Por Vendedor Porcentual" AT 6,12 LET tipo_papel = 2 CALL msgrp000(tipo_papel) CONSTRUCT criterio ON b.tipo_cliente,b.sec_cliente FROM tipo_cliente, sec_cliente INPUT BY NAME fecha_final 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 IF fecha_final > today THEN LET numero_msg = 86 CALL msg(numero_msg) NEXT FIELD fecha_final END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF EXIT INPUT END INPUT # Busca los documentos que esten en el rango de fechas especificado SELECT *FROM systables WHERE tabname = "cliente20" IF STATUS != NOTFOUND THEN DROP VIEW cliente20 END IF SELECT *FROM systables WHERE tabname = "trx20" IF STATUS != NOTFOUND THEN DROP VIEW trx20 END IF SELECT *FROM systables WHERE tabname = "tempo21" IF STATUS != NOTFOUND THEN DROP TABLE tempo21 END IF DISPLAY "Preparando Informacion ... Espere por Favor" AT 19,14 CREATE TABLE tempo21 (num_emp SMALLINT,tipo_cliente SMALLINT,sec_cliente SMALLINT,tipo_doc CHAR(2), num_doc INTEGER,fecha_orig DATE,aplica_a INTEGER,valor DECIMAL(12,2), monto_desc DECIMAL(12,2)) INSERT INTO tempo21 SELECT a.cod_emp_sec,a.tipo_cliente,a.sec_cliente,a.tipo_doc,a.num_doc, a.fecha_orig,a.aplica_a,a.valor,a.monto_desc FROM cctb00001 a WHERE a.status_t IS NULL AND a.fecha_orig <= fecha_final CREATE VIEW cliente20 (tipo_cliente,sec_cliente,aplica_a,valor) AS SELECT tipo_cliente,sec_cliente,aplica_a,SUM(valor+monto_desc) FROM tempo21 GROUP BY 1,2,3 HAVING SUM(valor+monto_desc) <> 0 CREATE VIEW trx20 (num_emp,tipo_cliente,sec_cliente,tipo_doc,num_doc,fecha_orig, aplica_a,valor,monto_desc) AS SELECT a.num_emp,a.tipo_cliente,a.sec_cliente,a.tipo_doc,a.num_doc, a.fecha_orig,a.aplica_a,a.valor,a.monto_desc FROM tempo21 a,cliente20 b WHERE b.tipo_cliente = a.tipo_cliente AND b.sec_cliente = a.sec_cliente AND a.aplica_a = b.aplica_a LET selec4 = "SELECT b.tipo_cliente,b.sec_cliente,a.nombre,a.zona_postal,a.limite_credito, ", " a.num_rnc,b.tipo_doc,b.num_doc,b.fecha_orig,b.aplica_a,b.valor, ", " b.monto_desc,b.num_emp FROM trx20 b,vetb00004 a ", "WHERE b.tipo_cliente = a.tipo_cliente AND b.sec_cliente = a.sec_cliente AND ", " b.tipo_doc != 'PC' AND b.fecha_orig <= ? AND ", criterio CLIPPED," ORDER BY b.tipo_cliente,b.sec_cliente,b.aplica_a " DISPLAY "<< Buscando los Movimientos del Rango. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE movi FROM selec4 DECLARE mvto_cli CURSOR FOR movi OPEN mvto_cli USING fecha_final LET selec1= " SELECT SUM(b.valor+b.monto_desc) FROM cctb00001 b ", " WHERE b.status_t IS NULL AND ", " b.fecha_orig <= ? AND b.tipo_doc != 'PC' AND ", criterio CLIPPED PREPARE comando FROM selec1 DECLARE busca CURSOR FOR comando OPEN busca USING fecha_final DISPLAY "<< Buscando Balance General... Espere Por Favor>>" AT 19,14 START REPORT reporte220 TO "partida16" DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) WHILE STATUS != NOTFOUND FETCH busca INTO valor_gral IF STATUS = NOTFOUND THEN EXIT WHILE END IF END WHILE LET STATUS = 0 LET idx_2 = 1 LET salir1 = "N" WHILE salir1 != "S" FETCH mvto_cli INTO mvto220.* IF STATUS = NOTFOUND THEN LET idx_2 = 1 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 idx_2 = idx_2 + 1 LET mvto221.tipo_cliente = mvto220.tipo_cliente LET mvto221.sec_cliente = mvto220.sec_cliente LET mvto221.nombre = mvto220.nombre LET mvto221.zona = mvto220.zona LET mvto221.limite_c = mvto220.limite_c LET mvto221.rnc = mvto220.rnc LET mvto221.tipo_doc = mvto220.tipo_doc LET mvto221.num_doc = mvto220.num_doc LET mvto221.fecha_doc = mvto220.fecha_doc LET mvto221.aplica_a = mvto220.aplica_a LET mvto221.valor = mvto220.valor LET mvto221.monto_desc = mvto220.monto_desc LET mvto221.num_emp = mvto220.num_emp LET mvto221.cliente = mvto220.tipo_cliente USING "&&", mvto220.sec_cliente USING "&&&&" OUTPUT TO REPORT reporte220(mvto221.*,fecha_final,valor_gral) END WHILE FINISH REPORT reporte220 DISPLAY BY NAME tot_gen20.* PROMPT "Desea Imprimir Reporte [S/N].....?" FOR CHAR opt LET opt = UPSHIFT(opt) IF opt = "S" THEN RUN "cat partida16|$DBPRINT" END IF DROP VIEW trx20 DROP VIEW cliente20 DELETE FROM tempo21 WHERE tipo_doc != "kk" CLEAR SCREEN RUN "type C:\\archivo > %USPRINT%" END FUNCTION REPORT reporte220(x,fecha5,valor_gral1) DEFINE x RECORD tipo_cliente SMALLINT, sec_cliente SMALLINT, nombre CHAR(30), zona CHAR(10), limite_c DECIMAL(12,2), rnc CHAR(10), tipo_doc CHAR(2), num_doc INTEGER, fecha_doc DATE, aplica_a INTEGER, valor DECIMAL(10,2), monto_desc LIKE cctb00001.monto_desc, num_emp SMALLINT, cliente CHAR(6) END RECORD DEFINE nombre1,apellido CHAR(30) DEFINE valor_gral1 DECIMAL(12,2) DEFINE fecha4,fecha5 DATE DEFINE num_dia INTEGER DEFINE p_numero,p_zona CHAR(10) 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 normall CHAR(3) DEFINE comprimido CHAR(3) DEFINE hora CHAR(5) DEFINE tipo CHAR(2) DEFINE imp_cli CHAR(1) DEFINE credito, debito, tcredito, tdebito, tbalance, limite, b_balance DECIMAL(12,2) DEFINE pvalor,d1a30,d31a45,d46a60,m60 DECIMAL(12,2) DEFINE v_balance,v130,v3145,v4660,vm60 DECIMAL(12,2) DEFINE td1a30,td31a45,td46a60,tm60 DECIMAL(12,2) DEFINE fecha_fact DATE OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 ORDER BY x.num_emp,x.cliente,x.aplica_a,x.tipo_doc 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 69 LET comp_on = ASCII 15 LET comp_off = ASCII 18 LET comprimido = ASCII 031 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 LET normall = ASCII 030 LET hora = time LET lj = (136 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT COLUMN 1, comprimido PRINT COLUMN 1, "ccprrp021", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 129, "Pag. ",pageno USING "###" PRINT COLUMN 52, "Sistema de Cuentas por Cobrar", COLUMN 127, today using "dd/mm/yyyy" PRINT COLUMN 40, "Resumen de Saldo Por Antiguedad X Vendedor Porcentual", COLUMN 132, hora PRINT COLUMN 61," Al ", fecha5 using "dd/mm/yy" PRINT COLUMN 1,negrillas_on PRINT COLUMN 1,"--------------------------------------------------", "--------------------------------------------------", "------------------------------------" PRINT COLUMN 1, "Vendedor", COLUMN 63, "1 a 30", COLUMN 80, "31 a 45", COLUMN 96, "45 a 60", COLUMN 112, "Mas de 60", COLUMN 130, "BALANCE" ,negrillas_off PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "------------------------------------" BEFORE GROUP OF x.num_emp SELECT nom1_emp,apell1_emp INTO nombre1,apellido FROM adtb00003 WHERE num_emp = x.num_emp SKIP 1 LINE PRINT COLUMN 14, x.num_emp using "&&&"," ", nombre1 clipped, " ",apellido CLIPPED; LET v130 = 0 LET v3145 = 0 LET v4660 = 0 LET vm60 = 0 LET v_balance = 0 BEFORE GROUP OF x.cliente LET descrip1 = x.nombre clipped LET d1a30 = 0 LET d31a45 = 0 LET d46a60 = 0 LET m60 = 0 LET b_balance = 0 ON EVERY ROW LET fecha_fact = x.fecha_doc IF b_balance IS NULL THEN LET b_balance = 0 END IF IF x.valor is null THEN LET x.valor = 0 END IF IF x.monto_desc is null THEN LET x.monto_desc = 0 END IF IF tdebito IS NULL THEN LET tdebito = 0 END IF IF tcredito IS NULL THEN LET tcredito= 0 END IF IF (x.valor + x.monto_desc) > 0 THEN LET tdebito = tdebito + (x.valor + x.monto_desc) ELSE LET tcredito = tcredito + (x.valor + x.monto_desc) END IF LET b_balance = b_balance + (x.valor + x.monto_desc) LET num_dia = fecha5 - fecha_fact CASE WHEN num_dia < 31 LET d1a30 = d1a30 + (x.valor + x.monto_desc) LET v130 = v130 + (x.valor + x.monto_desc) EXIT CASE WHEN num_dia > 30 AND num_dia < 46 LET d31a45 = d31a45 + (x.valor+x.monto_desc) LET v3145 = v3145 + (x.valor+x.monto_desc) EXIT CASE WHEN num_dia > 45 AND num_dia < 61 LET d46a60 = d46a60 + (x.valor+x.monto_desc) LET v4660 = v4660 + (x.valor+x.monto_desc) EXIT CASE OTHERWISE LET m60 = m60 + (x.valor+x.monto_desc) LET vm60 = vm60 + (x.valor+x.monto_desc) EXIT CASE END CASE AFTER GROUP OF x.cliente IF td1a30 IS NULL THEN LET td1a30 = 0 END IF IF td31a45 IS NULL THEN LET td31a45 = 0 END IF IF td46a60 IS NULL THEN LET td46a60 = 0 END IF IF tm60 IS NULL THEN LET tm60 = 0 END IF IF tbalance IS NULL THEN LET tbalance = 0 END IF LET td1a30 = td1a30 + d1a30 LET td31a45 = td31a45 + d31a45 LET td46a60 = td46a60 + d46a60 LET tm60 = tm60 + m60 LET tbalance = tbalance + b_balance LET debito = 0 LET x.valor = 0 LET d1a30 = 0 LET d31a45 = 0 LET d46a60 = 0 LET m60 = 0 LET b_balance = 0 AFTER GROUP OF x.num_emp LET v_balance = 0 LET v_balance = v130 + v3145 + v4660 + vm60 PRINT COLUMN 59, v130 using "(((,(((,(((.##)", COLUMN 75, v3145 using "(((,(((,(((.##)", COLUMN 91, v4660 using "(((,(((,(((.##)", COLUMN 107, vm60 using "(((,(((,(((.##)", COLUMN 123, v_balance using "(((,(((,(((.##)" PRINT COLUMN 59, "===============", COLUMN 75, "===============", COLUMN 91, "===============", COLUMN 107, "===============", COLUMN 123, "===============" , negrillas_off PRINT COLUMN 62, (v130/v_balance)*100 using "(,(((.##)"," %", COLUMN 78, (v3145/v_balance)*100 using "(,(((.##)"," %", COLUMN 94, (v4660/v_balance)*100 using "(,(((.##)"," %", COLUMN 110, (vm60/v_balance)*100 using "(,(((.##)"," %", COLUMN 126, (v_balance/v_balance)*100 using "(,(((.##)"," %" PRINT COLUMN 1," " ON LAST ROW SKIP 1 LINE PRINT COLUMN 27, "Total General", COLUMN 59, td1a30 using "(((,(((,(((.##)", COLUMN 75, td31a45 using "(((,(((,(((.##)", COLUMN 91, td46a60 using "(((,(((,(((.##)", COLUMN 107, tm60 using "(((,(((,(((.##)", COLUMN 123, tbalance using "(((,(((,(((.##)" PRINT COLUMN 59, "===============", COLUMN 75, "===============", COLUMN 91, "===============", COLUMN 107, "===============", COLUMN 123, "===============" PRINT COLUMN 62, (td1a30/tbalance)*100 using "(,(((.##)"," %", COLUMN 78, (td31a45/tbalance)*100 using "(,(((.##)"," %", COLUMN 94, (td46a60/tbalance)*100 using "(,(((.##)"," %", COLUMN 110, (tm60/tbalance)*100 using "(,(((.##)"," %", COLUMN 126, (tbalance/tbalance)*100 using "(,(((.##)"," %" LET tot_gen20.totald = tdebito LET tot_gen20.totalg = tbalance LET td1a30 = 0 LET td31a45 = 0 LET td46a60 = 0 LET tm60 = 0 LET tbalance = 0 LET tdebito = 0 LET tcredito = 0 PRINT normall END REPORT