diff --git a/PROYECTO/PRDIR/prfmmt022.4fd b/PROYECTO/PRDIR/prfmmt022.4fd
index 2d5a42c..29c98a7 100644
--- a/PROYECTO/PRDIR/prfmmt022.4fd
+++ b/PROYECTO/PRDIR/prfmmt022.4fd
@@ -40,7 +40,7 @@
-
+
diff --git a/PROYECTO/PRDIR/prfmrp116.4fd b/PROYECTO/PRDIR/prfmrp116.4fd
new file mode 100644
index 0000000..1fe32c7
--- /dev/null
+++ b/PROYECTO/PRDIR/prfmrp116.4fd
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/PROYECTO/PRDIR/prfmrp116.per b/PROYECTO/PRDIR/prfmrp116.per
index fa987e1..14f8158 100644
--- a/PROYECTO/PRDIR/prfmrp116.per
+++ b/PROYECTO/PRDIR/prfmrp116.per
@@ -48,7 +48,7 @@ DATEEDIT f1 = formonly.fecha type date,format = "dd/mm/yyyy";
o1 = formonly.num_oc,comments="Digite un numero de orden o deje en blanco para todas";
v1 = formonly.sec_vend,comments="Digite un numero de vendedor o deje en blanco para todos";
COMBOBOX s=formonly.salida,ITEMS=(("prprrp116.4rp","Detallado"),("prprrp016a.4rp","Resumido")),default="Detallado";
-COMBOBOX v=formonly.visualiza,ITEMS=(("SVG","PANTALLA"),("PDF","ACROBAT READER")),default="PANTALLA";
+COMBOBOX v=formonly.visualiza,ITEMS=(("SVG","PANTALLA"),("PDF","ACROBAT READER"),("XLSX","EXCEL")),default="PANTALLA";
instructions
delimiters " "
end
diff --git a/PROYECTO/PRDIR/prprcs001.4gl b/PROYECTO/PRDIR/prprcs001.4gl
index c8a91b2..ef7c4ff 100644
--- a/PROYECTO/PRDIR/prprcs001.4gl
+++ b/PROYECTO/PRDIR/prprcs001.4gl
@@ -71,7 +71,9 @@ DEFINE hoy DATE
END INPUT
CONSTRUCT BY NAME criterio ON a.tipo_cliente,a.sec_cliente,
- a.num_oc,a.fecha
+ a.num_oc,a.fecha_oc
+ FROM tipo_cliente,sec_cliente,
+ num_oc,fecha
AFTER CONSTRUCT
IF tipo_orden = 'N' THEN
diff --git a/PROYECTO/PRDIR/prprrp116.4gl b/PROYECTO/PRDIR/prprrp116.4gl
index 08fd939..c182d39 100644
--- a/PROYECTO/PRDIR/prprrp116.4gl
+++ b/PROYECTO/PRDIR/prprrp116.4gl
@@ -79,6 +79,8 @@ FUNCTION prprrp016()
END RECORD,
salida,visualiza CHAR(20)
+ DEFINE hay_datos SMALLINT
+
OPTIONS
PROMPT LINE 23,
FORM LINE 8,
@@ -201,12 +203,46 @@ FUNCTION prprrp016()
"WHERE ",criterio clipped,
" and a.status_t is null and f.status_t is null "
- END IF
+ END IF
PREPARE comando FROM selec
DECLARE busca CURSOR FOR comando
+ -- Verifica primero si hay registros: si el reporte se inicia sin filas,
+ -- el motor de reportes falla al no poder resolver p_compania.nombre
+ -- (variable "look ahead" del encabezado) porque nunca se llega a imprimir nada.
+ OPEN busca
+ FETCH busca INTO busqueda.cotizacion_no,busqueda.fecha,busqueda.tipo_cliente,
+ busqueda.sec_cliente,busqueda.nombre_proyecto,busqueda.direccion_proyecto,
+ busqueda.telefono_r,busqueda.nombre,busqueda.num_oc,busqueda.fecha_oc,
+ busqueda.fecha_entrega,busqueda.fecha_cierre,busqueda.cod_n,
+ busqueda.cod_grupo,busqueda.cod_tipo,busqueda.cod_sec,
+ busqueda.descrip_esp,busqueda.unidad_med,busqueda.cantidad,
+ busqueda.precio,busqueda.cantidad_2,busqueda.cod_mov,
+ busqueda.fecha_doc,busqueda.documento,busqueda.status_mov,
+ busqueda.simbolo,busqueda.vendedor,busqueda.monto_cotizacion,
+ busqueda.condicion,busqueda.estado_orden,busqueda.telefono,
+ busqueda.celular,busqueda.email,busqueda.contacto
+ IF STATUS = NOTFOUND THEN
+ CALL fgl_winmessage("WARNING","NO EXISTEN REGISTROS CON ESA CONDICION","SOP")
+ LET hay_datos = FALSE
+ ELSE
+ LET hay_datos = TRUE
+ END IF
+
+ # El formulario solo guarda el texto visible del combo (no el valor interno
+ # que tenia el .per original), asi que aqui se traduce de vuelta.
+ CASE salida CLIPPED
+ WHEN "Detallado" LET salida = "prprrp116.4rp"
+ WHEN "Resumido" LET salida = "prprrp016a.4rp"
+ END CASE
+ CASE visualiza CLIPPED
+ WHEN "PANTALLA" LET visualiza = "SVG"
+ WHEN "ACROBAT READER" LET visualiza = "PDF"
+ WHEN "EXCEL" LET visualiza = "XLSX"
+ END CASE
+
LET r_filename = salida CLIPPED
-
+
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
LET r_output=visualiza CLIPPED
LET preview=1
@@ -216,30 +252,13 @@ FUNCTION prprrp016()
END IF
-IF handler IS NOT NULL THEN -- report engine was configured ok
+IF handler IS NOT NULL AND hay_datos THEN -- report engine was configured ok and there is data to print
START REPORT reporte_16 TO XML HANDLER handler
-
-
- FOREACH busca INTO busqueda.cotizacion_no,busqueda.fecha,busqueda.tipo_cliente,
- busqueda.sec_cliente,busqueda.nombre_proyecto,busqueda.direccion_proyecto,
- busqueda.telefono_r,busqueda.nombre,busqueda.num_oc,busqueda.fecha_oc,
- busqueda.fecha_entrega,busqueda.fecha_cierre,busqueda.cod_n,
- busqueda.cod_grupo,busqueda.cod_tipo,busqueda.cod_sec,
- busqueda.descrip_esp,busqueda.unidad_med,busqueda.cantidad,
- busqueda.precio,busqueda.cantidad_2,busqueda.cod_mov,
- busqueda.fecha_doc,busqueda.documento,busqueda.status_mov,
- busqueda.simbolo,busqueda.vendedor,busqueda.monto_cotizacion,
- busqueda.condicion,busqueda.estado_orden,busqueda.telefono,
- busqueda.celular,busqueda.email,busqueda.contacto
-
-
-
- IF STATUS = NOTFOUND THEN
- CALL fgl_winmessage("WARNING","NO EXISTEN REGISTROS CON ESA CONDICION","SOP")
- EXIT FOREACH
- END IF
+ -- La primera fila ya fue leida arriba (para saber si hay_datos); aqui se
+ -- procesa esa fila y se sigue con FETCH manual hasta agotar el cursor.
+ WHILE hay_datos
IF busqueda.cantidad_2 IS NULL THEN
LET busqueda.cantidad_2 = 0
END IF
@@ -247,7 +266,7 @@ IF handler IS NOT NULL THEN -- report engine was configured ok
LET busqueda.fecha_avance= NULL
LET busqueda.monto_avance = NULL
- SELECT MAX(a.num_doc),MAX(a.fecha_orig)
+ SELECT MAX(a.num_doc),MAX(a.fecha_orig)
INTO busqueda.avance,busqueda.fecha_avance,
busqueda.monto_avance
FROM cctb00001 a
@@ -255,7 +274,7 @@ IF handler IS NOT NULL THEN -- report engine was configured ok
a.tipo_Doc = 'AV' and a.tipo_cliente = busqueda.tipo_cliente and
a.sec_cliente = busqueda.sec_cliente and a.status_t is null and
a.fecha_orig > '08/01/2009'
-
+
LET busqueda.codigo = busqueda.cod_n using "&&&&","-",
busqueda.cod_grupo USING "&&&&","-",
busqueda.cod_tipo USING "&&&&","-",
@@ -266,11 +285,27 @@ IF handler IS NOT NULL THEN -- report engine was configured ok
IF busqueda.estado_orden = "S" THEN
LET busqueda.estado_orden = "CERRADA"
END IF
-
+
OUTPUT TO REPORT reporte_16(busqueda.*)
- END FOREACH
+
+ FETCH busca INTO busqueda.cotizacion_no,busqueda.fecha,busqueda.tipo_cliente,
+ busqueda.sec_cliente,busqueda.nombre_proyecto,busqueda.direccion_proyecto,
+ busqueda.telefono_r,busqueda.nombre,busqueda.num_oc,busqueda.fecha_oc,
+ busqueda.fecha_entrega,busqueda.fecha_cierre,busqueda.cod_n,
+ busqueda.cod_grupo,busqueda.cod_tipo,busqueda.cod_sec,
+ busqueda.descrip_esp,busqueda.unidad_med,busqueda.cantidad,
+ busqueda.precio,busqueda.cantidad_2,busqueda.cod_mov,
+ busqueda.fecha_doc,busqueda.documento,busqueda.status_mov,
+ busqueda.simbolo,busqueda.vendedor,busqueda.monto_cotizacion,
+ busqueda.condicion,busqueda.estado_orden,busqueda.telefono,
+ busqueda.celular,busqueda.email,busqueda.contacto
+ IF STATUS = NOTFOUND THEN
+ LET hay_datos = FALSE
+ END IF
+ END WHILE
FINISH REPORT reporte_16
END IF
+ CLOSE busca
AFTER DIALOG
@@ -349,7 +384,7 @@ BEFORE GROUP OF x.cotizacion_no
PRINTX x.cotizacion_no,x.direccion_proyecto,x.nombre_proyecto,
x.tipo_cliente,x.sec_cliente,x.telefono_r,x.num_oc,x.fecha,x.fecha_cierre,
- x.fecha_entrega,x.fecha_oc
+ x.fecha_entrega,x.fecha_oc,p_compania.nombre
BEFORE GROUP OF x.codigo
diff --git a/PROYECTO/cpdir/cpfmrp017.per b/PROYECTO/cpdir/cpfmrp017.per
index fbfbf42..186452b 100644
--- a/PROYECTO/cpdir/cpfmrp017.per
+++ b/PROYECTO/cpdir/cpfmrp017.per
@@ -1,4 +1,4 @@
-database marmotech
+database smarmotech
screen
{
diff --git a/PROYECTO/cpdir/cpprrp011.4gl b/PROYECTO/cpdir/cpprrp011.4gl
index 7ffd81f..2022a95 100644
--- a/PROYECTO/cpdir/cpprrp011.4gl
+++ b/PROYECTO/cpdir/cpprrp011.4gl
@@ -10,7 +10,7 @@
GLOBALS
"cpprgb000.4gl"
- DEFINE mvto RECORD
+ DEFINE mvto RECORD
fecha_in DATE,
fecha_fi DATE,
cod_sp SMALLINT
@@ -18,6 +18,8 @@ GLOBALS
decide CHAR(1),
entrada CHAR(14),
detalle1 CHAR(30)
+ DEFINE p_reportfile STRING
+ DEFINE p_ref_chk CHAR(50)
DEFINE prt_mvto11 RECORD
factura CHAR(10),
@@ -67,14 +69,15 @@ END MAIN
EXIT INPUT
END IF
AFTER FIELD entrada
- SELECT UNIQUE a.ref FROM cgtb00004 a
- WHERE a.ref = entrada
+display "DIAG AFTER FIELD entrada: [",entrada CLIPPED,"]"
+ SELECT UNIQUE a.ref INTO p_ref_chk FROM cgtb00004 a
+ WHERE a.ref = entrada
IF STATUS != NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD entrada
- END IF
+ END IF
AFTER FIELD fecha_in
IF mvto.fecha_in IS NULL THEN
LET numero_msg = 16
@@ -109,8 +112,9 @@ END MAIN
NEXT FIELD fecha
END IF
- END IF
+ END IF
END INPUT
+display "DIAG DESPUES DE INPUT: [",entrada CLIPPED,"]"
IF int_flag THEN
LET numero_msg = 2
@@ -119,7 +123,11 @@ END MAIN
RETURN
END IF
- CALL configureoutput("SVG") RETURNING handler
+ -- 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"), "/cpprrp011_cuentasft.xml"
+ LET handler = om.XmlWriter.createFileWriter(p_reportfile)
START REPORT cuenta_ft TO XML HANDLER handler
DECLARE movto CURSOR FOR
@@ -355,6 +363,7 @@ END MAIN
LET t_debito = t_debito + reg_final.debito
LET t_credito = t_credito + reg_final.credito
IF decide = "S" THEN
+display "DIAGNOSTICO decide=[",decide,"] entrada=[",entrada CLIPPED,"]"
INSERT INTO cgtb00004 (fecha, tipo, ref, cuenta_no,departamento, num_doc,
cod_aux, cod_sec, detalles, detalle_1, detalle_2, debito, credito, status_t,
us_crea, fech_crea, us_mod, fech_mod)
diff --git a/PROYECTO/cpdir/cpprrp017.4gl b/PROYECTO/cpdir/cpprrp017.4gl
index 7f2ecbe..3af449c 100644
--- a/PROYECTO/cpdir/cpprrp017.4gl
+++ b/PROYECTO/cpdir/cpprrp017.4gl
@@ -10,8 +10,9 @@
GLOBALS
"cpprgb000.4gl"
DEFINE selec1 CHAR(500)
+ DEFINE p_reportfile STRING
- DEFINE mvto RECORD
+ DEFINE mvto RECORD
fecha_in DATE,
fecha_fi DATE,
cod_sp SMALLINT
@@ -32,7 +33,18 @@ GLOBALS
debito DECIMAL(12,2),
credito DECIMAL(12,2),
id INTEGER
- END RECORD
+ 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 a.* INTO p_companias.* FROM companias a
+
+ CALL cpprrp017()
+END MAIN
FUNCTION cpprrp017()
CLEAR SCREEN
@@ -41,7 +53,6 @@ GLOBALS
#WHENEVER ERROR CONTINUE
OPEN FORM cpfmrp017 FROM "cpfmrp017"
DISPLAY FORM cpfmrp017
- CALL PANTALLA()
DISPLAY "cpprrp017" AT 4,3 ATTRIBUTE(blue)
DISPLAY "Validacion de Facturas" AT 6,29
LET int_flag = FALSE
@@ -60,7 +71,10 @@ GLOBALS
LET selec =
"SELECT a.factura,a.cod_sp,a.cod_sp_sec,b.nom_sp,a.fecha,c.valor, ",
" a.cuenta_no,a.departamento,a.cod_aux,a.cod_sec,a.num_doc, ",
- " a.debito,a.credito,a.rowid ",
+ " a.debito,a.credito, ",
+ -- a.rowid es una pseudo-columna de Informix, no existe en SQL Server;
+ -- se sustituye por un numero de fila equivalente para el orden del reporte.
+ " ROW_NUMBER() OVER (ORDER BY a.factura) ",
"FROM cptb00003 a,cotb00001 b,cptb00001 c ",
"WHERE (a.cod_sp = b.cod_sp AND a.cod_sp_sec = b.cod_sp_sec) and ",
" (a.cod_sp = c.cod_sp AND a.cod_sp_sec = c.cod_sp_sec) and ",
@@ -74,7 +88,10 @@ GLOBALS
DECLARE movto CURSOR FOR comando
OPEN movto
- START REPORT val_ctas TO "C:\\archivo"
+ -- La ruta original "C:\archivo" no es escribible sin privilegios de
+ -- administrador; se usa un archivo en FGLSPOOL en su lugar.
+ LET p_reportfile = FGL_GETENV("FGLSPOOL"), "/cpprrp017_valctas.txt"
+ START REPORT val_ctas TO p_reportfile
DISPLAY "<< " AT 19,14
DISPLAY "<< Impresion En Proceso .... Espere Por Favor. >>" AT 19,14
@@ -86,9 +103,9 @@ GLOBALS
EXIT WHILE
END IF
OUTPUT TO REPORT val_ctas(prt_mvto11.*)
- END WHILE
+ END WHILE
FINISH REPORT val_ctas
- RUN "type C:\\archivo > %USPRINT%" END FUNCTION
+ END FUNCTION
REPORT val_ctas(x)
DEFINE x RECORD
diff --git a/PROYECTO/mbsERP.4pw b/PROYECTO/mbsERP.4pw
index 896c9ee..c0e2f34 100644
--- a/PROYECTO/mbsERP.4pw
+++ b/PROYECTO/mbsERP.4pw
@@ -242,6 +242,14 @@
+
+
+
+
+
+
+
+
@@ -252,6 +260,8 @@
+
+
@@ -291,8 +301,65 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -331,7 +398,7 @@
-
+
@@ -348,7 +415,7 @@
-
+
@@ -381,6 +448,7 @@
+