Está en la página 1de 28

GENERADOR VISUAL BASIC 6 EVOLUTION 1

PATCH # 6

IMPORTANTE: Es necesario aplicar este patch en las terminales de trabajo, ya que se actualizan los
siguientes archivos del sistema:
• gxform60.dll
• gxchr513.dll
• gxchr613.dll

Al aplicar el patch en una terminal de trabajo, se graba en el directorio Windows (o similar según el sistema
operativo) el archivo GXW61VbN.006 que indica que patch se tiene instalado en la estación de trabajo.

• Problema con noaccept y prompt sobre Clave Foránea


Si se tenía una Transacción con una clave foránea y una regla noaccept(<Clave foránea>) If <Condición>;
aunque no se cumpliera la condición el prompt sobre la Clave Foránea no funcionaba.
El error fue corregido.

• Regla color funcionaba mal en Work Panel con subfile


Se tenía un Work Panel con un subfile que tenía una variable con una regla color asociada. En el Work
Panel también se tenía un listbox, y en el evento OnLineActivate del subfile se hacía un Clear() del listbox.
Cuando se hacía click sobre una fila de subfile en la que se disparaba la regla color, se pintaba también la
primera columna del subfile.
El error fue corregido.

• Reporte salvado como RTF no quedaba bien alineado en los campos numéricos
La alineación de los campos numéricos no quedaba bien en un reporte salvado como archivo RTF. Si se
salvaba un reporte generado con el Report Viewer como archivo RTF, los campos numéricos quedaban
alineados a la izquierda en vez de quedar alineados a la derecha.
La Rbuilder.dll versión 3.5.3 que se libera con este patch soluciona este problema.

• ‘Label Not Defined’ al utilizar la regla Refcall en una Transacción


Si se tenían dos Transacciones como las siguientes:
TRN01 TRN02
a1* a1*
a2* a2*
a3* a3*
a4nom (b1*
a5nom2 b2nom
b3nom)

y en la TRN02 se tenía una regla refcall(Ttrn01 ,a1 ,a2 ,a3)


Si además se tenía un Work Panel que llamaba a la TRN02 pasándole la clave como parámetros, cuando se
disparaba el Refcall se producía el error "Label Not Defined".
El error fue corregido.

• Refresh Timeout con Lapse = 1 se ejecutaba cada 2 segundos


Si se tenía un Work Panel con la propiedad Refresh Timeout con Lapse = 1, para que cada 1 segundo se
ejecutara un refresh, el refresh se ejecutaba cada 2 segundos.
El error fue corregido.

• ‘Runtime Error 9: Subscript out of range’ al usar la función GxSaveGraph


El error se producía cuando se llamaba a la función GxSaveGraph.
El error fue corregido.
• ‘Runtime error 3420: Object is invalid or not Set'
Se tenía una Transacción de un solo nivel, con un Return en el evento After TRN. La Transacción era
llamada desde un Work Panel pasándole la clave y el modo, si se ingresaba a la TRN se daba de alta un
registro, y se presionaba Enter para confirmar el registro, se da el error.
El error fue corregido.

• ‘Error No. 3078' con Change Level y al dar ESC muchas veces
Se tenía un Work Panel que llamaba a una Transacción de dos niveles pasándole la clave del primer nivel
como parámetro. Desde esa Transacción, mediante un botón, se llamaba a otra de dos niveles pasándole la
clave del primer nivel como parámetro.
Se tenía la preference Esc Key Action = Change Level.
Si se ejecutaba la aplicación y se empezaban a dar de alta registros en las Transacciones, y si estando en la
segunda luego de ingresar varios registros en el subfile se presionaba Esc varias veces seguidas, se producía
el error.
El error fue corregido.

• ‘Runtime error 424: Object Required’ con SDI y Menubar=None


Si se tenía un modelo con la preference Generate MDI Application = No, y uno de los objetos tiene
configurada la propiedad Menubar = None, cuando se ejecutaba el objeto que tenía Menubar = None, se
producía el error mencionado.
El error fue corregido.

GXEdit

• No funcionaba Auto Skip si se utilizaba GXEdit


Si se tenía un modelo con la preference Auto Skip = Yes y además la preference Default Edit Cotrol = GX
Edit, cuando se ejecutaba una Transacción y se completaba un campo, no se saltaba automáticamente al
siguiente.
El error fue corregido.

• No funcionan atributos/variables N(1) checkbox en subfile


Si en un modelo se tenían atributos o variables N(1) de tipo Check Box en un subfile y se utilizaba GX
Edit, en Work Panels al cambiar de fila el campo se desmarcaba. En el caso de Transacciones, al entrar en
modo Update el Check Box se veia desmarcado aunque según el valor del atributo el mismo deberia estar
marcado.
Estos errores fueron corregidos.

Cliente / Servidor

• NULL(Att/Var) de tipo Character o Varchar en Oracle


Si existe una condición del tipo NULL(Att/Var) donde Att/Var es de tipo Character o Varchar y esta
condición se ejecuta en el servidor (se genera en alguna sentencia SQL), el resultado de la ejecución puede
no ser correcto.

El esquema de comparación de strings de Oracle es algo "diferente" a lo que estamos acostumbrados en


GeneXus y esta es la causa del problema.

A partir de este momento, la condición anterior se sustituye por:


RTRIM(Att/Var) IS NULL

y esto tiene los resultados esperados.

• No generaba Update en navegación compleja


Si se tenían dos for eachs anidados que no eran cortes de control y accedían a una tabla en común, donde
uno actualizaba la tabla y el otro no, el Update del for each que actualizaba la tabla no era generado.
El error fue corregido.

• Trabajando con N generadores por modelo, se copiaban los programas estándar de los N
generadores
Estando con n generadores por modelo, por ejemplo uno Java y otro Visual Basic C/S, lo que sucedía era
que al momento de especificar y generar un objeto sea cual sea su generador asociado, siempre copiaba los
archivos estándares tanto para Visual Basic como para Java.
El error fue corregido.

• ‘Error: Function call on left_hand side of assignment must return variant or object’ al llamar a
RPC
Si se tenía un objeto Visual Basic C/S que realizaba una llamada RPC a un procedimiento C/SQL
pasándole parámetros de tipo VarChar, en ejecución se producía el error mencionado.
El error fue corregido.

• Al hacer RPC a un AIX se modificaba valor de variable numérica


Cuando se pasaban varios parámetros a un procedimiento llamado vía RPC, si la primer variable era un
N(3) que no era modificada en el procedimiento, luego de llamarlo varias veces, se modificaba el valor de
la variable.
El error fue corregido.

Web Panels

• Web Panels siempre generaban debug al ejecutarlos


Si se tenía un Web Panel generado como CGI, al ejecutarlo siempre generaba un archivo llamado
Contest3.log en el directorio donde estaba ejecutando el Web Panel, aunque no se hubiera configurado la
opción de Debug.
El error fue corregido.

PATCH # 5

IMPORTANTE:
En este patch se introdujo un nuevo dialogo Select Component. Este tiene una opción Componentes
Standard, si marca esta opción instalara el generador y los programas standard de Visual Basic,
de lo contrario instalara únicamente los archivos del sistema. Por mas información referirse a los
documentos:
o www.genexus.com/newpatch/patchsp2.pdf
o www.genexus.com/newpatch/terminales.pdf

• No se imprimían imágenes JPG en reportes con Report Viewer


No se mostraban imágenes JPG en reportes, utilizando el Report Viewer. Esto sucedía utilizando variables
de tipo bitmap y utilizando la función Loadbitmap.
El error fue corregido.

• Funcionaba mal propiedad Enabled en algunos controles


Funcionaba mal la propiedad Enabled de controles de tipo CheckBox, Radio Button y ListBox cuando se
tenía la preference Color in Read-Only Fields = Original. La propiedad estaba funcionando exactamente al
revés: si se pone Enabled = 1, el control se deshabilitaba, y viceversa.
El error fue corregido.

• La función Month devolvía 1 cuando el parámetro era nulo, en vez de 0


Si se tenía una variable de tipo Date o DateTime a la que se le aplicaba la función Month, si esa variable
era nula la función Month devolvía 1 en vez de devolver 0.
El error fue corregido.

• Menúes main no se generaban correctamente


En algunos modelos sucedía que los menúes mains no se generan correctamente. Si se generaban en forma
forzada el único archivo que se genera era el LXXX.gxm asociados al menú, pero no se genera ni el .VBP,
ni el .FRM, ni el .BAS.
El error fue corregido.

• Work Panel con Longvarchar fuera del subfile, no se refrescaba correctamente


En algunos casos si se tenía un Work Panel con subfile para mostrar ciertos datos, y un campo Longvarchar
fuera del subfile, para mostrar los comentarios del registro donde se está posicionado, el campos
Longvarchar no mostraba los datos del registro donde se estaba posicionado.
El error fue corregido.

• Problemas al hacer una reorganización


En algunos casos se presentaba el siguiente error luego de generar la reorganización:

Internal Error 3 in function CDatabase::OpenDB() ISAM error: -1--1-22-0

El problema era que de la forma que estaba hecha la llamada al terminar la generación, el generador seguía
ejecutándose, sin cerrar inmediatamente los archivos, entonces cuando GeneXus quería abrir esos archivos
no podía porque ya estaban abiertos.
El error fue corregido.

PATCH # 4

IMPORTANTE: Es necesario aplicar este patch en las terminales de trabajo, ya que se actualizan los
siguientes archivos del sistema:
• gxform60.dll
• gxchr613.dll

Al aplicar el patch en una terminal de trabajo, se graba en el directorio Windows/System (o similar según el
sistema operativo) el archivo GXW61VbN.004 que indica que patch se tiene instalado en la estación de
trabajo.

• Evento asociado a la tecla de función F10 no funcionaba bien


Se tenía un Work Panel con un campo en la parte fija y un subfile. Si el Work Panel tenía un evento que
realizaba un Setfocus al campo de la parte fija y al evento se le asginaba la tecla de función F10, cuando se
ejecuta el WP, al presionar la tecla F10 el cursor volvía al campo, pero también se seleccionaba la primer
opción del la Menubar asociada al Work Panel.
El error fue corregido.

• Llamado entre exes dejaba en "blanco" objeto llamador


Se tenían dos WP (WP1 y WP2), donde WP1 llamaba a WP2 pasándole parámetros, si al llamar a WP2 se
minimizaba, quedaba en blanco la ventana del WP1.
El error fue corregido.

• Llamado entre exes no dejaba inhibido el exe llamador


Se tenía un exe de VB que llamaba a otro exe pasándole parámetros, si luego de llamar al segundo exe se
volvía al primero (minimizando el segundo, por ejemplo) se podía seguir trabajando con el primer exe, en
vez de quedar deshabilitado hasta que termine de ejecutar el segundo.
El error fue corregido.

• No funcionaba la opción File/Exit de Menubar si se pasaban parámetros


Si se tenía un objeto con una Menubar asociada (Menubar por default o Menubar de usuario) que llamaba a
otro objeto pasándole parámetros, en el segundo objeto no funcionaba la opción File / Exit para salir de la
aplicación.
El error fue corregido.

• Función YMDTOD cuando AÑO y MES eran 0 no devolvía un valor correcto


Si se utilizaba la función YMDTOD y los valores del año y el mes eran 0, el valor devuelto era
'01/12/1999'.
El error fue corregido.

• Problema con fórmula Count y regla error


Se tenía una Transacción de 2 niveles con subfile, y en el cabezal un atributo fórmula Count sobre las
líneas, además se tenía una regla error para controlar que se ingresara por lo menos una línea.
Al ejecutar la Transacción si se ingresaba una línea pero no se confirmaba y se salía del nivel del subfile,
no se disparaba la regla.
El error fue corregido.

• Runtime Error 3021: 'No current record'


Si se tenía un Work Panel del estilo 'Trabajar con ... ' con dos eventos, donde cada uno tenía asociada una
tecla de función, al ejecutar el Work Panel si se presionaban repetidas veces en forma rápida la
combinación de teclas asociadas a los eventos se producía el error mencionado.
El error fue corregido.

• No se lockeaban tablas de dos niveles en Access


Si se tenía una Transacción de dos niveles, y desde dos máquinas se intentaba ingresar al mismo registro,
no se producía ningún error, y se permitían realizar modificaciones en ambas máquinas.
El error fue corregido.

• SQL 204 - <Objeto> in <biblioteca> type *N not found


Si se tenía un modelo en el cual el generador de la reorganización era RPG/400, el generador por defecto
era también RPG/400 y se tenía un generador secundario VB C/S, y un Work Panel main generado con el
generador VB C/S el cual llamaba a un procedimiento main generado con RPG/400 pasándole parámetros,
en ejecución en la llamada el procedimiento se producía el error mencionado.
El error fue corregido.

• Si se tenían campos numéricos con signo, no se guardaba el signo si se utilizaba GX Edit


Si en un modelo con la preference Default Edit Control = GX Edit, se tenía un campo definido como
Numérico con decimales y signo, y en el campo se ingresaban valores con parte entera 0 y negativos, el
signo no se estaba guardando.
El error fue corregido.

Web Panels

• Se implementaron los Radio Buttons en Web Panels


A partir de este patch es posible generar Radio Buttons para los objetos Web Panels.

PATCH # 3
• Report Viewer con soporte Multilenguaje
La versión 3.5.2 de la Rbuilder.dll que se libera con este patch, soporta Multilenguaje. Esto es que a partir
de ahora la interface del Report Viewer será presentada en el lenguaje seteado en las Preferences del
modelo.
Lenguajes soportados: Español, Italiano, Portugués, Inglés.

• Reportes modo texto pueden ser salvados como archivos TXT


A partir de la versión 3.5.2 de la Rbuilder.dll que se libera con este patch, se puede salvar los reportes
modo texto como archivos TXT.
Para poder hacer esto se debe seleccionar la opción File/Save As ..., y seleccionar el tipo de archivo TXT
(Save as Type: Plain Text (*.txt)).

• Common Dialog Functions pueden ser llamadas como UDPs


A partir de este patch las Common Dialog Functions pueden ser llamadas como funciones no-standard y
como UDPs. O sea, una Common Dialog se puede llamar de cualquiera de las siguientes maneras:

GXSELDIR(....)

&retorno = udp(GXSELDIR, ....)

En la variable &retorno se devuelve el resultado de la función (si funcionó correctamente o no). Se


devuelve 1 si funcionó bien y 0 si hubo error o el usuario canceló.

Nota: En el caso de la función GXCalculate, cuando se utiliza como UDP, el valor que se devuelve es el
resultado de la operación realizada.

• VB6 Reload Utility no funcionaba correctamente con archivo .igx


Si se tenía un programa externo en VB, que se incluía al proyecto GeneXus mediante un archivo con
extensión .igx, y el objeto externo (módulo o frm), estaba en un directorio diferente que el directorio del
modelo, al utilizar el Reload Utility para cargar los programas que cambiaron, se producía el siguiente
error:
“Runtime error 60059: <path del archivo externo (bas o frm)> already exists in project”

El error fue corregido.

• No se visualizaba o imprimía BMP en algunos casos


En el cabezal de un BMP, entre otras cosas, se encuentra la declaración del tamaño del bmp. Si esta
declaración no coincidía con la realidad, entonces no se desplegaba el BMP en ninguna aplicación o
utilitario que use la GXDIB32.dll.
El error fue corregido.

• Problema con Extensions


A partir del patch 2 del generador VB se incluyeron las Extensions. Podía pasar que en modelos que se
accedían desde equipos con diferentes sistemas operativos, se incluyeran objetos duplicados en los
proyectos. Esto era por un problema del generador al grabar el archivo EXTENSN.ARI (directorio del
modelo).
El error fue corregido, de todas formas hay que borrar el archivo EXTENSN.ARI y volver a generar el
modelo en forma forzada..

• Problemas con la función GXMSEND


Si se tenía un work panel con un evento asociado que utilizaba la función GXMSEND, se producían los
siguientes errores al ejecutar el evento:

o El valor retornado por esta función era 0 aunque el correo se enviara correctamente.
o Cuando se cerraba la aplicación luego de haber enviado un correo se producía el error
"Runtime error 48: File not found: RBUILDER.DLL".

Los errores fueron corregidos.

• No se realizaban bien los cálculos en la calculadora si había un 0 (cero)


Si se tenía un campo numérico, el cual se quería seleccionar su valor a través de la calculadora, y si el valor
que se seleccionaba era un cálculo que implicaba un 0, el resultado que se devolvía no era correcto.
El error fue corregido.

• Ejecutando varios EXEs, con Minimize All Windows se caía el PC


En VB si se tenían varios EXEs ejecutando, que se llamaban entre sí, al seleccionar Minimize All Windows
desde la barra de tareas de Windows el PC se colgaba.
El error fue corregido.

• Problema con Refresh Timeout y return en Evento Refresh


Si se tenía un Work Panel con la propiedad Refresh Timeout diferente de 0 (cero) y se programaba el
evento Refresh para que el objeto finalizara según determinada condición (por ejemplo: que se ejecutara un
Return a cierta hora), no funciona el return, el objeto no se cerraba.
El error fue corregido.

• Problema con clave foránea en subfile y regla serial


Se tenía una Transacción de dos niveles, con una regla serial para numerar automáticamente las líneas del
subfile, y en el subfile se tenía una clave foránea formada por dos atributos. Cuando se ejecutaba la
Transacción y se posicionaba en el subfile y sin haber ingresado ningún atributo de la línea, se presionaba
F4 para seleccionar un valor de la clave foránea, luego de seleccionar el valor, al presionar Tab sobre el
primer atributo que formaba parte de la clave foránea, se ejecutaba la regla serial y se cereaba el valor del
segundo atributo que formaba parte de la clave foránea.
El error fue corregido.

• No se actualizaba atributo inferido en subfile


Se tenía un subfile en una Transacción con una clave foránea. Se digitaba un valor válido para la misma, se
avanza de campo y se veían los atributos inferidos. Sin confirmar la línea, se volvía a la clave foránea con
Shift-Tab o clickeando con el mouse. Se llamaba a la lista de selección con F4, se elegía un nuevo valor y
se volvía a la Transacción. Al hacer avance de campo, no se actualizaban los atributos inferidos.
El error fue corregido.

• Problema con regla Default y parámetro &Mode


No funcionaba la regla Default en una Transacción que recibía la variable &Mode como parámetro, si
además el valor que se asignaba al default también se recibía como parámetro.
El error fue corregido.

• Regla Default no funcionaba para control tipo checkbox en TRN


Si se tenía un atributo de tipo checkbox en una transacción y una regla: default(Att,valor), en tiempo de
ejecución, se ignoraba el "valor".
El error fue corregido.

• Se visualizaban incorrectamente campos Datetime nulos


Se estaban visualizando incorrectamente los atributos de tipo Datetime con valor nulo, se veían como
30/12/99 12:00:00 AM.
El error fue corregido.

• Problema con índice temporal y atributos de tipo Date


Si se tenía un For each que generaba un índice temporal sobre una tabla y si se tenían condiciones que
involucraba atributos de tipo fecha y que se optimizaban, el For each no devolvía ningún registro.
El error fue corregido.

• “Error 212 Not enough global stack” al generar


El error se daba al generar un Work Panel con un campo definido como radio button al que se le programó
el evento Click, y un control checkbox de un elemento de un vector.
El error fue corregido.

• “Compile error: Ambiguous name detected”


Se podía dar este error en algunos casos, en Transacciones que tuvieran fórmulas Aggregate/Select, y que
además tuvieran reglas call o udp.
El error fue corregido.

• “Compile error: Syntax error” si se tenían muchos atributos en una Transacción


Si se tenía una transacción de dos niveles, y en el segundo nivel se tenían muchos atributos (se probó con
más de 95 atributos), cuando se ejecutaba la transacción y se pasaba al subfile se producía el error
mencionado.
El error fue corregido.

• “Runtime Error 6: Overflow” en Work Panel


Si se tenía un Work Panel con subfile con tabla base, con la propiedad Load Records = Load All Records, y
la tabla tenía más de 32767 registros, se producía el error.
El error fue corregido.

• “Runtime Error 9: Subscript out of range” usando GXMKGR


Si se tenía un objeto con un botón asociado a un evento que llamaba a la función GXMKGR (usando el
graficador de GX 6.1), cuando se ejecuta el evento se producía el error mencionado.
El error fue corregido.

• “Runtime Error 3420: Object invalid or no longer set”


Si se tenían tres objetos con form que se llamaban unos a otros, por ejemplo un Work Panle de ‘Trabajar
con...’, que llamaba a una Transacción con subfile, y ésta a su vez llama a una lista de selección, cuando
desde la Transacción se llamaba a la lista de selección, se esperaba que se cargara el subfile, y se
presionaba la tecla Esc 2 veces seguidas, entonces se producía el error.
El error fue corregido.

Web Panels

• Combos dinámicos no aparecían ordenados por descripción


Si se tenía un Web Panel con un combo dinámico y se marcaba la opción 'Sort descriptions', al ejecutar el
Web Panel, los valores aparecían ordenados por el identificador.
El error fue corregido.

• No se podía cambiar el nombre de la base de datos en Web Panels


Si se estaba desarrollando una aplicación con Web Panels con Access, y en las preferences se cambia el
nombre de la base de datos por defecto (GX_DATA.MDB), cuando se creaba la base de datos, se generaba
con el nombre correcto, con el que se asignó en la preference Local Database File, pero al ejecutar el Web
Panel siempre se buscaba una base de datos llamada GX_DATA.MDB.
El error fue corregido.

• No se devolvía valor de variable HTTP_REFERER


En Web Panels se pueden utilizar variables de entorno para la obtención de información que se envía al
servidor web. En particular la variable HTTP_REFERER, devuelve la URL de la página que llamó a la que
se está desplegando, el problema es que no se estaba devolviendo el valor de esta variable.
El error fue corregido.

• Función SendNewLine tenía invertidos CHR(10) & CHR(13)


Si se estaba utilizando la grilla del form para alinear los controles y no se estaban usando tablas, al ejecutar
el Web Panel el espacio entre los controles era doble.
El error fue corregido.

• “Error: Expected procedure, not variable” al ejecutar Web Panel


Al compilar un Web Panel que tenía un Combo Dinámico y un checkbox se producía el error mencionado.
El error fue corregido.

• No compilaban Web Panels si se usaban Common Dialog Functions


Si se tenía un modelo que usaba las Common Dialog Functions, y en el mismo algún Web Panel, este
último no compilaba. El problema era que por el esquema de Extensions, se estaba incluyendo el contenido
del GXCMDDLG.INC en el archivo de proyecto del Web Panel, y se producía un error de compilación.
El error fue corregido.

PATCH # 2

• IMPORTANTE: Cambio en metodología de aplicación de patches

A partir de este patch se está utilizando una nueva tecnología para el armado de los mismos.
La principal ventaja del uso de esta tecnología es la posibilidad de modificar y registrar archivos del
sistema (dlls y ocx que se encuentran en el directorio windows\system), esto implica la eliminación de los
patches del NSetup.

Estos nuevos patches podrán actualizar:


• Archivos propios de la instalación de Ge neXus (por ejemplo: el ambiente de desarrollo, el
generador o programas standard).
Esto es lo que hacíamos hasta ahora. Implica que es suficiente con aplicar el patch en el servidor.

• Archivos del sistema (por ejemplo: bibliotecas y controles que se instalan en windows\system)
Cuando también instale archivos del sistema, será necesario aplicar el patch en el servidor y en
todas las estaciones de trabajo seleccionando el directorio donde está instalado GeneXus.

Nota: En una nueva terminal de trabajo es necesario instalar el NSetup de la instalación original, y el patch
correspondiente. Los nuevos patches eliminan los patches del NSetup, pero no el NSetup.

• Se eliminaron las preferences: Include Mail Functions, Graphic Functions, Excel OLE Functions y
Common Dialog Functions
A partir de este patch se incluyen las Extensions, que permite detectar automáticamente el uso de estas
funciones, y en el proyecto GeneXus se incluyen los archivos sólo en caso que sean necesarios.
Para que este cambio tenga efecto se debe borrar el archivo de extensión VER del directorio del modelo, y
volvier a generar forzados todos los objetos.
Por más información al respecto, se recomienda leer el documento en:
http://www.genexus.com/forum/tips/extpgmvb2.htm

• Graficador Visual Basic y tipo de datos
A partir de este patch del generador es posible pasar cualquier tipo de datos para la matriz de datos del
graficador (parámetro “Data” de las funciones GXMakeGraph, GXPrintGraph o GXSaveGraph).
• A partir de esta versión el Report Viewer permite realizar Trace.
La versión de la Rbuilder.dll (versión 3.4.2), que se libera con este patch, incorpora trace.
Para habilitarlo, hay que incluir la entrada Trace en la sección trace del gxprn.ini del directorio de la
aplicación, de la siguiente manera:

[Trace]
Trace=[0|1]

Por ahora no hay niveles de detalle, es decir, el valor 0 deshabilita el trace, 1 o más lo habilita.
El trace se graba en un archivo con nombre autogenerado y extensión LOG en el directorio del modelo.

NOTA: A partir de la versión 3.4.1 de la Rbuilder.dl en adelante, es requerimiento tener instalado el SP3
del Visual Studio 6.0 (esto es por las msvcrt.dll y mfc42.dll que éste actualiza).

• No se actualizaba fórmula redundante en subfile


Si se tenía una Transacción de dos niveles, y en las líneas un atributo fórmula que dependía de algún
atributo del cabezal (por ejemplo FacMes = month(FacFch)), y estaba redundante, no se actualizaba el
valor del atributo de la línea llamando a la Transacción en modo Insert.

• Problemas aleatorios de pérdida de reportes


Hemos detectados algunos problemas aleatorios con la impresión de reportes. Los listados a veces no eran
incluidos en la cola de impresión o eran incluidos parcialmente. Por ejemplo: ocurría que a veces un reporte
o directamente no se imprimía o no se imprimían algunas hojas.

El error fue corregido en la rbuilder.dll 3.4.2 que se libera con este patch.

• Error de Protección General en MFC42.DLL


Si se enviaba a pantalla un reporte y se cerraba el Report Viewer antes de haber terminado de cargar
completamente el reporte, y seguidamente se llamaba al mismo reporte, entonces al cargar nuevamente el
reporte se producía el error mencionado.

El error fue corregido en la rbuilder.dll 3.4.2 que se libera con este patch.

• No funcionaba evento de menubar dentro de TRN


Si se tenía una Transacción asociada a un Menu bar, y se tenía programado un evento de un ítem de la
Menu bar, el evento no se ejecutaba, y los comandos que se encontraban después en el evento tampoco se
ejecutaban.
El error fue corregido.

• Botón de usuario en la Toolbar no ejecutaba el evento asociado


Si se agregaba un botón a la toolbar por defecto, en tiempo de ejecución al presionarlo no se disparaba el
evento asociado.
El error fue corregido.

• Se permitía cambiar el valor de una Foreign Key, teniendo prompt y regla noaccept
Si se tenía una Transacción con una Foreign Key con prompt asociado y en las reglas se tenía la regla
noaccept(‘Foreign Key’) if Update , al ingresar a la Transacción en modo Update el valor de la Foreign
Key igual se podía modificar, seleccionando el valor desde el prompt.
El error fue corregido.

• Propiedades Top, Left,Width y Height, no se tomaban en pixels


Las propiedades Top, Left, Width y Height de un Form no se estaban tomando en pixeles. Continuaban
siendo en twips (15 twips=1 pixel).
El error fue corregido.
• Regla color en subfile, pintaba parte sin líneas al volver
Si se tenía un Work Panel con subfile, y la regla color aplicada a una columna del subfile, cuando se
ejecutaba el Work Panel, si en el subfile se tenían pocas líneas (quedaba una parte de la grilla sin líneas), y
se llamaba a otro objeto, al volver de ese objeto quedaba la parte sin líneas pintada del color seleccionado
en la regla color.
El error fue corregido.

• Se disparaba mal regla call() if insert .and. after(trn)


Si se tenía una Transacción de 2 niveles con subfile, con una regla condicionada If insert .AND. after(trn),
la regla se estaba disparando según el modo que se tenía en el subfile, no en el cabezal.
El error fue corregido.

• Problema con Data View a tabla Access


Si se tenía un Data View a una tabla Access, y en Platform Specific/Data Format se dejaba el valor default
(Access), en ejecución se producía un ‘Runtime error 3011 The Microsoft Jet database engine could not
find the object <nombre de tabla>.’
El problema era que se estaba tratando a la tabla como si fuera del modelo, y no como una tabla externa.
El error fue corregido.

• Problema con función round y números negativos


Se estaban redondeando mal los números negativos, si se utilizaba la función round.
El error fue corregido.

• Combo en subfile mostraba primer registro si no se ingresaba valor


Si se tenía una Transacción de un nivel definida como subfile, y una clave foránea en la Transacción
definida como combo dinámico, y además se tenía la preference Comb Style in Grid = Show Values and
Descriptions, cuando se ejecutaba la Transacción, si en la clave foránea no se ingresaba ningún valor, al dar
Tab sobre el campo aparecía el valor del primer registro del combo, en vez de quedar en nulo.
El error fue corregido.

• No se generaba método SetFocus a un botón


Si se utilizaba el método SetFocus a un botón, el mismo no se generaba.
En el fuente se genera la línea:
''
donde debería estar el SetFocus.
El error fue corregido.

• Se disparaba Confirm en Transacciones con OnLineActivate


Si se tenía una transacción de dos niveles con subfile, con el evento OnLineActivate programado, si en el
subfile se tenía una clave foránea, luego de pasar la misma se confirmaba el registro.
El error fue corregido.

• Problema con función Ask y variable numérica con signo


Si en un reporte o procedimiento se asignaba a una variable numérica con signo la función Ask, en
ejecución, no era posible ingresar un numero negativo.
El error fue corregido.

• Transacción con Tab dialog desplegaba error de Integridad referencial al Confirmar


Si se tenía una Transacción de un nivel en un Tab dialog, y la clave de la Transacción estaba compuesta por
un atributo que era clave foránea, cuando se ejecutaba, y luego de ingresar un registro se presionaba el
botón de confirmar, se disparaba el control de integridad referencial "No matching <Nombre de Tabla>,
Browse Data ?"
El error fue corregido.
• Se deshabilitaba Bloqueo Numérico al ingresar datos en una Transacción
En algunos casos al usar el teclado numérico para ingresar datos, teniendo la preference Field Exit = Enter,
podía suceder que al pasar de un campo al otro se deshabilitará el Bloqueo Numérico.
El error fue corregido.

• 'Record not found' al realizar delete cascade en una Transacción


Si se tenía una Transacción de dos niveles con subfile, que recibía la clave y el modo como parámetros,
cuando se llamaba a la Transacción en Delete, luego de pedir la confirmación, se desplegaba el mensaje
'Record not found'.
El error fue corregido.

• Loop con regla search y operador Like


Si se tenía un Work Panel con subfile sin tabla base, con una variable en la parte fija, y una regla search
con el operador LIKE, cuando en la variable se ingresaba un valor que hacía que la condición de la regla no
se cumpliera para ningún registro, se bloqueaba el equipo.
El error fue corregido.

• '<Table> was changed' y 'Update error' en Transacciones


Este problema se daba en los siguientes casos:
- Si se tenía una Transacción de dos niveles con subfile, y se programaba el evento IsValid de un atributo
del cabezal, estando en Update, si se posicionaba sobre el atributo y se clickeaba una fila del subfile que no
fuera la primera, se copiaban los valores de la primer fila sobre ésta, luego se desplegaba el mensaje
'<Tabla_del_subfile> was changed', y después el mensaje 'Update error'.
El error fue corregido.

o Si se tenía una transacción de un nivel con subfile, con una clave foránea y mientras se estaba
modificando una línea, con F4 se llamaba a la lista de selección, al volver a la transacción se
desplegaba el mensaje '<Table> was changed' y a continuación el mensaje 'Update error'.

El error fue corregido.

• ‘<Nombre de Tabla> was changed’ usando regla prompt


Si se tenía una Transacción de dos niveles, con una regla prompt para seleccionar el valor de uno de los
atributos del subfile, cuando se llamaba a la Transacción en modo Update, si se presionaba F4 para
seleccionar el valor del atributo del subfile, al llegar al último atributo de la línea y presionar Tab se
producía el error.
El error fue corregido.

• La función EOM aplicada a un Date estaba devolviendo un DateTime


Esto provocaba que cuando se utilizaba la función EOM en comparaciones con fechas, devolvía resultados
incorrectos.
El error fue corregido.

• No funcionaba For each line para marcar filas


Si se tenía un Work Panel con subfile con una variable, y un evento para marcar todas las filas del mismo,
al ejecutar el evento la variable se estaba modificando para todas las filas, pero no se estaba visualizando en
pantalla.
El error fue corregido.

• Method '~' of object '~' failed al ejecutar Reload Utility


Si se utilizaba el VB 6.0 Reload Utility para cargar una aplicación nuevamente, luego de haber borrado
algún objeto, o haber modificado el nombre de algún objeto se producía el siguiente error.
El error fue corregido.

• Se visualizaban caracteres extraños en subfile utilizando GX Edit


Trabajando con la preference Default Edit Control=GXEdit, si se tenía en un subfile un campo de tipo
caracter con la picture @!, al posicionarse el foco sobre el mismo se visualizaban caracteres extraños.
El error fue corregido.

• Problemas al borrar un valor de un campo con GXEDIT y picture @!


Si se tenía una Transacción con un atributo de tipo carácter con la picture @!, cuando se intentaba borrar el
valor del atributo, o modificarlo, si el cursor se posicionaba sobre el valor del atributo, y se volvía a dar
click por ejemplo en el medio del campo para modificar algo, al borrar los caracteres de la derecha con la
tecla 'Supr', los caracteres que estaban antes a la derecha no se borraban, por lo que quedaban todos los
caracteres sobreescritos.
El error fue corregido.

• No funcionaban teclas de función si se utilizaba GX Edit y Enter como salida de campo


Si se tenía un evento en un Work Panel que tenía asignado una tecla de función, y se tenían configuradas
las preferences:

Default Edit Control = GXEdit


Field Exit = Enter, Tab, Shift-Tab

Cuando se ejecutaba el Work Panel y se presionaba la tecla de función asociada al evento, no se disparaba
el evento.
El error fue corregido.

• Se perdía el foco luego de desplegar mensajes en Transacciones, utilizando GX Edit


Si se tenía una Transacción con una regla msg sobre un atributo, y la preference Default Edit Control = GX
Edit, al ejecutar la Transacción luego de presionar Tab sobre el atributo implicado en la regla, se
desplegaba el mensaje correctamente, pero al luego de aceptar mensaje, el foco se perdía.
El error fue corregido.

• 'Record already exists' al hacer refresh en el subfile de una Transacción utilizando GX Edit
Si se tenía una Transacción de dos niveles, la cual se llamaba pasándole clave y modo, teniendo la
preference Default Edit Control = GX Edit, cuando se modificaba el valor de algún atributo del subfile y se
realizaba un refresh de la Transacción, se desplegaba el mensaje de error.

Por mas información sobre el comportamiento del comando refresh, se recomienda leer el documento en:
http://www.artech.com.uy/forum/tips/refmandc.htm.
El error fue corregido.

• Problemas con el Tab Order utilizando GX Edit


Si se tenía una Transacción a la que se le pasaba la clave como parámetro y el modo Update, el foco se
perdía al entrar a la Transacción.
El error fue corregido.

• Problema con Data View Access e índice auxiliar


Si se tenía un Data View a una tabla Access, y se ejecutaba un objeto que generaba un índice auxiliar sobre
dicha tabla, se producía el error: "Error 3061 Too few parameters"
El problema era que para resolver la consulta se estaba generando una sentencia SELECT por los atributos
internos y no por los externos.
El error fue corregido.

Web Panels

• Alineación de campos numéricos en Web Panels


Los campos numéricos no se alineaban a la derecha. Por esto resultaba imposible generar columnas de
valores numéricos.
El error fue corregido.

• Se generaba mal el ancho de columnas del subfile de un Web Panel


Se generaba mal el ancho de las columnas del subfile de un Web Panel. En lugar de generarse las columnas
de ancho 30 %, se estaban generando de 30 pixeles de ancho.
El error fue corregido.

• Combo Box en Web Panels no filtraba registros en subfile


Si se tenía un Web Panel con un combo box o combo box dinámico que permitía filtrar valores del subfile,
al seleccionar un valor del subfile y presionar el botón Confirmar el subfile quedaba vacío, aunque hubieran
registros que cumplieran la condición.
El error fue corregido.

• No se instanciaba valor en Combo Box al ejecutar Web Panel


Si se tenía un Web Panel con un combo box, y en el evento Start se asignaba un valor a la variable asociada
al combo box, al ejecutar el Web Panel no se instanciaba dicho valor.
El error fue corregido.

Cliente / Servidor
• Configuración de Máxima cantidad de cursores abiertos
La cantidad de cursores abiertos simultáneamente (por cada aplicación que se esta ejecutando en un PC
cliente) a partir de ahora es configurable, o sea, es posible indicar la cantidad de cursores que pueden estar
abiertos incluyendo en el GXCS.INI (que debe ir en el directorio de windows) lo siguiente:

[GeneXus C/S]
MaxOpenStatements = N

Donde N esta (forzosamente) entre 50 y 255, dicho de otra forma


si N < 50 --> N = 50
si N >255 --> N = 255.

El valor por defecto sigue siendo el mismo (que era fijo hasta ahora): 100 cursores.
Esta feature es especialmente aplicable al AS400 en las últimas versiones del SO.

Nota: El rango de valores posible de aplicar depende del DBMS, por lo que se debe conocer estos valores
del DBMS antes de usar esta feature.

• Funciones ServerDate, ServerTime, ServerNow en DB2/400


Estas funciones estaban implementadas para todos los DBMSs que soporta GeneXus menos DB2/400.
A partir de este patch también están disponibles en él.
Por más información referirse a las Release Notes del Patch 1 de este mismo generador o a la siguiente
URL: http://www.artech.com.uy/forum/tips/sedati.htm .

• Se eliminó la preference "Default remote procedure location"


Esto aplica para procedimientos que no son del modelo. No encontraba el programa RPC en la biblioteca
seteada en la preference default remote procedure location. Al hacer la llamada daba el error:

Error code: -204 in 0 Text is: "[IBM][Client Access ODBC Driver (32-bit)][DB2/400 SQL]SQL0204 -
PCBOCLI in URSPG type *N not found."

Se eliminó la preference "Default remote procedure location" pues en las últimas versiones de Client
Access, si se califica el nombre del programa al llamar se genera el error nombrado.
IMPORTANTE: Por compatibilidad con el pasado, si bien se eliminó la preferencia también se agregó la
opción de configuración WA0002 (Workaround 2) para utilizar en el CONFIG.GX que funcione igual que
antes por si se esta con el funcionamiento "viejo" del Client Access. En tal caso se deberá poner en el
CONFIG.GX (archivo de texto que debe ir en el directorio de la Knowledge Base ) la siguiente línea para
que sus programas continúen funcionando como antes:

WA0002=<valor anterior de la preference "Default remote procedure location">

NOTA IMPORTANTE: Si antes de instalar la versión con la modificación usaba la preference y


funcionaba va a tener que utilizar la opción de configuración indicada arriba en forma obligatoria.

• Cambio en generación del OUTER JOIN para SQL Server 7.0


Para la versión 7.0 de SQL Server (ver preference SQL Server/Version) se genera el join con una nueva
sintaxis correspondiente al standard SQL-92.
El cambio fue realizado por dos razones:

a. Es lo recomendado en los manuales de SQL Server.


b. Detectamos un error de comportamiento de SQL Server 7.0 con la sintaxis anterior.

La sintaxis anterior era:

SELECT T1.FacTot, T2.CliNom, T1.CLiId, T1.FacId


FROM FACT T1 (NOLOCK), CLIEN T2 (NOLOCK) WHERE T2.CLiId =* T1.CLiId
ORDER BY T1.FacId ;

y la sintaxis actual es:

SELECT T1.FacTot, T2.CliNom, T1.CLiId, T1.FacId


FROM (FACT T1(NOLOCK) LEFT JOIN CLIEN T2 (NOLOCK) ON T2.CLiId = T1.CLiId)
ORDER BY T1.FacId ;

• Soporte de comando DROP COLUMN en SQL Server 7.0


El comando DROP COLUMN permite eliminar una columna de una tabla con un comando SQL, por lo
que su uso agiliza el proceso de reorganización de tablas en estas condiciones (ya que no se tiene que crear
una nueva tabla temporal con el resto de las columnas y luego copiar todos los datos).
Hasta esta versión solamente el DBMS INFORMIX soportaba esto. A partir de la versión 7.0 de SQL
Server, esto esta disponible.

A partir de este patch se usará esta facilidad cuando la preference SQL Server/Version tenga seteado el
valor "7.0 o superior" y cuando la reorganización de una tabla involucre únicamente ELIMINAR uno o más
atributos. También se usa cuando se eliminan atributos y se agregan atributos nuevos para los cuales no se
tiene forma de calcular su valor. Esto es cuando en la navegación no aparezca entre paréntesis el nombre
de la tabla con la cual lo inicializara.

La sintaxis es ALTER TABLE <Table> DROP COLUMN <COL1>, <COL2

Limitación Temporal: SQL Server 7.0 no permite realizar 'Drop Column' sobre una columna que tiene
algún Indice asociado. Por este motivo y porque aun no se ha podido contornar el problema, no es posible
usar este comando en el caso mencionado.
Lo que se debe hacer cuando se esta ante una reorganización de este tipo, es cambiar la preference SQL
Server/Version a "6.x"
De lo contrario al ejecutar la reorganización se desplegará el siguiente error: Error 4922, The text of the
message is: "[Microsoft][ODBC SQL Server Driver][SQL Server]ALTER TABLE DROP COLUMN
<attribute> failed because INDEX <index> accesses this column."
• "Incorrect syntax near CALL" al llamar a un stored procedure
Se tiene un objeto GeneXus en el que se hace una llamada a un stored procedure del SQL Server. Se tiene
seteada la preference List of remote programs con el nombre de dicho stored procedure. Al ejecutar la
llamada se producía el error:

Error 170 The text for the message is: [Microsoft][ODBC SQL Server Driver]Line1: Incorrect sintax near
'CALL'.

Se estaba utilizando la siguiente sentencia [CALL PROCEDURE nnnn()]

El problema se debe a que para llamar a un stored procedure se debe utilizar la siguiente sentencia:
'[EXECUTE PROCEDURE nnnn()]'
Donde nnn es el nombre del procedimiento almacenado.
El error fue corregido.

• SQLERROR=-201 "A syntax error has occurred" en INFORMIX


Se tiene una transacción con la siguiente estructura:

A*
B
C
D

Se pasa a prototipo y se crea la Base de Datos correctamente. En diseño se realizan los siguientes cambios:
En la tabla se elimina el atributo C.
Se elimina el atributo C de la Base de Conocimiento.
Al ejecutar la reorganización correspondiente se producía un error:

SQLERROR=-201 "A syntax error has occurred"

El problema era que estaba generando una sentencia del estilo:

ALTER TABLE <nombre de tabla> DROP ()

Resumiendo, ocurría en las siguientes condiciones:

a. El DBMS es Informix
b. Se eliminaba un atributo de una tabla
c. Se eliminaba el atributo también del modelo de diseño (Advanced/Attribute/Remove).

El error fue corregido.

• Error code: -3: .... Invalid date format si se generaba con VB 5.0
Si se tenía una transacción con un atributo definido con DateTime sin parte de fecha T(0.5), cuando se
ejecuta la transacción y ingresaba un valor para ese atributo, al confirmar se daba el error mencionado.
El error fue corregido.

• ODBC error -3 'Invalid character value for cast specificcation'


Se podía producir este error en modelos VB C/S, si se tiene la preference Generate null for nullvalue() =
Yes.
El error fue corregido.

• Armado incorrecto de sentencias select en SQL y DB2


Se tenía la siguiente transacción:

TRNA
A*
A1
(B*
B1
B2)

En donde A1 era un formula Sum aggregate/select de la siguiente forma:


sum(B2, B1 = 'A' .OR. B1 = 'B', 0);

Esto generaba la siguiente sentencia select:


SELECT SUM(B2) FROM TRNA1 WHERE (( A = ? ) AND B1 = 'A' OR B1 = 'B')

El problema con esto era que el AND tiene mayor precedencia que el OR entonces la formula se disparaba
incorrectamente sumando todos las líneas en las cuales B1 = 'B'.

Si al definir la formula se hacía de la siguiente forma:


sum(B2, (B1 = 'A' .OR. B1 = 'B'), 0);

entonces se generaba la siguiente sentencia select que es correcta:


SELECT SUM(B2) FROM TRNA1 WHERE (( A = ? ) AND (B1 = 'A' OR B1 = 'B'))

El error fue corregido.

• Problema con funciones ServerDate(), ServerTime() y ServerNow()


Si se utilizaba alguna de las funciones que retornan la fecha y la hora del servidor (ServerDate(),
ServerTime() o ServerNow()) en una iteración o en un For Each, si la cantidad de repeticiones era grande,
se producía un error de proteccion general.
El error fue corregido.

• Error -524 al reorganizar base de datos No Ansi en Informix


Si se tenía creada una base de datos No Ansi en Informix, la cual tenía asociado un log de las operaciones
realizadas, al ejecutar una reorganización de la base de datos, se presentaba el siguiente error en tiempo de
ejecución:

Error Code -524 in 0 text is: '[INTERSOLV][ODBC Informix Driver][Informix]Lock table can only be
used within a transaction.

El error fue corregido.

• 'Sub or function not defined', al utilizar las funciones Now(), AddYr() o AddMth()
Si se utilizaban las funciones Now(), AddYr() o AddMth() en una comparación, o en una condición de un
Work Panel, por ejemplo: If Now() >= &DateTime, se producía el error mencionado.
El error fue corregido.

Patch # 1
• Patch #1 del Workstation Setup
Este patch debe ser instalado para que los cambios realizados en el generador de Visual Basic funcionen
correctamente. Se incluyen las siguientes .dlls, para el generador Visual Basic:

GXREPOS.DLL Es necesaria para utilizar la nueva Preference del modelo ‘Generate Data for Microsoft
Repository’, a los efectos de poder interactuar con el Repositorio de Microsoft.
Se requiere tener instalado el Service Pack 3 del Visual Studio 6.0, para que la misma registre
correctamente.

GXFORM60.DLL Se utiliza al trabajar con GXEdit (Preference 'Default Edit Control' = GXEdit)

GXCHART6.DLL Correspondiente al graficador para Visual Basic 6.0. Se requiere tener instalado el
Service Pack 3 del Visual Studio 6.0, para que la misma registre correctamente.

Por más información sobre la instalación de este patch, se recomienda leer las Release Notes del mismo.

• Nueva preference: ‘Generate Data for Microsoft Repository’


Se agregó esta nueva preference a nivel de modelo bajo la sección General. La misma permite la
interacción de la base de conocimiento GeneXus con el Microsoft Repository. Por mas información al
respecto, se recomienda leer el documento en:
http://www.artech.com.uy/news/new99005.htm

• Nueva preference ‘Tab Order in 3D Frames’


Se implementó una nueva preference a nivel de modelo, bajo la sección General, que permite regular el
comportamiento del tab order cuando se tienen rectángulos de tipo 3D, determinando si los controles
dentro del mismo se agrupan, aceptándose consecutivamente (comportamiento actual), o si por el contrario
se sigue el orden normal de izquierda a derecha, y de arriba a abajo. Los valores posibles son:

Group Control (default) - se agrupan los controles dentro de los rectángulos 3D


Use Normal Order - se usa el orden normal

• Nueva preference ‘End Tab Page Action’


Se implementó una nueva preference a nivel de modelo, bajo la sección General, que permite regular el
comportamiento cuando se está posicionado en el último control de una página de un tab dialog, y se hace
avance de campo. Es posible determinar si se debe avanzar a la siguiente página del control, o si el foco
debe salir del tab dialog

Jump to next page (default) - se avanza a la siguiente página


Exit tab - el foco sale del tab dialog

IMPORTANTE: El comportamiento del default de esta preference es el contrario al que se tenía hasta este
momento, por lo que si se desea mantener el mismo comportamiento al que tenía, será necesario cambiar el
valor de la preference antes de generar cualquier objeto.

• Cambio en la preference ‘Esc Key Action’


Se agregó un nuevo valor a la preference mencionada: None. Dicho valor hace que se deshabilite la tecla
Esc en la aplicación.

• Nueva opción de impresión con Report Viewer: Check paper size


A partir de esta versión del Report Viewer se agrega la posibilidad de controlar que el reporte que se esta
imprimiendo entre en el tamaño de página que se selecciona en el momento de imprimir. Este control es
opcional y puede habilitarse/deshabilitarse utilizando la opción "Check paper size" del utilitario GxSetFrm
para configurar los forms.
En caso de que el control esté habilitado y el reporte (según el tamaño de pagina de diseño) sea más grande
que el tamaño de papel elegido para imprimir aparecerá el siguiente mensaje: "The margins of this
document are set outside the printable area of page. Do you want to continue?", dando la posibilidad de
abortar la impresión hacia esa impresora.
Notas:
1. Por defecto el control esta habilitado.
2. No es necesario utilizar la regla printer en el reporte para deshabilitarlo, simplemente alcanza con
ejecutar el utilitario GxSetFrm (call(‘gxsetfrm’)) y deshabilitarlo.
3. Recordar que es necesario incluir el archivo gxprn.ini para que este seteo sea tomado en cuenta en las
máquinas de producción (en el caso de distribuir aplicaciones con el Setup Wizard, se deberá incluir
dicho archivo en el setup en forma manual).
4. El control sólo aplica a reportes en modo gráfico.

• Nuevas opciones con Report Viewer y regla printer


Se modificó el dialogo mostrado al ejecutar el utilitario GxSetFrm para que permita elegir si se deben
aplicar los seteos del form o si por el contrario se debe tomar la configuración de la impresora. Para mas
información sobre el funcionamiento del GxSetFrm, se recomienda la lectura del siguiente documento:
http://www.artech.com.uy/forum/tips/printurl.htm.

• Zoom al usar Report Viewer


Utilizando el Report Viewer, a partir de esta versión se puede utilizar un factor de Zoom entre 25% y 250
%. Se accede con el menú View/Zoom, existiendo un radio button con ciertos valores predefinidos, siendo
también posible ingresar un valor arbitrario.

• Cambio en el comportamiento de los comandos MT y MB


El Margin Bottom y Margin Top en Visual Basic se estaba tomando con unidades de medida diferentes, en
algunos casos se tomaban en Twips y en otros en Pixeles. Este comportamiento se cambia a partir de este
patch, pasan a tomarse en líneas. Para los reportes donde se utilizaba el MB esto va a cambiar el lugar en
donde salta el reporte, para estos casos se debe utilizar el siguiente Workaround :
− Se debe cambiar el valor por default del MB, para esto se debe agregar en el directorio raíz de
la Base de Conocimiento un archivo CONFIG.GX con la siguiente línea:
MB=0

• Nueva opción en Report Viewer: Salvar reportes con formato RTF


Se agregó la posibilidad de salvar un reporte en formato RTF (Rich Text Format).
Esta nueva funcionalidad se encuentra en una versión beta, con algunas limitaciones (temporales)
conocidas:
- No respeta colores en text control y líneas
- Modifica el tamaño de algunas fuentes

• Opción "Use Windows Default" en printblocks de reportes y procedimientos


En el patch 1 del Development Environment se habilitó el checkbox ya existente en el tag Paper de los
printblocks, y en este patch se implementó dicha opción. La misma permite usar el tamaño de papel y la
orientación de la configuración en Windows de la impresora que se esté utilizando, ignorando los seteos
hechos en el printblock.
Nota: Para poder utilizar esta opción se tiene que tener instalado el patch 1 del Development Environment.

• Posicionamiento en Web Panels (Tablas HTML)


En versiones anteriores, nuestros generadores utilizaban una técnica para posicionar los controles en la
pantalla del browser que no permitia ubicarlos correctamente. Como consecuencia, la pantalla generada
podía diferir significativamente en relación a lo que se ve al diseñar un Web Panel. Esta técnica, sin
embargo, generaba relativamente poco código HTML y permitía al diseñador incluir el propio,
directamente en el form como texto, o utilizando Web Properties, para mejorar la presentación.

Para mejorar la alineación de los controles en una página Web se ha introducido una nueva preference
denominada 'Use Tables', que habilita el uso de tablas HTML. Esta preference se encuentra tanto a nivel de
modelo como a nivel de objeto, siendo los valores posibles Yes o No. El valor por defecto de la preference
es Yes.

Básicamente, las tablas HTML son como las utilizadas en Word, para alinear cualquier página web, se
incluyen las imágenes, el texto, etc. dentro de las celdas, obteniendo el diseño deseado.
Al habilitar esta preference se incluyen los controles del form diseñado en GeneXus, dentro de las celdas
de la tabla, mejorando de esta forma la alineación de los Web Panels.
Por más información sobre implementación y compatibilidad se recomienda leer el documento que se
encuentra en: http://www.artech.com.uy/forum/tips/alignwp.htm

• Nueva preference a nivel de modelo y propiedad a nivel de objeto ‘Include <PRE></PRE> Tags’ en
Web Panels
Se agregó una nueva preference ‘Include <PRE></PRE> Tags’ a nivel de modelo, así como a nivel de
objeto. Hasta el momento todo lo que contenía el form se incluía dentro de estos Tags HTML, que indican
que el texto está preformateado.
Los valores posibles de esta preference son Yes o No. El valor por defecto es Yes.
El valor No, permite que el browser realice el formateo del código HTML enviado por GeneXus, es
utilizado para desarrollar páginas que agregan código HTML.
Importante: Esta preference es ignorada si el valor de la preference 'Use Tables' está seteada en Yes.

• Nueva preference a nivel de modelo y propiedad a nivel de objeto ‘Include standard header’ en Web
Panels
Al ejecutar un Web Panel se visualiza un título seguido de una línea, este título también se muestra en la
barra superior del browser que se está utilizando. El título mencionado, es por defecto la descripción del
objeto.
A partir de este momento se agrega una nueva preference 'Include standard header' a nivel de modelo, así
como a nivel de objeto. De esta forma se permite indicar si se va a generar el título del Web Panel o no.
Los valores posibles son Yes o No. El valor por defecto es Yes.
Si se indica que el título no se debe generar (Valor No de la preference), se elimina en forma automática la
línea, pero se mantiene la descripción que se muestra en la barra superior del browser.

• Nueva preference a nivel de modelo y propiedad a nivel de objeto ‘Include standard footer’ en Web
Panels
Al ejecutar un Web Panel generado por GeneXus se visualiza a continuación del contenido del form una
línea de separación final. Se agregó una preference 'Include standard footer' que permite controlar la
generación de dicha línea.
Los valores posibles son Yes o No. El valor por defecto es Yes.

• Método Setfocus en Web Panels


Se implementó el método Setfocus para los siguientes controles: Edit, Combo, Combo dinámico, Listbox,
Listbox dinámico y botones. Se puede colocar el foco en algún control en particular por programa.

• Foco automático en primer campo en Web Panels


Hasta el momento al ejecutar un Web Panel, el cursor no quedaba en ningún lugar identificable.
Se implementó el foco automático en el primer campo.Cuando se ejecuta un Web Panel el foco (la posición
del cursor) se posiciona en el primer control (de arriba hacia abajo y de izquierda a derecha) que no sea
read-only y que sea de alguno de los siguientes tipos: Edit, ComboBox, Dynamic ComboBox, Listbox,
Dynamic Listbox y botón.

• Campos seleccionados cuando obtienen el foco en Web Panels


Ya no es necesario borrar los caracteres antes de escribir un nuevo valor, ya que se implementó la selección
de un campo cuando el mismo obtiene el foco. Al hacer click sobre el campo o al presionar la tecla TAB el
valor del campo aparece seleccionado y al digitar el nuevo valor del campo se "elimina" en forma
automática el valor anterior del mismo.
Nota: si se utiliza Internet Explorer y se hace click sobre un campo, el mismo no queda seleccionado.

• Se soportan Atributos/Variables hidden en Web Panels


Se soporta el uso de la regla HIDDEN que permite especificar una lista de atributos y/o variables que se
encuentran "ocultas". Los atributos/variables de dicha lista se envían al browser (como parte del código
HTML generado) pero el usuario final no los ve y/o puede modificarlos. De esta forma se puede
determinar, por ejemplo si una variable fue modificada una vez ejecutado el Web Panel.
Esto es válido para atributos/variables que no se muestran en el subfile.

• Eventos de usuario asociados a botones en Web Panels
En Web Panels no se podían asociar eventos de usuario a botones. El único evento que podía estar asociado
a un botón era el evento Enter. A partir de este patch se pueden asociar eventos de usuario a cualquier
botón.

• Add-In GeneXus VB Reload Utility


Se implementó una nueva versión del Add-In GeneXus VB Reload Utility, está disponible para VB 5.0 y
VB 6.0, las mejoras de esta versión son las siguientes:
− Progress bar.
− Always on top.
− La primer vez que se usa entra en modo INITIALIZING, como lo muestra el caption. Demora
mas o menos lo mismo que demora el proyecto en cargarse totalmente.
− A partir de la segunda vez, cuando se llama al Reload entra en modo REFRESHING, que es
mas rápido.
− Cuando se confirma el Reload de archivos entra en modo UPDATING, que es todavía más
rápido que el modo anterior.

Por más información sobre el funcionamiento del GeneXus VB Reload Utility, se recomienda leer el
documento que se encuentra en: http://www.artech.com.uy/forum/tips/reload.htm.

• Las funciones EOM, ADDMTH y ADDYR pasan a retornar el mismo tipo de datos que el primer
parámetro que reciben
Las funciones EOM, ADDMTH y ADDYR pasan a retornar el mismo tipo de datos que el primer
parámetro que reciben, o sea, si el mismo es DATE retornan DATE, si es DATETIME, retornan
DATETIME.
Las operaciones válidas serán las que correspondan a cada tipo de los antes mencionados.
Algunos ejemplo de operaciones validas son:

Dias = Eom(DateExp1 ) - DateExp2 ==> Dias = Date - Date


IF addyr(DateExp1, NumExp ) >= DateExp2 ==> IF Date >= Date
IF addmth(DateTimeExp1, NumExp ) >= DateTimeExp1 ==> IF DateTime >= DateTime

En cambio, las siguientes, no serán válidas:

Dias = eom(DateTimeExp1 ) - DateTimeExp1 ==> Dias = DateTime - DateTime


==> Usar TDIFF()

IF addyr(DateTimeExp1 , NumExp ) >= DateExp1 ==> IF DateTime >= Date


==> Asignar DateTimeExp1 a una variable de tipo Date o DateExp1 a una variable
DateTime

IF addmth( DateExp1 , NumExp ) >= DateTimeExp2 ==> IF Date >= DateTime


==> Asignar DateTimeExp2 a una variable de tipo Date o DateExp1 a una variable
DateTime

Nota: Para que esto funcione correctamente, se requiere tener aplicado el Patch 2 del Development
Environment de esta versión.

• Propiedades de controles radio button


Existían problemas cuando se aplicaban propiedades en runtime a controles de tipo radio button. El control
esta formado por mas de un control Visual Basic: un Frame y varios OptionButton (los ítems del radio
button). Sólo se estaban aplicando las propiedades al Frame.
El error fue corregido.
• Evento click de control radio button se disparaba antes de tiempo
Si se tenía un work panel con una variable de tipo radio button, en el que se programaba el evento Start
para asignarle un valor a la misma, se estaba disparando el evento Click del control sin haber hecho click
sobre el mismo.
El error fue corregido.

• Se disparaba regla antes de tiempo, con rectángulo 3D


Se tenía una transacción en la que el primer control que se aceptaba era el botón Confirm, estando el mismo
dentro de un rectángulo 3D, y una regla error asociada a la clave. Al entrar en la transacción, se disparaba
la regla aún antes de digitar el valor de la clave.
El error fue corregido.

• Calculadora y calendario sobre campos de solo lectura


Si se tenían campos de tipo numeric y date que fueran de solo lectura (fórmulas, regla noaccept, etc) y la
preference Color in Read-Only Fields = Original, los mismos podían ser modificados llamando a la
calculadora y al calendario (botón derecho del mouse sobre el campo) y seleccionando un valor.
El error fue corregido.

• No se visualizaba valor de variable en subfile de work panel luego de ejecutar comando For each
line
Se tenía un work panel con subfile, y una variable en el mismo que se modificaba en un evento mediante un
comando For each line. El valor de la variable se modificaba bien, pero el mismo no se visualizaba en la
fila en la que estaba posicionado el cursor.
El error fue corregido.

• Se calculaban mal las fórmulas cuando se modificaban registros en subfiles


Si se tenía una transacción de dos niveles con subfile, y algún atributo del cabezal era una fórmula que
dependía de algún atributo del segundo nivel, al modificar alguna línea pero no confirmar la modificación
de todas formas quedaba modificado el atributo fórmula.
El error fue corregido.

• La tecla Enter no disparaba el evento Enter en work panel, ejecutando con Visual Basic 6.0
Si se ejecutaba una aplicación con Visual Basic 6.0, y no se tenía el Enter como avance de campo, al
presionar la tecla Enter no se disparaba el evento correspondiente.
El error fue corregido.

• Valores de atributos de tipo combo box en subfiles


Si se tenía un work panel con subfile, y en el mismo un atributo definido como combo box, igual se podían
ver los posibles valores y cambiar el valor del campo.
El error fue corregido.

• Se perdían datos ingresados en work panel con tab dialog


Se tenía un work panel con un tab dialog., y se ingresaban datos en una página. Se avanzaba de página, y
cuando se volvía a la anterior los datos se perdían.
El error fue corregido.

• Las funciones CtoD y CtoT estaban funcionando mal


Las citadas funciones estaban funcionando mal si el string que se les pasaba como parámetro tenía la fecha
con cuatro dígitos para el año. Estaban devolviendo el date/datetime nulo.
El error fue corregido.

• Se borraba valor de atributo en subfile


Se tenía una transacción de un nivel con subfile, con las reglas:
serial(PdrSec ,PdNumReng ,1 ) ;
noaccept(PdrSec ) ;

allownulls(PrCod ) ;

PdrDes = PrDes IF Insert ; (o default(PdrDes, PrDes); )

donde PrCod era clave forenea, PrDes es un atributo inferido, y PdrDes es un atributo almacenado en la
tabla base que se carga del inferido con la regla asignacion. En ejecucion, cuando la clave era nula, y se
digitaba un valor en PdrDes, el mismo se blanqueaba al dar avance de campo.
El error fue corregido.

• Se grababa línea en subfile al clickear registro anterior


Se tenía una transacción con subfile y se estaba ingresando una línea. Si antes de confirmar la misma se
hacía click en un registro anterior, se grababa la línea.
El error fue corregido.

• Problema con nuevo graficador utilizando Visual Basic 6.0


El nuevo graficador estaba utilizando el control MSCHART.OCX, que no es instalado por Visual Basic
6.0. A partir de ahora el graficador para Visual Basic 6.0 utiliza el control MSCHRT20. OCX, que es
instalado cuando se hace una instalación típica del lenguaje mencionado.
El error fue corregido.

• Tipo de letra en reportes modo texto utilizando Report Viewer


En reportes modo texto, el Report Viewer desplegaba un tipo de letra proporcional, distinta a la que se
utilizaba para imprimir.
El error fue corregido.

• Función Round no funcionaba correctamente


La función Round no estaba funcionando correctamente en algunos casos.
El error fue corregido.

• El foco se posicionaba en el último campo de un work panel si se tenía una variable de tipo
bitmap
Si en un work panel se tenía una variable de tipo bitmap como primer campo, al ejecutar el mismo el foco
se posicionaba en el último campo del objeto.
El error fue corregido.

• No se generaba archivo SCHEMA.INI con data views a archivos de texto


Si se tenían data views a archivos de texto, no se estaba generando el archivo SCHEMA.INI que contiene
la información sobre las tablas externas.
El error fue corregido.

• Variable &Line como parámetro en reportes


Si un reporte llamaba a otro pasando como parámetro la variable &Line, el valor de la misma no se
retornaba actualizada al programa llamador. Esto podía provocar que se superpusiera la salida de ambos
reportes.
El error fue corregido.

• Actualización de atributos del cabezal en transacciones de dos niveles con subfile


Si se tenía una transacción de dos niveles con subfile y se llamaba a la misma en modo Update con la clave
instanciada, en ciertos casos particulares luego de modificar un atributo del cabezal, al dar avance de
campo el atributo volvía a su valor anterior.
El error fue corregido.
• For each selected line dejaba en la primer fila el último registro luego de ejecutar
Si se tenía un Work Panel con un evento que hacía un For Each Selected Line, cuando terminaba la
ejecución del comando, en la primera línea del subfile del Work Panel quedaba el último registro
seleccionado para procesar.
El error fue corregido.

• Problema de locks en Access


Si se tenía un procedimiento que actualizaba un atributo de una tabla y devolvía el valor (por ejemplo un
procedimiento para numerar los registros de una transacción), y dos usuarios ejecutaban simultáneamente
el procedimiento, podía pasar que el procedimiento devolviera el mismo número.
El error fue corregido.

• Problemas con atributos de tipo datetime sin parte de fecha en Access


Se producían problemas en los atributos de tipo datetime que no tuvieran parte de fecha (Date Len = 0 en la
definición del atributo). Si se trabajaba con Access se producían problemas en las comparaciones y en los
índices en los que formaban parte este tipo de atributos. Se decidió un cambio en la forma de
almacenamiento a los efectos de solucionar los problemas mencionados, para lo cual se implementó un
esquema de corrección. Por más información acerca de este tema, ver el documento en
http://www.artech.com.uy/forum/tips/dtfix.htm.
El error fue corregido.

• On line activate no se dispara en última línea del subfile


Si en un Work Panel con subfile, se tenía programado el evento OnLineActivate, al ejecutar el Work Panel
y presionar las flechas para ir moviéndose por el subfile, el evento se dispara para todas las líneas visibles
del subfile, pero al llegar a la última, el evento no se diparaba.
El error fue corregido.

• Problema con campos character con picture @!, con GXEdit


Si se trabajaba con GXEdit y se tenían campos de tipo character con picture @! (o !!!…!!!), los caracteres
vocales con tilde (á, ó, etc) no se estaban convirtiendo a mayúsculas.
El error fue corregido.

• Problema con GXEdit y tamaño de campos long varchar


Cuando se trabajaba con GXEdit, no se permitía ingresar mas de 255 caracteres en los campos de tipo long
varchar.
El error fue corregido.

• Se ponian en cero campos numéricos en subfiles con GXEdit


Si se trabajaba con GXEdit y se tenía el Enter como salida de campo, al presionar Enter sobre un campo
numérico editable de un subfile, el mismo se ponía en cero.
El error fue corregido.

• No se hacía word wrap de campos long varchar y varchar con GXEdit


Si se trabajaba con GXEdit, no se estaba haciendo word wrap en los campos de tipo long varchar y varchar.
El error fue corregido.

• No funcionaba PgUp/PgDn en campos long varchar y varchar, con GXEdit


Si se trabajaba con GXEdit, no funcionaba el avance/retroceso de página en campos de tipo long varchar y
varchar.
El error fue corregido.

• Se deshabilitaba la tecla Esc con GXEdit


Si se trabajaba con GXEdit, y se tenía una transacción o work panel en el que el botón asociado al evento
Cancel tenía un bitmap, y ademas se tenía el Enter como avance de campo, en ejecución se deshabilitaba la
tecla Esc.
El error fue corregido.

• Problemas con GXEdit y campos long varchar y varchar


Si se utilizaba GXEdit, no funcionaba el Ctrl-Enter para insertar líneas en campos de tipo long varchar y
varchar.
El error fue corregido.

• No funcionaban teclas de función para disparar eventos con GXEdit


Si se trabajaba con GXEdit, y se tenía un objeto con un evento asociado a una tecla de función, en
ejecución al presionar la tecla correspondiente no se disparaba el evento.
El error fue corregido.

• Runtime error 94 ‘Invalid use of null’ con GXEdit


Si se trabajaba con GXEdit y se tenía un subfile con un campo numérico de largo 1, que estuviera definido
como check box, se producía el error.
El error fue corregido.

• Err 217 Run-time type error in embedded C expresion, en modelo con data views
Podía producirse este error en forma aleatoria al generar objetos que accedieran a tablas externas, definidas
mediante data views.
El error fue corregido.

• Compile error ‘Method or data member not found’


Se daba el error si se aplicaba el método SetFocus a un control de tipo radio button.
El error fue corregido.

• Compile error ‘Syntax Error’ en transacción muy grande


Podía producirse este error al querer compilar una transacción. El error de sintaxis se producía porque
faltaban las comillas despues del carácter de continuación de línea (_).
El error fue corregido.

• Compile error ‘Syntax error’ con funciones de fecha y funcion Now()


Se producía el error en compilación o ejecución cuando se utilizaba la expresión YMDtoD(Year(Now()..,
YMDHMStoT(Year(Now()…, o TtoC(Now()).
El error fue corregido.

• Compile error ‘Syntax error’ con clave foránea combobox en subfile


Si se tenía una transacción con subfile, y en este último una clave foránea definida como combobox o
dynamic combobox, se producía el error.
El error fue corregido.

• Runtime error 3420 ‘Object invalid or no longer set’ con ‘Show Form’ = After Start Event
Se tenía un work panel de ‘Trabajar con’ que llamaba a una transacción pasándole el modo, y la preference
‘Show Form’ = After Start Event. Al llamar a la transacción en modo Delete, se desplegaba el mensaje de
confirmación, y al dar avance de campo o presionar el botón de Confirm, se producía el error.
El error fue corregido.

• Runtime error 3167 ‘Record is deleted’, al borrar registros en subfile


Se tenía una transacción con subfile y se borraba un registro. Si inmediatamente despues se presionaba el
botón Delete, se producía el error.
El error fue corregido.

• Runtime error 3011, con data views a tablas Access con nombres de mas de 8 caracteres
Se tenía un data view sobre una tabla Access cuyo nombre era de mas de 8 caracteres. En ejecución se
producía el Runtime error 3011 ‘The Microsoft Jet Database engine could not find the object <tabla>…’.
El error fue corregido.

• Runtime error 3420 con comando Return en el Evento Enter y tecla Enter, en Visual Basic 6.0
Se tenía un work panel con subfile, y en el evento Enter un comando return. Si se ejecutaba con Visual
Basic 6.0, al presionar la tecla Enter, se producía un Runtime Error 3420 ‘Object invalid or no longer set’.
El error fue corregido.

• Runtime error 9 ‘Subscript out of range’ con método RemoveItem


Se producía el error si se tenía un control de tipo combobox o listbox que tuviera mas de 20 elementos, y se
aplicaba al mismo el método RemoveItem.
El error fue corregido.

• Runtime Error 5: Invalid procedure call or argument


Si se tenía un Work Panel que llamaba a otro en el evento Enter, con las preferences:
Generate MDI Application = No
Field Exit = Enter Tab Shift Tab
El error se producía cuando se ejecutaba el Work Panel y se presionaba varias veces Enter muy rápido.
El error fue corregido.

• No funcionaba la picture 99/99/9999 en web panels


Si se tenía en un web panel una variable de tipo date con la picture 99/99/9999, no funcionaba. Sólo se
aceptaban dos dígitos para el año.
El error fue corregido.

• Error ‘Invalid procedure call or argument’ en Evento Enter en web panel con checkbox
Se producía el error en ejecución si en un web panel se tenía un control de tipo checkbox al que no se
hubiera seleccionado un valor, y se ejecutaba el evento Enter.
El error fue corregido.

• ‘Invalid Cualifier’ al compilar Web Panels con métodos Clear, Additem y Remove item
Se tenía un Web Panel que usaba en el evento Start los métodos Clear, Additem y Removeitem para cargar
valores en un Combo Box, al compilar cualquiera de los tres métodos se daba el error.
El error fue corregido.

Client/Server

• Cambio en la preference ‘Database Name’, C/S con DB2/400


Cambió el comportamiento de la preference del modelo ‘Database Name’, cuando se trabaja con modelos
Client Server con DB2/400. Para mas información se recomienda leer el documento en:
http://www.artech.com.uy/forum/tips/dbnameas.htm

• Optimización de funciones null() y nullvalue() en DB2 Common Servers


Debido a problemas del DBMS DB2 Common Servers NO se optimizan las funciones null y nullvalue, por
esta razón cuando se utiliza dicho DBMS estas funciones no se evalúan en el servidor, se vuelven a evaluar
en el cliente.

• Se implementaron las funciones ServerNow(), ServerTime() y ServerDate()

- ServerNow(): Retorna un tipo de datos DateTime cuyo valor corresponde a la fecha y hora del
servidor en el momento de realizar la llamada.

- ServerDate(): Retorna un tipo de datos Date cuyo valor corresponde a la fecha del servidor en el
momento de realizar la llamada.
- ServerTime(): Retorna un tipo de datos Char de 8 caracteres en formato HH:MM:SS cuyo valor
corresponde a la hora del servidor en el momento de realizar la llamada

Consideraciones:
La fecha y hora del servidor serán tomadas del DBMS principal especificado en el modelo
GeneXus.
Si se trabaja contra Access, donde estas funciones no se aplican, se utilizarán las siguientes equivalencias:

1. FUNCIÓN EQUIVALE A

ServerNow() Now()
ServerDate() SysDate()
ServerTime() SysTime()

El llamado a estas funciones implica un acceso a la base de datos. Este acceso puede ser costoso en tiempo,
particularmente en ambientes Client/Server. Por esta razón se recomienda utilizarlas con criterio.
Nota: Para poder utilizar estas funciones es necesario tener instalado el patch 1 del Development
Environment.

• Modificación del factor de bloqueo (de lectura en bloque)

"Inhibición" del factor de bloqueo del driver.


A partir de la versión 6.0 de GeneXus se "inhibió" la posibilidad del driver de Client Acces de leer registros
en bloque. Esto permitía el "lock" de registros pero puede generar como contrapartida problemas de
performance. Versiones mas recientes del Client Access permiten procesar en bloques y realizar "locks",
por lo cual a partir de esta versión no se "inhibe" mas la lectura en bloque que pueda hacer el driver.

El factor de bloqueo en aplicaciones C/S con AS/400 se aumentó de 2 a 50, esto significa que los "blocked
fetch" que antes leían bloques de 2 registros, a partir de esta versión leen bloques de 50 registros. Esto tiene
una mejora de performance significativa en las operaciones de lectura las aplicaciones C/S con AS/400 .

IMPORTANTE: Es importante destacar que esto puede producir errores en las aplicaciones dependiendo
de la versión de Client Access que se esté utilizando.

Si al utilizar el código generado a partir de este patch se obtienen algunos de estos errores:
"Error -508 Cursor not positioned on a locked row"
"Error Code: -407 in text 0 Text is sql0407 - No se permiten valores nulos en la columna
<nombrecolumna> en la tabla <nombretabla> en <nombrebiblioteca>"

Para evitar estos errores, se recomienda actualizar la versión del Client Acces, actualizar el Service Level
de la versión de Client Access y actualizar los PTFs del AS/400.

Si se continúa con el problema, se puede utilizar el siguiente workaround que vuelve a generar el mismo
código que se generaba antes del cambio que se mencionó anteriormente:

ATENCION: Esto vuelve a dar problemas de performance, por lo tanto se recomienda utilizarlo con
precaución.

1. Crear un archivos CONFIG.GX en el directorio de la Base de Conocimiento (o editar el mismo si existe)


2. Agregar una linea: WA0001=Y
3. Generar cualquier programa de la aplicación.

Aplicar este WA es lo mismo que configurar en el Data Source, en el Tab Performance, sección "Record
Blocking Type:" con el valor "Disable record blocking".
Por mas información al respecto se recomiendo leer el documento en:
http://www.artech.com.uy/forum/tips/vbblock.htm

• Problemas con driver 2.5 de Oracle


Se hicieron modificaciones en las dlls de C/S, para solucionar algunos problemas con el driver 2.5 para
Oracle 7.3. Los errores ocurrían aleatoriamente y el mensaje que se desplegaba, entre otros, era "Statement
Not Parsed".
Los errores fueron corregidos.

• Se generaban objetos sin integridad transaccional en modelos C/S


Si quedaban objetos especificados sin generar, al generarse una reorganización/creación de la base de
datos, dichos objetos se generaban sin integridad transaccional, sin importar el valor que se tuviera en la
preference Transactional Integrity.
El error fue corregido.

• ODBC 3129 con varchars y Oracle 8


Si se tenía una tabla con un atributo de tipo varchar que formara parte de la clave, y se trabajaba con Oracle
8 utilizando el driver de Intersolv, se producía un error de ODBC 3129 The next piece to be inserted is
required.
El error fue corregido.

• Problemas con atributos de tipo datetime sin parte de fecha C/S


Se estaban grabando mal en la base de datos los atributos de tipo datetime que no tuvieran parte de fecha
(Date Len = 0 en la definición del atributo). Para ayudar a solucionar este problema, se implementó un
esquema de corrección. El detalle acerca del mismo se puede encontrar en :
http://www.artech.com.uy/forum/tips/csdt.htm.
El error fue corregido.

• ODBC error –302 en aplicaciones C/S con DB2 Common Servers


Se producía este error cuando se tenía en un objeto una condición optimizada null(&Variable).
El error fue corregido.

• Dynamic ComboBoxes y Dynamis ListBoxes con descripción de tipo date o datetime


Se producían errores si se tenía en un modelo Client/Server un dynamic combobox o dynamic listbox cuya
descripción fuera cargada de un atributo de tipo date o datetime. Uno de los errores que se podían dar era
un error de protección general al cerrar Visual Basic cuando se ejecutaba la aplicación de forma
interpretada.
El error fue corregido.

• No se generaba DECLARE en llamada a objeto generado en RPG


Si en un modelo C/S contra DB2/400 se tenía un procedimiento MAIN generado en RPG, si el
procedimiento recibía más de dos parámetros, no se generaba el DECLARE en el STUB.
El error fue corregido.

También podría gustarte