{ ------------------------------------------------------------------------------- PROGRAMA : CPPRRP006 OBJETIVO : Analisis de Saldo Pendiente PROGRAMADOR : Tadeo A. Ferreras FECHA REALIZACION : Octubre, 18 1993 ------------------------------------------------------------------------------- } GLOBALS "cpprgb000.4gl" DEFINE valor_doc,valor_pre DECIMAL(12,2) 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 supl RECORD cod_sp SMALLINT, cod_sp_sec SMALLINT, nom_sp CHAR(45) END RECORD DEFINE bal_fact RECORD cod_sp SMALLINT, cod_sp_sec SMALLINT, aplica_a CHAR(10), valor DECIMAL(12,2) END RECORD DEFINE tot_gen6 RECORD total1 DECIMAL(10,2), total2 DECIMAL(10,2), total3 DECIMAL(10,2), total4 DECIMAL(10,2), total5 DECIMAL(10,2), total6 DECIMAL(10,2) END RECORD DEFINE cod_sp1 SMALLINT DEFINE mvto21 RECORD cod_sp SMALLINT, cod_sp_sec SMALLINT, nombre CHAR(45), tipo_doc CHAR(2), num_doc CHAR(10), fecha_doc DATE, aplica_a CHAR(10), valor DECIMAL(10,2), suplidor CHAR(6) END RECORD DEFINE mvto20 RECORD cod_sp SMALLINT, cod_sp_sec SMALLINT, nombre CHAR(45), tipo_doc CHAR(2), num_doc CHAR(10), fecha_doc DATE, aplica_a CHAR(10), valor DECIMAL(10,2) END RECORD DEFINE mvto22 RECORD cod_sp SMALLINT, cod_sp_sec SMALLINT, nombre CHAR(45), tipo_doc CHAR(2), num_doc CHAR(10), fecha_doc DATE, aplica_a CHAR(10), valor DECIMAL(10,2) END RECORD FUNCTION cpprrp006() DEFINE valor_gral DECIMAL(12,2) # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM cpfmrp006 FROM "cpfmrp006" DISPLAY FORM cpfmrp006 CALL pantalla() DISPLAY "cpprrp006" AT 4,3 DISPLAY "Analisis de Saldos Pendientes" AT 6,25 LET tipo_papel = 2 CALL msgrp000(tipo_papel) INPUT BY NAME fecha_final,cod_sp1 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 FIELD cod_sp1 IF cod_sp1 IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sp1 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 CONSTRUCT criterio ON b.cod_sp_sec FROM cod_sp_sec # Busca los documentos que esten en el rango de fechas especificado SELECT *FROM systables WHERE tabname = "suplidor" IF STATUS != NOTFOUND THEN DROP VIEW suplidor END IF SELECT *FROM systables WHERE tabname = "cpprrp0062" IF STATUS != NOTFOUND THEN DROP VIEW cpprrp0062 END IF CREATE VIEW suplidor (cod_sp,cod_sp_sec,nom_sp,aplica_a,valor) AS SELECT a.cod_sp,a.cod_sp_sec,b.nom_sp,a.aplica_a,SUM(valor) FROM cptb00001 a,cotb00001 b WHERE a.cod_sp = b.cod_sp AND a.cod_sp_sec = b.cod_sp_sec AND a.status_t IS NULL AND tipo_doc != "CP" GROUP BY 1,2,3,4 HAVING SUM(valor) <> 0 CREATE VIEW cpprrp0062 (cod_sp,cod_sp_sec,nom_sp,tipo_doc,num_doc,fecha_orig, aplica_a,valor) AS SELECT a.cod_sp,a.cod_sp_sec,b.nom_sp,a.tipo_doc,a.num_doc, a.fecha_orig,a.aplica_a,a.valor FROM cptb00001 a,suplidor b WHERE b.cod_sp = a.cod_sp AND b.cod_sp_sec = a.cod_sp_sec AND a.aplica_a = b.aplica_a AND a.status_t IS NULL AND a.tipo_doc != "CP" LET selec4 = "SELECT b.cod_sp,b.cod_sp_sec,b.nom_sp,b.tipo_doc,b.num_doc,b.fecha_orig, ", " b.aplica_a,b.valor ", "FROM cpprrp0062 b ", "WHERE b.fecha_orig <= ? AND b.cod_sp = ? AND ",criterio CLIPPED #" ORDER BY 1,2,7 " 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,cod_sp1 LET selec6 = "SELECT b.cod_sp,b.cod_sp_sec,a.nom_sp,b.tipo_doc,b.num_doc,b.fecha_orig, ", " b.aplica_a,SUM(b.valor) ", "FROM cptb00001 b,cotb00001 a ", "WHERE b.cod_sp = a.cod_sp AND b.cod_sp_sec = a.cod_sp_sec AND ", " b.tipo_doc = 'CP' AND b.fecha_orig <= ? AND b.cod_sp = ? AND ", " b.aplica_a IS NULL AND ",criterio CLIPPED, " GROUP BY 1,2,3,4,5,6,7 " #," ORDER BY 1,2,5 " DISPLAY "<< Buscando los Prepagos... Espere. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE movi1 FROM selec6 DECLARE mvto_cli1 CURSOR FOR movi1 OPEN mvto_cli1 USING fecha_final,cod_sp1 START REPORT reporte20 TO "C:\\ARCHIVO" DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) LET idx_2 = 1 LET salir1 = "N" WHILE salir1 != "S" FETCH mvto_cli INTO mvto22.* IF STATUS = NOTFOUND THEN LET idx_2 = 1 LET salir1 = "S" EXIT WHILE END IF LET idx_2 = idx_2 + 1 LET valor_doc = 0 SELECT SUM(a.valor*-1) INTO valor_doc FROM cptb00001 a WHERE a.cod_sp = mvto22.cod_sp AND a.cod_sp_sec = mvto22.cod_sp_sec AND a.aplica_a = mvto22.num_doc AND a.status_t IS NULL AND a.fecha_orig <= fecha_final AND a.tipo_doc != mvto22.tipo_doc IF valor_doc IS NULL THEN LET valor_doc = 0 END IF LET valor_doc = mvto22.valor - valor_doc IF valor_doc <> 0 THEN LET mvto21.cod_sp = mvto22.cod_sp LET mvto21.cod_sp_sec = mvto22.cod_sp_sec LET mvto21.nombre = mvto22.nombre LET mvto21.suplidor = mvto22.cod_sp USING "&&", mvto22.cod_sp_sec USING "&&&&" LET mvto21.tipo_doc = mvto22.tipo_doc LET mvto21.num_doc = mvto22.num_doc LET mvto21.fecha_doc = mvto22.fecha_doc LET mvto21.aplica_a = mvto22.aplica_a LET mvto21.valor = mvto22.valor DISPLAY " " AT 14,10 DISPLAY "Balance ",mvto21.suplidor," - ",mvto21.tipo_doc, mvto21.aplica_a," - ",mvto21.num_doc AT 14,10 OUTPUT TO REPORT reporte20(mvto21.*,fecha_final) END IF END WHILE LET idx_1 = 1 LET salir3 = "N" WHILE salir3 != "S" FETCH mvto_cli1 INTO mvto20.* IF STATUS = NOTFOUND THEN LET idx_1 = 1 LET salir3 = "S" EXIT WHILE END IF LET idx_1 = idx_1 + 1 LET valor_pre = 0 SELECT SUM(a.valor) INTO valor_pre FROM cptb00001 a WHERE a.cod_sp = mvto20.cod_sp AND a.cod_sp_sec = mvto20.cod_sp_sec AND a.num_doc = mvto20.num_doc AND a.aplica_a IS NOT NULL AND a.status_t IS NULL AND a.tipo_doc = "CP" AND a.fecha_orig <= fecha_final IF valor_pre IS NULL THEN LET valor_pre = 0 END IF LET mvto20.valor = mvto20.valor - valor_pre IF mvto20.valor <> 0 THEN LET mvto21.cod_sp = mvto20.cod_sp LET mvto21.cod_sp_sec = mvto20.cod_sp_sec LET mvto21.nombre = mvto20.nombre LET mvto21.suplidor = mvto20.cod_sp USING "&&", mvto20.cod_sp_sec USING "&&&&" LET mvto21.tipo_doc = mvto20.tipo_doc LET mvto21.num_doc = mvto20.num_doc LET mvto21.fecha_doc = mvto20.fecha_doc LET mvto21.aplica_a = mvto20.aplica_a LET mvto21.valor = mvto20.valor DISPLAY " " AT 14,10 DISPLAY "Suplidor ",mvto21.suplidor," - ",mvto21.tipo_doc, mvto21.aplica_a," - ",mvto21.num_doc AT 14,10 OUTPUT TO REPORT reporte20(mvto21.*,fecha_final) END IF END WHILE FINISH REPORT reporte20 DISPLAY BY NAME tot_gen6.* DROP VIEW suplidor PROMPT "Desea Imprimir Reporte [S/N].....?" FOR CHAR opt LET opt = UPSHIFT(opt) IF opt = "S" THEN RUN "TYPE C:\\ARCHIVO > %USPRINT%" END IF INITIALIZE tot_gen6.* TO NULL CLEAR SCREEN END FUNCTION REPORT reporte20(x,fecha5) DEFINE x RECORD cod_sp SMALLINT, cod_sp_sec SMALLINT, nombre CHAR(45), tipo_doc CHAR(2), num_doc CHAR(10), fecha_doc DATE, aplica_a CHAR(10), valor DECIMAL(10,2), suplidor 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, m120,tm120 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.suplidor,x.fecha_doc,x.aplica_a 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 LET lj = (136 - LENGTH(p_companias.nombre))/2 PRINT COLUMN 1, comp_on PRINT COLUMN 1, "cpprrp006", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 129, "Pag. ",pageno USING "###" PRINT COLUMN 54, "Sistema de Cuentas por Pagar", COLUMN 127, today using "dd/mm/yyyy" PRINT COLUMN 52, "Analisis de Saldo por Antiguedad", COLUMN 132, hora PRINT COLUMN 62," Al ", fecha5 using "dd/mm/yy" # , negrillas_off SKIP 1 LINES BEFORE GROUP OF x.suplidor LET descrip1 = x.nombre clipped LET d1a30 = 0 LET d31a45 = 0 LET d46a60 = 0 LET m60 = 0 LET m120 = 0 LET b_balance = 0 IF tdebito IS NULL THEN LET tdebito = 0 LET tcredito= 0 END IF PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "------------------------------------------" , negrillas_on PRINT COLUMN 1, "Cliente:", COLUMN 10, x.cod_sp using "&&","-", x.cod_sp_sec using "&&&&", COLUMN 18, x.nombre clipped PRINT COLUMN 4, "D O C U M E N T O", COLUMN 29, "A F E C T A" PRINT COLUMN 1, "|----------------------|", COLUMN 27, "|---------------|" PRINT COLUMN 3, "Numero", COLUMN 11, "Tipo", COLUMN 17, "Fecha", COLUMN 29, "Numero", COLUMN 38, "Tipo", COLUMN 53, "1 a 30", COLUMN 69, "31 a 60", COLUMN 85, "61 a 90", COLUMN 100, "91 a 120", COLUMN 118, "Mas 120", COLUMN 136, "BALANCE" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------" , "------------------------------------------" ON EVERY ROW # IF x.tipo_doc = "FT" THEN LET fecha_fact = x.fecha_doc # END IF IF fecha_fact IS NULL THEN LET fecha_fact = x.fecha_doc END IF IF x.valor is null THEN LET x.valor = 0 END IF LET b_balance = b_balance + (x.valor) PRINT COLUMN 3, x.num_doc, COLUMN 12, x.tipo_doc, COLUMN 16, x.fecha_doc using "dd/mm/yy"; IF x.tipo_doc != "CP" THEN PRINT COLUMN 28, x.aplica_a, COLUMN 39, "FT"; #, END IF # COLUMN 59, (x.valor) using "(((,(((,(((.##)"; LET num_dia = fecha5 - fecha_fact CASE WHEN num_dia < 31 LET d1a30 = d1a30 + (x.valor) PRINT COLUMN 45, x.valor USING "(((,(((,(((.##)"; EXIT CASE WHEN num_dia > 30 AND num_dia <= 61 LET d31a45 = d31a45 + (x.valor) PRINT COLUMN 62, x.valor USING "(((,(((,(((.##)"; EXIT CASE WHEN num_dia > 61 AND num_dia <= 91 LET d46a60 = d46a60 + (x.valor) PRINT COLUMN 79, x.valor USING "(((,(((,(((.##)"; EXIT CASE WHEN num_dia > 91 AND num_dia <= 121 LET m60 = m60 + (x.valor) PRINT COLUMN 95, x.valor USING "(((,(((,(((.##)"; EXIT CASE OTHERWISE LET m120 = m120 + (x.valor) PRINT COLUMN 112, x.valor USING "(((,(((,(((.##)"; EXIT CASE END CASE PRINT COLUMN 129, b_balance using "(((,(((,(((.##)" AFTER GROUP OF x.suplidor PRINT COLUMN 45, "---------------", COLUMN 62, "---------------", COLUMN 79, "---------------", COLUMN 95, "---------------", COLUMN 112, "---------------", COLUMN 129, "---------------" LET b_balance = 0 LET b_balance = d1a30 + d31a45 + d46a60 + m60 + m120 PRINT COLUMN 27, "Total Cliente", COLUMN 45, d1a30 using "(((,(((,(((.##)", COLUMN 62, d31a45 using "(((,(((,(((.##)", COLUMN 79, d46a60 using "(((,(((,(((.##)", COLUMN 95, m60 using "(((,(((,(((.##)", COLUMN 112, m120 using "(((,(((,(((.##)", COLUMN 129, b_balance using "(((,(((,(((.##)" PRINT COLUMN 45, "===============", COLUMN 62, "===============", COLUMN 79, "===============", COLUMN 95, "===============", COLUMN 112, "===============", COLUMN 129, "===============" # , negrillas_off 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 tm120 IS NULL THEN LET tm120 = 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 tm120 = tm120 + m120 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 m120 = 0 LET b_balance = 0 ON LAST ROW SKIP 1 LINE PRINT COLUMN 27, "Total General", COLUMN 45, td1a30 using "(((,(((,(((.##)", COLUMN 62, td31a45 using "(((,(((,(((.##)", COLUMN 79, td46a60 using "(((,(((,(((.##)", COLUMN 95, tm60 using "(((,(((,(((.##)", COLUMN 112, tm120 using "(((,(((,(((.##)", COLUMN 129, tbalance using "(((,(((,(((.##)" LET tot_gen6.total1 = td1a30 LET tot_gen6.total2 = td31a45 LET tot_gen6.total3 = td46a60 LET tot_gen6.total4 = tm60 LET tot_gen6.total6 = tm120 LET tot_gen6.total5 = tbalance LET td1a30 = 0 LET td31a45 = 0 LET td46a60 = 0 LET tm60 = 0 LET tm120 = 0 LET tbalance = 0 PRINT normal END REPORT