{ ------------------------------------------------------------------------------- caPROGRAMA : CCPRRP005 OBJETIVO : Relacion de Recibos de Pagos PROGRAMADOR : Juan F. Soto FECHA REALIZACION : Abril 1, 1993 ------------------------------------------------------------------------------- } GLOBALS "ccprgb000.4gl" DEFINE r_output STRING, -- output format option r_action STRING, -- used to set preview option r_filename STRING, -- filename of Report Design document (the .4rp filename) preview INTEGER -- preview option T DEFINE tipo,tipo_doc CHAR(2), opt5 CHAR(3) DEFINE fecha_inicial, fecha_final DATE DEFINE salir CHAR(1) DEFINE cobros RECORD cuenta_no CHAR(8), recibo INTEGER, fecha_recibo DATE, factura INTEGER, tipo_cliente SMALLINT, sec_cliente SMALLINT, monto_recibo DECIMAL(12,2), descuento DECIMAL(12,2), status_t CHAR(1), nom_cli CHAR(30), descripcion CHAR(30), documento INT, cod_cia SMALLINT, localidad CHAR(40), chitbis CHAR(2) END RECORD MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CALL ARG_VAL(3) RETURNING impresor CALL startlog("CCRP05.TXT") CONNECT to "decomarmol" AS "MSSQL" USER usuarios USING clave { CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia } CALL ccprrp005() END MAIN FUNCTION ccprrp005() # WHENEVER ERROR CONTINUE OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM ccfmrp005 FROM "ccfmrp005" DISPLAY FORM ccfmrp005 DISPLAY "ccprrp005" AT 4,3 DISPLAY "Documentos" AT 6,35 LET tipo_papel = 1 CALL msgrp000(tipo_papel) CONSTRUCT criterio ON a.cod_emp,a.tipo_cliente,a.sec_cliente,a.num_doc,a.tipo_doc FROM localidad,tipo_cliente,sec_cliente,num_doc,tipo AFTER CONSTRUCT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF END CONSTRUCT INPUT BY NAME fecha_inicial,fecha_final,grafico { AFTER FIELD tipo IF tipo is null THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tipo END IF SELECT UNIQUE tipo_doc FROM cctb00001 WHERE tipo_doc = tipo IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD tipo END IF } 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 DISPLAY BY NAME fecha_final 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 END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF SELECT a.* INTO p_companias.* FROM companias a LET selec3 = "SELECT a.cuenta_no,a.num_doc, a.fecha_orig, a.aplica_a, a.tipo_cliente, ", "a.sec_cliente,a.valor,a.monto_desc,a.status_t,b.nombre,' ', a.num_cheque,a.cod_emp, ", "c.sucnombre,d.chitbis,a.tipo_doc ", "FROM cctb00001 a LEFT OUTER JOIN sucursales c on a.cod_emp=c.sucid LEFT OUTER JOIN ", "cctb00011 d ", "ON a.num_doc = d.num_doc and a.tipo_doc = d.tipo_Doc ,vetb00004 b ", "WHERE a.fecha_orig between ? and ? ", "and ", " a.tipo_cliente=b.tipo_cliente AND a.sec_cliente=b.sec_cliente AND ", CRITERIO clipped, " ORDER BY a.num_doc " DISPLAY "<< Estoy Buscando los Documentos. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) DISPLAY " " AT 19,14 DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) LET progreso = 20 DISPLAY progreso TO progreso CALL ui.Interface.refresh() PREPARE cobros_locales FROM selec3 DECLARE lrecibos CURSOR FOR cobros_locales OPEN lrecibos USING fecha_inicial, fecha_final LET idx = 1 LET salir = "N" WHILE salir = "N" FETCH lrecibos INTO cobros.*,tipo IF status = NOTFOUND THEN LET salir = "S" EXIT WHILE END IF IF idx = 1 THEN IF grafico = "SI" THEN LET r_filename='ccprrp005.4rp' IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file LET preview=1 CALL seleccionarsalida() RETURNING r_output CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes END IF START REPORT cobros_ft TO XML HANDLER HANDLER ELSE { CALL defecto(usuarios,clave,impresor) RETURNING imprime,negrilla_on,negrillas_of, doble_on,doble_off,comp_on,comp_off, doce,normal,archivo,copia } START REPORT cobros_ft TO archivo END IF END IF IF cobros.monto_recibo IS NULL THEN LET cobros.monto_recibo = 0 END IF IF cobros.descuento IS NULL THEN LET cobros.descuento = 0 END IF IF cobros.monto_recibo < 0 THEN LET cobros.monto_recibo = cobros.monto_recibo * -1 END IF IF cobros.DESCUENTO < 0 THEN LET cobros.descuento = cobros.descuento * -1 END IF LET idx = idx +1 IF tipo = "AV" AND cobros.factura != cobros.recibo THEN LET cobros.descuento = 0 LET cobros.monto_recibo = 0 CONTINUE WHILE END IF IF cobros.status_t = "E" THEN LET cobros.nom_cli = "NULO" LET cobros.descuento = 0 LET cobros.monto_recibo = 0 END IF DISPLAY tipo_doc OUTPUT TO REPORT cobros_ft(cobros.*,tipo) LET progreso = progreso + 1 IF progreso > 80 THEN LET progreso = 80 END IF DISPLAY progreso TO progreso CALL ui.Interface.refresh() LET idx = idx +1 END WHILE LET progreso = 100 DISPLAY progreso TO progreso CALL ui.Interface.refresh() IF idx = 1 THEN CALL fgl_winmessage("ERROR","NO EXISTEN DATOS CON ESAS CONDICIONES","INFO") ELSE FINISH REPORT cobros_ft END IF IF grafico <> "SI" THEN RUN imprime END IF END FUNCTION {REPORT cobros_ft(x) DEFINE x RECORD cuenta_no CHAR(8), recibo INTEGER, fecha_recibo DATE, factura INTEGER, tipo_cliente SMALLINT, sec_cliente SMALLINT, monto_recibo DECIMAL(12,2), descuento DECIMAL(12,2), status_t CHAR(1), nom_cli CHAR(30), descripcion CHAR(30), documento INT, cod_cia SMALLINT, localidad CHAR(40), chitbis CHAR(2) END RECORD DEFINE total4,total5,total6 DECIMAL(12,2) DEFINE nombre_rp CHAR(20) DEFINE hora CHAR(5), otro_num INT OUTPUT LEFT MARGIN 0 RIGHT MARGIN 86 TOP MARGIN 0 BOTTOM MARGIN 0 PAGE LENGTH 66 ORDER BY x.recibo,x.factura FORMAT PAGE HEADER IF grafico <> "SI" THEN LET doble_on = ASCII 14 LET doble_off = ASCII 20 LET comp_on = ASCII 15 LET comp_off = ASCII 18 LET doce = ASCII 27, ASCII 77 LET normal = ASCII 27, ASCII 80 ELSE LET doble_on = NULL LET doble_off = NULL LET comp_on = NULL LET comp_off = NULL LET doce = NULL LET normal = NULL LET negrilla_on =NULL END IF LET hora = time LET lj = (110 - LENGTH(p_companias.nombre CLIPPED))/2 PRINT COLUMN 1, comp_on, negrilla_on PRINT COLUMN 1, "ccprrp005", COLUMN lj, p_companias.nombre CLIPPED, COLUMN 103, "Pag. ",pageno using "###" PRINT COLUMN 39, "Sistema de Cuentas por Cobrar", COLUMN 101, today using "dd/mm/yyyy" IF tipo = "AV" THEN LET nombre_rp = "AVANCE ORDEN " END IF IF tipo = "FE" THEN LET nombre_rp = "Factura Export." END IF IF tipo = "FT" THEN LET nombre_rp = "Factura Local " END IF IF tipo = "PC" THEN LET nombre_rp = "Pago de Contado" END IF IF tipo = "PG" THEN LET nombre_rp = "Recibos de pago" END IF IF tipo = "NC" THEN LET nombre_rp = "Notas de Creditos" END IF IF tipo = "OC" THEN LET nombre_rp = "Otros Creditos" END IF IF tipo = "OD" THEN LET nombre_rp = "Otros Debitos" END IF IF tipo = "ND" THEN LET nombre_rp = "Notas de Debito" END IF PRINT COLUMN 46, nombre_rp, COLUMN 106, hora PRINT COLUMN 42, "Del ", fecha_inicial using "dd/mm/yyyy", " Al ", fecha_final using "dd/mm/yyyy" SKIP 1 LINES PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------", "--------------------------" PRINT COLUMN 2, "Recibo", COLUMN 10, "Fecha", COLUMN 18, "Afecta", COLUMN 26, "C l i e n t e", COLUMN 74, "Monto", COLUMN 86, "Descuento", COLUMN 107, "Neto" , COLUMN 118, "LOCALIDAD", 2 spaces, x.chitbis PRINT COLUMN 1, "--------------------------------------------------", "--------------------------------------------------" , "--------------------------" # , negrillas_off ON EVERY ROW WHENEVER ERROR CONTINUE #BUSCA RELACION DE NUMEROS LET otro_num = NULL SELECT a.num_trans INTO otro_num FROM cctb00020 a WHERE a.num_oc = x.recibo and a.tipo_doc =tipo IF tipo = "FE" OR tipo = "FT" THEN LET x.documento=NULL SELECT a.conduce INTO x.factura FROM vetb00002 a WHERE a.factura = x.recibo END IF PRINT COLUMN 2, x.recibo using "######", COLUMN 9, x.fecha_recibo using "dd/mm/yyyy"; IF tipo <> 'AV' THEN PRINT COLUMN 20, x.factura using "######"; ELSE PRINT COLUMN 20, x.documento using "&&&&&&"; END IF PRINT COLUMN 27, x.tipo_cliente using "&&","-", x.sec_cliente using "&&&&&&"," ", x.nom_cli clipped, COLUMN 67, x.monto_recibo using "---,---,---.##", COLUMN 82, x.descuento using "---,---,---.##", COLUMN 98, x.monto_recibo - x.descuento using "---,---,---.##"," ", otro_num USING "&&&&&&", COLUMN 115,x.localidad AFTER GROUP OF x.recibo IF GROUP COUNT(*) > 1 THEN PRINT COLUMN 64, "--------------", COLUMN 80, "--------------", COLUMN 96, "--------------" PRINT COLUMN 67, GROUP SUM(x.monto_recibo) using "---,---,---.##", COLUMN 82, GROUP SUM(x.descuento) using "---,---,---.##", COLUMN 99, GROUP SUM(x.monto_recibo-x.descuento) using "---,---,---.##" END IF SKIP 1 LINE ON LAST ROW SKIP 1 LINE PRINT COLUMN 35, "Totales --> ", COLUMN 67, SUM(x.monto_recibo) using "--,---,---,---.##", COLUMN 85, SUM(x.descuento) using "--,---,---,---.##", COLUMN 103, SUM(x.monto_recibo-x.descuento) using "--,---,---,---.##" PRINT normal LET total4 = 0 LET total5 = 0 LET total6 = 0 END REPORT } REPORT cobros_ft(x,tipo) DEFINE x RECORD cuenta_no CHAR(8), recibo INTEGER, fecha_recibo DATE, factura INTEGER, tipo_cliente SMALLINT, sec_cliente SMALLINT, monto_recibo DECIMAL(12,2), descuento DECIMAL(12,2), status_t CHAR(1), nom_cli CHAR(30), descripcion CHAR(30), documento INT, cod_cia SMALLINT, localidad CHAR(40), chitbis CHAR(2) END RECORD, tipo CHAR(3) DEFINE total4,total5,total6,neto,total7,total8,total9 DECIMAL(12,2) DEFINE nombre_rp CHAR(20) DEFINE hora CHAR(5), otro_num INT,fecha DATE,documento int ORDER BY tipo,x.recibo,x.factura FORMAT FIRST PAGE HEADER LET fecha = today LET hora = time { SELECT distinct a.tipo_doc INTO tipo FROM cctb00001 a WHERE a.num_doc=x.recibo } # Se movio a ON EVERY ROW para que "Afecta" se calcule por cada fila. # Aqui (FIRST PAGE HEADER) corria una sola vez y repetia la misma # factura para todo el grupo (ej. las notas de credito). #IF tipo <> 'AV' THEN # LET documento=x.factura #ELSE # LET documento=x.documento #END IF { BEFORE GROUP OF tipo IF tipo = "AV" THEN LET nombre_rp = "AVANCE ORDEN " END IF IF tipo = "FE" THEN LET nombre_rp = "Factura Export." END IF IF tipo = "FT" THEN LET nombre_rp = "Factura Local " END IF IF tipo = "PC" THEN LET nombre_rp = "Pago de Contado" END IF IF tipo = "PG" THEN LET nombre_rp = "Recibos de pago" END IF IF tipo = "NC" THEN LET nombre_rp = "Notas de Creditos" END IF IF tipo = "OC" THEN LET nombre_rp = "Otros Creditos" END IF IF tipo = "OD" THEN LET nombre_rp = "Otros Debitos" END IF IF tipo = "ND" THEN LET nombre_rp = "Notas de Debito" END IF} BEFORE GROUP OF tipo LET total7=0 LET total8=0 LET total9=0 after GROUP OF tipo LET total7=GROUP sum(x.monto_recibo) LET total8=GROUP sum(x.descuento) LET total9=total7-total8 PRINTX total7,total8,total9 ON EVERY ROW LET neto=x.monto_recibo-x.descuento # WHENEVER ERROR CONTINUE #BUSCA RELACION DE NUMEROS LET otro_num = NULL SELECT a.num_trans INTO otro_num FROM cctb00020 a WHERE a.num_oc = x.recibo and a.tipo_doc =tipo IF tipo = "FE" OR tipo = "FT" THEN LET x.documento=NULL SELECT a.conduce INTO x.factura FROM vetb00002 a WHERE a.factura = x.recibo END IF # "Afecta" se debe calcular por cada fila. Antes se asignaba una sola vez # en FIRST PAGE HEADER, por lo que todas las filas (ej. un grupo de NC) # salian con la misma factura. IF tipo <> 'AV' THEN LET documento = x.factura ELSE LET documento = x.documento END IF printx x.*,otro_num,fecha_inicial,fecha_final,p_companias.*,fecha, documento,neto,tipo,nombre_rp # AFTER GROUP OF x.recibo ON LAST ROW LET total4 = 0 LET total5 = 0 LET total6 = 0 LET total4=SUM(x.monto_recibo) LET total5=SUM(x.descuento) LET total6=total4-total5 PRINTX total4,total5,total6 END REPORT