{ ------------------------------------------------------------------------------- PROGRAMA : CPPRRP004 OBJETIVO : Estado De Cuentas PROGRAMADOR : Tadeo A. Ferreras FECHA REALIZACION : Junio 1, 1993 ------------------------------------------------------------------------------- } GLOBALS "cpprgb000.4gl" DEFINE prima DECIMAL(10,2) DEFINE cod_sup SMALLINT DEFINE mov CHAR(1) DEFINE idx_1, idx_2, idx_3 SMALLINT DEFINE fecha_inicial, fecha_final DATE DEFINE salir, salir2, salir1, salir3, tipo_venta CHAR(1) DEFINE selec5, selec6 CHAR(1500) DEFINE valor2,valor3 DECIMAL(18,2) DEFINE p_reportfile STRING DEFINE tot_gen1 RECORD totald DECIMAL(10,2), totalc DECIMAL(10,2), totalg DECIMAL(10,2) END RECORD DEFINE suplidor RECORD cod_sp SMALLINT, cod_sp_sec SMALLINT, valor DECIMAL(12,2) END RECORD DEFINE mvtos RECORD cod_sp SMALLINT, cod_sp_sec SMALLINT, nom_sup CHAR(30), dir_sup CHAR(30), ciu_sup CHAR(30), tipo_doc CHAR(2), num_doc CHAR(10), fecha_doc DATE, aplica_a CHAR(10), valor DECIMAL(10,2), orden_no INTEGER, cliente CHAR(6) , balance DECIMAL(12,2) END RECORD DEFINE mvtos1 RECORD cod_sp SMALLINT, cod_sp_sec SMALLINT, nom_sup CHAR(30), dir_sup CHAR(30), ciu_sup CHAR(30), tipo_doc CHAR(2), num_doc CHAR(10), fecha_doc DATE, aplica_a CHAR(10), valor DECIMAL(10,2), orden_no INTEGER, cliente CHAR(6) , balance DECIMAL(12,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 "smarmotech" user usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL cpprrp004() END MAIN FUNCTION cpprrp004() # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM cpfmrp004 FROM "cpfmrp004" DISPLAY FORM cpfmrp004 # CALL pantalla() DISPLAY "cpprrp004" AT 4,3 DISPLAY "Estado Cuenta" AT 6,33 LET tipo_papel = 1 CALL msgrp000(tipo_papel) INPUT BY NAME fecha_inicial,fecha_final,prima,cod_sup AFTER FIELD fecha_inicial IF fecha_inicial is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_inicial END IF 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 < fecha_inicial THEN LET numero_msg = 86 CALL msg(numero_msg) NEXT FIELD fecha_final END IF AFTER FIELD cod_sup IF cod_sup IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sup END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF fecha_inicial is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_inicial END IF IF fecha_final is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_final END IF IF fecha_final < fecha_inicial THEN LET numero_msg = 86 CALL msg(numero_msg) NEXT FIELD fecha_final END IF IF cod_sup IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_sup END IF EXIT INPUT END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF # Busca Balances de los suplidores CONSTRUCT criterio ON a.cod_sp_sec FROM cod_sp_sec CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia -- La API de configuracion de reportes (fgl_report_*) no esta -- disponible en este FGL; se escribe el XML directo a un archivo -- en FGLSPOOL en lugar de la vista previa SVG. LET p_reportfile = FGL_GETENV("FGLSPOOL"), "/cpprrp004_estcta.xml" LET handler = om.XmlWriter.createFileWriter(p_reportfile) START REPORT report141 TO XML HANDLER handler LET selec5 = "SELECT UNIQUE a.cod_sp,a.cod_sp_sec ", "FROM cptb00001 a ", "WHERE a.status_t is null AND a.fecha_orig <= ? AND cod_sp = ? AND ", criterio clipped," ORDER BY 1,2 " DISPLAY "<< Buscando Informacion ... Espere Por Favor. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE b_balance FROM selec5 DECLARE c_balance CURSOR FOR b_balance OPEN c_balance USING fecha_final,cod_sup # Busca los documentos que esten en el rango de fechas especificado LET selec4 = "SELECT a.cod_sp, a.cod_sp_sec,b.nom_sp,b.dir_sp,b.ciu_sp,a.tipo_doc, ", " a.num_doc,a.fecha_orig, a.aplica_a, a.valor, a.orden_no ", "FROM cptb00001 a,cotb00001 b ", "WHERE ",criterio clipped," and a.cod_sp = b.cod_sp AND ", " a.cod_sp_sec = b.cod_sp_sec AND a.status_t is null and ", " a.fecha_orig between ? and ? and a.cod_sp = ? ", " ORDER BY 1,2,7,6 " DISPLAY "<< Buscando los Movimientos del Rango >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE movi FROM selec4 DECLARE mvtos_cli SCROLL CURSOR FOR movi OPEN mvtos_cli USING fecha_inicial,fecha_final,cod_sup {LET selec5 = "SELECT a.cod_sp, a.cod_sp_sec,b.nom_sp,b.dir_sp,b.ciu_sp,a.tipo_doc, ", " a.num_doc,a.fecha_orig, a.aplica_a, a.valor, a.orden_no ", "FROM cptb00001 a,cotb00001 b ", "WHERE ",criterio clipped," and a.cod_sp = b.cod_sp AND ", " a.cod_sp_sec = b.cod_sp_sec AND a.status_t is null and ", " a.fecha_orig between ? and ? and a.cod_sp = ? AND a.tipo_doc_cp = 'CP' ", " AND a.aplica_a IS NULL ORDER BY 1,2,7,6 " DISPLAY "<< Buscando los Movimientos del Rango >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) PREPARE movi1 FROM selec5 DECLARE mvtos_cli1 SCROLL CURSOR FOR movi1 OPEN mvtos_cli1 USING fecha_inicial,fecha_final,cod_sup } DISPLAY "<< " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) LET salir1 = "N" WHILE salir1 != "S" FETCH c_balance INTO suplidor.* IF status = notfound THEN LET salir1 = "S" EXIT WHILE END IF LET valor2 = 0 LET valor3 = 0 SELECT ISNULL(SUM(a.valor),0) INTO valor2 FROM cptb00001 a WHERE a.cod_sp = suplidor.cod_sp AND a.cod_sp_sec = suplidor.cod_sp_sec AND a.fecha_orig < fecha_inicial AND a.status_t IS NULL AND a.tipo_doc_cp = "CP" AND a.aplica_a IS NULL SELECT ISNULL(SUM(a.valor),0) INTO valor3 FROM cptb00001 a WHERE a.cod_sp = suplidor.cod_sp AND a.cod_sp_sec = suplidor.cod_sp_sec AND a.fecha_orig < fecha_inicial AND a.status_t IS NULL AND a.tipo_doc_cp != "CP" AND a.aplica_a IS NOT NULL IF valor2 IS NULL THEN LET valor2 = 0 END IF IF valor3 IS NULL THEN LET valor3 = 0 END IF LET suplidor.valor = valor3 + valor2 LET mvtos.cod_sp = suplidor.cod_sp LET mvtos.cod_sp_sec = suplidor.cod_sp_sec LET mvtos.balance = suplidor.valor LET mvtos.cliente = mvtos.cod_sp using "&&", mvtos.cod_sp_sec using "&&&&" IF prima is not null THEN LET mvtos.balance = mvtos.balance * prima END IF LET idx_1 = 1 LET salir = "N" WHILE salir != "S" FETCH ABSOLUTE idx_1 mvtos_cli INTO mvtos1.* IF status = NOTFOUND THEN LET salir = "S" EXIT WHILE END IF DISPLAY "datos: ",mvtos1.nom_sup IF int_flag THEN LET salir = "S" LET numero_msg = 2 CALL msg(numero_msg) RETURN END IF LET idx_1 = idx_1 + 1 # IF mvtos1.cod_sp = mvtos.cod_sp AND # mvtos1.cod_sp_sec = mvtos.cod_sp_sec THEN LET mvtos1.cod_sp = mvtos.cod_sp LET mvtos1.cod_sp_sec = mvtos.cod_sp_sec LET mvtos1.balance = mvtos.balance LET mvtos1.cliente = mvtos.cod_sp using "&&", mvtos.cod_sp_sec using "&&&&" LET mvtos.* = mvtos1.* IF prima is not null THEN LET mvtos.valor = mvtos.valor * prima END IF OUTPUT TO REPORT report141(mvtos.*,cod_sup) # END IF END WHILE { LET idx_2 = 1 LET salir2 = "N" WHILE salir2 != "S" FETCH ABSOLUTE idx_2 mvtos_cli1 INTO mvtos1.* IF status = NOTFOUND THEN LET salir2 = "S" EXIT WHILE END IF LET idx_2 = idx_2 + 1 DISPLAY "datos ANTES: ",mvtos1.nom_sup IF mvtos1.cod_sp = mvtos.cod_sp AND mvtos1.cod_sp_sec = mvtos.cod_sp_sec THEN LET mvtos1.cod_sp = mvtos.cod_sp LET mvtos1.cod_sp_sec = mvtos.cod_sp_sec LET mvtos1.balance = mvtos.balance LET mvtos1.cliente = mvtos.cod_sp using "&&", mvtos.cod_sp_sec using "&&&&" LET mvtos.* = mvtos1.* IF prima is not null THEN LET mvtos.valor = mvtos.valor * prima END IF OUTPUT TO REPORT report141(mvtos.*,cod_sup) END IF END WHILE} END WHILE FINISH REPORT report141 CLEAR SCREEN END FUNCTION REPORT report141(x,cod1) DEFINE x RECORD cod_sp SMALLINT, cod_sp_sec SMALLINT, nom_sup CHAR(30), dir_sup CHAR(30), ciu_sup CHAR(30), tipo_doc CHAR(2), num_doc CHAR(10), fecha_doc DATE, aplica_a CHAR(10), valor DECIMAL(10,2), orden_no INTEGER, cliente CHAR(6) , balance DECIMAL(12,2) END RECORD DEFINE cod1,dias SMALLINT DEFINE direccion,p_descrip CHAR(30) DEFINE p_casa,p_zona,p_numero CHAR(10) DEFINE doble_on CHAR(2) DEFINE doble_off CHAR(2) DEFINE negrillas_on CHAR(6) DEFINE negrillas_off CHAR(6) 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 vm_120,credito, debito, tcredito, tdebito, tbalance, limite, b_balance, v1_30, v31_45, v46_60, vm_60,p_valor DECIMAL(12,2) OUTPUT TOP MARGIN 0 LEFT MARGIN 0 BOTTOM MARGIN 2 PAGE LENGTH 100 ORDER BY x.cliente,x.aplica_a,x.fecha_doc FORMAT PAGE HEADER LET hora = time LET lj = (110 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT COLUMN 1, comp_on # PRINT COLUMN 1, doce, negrillas_on clipped PRINT COLUMN 1, "cpprrp004", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 103, "Pag. ",pageno using "###" PRINT COLUMN 39, "Sistema de Cuentas por Pagar", COLUMN 101, today using "dd/mm/yyyy" PRINT COLUMN 44, " Estado de Cuenta ", COLUMN 106, hora PRINT COLUMN 47, " Al ", fecha_final using "dd/mm/yy" # , negrillas_off clipped { IF cod1 = 23 THEN PRINT COLUMN 53, "RD$" ELSE PRINT COLUMN 53, "US$" END IF} SKIP 1 LINES BEFORE GROUP OF x.cliente LET v1_30 = 0 LET v31_45 = 0 LET v46_60 = 0 LET vm_60 = x.balance IF tdebito IS NULL THEN LET tdebito = 0 END IF IF tcredito IS NULL THEN LET tcredito = 0 END IF IF tbalance IS NULL THEN LET tbalance = 0 END IF IF x.balance IS NULL THEN LET x.balance = 0 END IF IF limite IS NULL THEN LET limite = 0 END IF IF prima is not null THEN PRINT COLUMN 1,"Prima: ", prima using "###.##" END IF PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "-----------" , negrillas_on clipped PRINT COLUMN 1, "Suplidor:", COLUMN 10, x.cod_sp using "&&","-", x.cod_sp_sec using "&&&&", COLUMN 18, x.nom_sup clipped, COLUMN 81, "Balance Al: ", fecha_inicial using "dd/mm/yy" PRINT COLUMN 1,negrillas_on clipped, COLUMN 10, x.dir_sup clipped," ",x.ciu_sup clipped, COLUMN 93, x.balance using "(((,(((,(((.##)", negrillas_off clipped PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "-----------" LET b_balance = x.balance # SKIP 1 LINE PRINT COLUMN 4, "D O C U M E N T O" PRINT COLUMN 1, "|----------------------|" PRINT COLUMN 3, "Numero", COLUMN 11, "Tipo", COLUMN 17, "Fecha", COLUMN 29, "APLICADO A", COLUMN 63, "D E B I T O", COLUMN 80, "C R E D I T O", COLUMN 99, "B A L A N C E" PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------" , "-----------" LET debito = 0 LET credito = 0 ON EVERY ROW IF x.tipo_doc = "CP" AND x.aplica_a IS NOT NULL THEN LET x.valor = 0 END IF IF x.valor <> 0 THEN PRINT COLUMN 3, x.num_doc , COLUMN 12, x.tipo_doc, COLUMN 16, x.fecha_doc using "dd/mm/yy"; LET b_balance = b_balance + x.valor IF x.aplica_a IS NULL THEN PRINT COLUMN 29,"OC-",x.orden_no CLIPPED; ELSE PRINT COLUMN 29,"FT-",x.aplica_a CLIPPED; END IF IF x.valor < 0 THEN PRINT COLUMN 59, x.valor using "(((,(((,(((.##)", COLUMN 97, b_balance using "(((,(((,(((.##)" IF x.tipo_doc = "CP" AND x.aplica_a IS NOT NULL THEN LET x.valor = x.valor * -1 END IF LET debito = debito + x.valor ELSE PRINT COLUMN 78, x.valor using "(((,(((,(((.##)", COLUMN 97, b_balance using "(((,(((,(((.##)" LET credito = credito + x.valor END IF LET p_valor = x.valor LET dias = fecha_final - x.fecha_doc IF dias > 120 THEN LET vm_120 = vm_120 + p_valor END IF IF dias >91 AND dias >= 121 THEN LET vm_60 = vm_60 + p_valor END IF IF dias > 61 and dias < 91 THEN LET v46_60 = p_valor + v46_60 END IF IF dias > 30 and dias <= 61 THEN LET v31_45 = p_valor + v31_45 END IF IF dias < 31 THEN LET v1_30 = p_valor + v1_30 END IF END IF AFTER GROUP OF x.cliente SKIP 1 LINE PRINT COLUMN 1, "ANALISIS POR ANTIGUEDAD",negrillas_on clipped, COLUMN 37, "1 a 30", COLUMN 51, "31 a 60", COLUMN 66, "61 a 90", COLUMN 79, "91 a 120", COLUMN 90, "Mas 120",negrillas_off clipped PRINT COLUMN 1, "DE SU APRECIADA CUENTA: ", COLUMN 26, v1_30 using "(((,(((,((&.&&)", COLUMN 41, v31_45 using "(((,(((,((&.&&)", COLUMN 51, v46_60 using "(((,(((,((&.&&)", COLUMN 61, vm_60 using "(((,(((,((&.&&)", COLUMN 90, vm_120 using "(((,(((,((&.&&)" SKIP 1 LINE PRINT COLUMN 1, "NOTA: FAVOR REVISAR ESTE ESTADO Y NOTIFICAR A NUESTRO ", "DEPARTAMENTO DE CONTABILIDAD SOBRE CUALQUIER " PRINT COLUMN 1, "DISCREPANCIA O REPARO, A LA MAYOR BREVEDAD POSIBLE." # PRINT COLUMN 1, "APRECIAMOS SU RESPUESTA, POR TANTO, QUEDAREMOS AGRADECIDOS" # ," POR SU ATENCION, SERVANSE USAR LA COPIA DE ESTE ESTADO" # PRINT COLUMN 1, "PARA SU CONFIRMACION." SKIP to TOP OF PAGE PAGE TRAILER SKIP 1 LINE PRINT COLUMN 1,negrillas_on clipped, COLUMN 10, "NOMENCLATURA: OC = ORDEN COMPRA CK = CHEQUE FT = FACTURAS ", "ND = NOTA DE DEBITO NC = NOTA CREDITO CP = PREPAGOS", negrillas_off clipped PRINT normal END REPORT