diff --git a/PROYECTO/bin/ccprrp001.4rp b/PROYECTO/bin/ccprrp001.4rp new file mode 100644 index 0000000..90bf586 --- /dev/null +++ b/PROYECTO/bin/ccprrp001.4rp @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PROYECTO/bin/ccprrp003.4rp b/PROYECTO/bin/ccprrp003.4rp new file mode 100644 index 0000000..f51ce1e --- /dev/null +++ b/PROYECTO/bin/ccprrp003.4rp @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PROYECTO/bin/ccprrp018.4rp b/PROYECTO/bin/ccprrp018.4rp new file mode 100644 index 0000000..1bf88fc --- /dev/null +++ b/PROYECTO/bin/ccprrp018.4rp @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PROYECTO/ccdir/ccfmmt002.per b/PROYECTO/ccdir/ccfmmt002.per index f2e6af3..01174bb 100644 --- a/PROYECTO/ccdir/ccfmmt002.per +++ b/PROYECTO/ccdir/ccfmmt002.per @@ -25,7 +25,7 @@ end tables cctb00002 attributes -fe = cctb00002.fecha,format = "dd/mm/yyyy"; +fe = formonly.fecha TYPE DATE,format = "dd/mm/yyyy"; f001 = cctb00002.sec_vend,autonext,comments = "Digite Codigo Vendedor o Presione Ctrl-W Para Busqueda"; p = formonly.nombre_emp,noentry; diff --git a/PROYECTO/ccdir/ccprgb000.4gl b/PROYECTO/ccdir/ccprgb000.4gl index f0330ce..71cd1f9 100644 --- a/PROYECTO/ccdir/ccprgb000.4gl +++ b/PROYECTO/ccdir/ccprgb000.4gl @@ -188,7 +188,19 @@ GLOBALS descrip6 CHAR(65) END RECORD - DEFINE relacion RECORD LIKE cctb00002.* + -- G6: cctb00002.fecha es datetime en SQL Server; en el programa se maneja como DATE + DEFINE relacion RECORD + fecha DATE, + cod_vend LIKE cctb00002.cod_vend, + sec_vend LIKE cctb00002.sec_vend, + sec_de LIKE cctb00002.sec_de, + sec_a LIKE cctb00002.sec_a, + status_t LIKE cctb00002.status_t, + us_crea LIKE cctb00002.us_crea, + fech_crea LIKE cctb00002.fech_crea, + us_mod LIKE cctb00002.us_mod, + fech_mod LIKE cctb00002.fech_mod + END RECORD DEFINE rec_pago RECORD LIKE cctb00001.* DEFINE cliente_bas RECORD LIKE vetb00004.* DEFINE p_companias RECORD LIKE companias.* diff --git a/PROYECTO/ccdir/ccprmt002.4gl b/PROYECTO/ccdir/ccprmt002.4gl index a3c2fc6..d270b6c 100644 --- a/PROYECTO/ccdir/ccprmt002.4gl +++ b/PROYECTO/ccdir/ccprmt002.4gl @@ -235,10 +235,11 @@ DEFINE hoy CHAR(10) END FUNCTION FUNCTION ccpcmf002() + DEFINE ult_rec INTEGER ## Aqui se prepara para la captura del criterio de seleccion #WHENEVER ERROR CONTINUE CONSTRUCT criterio ON fecha,sec_vend,sec_de,sec_a - FROM cctb00002.fecha,cctb00002.sec_vend, + FROM formonly.fecha,cctb00002.sec_vend, cctb00002.sec_de,cctb00002.sec_a IF int_flag THEN @@ -433,8 +434,8 @@ FUNCTION ccpcmf002() fecha = relacion.fecha - LET relacion.sec_de = relacion.sec_de - 1 - UPDATE cctb00003 SET ult_recibo = relacion.sec_de + LET ult_rec = relacion.sec_de - 1 + UPDATE cctb00003 SET ult_recibo = ult_rec WHERE sec_vend = relacion.sec_vend AND tipo_doc = "PG" @@ -456,8 +457,11 @@ FUNCTION ccpcmf002() WHERE sec_vend = relacion.sec_vend and fecha = relacion.fecha and sec_de = relacion.sec_de - - LET numero_msg = 39 + IF sqlca.sqlerrd[3] = 0 THEN + LET numero_msg = 3 + ELSE + LET numero_msg = 39 + END IF CALL msg(numero_msg) COMMAND "Retornar" diff --git a/PROYECTO/ccdir/ccprrp001.4gl b/PROYECTO/ccdir/ccprrp001.4gl index 9092706..dcbf2b4 100644 --- a/PROYECTO/ccdir/ccprrp001.4gl +++ b/PROYECTO/ccdir/ccprrp001.4gl @@ -55,8 +55,22 @@ GLOBALS "ccprgb000.4gl" apellido CHAR(30) END RECORD +MAIN + DEFER INTERRUPT + CALL ARG_VAL(1) RETURNING usuarios + CALL ARG_VAL(2) RETURNING clave + + CONNECT TO "smarmotech" USER usuarios USING clave + SELECT * INTO p_companias.* FROM companias + + CALL ccprrp001() +END MAIN + FUNCTION ccprrp001() DEFINE salir2,salir,salir1 CHAR(1) +DEFINE r_output STRING +DEFINE handler om.SaxDocumentHandler +DEFINE hay SMALLINT # WHENEVER ERROR CONTINUE OPTIONS @@ -66,7 +80,7 @@ DEFINE salir2,salir,salir1 CHAR(1) OPEN FORM ccfmrp001 FROM "ccfmrp001" DISPLAY FORM ccfmrp001 - CALL pantalla() + #CALL pantalla() DISPLAY "ccprrp001" AT 4,3 DISPLAY "Clientes sin Ventas" AT 6,30 @@ -121,7 +135,7 @@ DEFINE salir2,salir,salir1 CHAR(1) "WHERE d.fecha_orig <= ? AND d.tipo_cliente = a.tipo_cliente AND ", criterio CLIPPED," AND d.status_t IS NULL AND d.sec_cliente= a.sec_cliente ", " AND d.tipo_doc[1] = 'F' AND a.status_t is null AND ", - criterio clipped, " GROUP BY 1,2,3" + criterio clipped, " GROUP BY d.tipo_cliente,d.sec_cliente,a.nombre" DISPLAY "<< Buscando Factura del Cliente... Espere Por Favor. >>" AT 19,14 ATTRIBUTE (REVERSE,BOLD) @@ -130,7 +144,16 @@ DEFINE salir2,salir,salir1 CHAR(1) DECLARE busca CURSOR FOR comando OPEN busca USING fecha_corte - START REPORT ventas TO "C:\\archivo" + LET r_output = getPreviewDevice() + IF NOT fgl_report_loadCurrentSettings("ccprrp001.4rp") THEN + CALL fgl_winmessage("ERROR", "No se pudo cargar ccprrp001.4rp", "stop") + RETURN + END IF + CALL fgl_report_selectDevice(r_output) + CALL fgl_report_selectPreview(TRUE) + LET handler = fgl_report_commitCurrentSettings() + START REPORT ventas TO XML HANDLER handler + LET hay = 0 DISPLAY " " AT 19,14 DISPLAY "<< Reporte Generandose ... Por Favor Espere. >>" AT 19,14 ATTRIBUTE (REVERSE) @@ -199,12 +222,15 @@ IF (fecha_corte - vendcli.fecha) >= dia_minimo AND LET vendcli.balance = balancli.balance - valor_de OUTPUT TO REPORT ventas(vendcli.*,fecha_corte) + LET hay = 1 END IF END WHILE - FINISH REPORT ventas - CLEAR SCREEN -RUN "type C:\\archivo > %USPRINT%" END FUNCTION + FINISH REPORT ventas + IF NOT hay THEN + CALL fgl_winmessage("INFO", "NO EXISTEN REGISTROS PARA ESTOS PARAMETROS", "info") + END IF +END FUNCTION REPORT ventas(x,fecha5) DEFINE x RECORD @@ -217,112 +243,39 @@ REPORT ventas(x,fecha5) valor DECIMAL(12,2), balance DECIMAL(12,2) END RECORD - DEFINE nombre1,apellido CHAR(30) - DEFINE dias_c INTEGER DEFINE fecha5 DATE - DEFINE balance, monto_factura DECIMAL(10,2) - DEFINE descrip_zone CHAR(30) - 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 hora CHAR(5) - DEFINE fecha_factura DATE - DEFINE total_monto_zona,total_gral_monto_zona,monto DECIMAL(12,2) - - OUTPUT - TOP MARGIN 0 - LEFT MARGIN 0 - BOTTOM MARGIN 2 + DEFINE empresa, titulo, vendedor, cli, fec STRING + DEFINE dias_c INTEGER ORDER BY x.sec_vend,x.sec_cliente 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 - - IF total_gral_monto_zona is null THEN - LET total_gral_monto_zona = 0 - END IF - - LET lj = (96 - LENGTH(p_companias.nombre CLIPPED))/2 - PRINT COLUMN 1, doce ,negrillas_on - PRINT COLUMN 1, "ccprrp001", - COLUMN lj, p_companias.nombre, - COLUMN 89, "Pag. ",pageno using "###" - PRINT COLUMN 32, "Sistema de Cuentas por Cobrar", - COLUMN 89, today using "dd/mm/yyyy" - - IF dia_maximo != 3650 THEN - PRINT COLUMN 30, "Clientes sin Ventas ", - "de ",dia_minimo using "<<<", - " a ",dia_maximo using "<<<", - " dias", - COLUMN 92, hora - ELSE - PRINT COLUMN 29, "Clientes sin Ventas a mas de ", - dia_minimo using "<<"," dias", - COLUMN 92, hora - END IF - - PRINT COLUMN 41, "Al ", fecha5 using "dd/mm/yyyy" - SKIP 1 LINES - - PRINT COLUMN 1, "--------------------------------------------------", - "----------------------------------------------" - - PRINT COLUMN 44, "|------ULTIMA VENTA------|" - PRINT COLUMN 6, "Cliente", - COLUMN 44, "Factura", - COLUMN 54, "Fecha", - COLUMN 65, "Valor", - COLUMN 74, "No.dias", - COLUMN 86, "Balance" - - PRINT COLUMN 1, "--------------------------------------------------", - "----------------------------------------------" -# , negrillas_off - - BEFORE GROUP OF x.sec_vend - SKIP 1 LINE - SELECT nom1_emp,apell1_emp INTO nombre1,apellido + BEFORE GROUP OF x.sec_vend + INITIALIZE nombre1, apellido TO NULL + SELECT nom1_emp,apell1_emp INTO nombre1,apellido FROM adtb00003 WHERE status_t IS NULL AND num_emp = x.sec_vend - LET descrip5 = NULL - LET descrip5 = nombre1 CLIPPED," ",apellido CLIPPED - - IF descrip5 IS NULL THEN - LET descrip5 = "Vendedor no Existe. Verifique." - END IF - - PRINT COLUMN 1," Vendedor : ",x.sec_vend using "&&&&"," ", descrip5 - clipped + LET descrip5 = NULL + LET descrip5 = nombre1 CLIPPED," ",apellido CLIPPED + IF descrip5 IS NULL OR LENGTH(descrip5 CLIPPED) = 0 THEN + LET descrip5 = "Vendedor no Existe. Verifique." + END IF + LET vendedor = "Vendedor : ", x.sec_vend USING "&&&&", " ", descrip5 CLIPPED + LET empresa = p_companias.nombre CLIPPED + IF dia_maximo != 3650 THEN + LET titulo = "Clientes sin Ventas de ", dia_minimo USING "<<<<<", + " a ", dia_maximo USING "<<<<<", " dias Al ", + fecha5 USING "dd/mm/yyyy" + ELSE + LET titulo = "Clientes sin Ventas a mas de ", dia_minimo USING "<<<<<", + " dias Al ", fecha5 USING "dd/mm/yyyy" + END IF + PRINTX empresa, titulo, vendedor ON EVERY ROW - - PRINT COLUMN 4, x.tipo_cliente using "&&","-", - COLUMN 7, x.sec_cliente using "&&&&", - COLUMN 12, x.nombre, - COLUMN 44, x.factura using "######", - COLUMN 52, x.fecha using "dd/mm/yyyy", - COLUMN 61, x.valor using "$,$$$,$$$.$$", - COLUMN 73, fecha5 - x.fecha using "###,###", - COLUMN 82, x.balance using "---,---,---.##" - - AFTER GROUP OF x.sec_vend - SKIP TO TOP OF PAGE - - END REPORT - + LET cli = x.tipo_cliente USING "&&", "-", x.sec_cliente USING "&&&&&", + " ", x.nombre CLIPPED + LET fec = x.fecha USING "dd/mm/yyyy" + LET dias_c = fecha5 - x.fecha + PRINTX cli, x.factura, fec, x.valor, dias_c, x.balance +END REPORT diff --git a/PROYECTO/ccdir/ccprrp003.4gl b/PROYECTO/ccdir/ccprrp003.4gl index 44b6200..d1315ae 100644 --- a/PROYECTO/ccdir/ccprrp003.4gl +++ b/PROYECTO/ccdir/ccprrp003.4gl @@ -44,6 +44,20 @@ GLOBALS "ccprgb000.4gl" CALL ccprrp003() END MAIN FUNCTION ccprrp003() + DEFINE sql_ag STRING, lit_corte STRING + DEFINE ag RECORD + tc, sc SMALLINT, + nom CHAR(30), + c1, c2, c3, c4, c5, tot DECIMAL(14,2) + END RECORD + DEFINE fila3 RECORD + grupo SMALLINT, + empresa STRING, + titulo STRING, + cliente STRING, + c1, c2, c3, c4, c5, total DECIMAL(14,2), + pct DECIMAL(8,2) + END RECORD # WHENEVER ERROR CONTINUE @@ -157,8 +171,20 @@ LABEL atras: START REPORT reporte3 TO archivo } CALL seleccionarsalida() RETURNING r_output - CALL configureoutput(r_output) RETURNING handler - START REPORT reporte3 TO XML HANDLER HANDLER + CALL configureoutput3(r_output) RETURNING handler + IF handler IS NULL THEN + CALL fgl_winmessage("ERROR","No se pudo cargar ccprrp003.4rp","stop") + RETURN + END IF + CREATE TEMP TABLE s3 + ( + tipo_cliente SMALLINT, + sec_cliente SMALLINT, + nombre CHAR(30), + aplica_a INTEGER, + pendiente DECIMAL(12,2), + fecha_factura DATE + ) LET cmd = null LET cmd = FGL_GETENV("FGLSPOOL")||"\\DATA.txt" @@ -201,7 +227,11 @@ LET selec1 = IF progreso > 50 THEN LET progreso = 50 END IF - OUTPUT TO REPORT reporte3(doccli.*,tipo_venta,fecha_corte,valor_total) + IF doccli.fecha_factura IS NULL OR doccli.fecha_factura = MDY(12,31,1899) THEN + LET doccli.fecha_factura = MDY(1,1,2001) + END IF + INSERT INTO s3 VALUES (doccli.tipo_cliente, doccli.sec_cliente, doccli.nombre, + doccli.aplica_a, doccli.pendiente, doccli.fecha_factura) OUTPUT TO REPORT reporte33(doccli.*,tipo_venta,fecha_corte,valor_total) DISPLAY progreso TO progreso @@ -250,7 +280,11 @@ LET selec3 = LET progreso = 95 END IF - OUTPUT TO REPORT reporte3(doccli.*,tipo_venta,fecha_corte,valor_total) + IF doccli.fecha_factura IS NULL OR doccli.fecha_factura = MDY(12,31,1899) THEN + LET doccli.fecha_factura = MDY(1,1,2001) + END IF + INSERT INTO s3 VALUES (doccli.tipo_cliente, doccli.sec_cliente, doccli.nombre, + doccli.aplica_a, doccli.pendiente, doccli.fecha_factura) OUTPUT TO REPORT reporte33(doccli.*,tipo_venta,fecha_corte,valor_total) DISPLAY progreso TO progreso @@ -259,7 +293,46 @@ LET selec3 = LET progreso = 100 DISPLAY progreso to progreso CALL ui.Interface.refresh() - FINISH REPORT reporte3 + LET lit_corte = "CONVERT(DATE,'", fecha_corte USING "yyyy-mm-dd", "',23)" + LET sql_ag = + "SELECT tipo_cliente, sec_cliente, MAX(nombre), ", + " SUM(CASE WHEN DATEDIFF(day,fecha_factura,", lit_corte, ") <= 0 THEN pendiente ELSE 0 END), ", + " SUM(CASE WHEN DATEDIFF(day,fecha_factura,", lit_corte, ") BETWEEN 1 AND 30 THEN pendiente ELSE 0 END), ", + " SUM(CASE WHEN DATEDIFF(day,fecha_factura,", lit_corte, ") BETWEEN 31 AND 60 THEN pendiente ELSE 0 END), ", + " SUM(CASE WHEN DATEDIFF(day,fecha_factura,", lit_corte, ") BETWEEN 61 AND 90 THEN pendiente ELSE 0 END), ", + " SUM(CASE WHEN DATEDIFF(day,fecha_factura,", lit_corte, ") >= 91 THEN pendiente ELSE 0 END), ", + " SUM(pendiente) FROM s3 GROUP BY tipo_cliente, sec_cliente " + IF cero = "NO" THEN + LET sql_ag = sql_ag, " HAVING SUM(pendiente) <> 0 " + END IF + LET sql_ag = sql_ag, " ORDER BY tipo_cliente, sec_cliente " + + START REPORT estado3 TO XML HANDLER handler + DECLARE c_ag CURSOR FROM sql_ag + FOREACH c_ag INTO ag.* + LET fila3.grupo = 1 + LET fila3.empresa = p_companias.nombre CLIPPED + IF tipo_venta = "1" THEN + LET fila3.titulo = "Saldos por Antiguedad al ", fecha_corte USING "dd/mm/yyyy", " Valores en RD$" + ELSE + LET fila3.titulo = "Saldos por Antiguedad al ", fecha_corte USING "dd/mm/yyyy", " Valores en US$" + END IF + LET fila3.cliente = ag.tc USING "&&", "-", ag.sc USING "&&&&&", " ", ag.nom CLIPPED + LET fila3.c1 = ag.c1 + LET fila3.c2 = ag.c2 + LET fila3.c3 = ag.c3 + LET fila3.c4 = ag.c4 + LET fila3.c5 = ag.c5 + LET fila3.total = ag.tot + IF valor_total IS NULL OR valor_total = 0 THEN + LET fila3.pct = 0 + ELSE + LET fila3.pct = (ag.tot / valor_total) * 100 + END IF + OUTPUT TO REPORT estado3(fila3.*) + END FOREACH + FINISH REPORT estado3 + DROP TABLE s3 FINISH REPORT reporte33 CALL ui.Interface.frontCall("standard","getenv", ["CREDITO"], [dcmd] ) @@ -1061,4 +1134,70 @@ END FUNCTION LET total_saldo = 0 END REPORT +FUNCTION configureoutput3(tipo_file) + DEFINE tipo_file CHAR(3) + IF NOT fgl_report_loadCurrentSettings("ccprrp003.4rp") THEN + RETURN NULL + END IF + CALL fgl_report_setPageMargins("0.5cm","0.5cm","0.5cm","0.5cm") + CALL fgl_report_selectDevice(tipo_file) + CALL fgl_report_configurexlsxdevice(null,null,null,false,false,null,1) + CALL fgl_report_selectPreview(TRUE) + RETURN fgl_report_commitCurrentSettings() +END FUNCTION + +REPORT estado3(x) + DEFINE x RECORD + grupo SMALLINT, + empresa STRING, + titulo STRING, + cliente STRING, + c1, c2, c3, c4, c5, total DECIMAL(14,2), + pct DECIMAL(8,2) + END RECORD + DEFINE t30, t45, t60, tm60, tm120, tsaldo DECIMAL(14,2) + DEFINE ct30, ct45, ct60, ctm60, ctm120, ctsaldo DECIMAL(14,2) + + ORDER EXTERNAL BY x.grupo + + FORMAT + BEFORE GROUP OF x.grupo + LET t30 = 0 + LET t45 = 0 + LET t60 = 0 + LET tm60 = 0 + LET tm120 = 0 + LET tsaldo = 0 + LET ct30 = 0 + LET ct45 = 0 + LET ct60 = 0 + LET ctm60 = 0 + LET ctm120 = 0 + LET ctsaldo = 0 + PRINTX x.empresa, x.titulo + + ON EVERY ROW + LET t30 = t30 + x.c1 + LET t45 = t45 + x.c2 + LET t60 = t60 + x.c3 + LET tm60 = tm60 + x.c4 + LET tm120 = tm120 + x.c5 + LET tsaldo = tsaldo + x.total + IF x.c1 > 0 THEN LET ct30 = ct30 + x.c1 END IF + IF x.c2 > 0 THEN LET ct45 = ct45 + x.c2 END IF + IF x.c3 > 0 THEN LET ct60 = ct60 + x.c3 END IF + IF x.c4 > 0 THEN LET ctm60 = ctm60 + x.c4 END IF + IF x.c5 > 0 THEN LET ctm120 = ctm120 + x.c5 END IF + IF x.total > 0 THEN LET ctsaldo = ctsaldo + x.total END IF + PRINTX x.cliente, x.c1, x.c2, x.c3, x.c4, x.c5, x.total, x.pct + + AFTER GROUP OF x.grupo + LET tot_gen2.total1 = t30 + LET tot_gen2.total2 = t45 + LET tot_gen2.total3 = t60 + LET tot_gen2.total4 = tm60 + LET tot_gen2.total5 = tsaldo + PRINTX t30, t45, t60, tm60, tm120, tsaldo, + ct30, ct45, ct60, ctm60, ctm120, ctsaldo +END REPORT diff --git a/PROYECTO/ccdir/ccprrp018.4gl b/PROYECTO/ccdir/ccprrp018.4gl index e74eaba..1f81ce9 100644 --- a/PROYECTO/ccdir/ccprrp018.4gl +++ b/PROYECTO/ccdir/ccprrp018.4gl @@ -62,6 +62,16 @@ GLOBALS "ccprgb000.4gl" END RECORD DEFINE fecha3 DATE +MAIN + DEFER INTERRUPT + CALL ARG_VAL(1) RETURNING usuarios + CALL ARG_VAL(2) RETURNING clave + + CONNECT TO "smarmotech" USER usuarios USING clave + + CALL ccprrp018() +END MAIN + FUNCTION ccprrp018() # WHENEVER ERROR CONTINUE @@ -75,7 +85,7 @@ FUNCTION ccprrp018() OPEN FORM ccfmrp018 FROM "ccfmrp018" DISPLAY FORM ccfmrp018 - CALL pantalla() + #CALL pantalla() DISPLAY "ccprrp018" AT 4,3 ATTRIBUTE(RED) DISPLAY "Estado Cuentas Pendiente De Cobros" AT 6,21 ATTRIBUTE(BLACK) @@ -126,7 +136,7 @@ LET selec5 = " a.tipo_cliente = c.tipo_cliente AND ", " a.sec_cliente = c.sec_cliente AND ", #" a.sec_cliente = b.sec_cliente AND a.tipo_doc in ('FE','FT','NC') AND ", - criterio CLIPPED," GROUP BY 1,2,3 HAVING SUM(a.valor+a.monto_desc) <> 0 ", + criterio CLIPPED," GROUP BY a.tipo_cliente,a.sec_cliente,a.aplica_a HAVING SUM(a.valor+a.monto_desc) <> 0 ", "ORDER BY 3 " DISPLAY "<< Buscando los Movimientos del Rango >>" AT 20,14 @@ -134,7 +144,7 @@ LET selec5 = PREPARE movi FROM selec5 DECLARE movtos_cli CURSOR FOR movi - OPEN movtos_cli USING fecha_final + #OPEN movtos_cli USING fecha_final -- G6: e_ccrp18 carga todo con un INSERT ... SELECT LET destino = "E" IF destino = "E" THEN CALL e_ccrp18() @@ -496,370 +506,183 @@ END IF END REPORT } +{ G6: la salida original llenaba una plantilla de Excel por DDE (G:\ESTADO.XLS) y + copiaba un archivo por cliente a G:\ESTADOS. Ahora se emite un reporte de Genero + (ccprrp018.4rp): PDF en el navegador, visor en GDC. } FUNCTION e_ccrp18() - DEFINE primera,imprime_ana,imprime_cliente CHAR(1), - cliente CHAR(70), - codigo_g,codigo_ant,codigo_act CHAR(6), - ret CHAR(30), - ejecuta,localiza CHAR(80), - documento CHAR(9) - ---# CALL fgl_init4js() + DEFINE codigo_act, codigo_ant STRING + DEFINE handler om.SaxDocumentHandler + DEFINE r_output STRING + DEFINE hay SMALLINT + DEFINE sql_ins STRING + DEFINE fila RECORD + codigo STRING, + cliente STRING, + direccion STRING, + limite STRING, + zona STRING, + corte STRING, + documento STRING, + fecha STRING, + valor DECIMAL(12,2), + balance DECIMAL(12,2), + dias INTEGER + END RECORD ---# LET archivo = NULL ---# LET filename = NULL ---# LET filename = FGL_GETENV("USPROGRAM") + CREATE TEMP TABLE estado + ( + tipo_cliente SMALLINT, + sec_cliente SMALLINT, + aplica_a INTEGER, + fecha_venc DATE, + valor DECIMAL(12,2), + tipo_doc CHAR(2), + fecha_min DATE + ) ---# LET archivo = "G:\\\\ESTADO.XLS" ---# LET sysos = FGL_GETENV("OS") + LET sql_ins = + "INSERT INTO estado (tipo_cliente,sec_cliente,aplica_a,fecha_venc,valor,tipo_doc,fecha_min) ", + "SELECT g.tipo_cliente,g.sec_cliente,g.aplica_a,d.fmax,g.valor,d.tipo_doc,d.fmin FROM ( ", + " SELECT a.tipo_cliente,a.sec_cliente,a.aplica_a,SUM(a.valor+a.monto_desc) AS valor ", + " FROM cctb00001 a,vetb00004 c ", + " WHERE a.status_t IS NULL AND a.fecha_orig <= ? AND ", + " a.num_doc IS NOT NULL AND a.tipo_doc != 'PC' AND ", + " a.tipo_cliente = c.tipo_cliente AND ", + " a.sec_cliente = c.sec_cliente AND ", + criterio CLIPPED, + " GROUP BY a.tipo_cliente,a.sec_cliente,a.aplica_a ", + " HAVING SUM(a.valor+a.monto_desc) <> 0) g ", + "LEFT JOIN (SELECT num_doc,MIN(tipo_doc) AS tipo_doc,MIN(fecha_orig) AS fmin, ", + " MAX(fecha_orig) AS fmax ", + " FROM cctb00001 ", + " WHERE status_t IS NULL AND aplica_a = num_doc ", + " GROUP BY num_doc) d ON d.num_doc = g.aplica_a" + PREPARE p_ins18 FROM sql_ins + EXECUTE p_ins18 USING fecha_final ---# IF sysos = "Windows_NT" THEN ---# LET filename = filename CLIPPED," G:\\\\ESTADO.XLS" ---# LET localiza = "G:\\ESTADOS\\" - ---# LET ejecuta = "DEL /S /Q ",localiza CLIPPED,"*.*" - RUN ejecuta - LET ejecuta = NULL ---# ELSE ---# LET filename = "C:\\\\ARCHIV~1\\\\MICROS~1\\\\OFFICE\\\\EXCEL.EXE G:\\\\ESTADO.XLS" ---# LET localiza = "G:\\ESTADOS\\" ---# LET archivo = "G:\\\\ESTADO.XLS" + LET r_output = getPreviewDevice() + IF NOT fgl_report_loadCurrentSettings("ccprrp018.4rp") THEN + CALL fgl_winmessage("ERROR", "No se pudo cargar ccprrp018.4rp", "stop") + DROP TABLE estado + RETURN + END IF + CALL fgl_report_selectDevice(r_output) + CALL fgl_report_selectPreview(TRUE) + LET handler = fgl_report_commitCurrentSettings() + START REPORT estado18 TO XML HANDLER handler ---# LET ejecuta = "DEL ",localiza CLIPPED,"*.xls" - RUN ejecuta - LET ejecuta = NULL ---# END IF + DECLARE buscate CURSOR FOR + SELECT a.tipo_cliente, a.sec_cliente, a.aplica_a, a.valor, + a.fecha_venc, a.tipo_doc, a.fecha_min + FROM estado a + ORDER BY a.tipo_cliente, a.sec_cliente, a.aplica_a - -# CREACION TABLA TEMPORAL -CREATE TABLE estado -( - tipo_cliente SMALLINT, - sec_cliente SMALLINT, - aplica_a INTEGER, - fecha_venc DATE, - valor DECIMAL(12,2) -) - - - LET primera = "S" - LET salir = "N" - WHILE salir != "S" - FETCH movtos_cli INTO movtos.* - - IF status = NOTFOUND THEN - LET salir = "S" - EXIT WHILE - END IF - - IF int_flag THEN - LET numero_msg = 2 - CALL msg(numero_msg) - LET int_flag = FALSE - RETURN - END IF - - IF prima IS NOT NULL THEN - LET movtos.valor = movtos.valor * prima - END IF - - SELECT MAX(a.fecha_orig) - INTO fecha3 - FROM cctb00001 a - WHERE a.num_doc = movtos.aplica_a AND - a.status_t IS NULL AND - a.aplica_a = a.num_doc - - INSERT INTO estado VALUES (movtos.tipo_cliente,movtos.sec_cliente, - movtos.aplica_a,fecha3,movtos.valor) - END WHILE - ---# IF winexec(filename) THEN - ---# IF DDEconnect("EXCEL",archivo) THEN - ---# LET cels = "R",6 USING "<<","C3" ---# IF DDEpoke("EXCEL",archivo,cels,fecha_final) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF - - DECLARE buscate CURSOR FOR - SELECT a.tipo_cliente,a.sec_cliente,a.aplica_a,SUM(a.valor) FROM estado a - GROUP BY 1,2,3 - ORDER BY 1,2 - - LET primera = "S" - LET cnt = 16 + LET hay = 0 + LET codigo_ant = NULL LET balance = 0 - LET codigo_ant = "1" - LET codigo_Act = NULL - FOREACH buscate INTO movtos.* + FOREACH buscate INTO movtos.*, fecha3, tipo, fecha2 + LET hay = 1 + IF prima IS NOT NULL THEN + LET movtos.valor = movtos.valor * prima + END IF + LET codigo_act = movtos.tipo_cliente USING "##", "-", + movtos.sec_cliente USING "<<<<<<<<&" + IF codigo_ant IS NULL OR codigo_ant != codigo_act THEN + LET codigo_ant = codigo_act + LET balance = 0 + INITIALIZE p_nombre, p_limite_credito, p_zona, p_numero, p_calle, + p_casa, ptelefono, pzona, pprovincia, pbarrio, + nombre_zona, nombre_p TO NULL + SELECT UNIQUE b.nombre, b.limite_credito, b.zona_postal, b.num_rnc, + c.calle, c.casa_num, b.telefono, b.cod_zona, + b.cod_provincia, c.barrio + INTO p_nombre, p_limite_credito, p_zona, p_numero, p_calle, p_casa, + ptelefono, pzona, pprovincia, pbarrio + FROM vetb00004 b, vetb00005 c + WHERE b.tipo_cliente = movtos.tipo_cliente AND + b.sec_cliente = movtos.sec_cliente AND + b.tipo_cliente = c.tipo_cliente AND + b.sec_cliente = c.sec_cliente AND + b.status_t IS NULL + SELECT a.descrip INTO nombre_zona FROM vetb00008 a + WHERE a.cod_zona = pzona + SELECT b.nombre_provincia INTO nombre_p + FROM vetb00009 a, vetb00020 b + WHERE a.cod_zona = pzona AND + a.cod_provincia = pprovincia AND + b.cod_provincia = a.cod_provincia + END IF - LET codigo_Act = movtos.tipo_cliente USING "##",movtos.sec_cliente USING "&&&&" - LET imprime_ana = "N" - IF primera = "S" THEN - LET codigo_ant = codigo_Act - END IF - IF codigo_ant != codigo_act THEN - LET codigo_ant = codigo_Act - LET primera = "S" - LET imprime_ana = "S" ---# LET cels = "R",38 USING "<<","C2" ---# IF DDEpoke("EXCEL",archivo,cels,no_v) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF + LET balance = balance + movtos.valor + LET fila.codigo = codigo_act + LET fila.cliente = p_nombre CLIPPED, " (", codigo_act, ")" + LET fila.direccion = p_calle CLIPPED, " #", p_casa CLIPPED, ", ", + pbarrio CLIPPED, " Tel. ", ptelefono CLIPPED + LET fila.limite = "LIMITE: ", p_limite_credito USING "##,###,##&.&&", + " RNC: ", p_numero CLIPPED + LET fila.zona = nombre_zona CLIPPED, ", ", nombre_p CLIPPED + LET fila.corte = "Al ", fecha_final USING "dd/mm/yyyy" + LET fila.documento = movtos.aplica_a USING "<<<<<<<<<", "-", tipo CLIPPED + LET fila.fecha = fecha2 USING "dd/mm/yyyy" + LET fila.valor = movtos.valor + LET fila.balance = balance + LET fila.dias = (fecha_final - fecha3) - dias2 + OUTPUT TO REPORT estado18(fila.*) + END FOREACH ---# LET cels = "R",38 USING "<<","C3" ---# IF DDEpoke("EXCEL",archivo,cels,v1_30) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF + FINISH REPORT estado18 + DROP TABLE estado ---# LET cels = "R",38 USING "<<","C4" ---# IF DDEpoke("EXCEL",archivo,cels,v31_45) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF + IF NOT hay THEN + CALL fgl_winmessage("INFO", + "NO EXISTEN REGISTROS PARA ESTOS PARAMETROS", "info") + END IF +END FUNCTION ---# LET cels = "R",38 USING "<<","C5" ---# IF DDEpoke("EXCEL",archivo,cels,v46_60) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF +REPORT estado18(x) + DEFINE x RECORD + codigo STRING, + cliente STRING, + direccion STRING, + limite STRING, + zona STRING, + corte STRING, + documento STRING, + fecha STRING, + valor DECIMAL(12,2), + balance DECIMAL(12,2), + dias INTEGER + END RECORD + DEFINE nov, d1, d2, d3, d4, total DECIMAL(12,2) ---# LET cels = "R",38 USING "<<","C7" ---# IF DDEpoke("EXCEL",archivo,cels,vm_60) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF + ORDER EXTERNAL BY x.codigo ---# LET command = "Run(\\\"ESTADO.XLS!SALVAR\\\";FALSE)" ---# CALL DDEExecute ("EXCEL",archivo,command) RETURNING ret + FORMAT + BEFORE GROUP OF x.codigo + LET nov = 0 + LET d1 = 0 + LET d2 = 0 + LET d3 = 0 + LET d4 = 0 + LET total = 0 + PRINTX x.cliente, x.limite, x.direccion, x.zona, x.corte ---# IF sysos = "Windows_NT" THEN - LET ejecuta = "COPY G:\\ESTADO.XLS G:\\ESTADOS\\", - codigo_g,".xls" ---# ELSE - LET ejecuta = "COPY G:\\ESTADO.XLS G:\\ESTADOS\\", - codigo_g,".xls" ---# END IF - RUN ejecuta - ---# LET command = "Run(\\\"ESTADO.XLS!LIMPIAR\\\";FALSE)" ---# CALL DDEExecute ("EXCEL",archivo,command) RETURNING ret - - LET cnt = 16 ---# END IF - ---# IF primera = "S" THEN - LET primera = "N" - LET imprime_cliente = "S" - - LET no_v = 0 - LET v1_30 = 0 - LET v31_45 = 0 - LET v46_60 = 0 - LET vm_60 = 0 - -#### Seleciona los datos generales de identificacion del cliente - - LET codigo_g = movtos.tipo_cliente USING "##",movtos.sec_cliente USING "&&&&" - - SELECT UNIQUE b.nombre,b.limite_credito,b.zona_postal,b.num_rnc,c.calle, - c.casa_num,b.telefono,b.cod_zona,b.cod_provincia,c.barrio - INTO p_nombre,p_limite_credito,p_zona,p_numero,p_calle,p_casa, - ptelefono,pzona,pprovincia,pbarrio - FROM vetb00004 b ,vetb00005 c - WHERE b.tipo_cliente = movtos.tipo_cliente and b.sec_cliente = movtos.sec_cliente and - b.tipo_cliente = c.tipo_cliente and b.sec_cliente = c.sec_cliente and - b.status_t is null - - SELECT a.descrip INTO nombre_zona FROM vetb00008 a - WHERE a.cod_zona = pzona - - SELECT b.nombre_provincia - INTO nombre_p FROM vetb00009 a, vetb00020 b - WHERE a.cod_zona = pzona AND - a.cod_provincia = pprovincia AND - b.cod_provincia = a.cod_provincia - - ---# LET cliente = p_nombre CLIPPED," ","(",movtos.tipo_cliente USING "##","-", - movtos.sec_cliente USING "&&&&",")" ---# LET cliente = cliente CLIPPED ---# LET cels = "R",8 USING "<<","C2" ---# IF DDEpoke("EXCEL",archivo,cels,cliente) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF - - LET balance = 0 ---# LET cliente = null ---# LET cliente = p_calle CLIPPED," #",p_casa CLIPPED,", ",pbarrio CLIPPED," Tel. ",ptelefono CLIPPED ---# LET cels = "R",9 USING "<<","C2" ---# IF DDEpoke("EXCEL",archivo,cels,cliente) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF - ---# LET cliente = null ---# LET cliente = "LIMITE: ",p_limite_credito USING "##,###,###.##"," ", - "RNC: ",p_numero ---# LET cels = "R",10 USING "<<","C2" ---# IF DDEpoke("EXCEL",archivo,cels,cliente) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF - ---# LET cliente = null ---# LET cliente = nombre_zona CLIPPED,", ",nombre_p CLIPPED ---# LET cels = "R",11 USING "<<","C2" ---# IF DDEpoke("EXCEL",archivo,cels,cliente) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF - ---# END IF - - - SELECT UNIQUE a.tipo_doc,MIN(a.fecha_orig) INTO tipo,fecha2 - FROM cctb00001 a - WHERE a.num_doc = movtos.aplica_a AND a.status_t IS NULL AND - a.aplica_a = a.num_doc - GROUP BY 1 ---# LET documento = movtos.aplica_a USING "<<<<<<","-",tipo ---# LET cels = "R",cnt USING "<<","C2" ---# IF DDEpoke("EXCEL",archivo,cels,documento) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF - - ---# LET cels = "R",cnt USING "<<","C3" ---# IF DDEpoke("EXCEL",archivo,cels,fecha2) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF - ---# LET balance = balance + movtos.valor - ---# LET cels = "R",cnt USING "<<","C5" ---# IF DDEpoke("EXCEL",archivo,cels,movtos.valor) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF ---# LET balance = balance + movtos.valor - ---# LET cels = "R",cnt USING "<<","C7" ---# IF DDEpoke("EXCEL",archivo,cels,balance) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF - ---# LET cels = "R",35 USING "<<","C7" ---# IF DDEpoke("EXCEL",archivo,cels,balance) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF - - #LET dias = (fecha_final - fecha2) - dias2 - LET dias = (fecha_final - fecha3) - dias2 - - - IF dias > 0 AND dias < 31 THEN - LET v1_30 = movtos.valor + v1_30 - END IF - IF dias > 30 and dias < 46 THEN - LET v31_45 = movtos.valor + v31_45 - END IF - IF dias > 45 and dias < 61 THEN - LET v46_60 = movtos.valor + v46_60 - END IF - IF dias > 60 THEN - LET vm_60 = vm_60 + movtos.valor - END IF - ---# LET cnt = cnt + 1 ---# END FOREACH - IF imprime_ana = "N" THEN ---# LET cels = "R",38 USING "<<","C2" ---# IF DDEpoke("EXCEL",archivo,cels,no_v) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF - ---# LET cels = "R",38 USING "<<","C3" ---# IF DDEpoke("EXCEL",archivo,cels,v1_30) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF - ---# LET cels = "R",38 USING "<<","C4" ---# IF DDEpoke("EXCEL",archivo,cels,v31_45) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF - ---# LET cels = "R",38 USING "<<","C5" ---# IF DDEpoke("EXCEL",archivo,cels,v46_60) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF - ---# LET cels = "R",38 USING "<<","C7" ---# IF DDEpoke("EXCEL",archivo,cels,vm_60) THEN ---# ELSE ---# LET numero_msg =391 ---# CALL msg(numero_msg) ---# END IF - -{--# LET command = "Run(\\\"ESTADO.XLS!PROTEJE\\\";FALSE)" ---# CALL DDEExecute ("EXCEL",archivo,command) RETURNING ret -} ---# LET command = "Run(\\\"ESTADO.XLS!SALVAR\\\";FALSE)" ---# CALL DDEExecute ("EXCEL",archivo,command) RETURNING ret - -{--# LET command = "Run(\\\"ESTADO.XLS!DESPROTEJER\\\";FALSE)" ---# CALL DDEExecute ("EXCEL",archivo,command) RETURNING ret -} - ---# IF sysos = "Windows_NT" THEN - LET ejecuta = "COPY G:\\ESTADO.XLS G:\\ESTADOS\\", - codigo_g,".xls" ---# ELSE - LET ejecuta = "COPY G:\\ESTADO.XLS G:\\ESTADOS\\", - codigo_g,".xls" ---# END IF - - RUN ejecuta - ---# LET command = "Run(\\\"ESTADO.XLS!LIMPIAR\\\";FALSE)" ---# CALL DDEExecute ("EXCEL",archivo,command) RETURNING ret - - END IF -end if -end if -DROP TABLE estado ---# END FUNCTION + ON EVERY ROW + LET total = total + x.valor + CASE + WHEN x.dias <= 0 + LET nov = nov + x.valor + WHEN x.dias < 31 + LET d1 = d1 + x.valor + WHEN x.dias < 46 + LET d2 = d2 + x.valor + WHEN x.dias < 61 + LET d3 = d3 + x.valor + OTHERWISE + LET d4 = d4 + x.valor + END CASE + PRINTX x.documento, x.fecha, x.valor, x.balance, x.dias + AFTER GROUP OF x.codigo + PRINTX nov, d1, d2, d3, d4, total +END REPORT diff --git a/PROYECTO/ccdir/ccprrp052.4gl b/PROYECTO/ccdir/ccprrp052.4gl index b23d69b..e9f29cd 100644 --- a/PROYECTO/ccdir/ccprrp052.4gl +++ b/PROYECTO/ccdir/ccprrp052.4gl @@ -62,6 +62,7 @@ MAIN END MAIN FUNCTION ccprrp052() + DEFINE n_ord INTEGER OPTIONS FORM LINE 8, @@ -97,9 +98,10 @@ FUNCTION ccprrp052() END IF AFTER FIELD borden IF borden IS NOT NULL THEN - SELECT a.num_oc FROM prtb00012 a WHERE a.num_oc = borden AND + LET n_ord = 0 + SELECT COUNT(*) INTO n_ord FROM prtb00012 a WHERE a.num_oc = borden AND a.status_t IS NULL - IF STATUS <> NOTFOUND THEN + IF n_ord = 0 THEN CALL fgl_winmessage("INFO","ORDEN NO EXISTE","INFO") NEXT FIELD borden END IF diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw index 3ac7d8e..8630195 100644 --- a/PROYECTO/mbsERP.4pw +++ b/PROYECTO/mbsERP.4pw @@ -491,6 +491,7 @@ + @@ -571,13 +572,15 @@ - + + + @@ -598,9 +601,10 @@ - + +