{ ------------------------------------------------------------------------------- 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 MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CONNECT to "decomarmol" user usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL cpprrp006() END MAIN 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