Administrador de
Adaptaciones
Referencia Visual Basic para
Aplicaciones
Versin 5.5
Marcas Registradas
RPMN-VBA0-0000550
5/2003
Manual copyright 2003 Great Plains Software, Inc. Todo los derechos
reservados. Great Plains Software, Inc. es una subsidiaria duea de Microsoft
Corporation.
Su derecho para copiar esta documentacin est limitado por las leyes de derecho
de autor y los trminos del acuerdo de la licencia de software. Tal como se expresa
en la licencia de software, usted puede realizar un nmero razonable de copias o
impresiones para su uso personal. El realizar copias, adaptaciones, compilaciones
o subproductos para la distribucin comercial est prohibido y constituye una
violacin sancionable por parte de la ley.
Todo nombre de empresas o productos mencionados son marcas registradas de
Great Plains Software, Inc., o de sus respectivos dueos. Great Plains, Solomon
IV, y Solomon Desktop son ambas marcas registradas de Great Plains Software,
Inc. dentro de los Estados Unidos y/o otros pases. Microsoft, Microsoft Windows
98, Microsoft Windows 2000, Microsoft Windows XP, Microsoft Me, Microsoft
Windows NT Server Enterprise Edition, Microsoft SQL Server, Microsoft Small
Business y SQL Server Enterprise Edition, ActiveX, Windows y Windows NT son
todas marcas registradas de Microsoft Corporation en los Estados Unidos y/o otros
pases. Crystal Decisions y Crystal Reports son ambas marcas registradas de
Seagate Software Information Management Group Holdings, Inc. en los Estados
Unidos y/o otros pases.
Los nombres de compaas existentes y productos mencionados aqu pueden ser
marcas registradas en los Estados Unidos y/o otros pases de los dueos
respectivos.
Los nombres de compaas, productos, personas y/o informacin usada en
ventanas de ilustracin y ejemplos son ficticios y no pretenden de ninguna forma
representar individuos reales, compaas, productos o eventos, a menos que se
exprese lo contrario.
Garanta
Limitacin de
Responsabilidad
Contrato de Licencia
El uso de este producto est cubierto bajo el contrato de licencia suministrado con
el producto del software. Si usted tiene cualquier consulta, por favor llame al
departamento de asistencia al consumidor de Microsoft Business Solutions al 800456-0025 o al 701-281-6500.
Fecha de Publicacin
Mayo 2003
i
i
2
5
6
Tabla de Contenidos
Tabla de Contenidos
Bienvenido a Visual Basic para Aplicaciones .......................................................................................... 1
Qu contiene este manual? ..................................................................................................................... 1
Convenciones Tipogrficas ...................................................................................................................... 2
Propiedades Solomon
29
39
ii
67
i
i
i
i
i
i
2
5
6
Tabla de Contenidos
iii
iv
Glosario
243
ndice
247
2
5
6
Introduccin
Introduccin
Propiedades Solomon
Enumera y describe las propiedades Solomon disponibles en el lenguaje de Visual
Basic para Aplicaciones.
Glosario
Define palabras y terminologa usada comunmente en VBA.
Convenciones Tipogrficas
Las siguientes convenciones tipogrficas son usadas a lo largo de esta documentacin:
A representar:
La sintaxis es:
Declaraciones y funciones
Argumentos de declaraciones o
funciones
Caractersticas Claves
La implementacin de VBA de Microsoft Business Solutions dentro del Administrador
de Adaptaciones ofrece a los desarrolladores Solomon estas importantes ventajas:
Tecnologa VBA comn la misma versin de VBA se usa a lo largo de Microsoft
Office y marca puntos en otros productos populares de software
Ambiente de desarrollo integrado (IDE) standarizado un estndard de la
industria IDE que incluye al editor de Visual Basic, el cual es familiar para
millones de desarrolladores de software al rededor del mundo.
Paridad absoluta del lenguaje core con Microsoft Visual Basic el mismo
mejoramiento del lenguaje core como lo ha tenido la herramienta de desarrollo que
ms ha satisfacido a los usuarios de Microsoft.
IDE localizado y ayuda en lnea soporte para desarrolladores que trabajan en
idiomas diferentes al ingls, incluyendo francs, alemn, japons y chino.
Tecnologa IntelliSense para desarrolladores referencia instantnea para la
sintaxis de APIs Solomon y el modelo de objetos Solomon.
Formularios (forms) Microsoft puede crear formularios con mucho contenido y
ventanas de dilogo a su medida en cualquier aplicacn Solomon.
Soporte de controles ActiveX inserte controles ActiveX directamente en los
formularios (forms) Microsoft.
Editor de Cdigo
El editor de Visual Basic incluye un Editor de Cdigo (figura 1), el cual entrega una
sintaxis con colores para ayudar el desarrollo de la sintaxis, caractersticas IntelliSense,
arrastrar y pegar, bloquear comentarios y revisin de sintaxis.
Desarrolladores Solomon pueden abrir ventanas de cdigo para cualquier objeto que
contenga cdigo (por ejemplo una ventana Solomon), como tambin los mdulos,
clases o formularios (forms) agregados al proyecto VBA. En cada ventana,
caractersticas IntelliSense (figura 2) entregan ayuda en sintaxis y programacin:
Completa Palabra completa la palabra que est siendo tipeada cuando
suficientes letras han sido tipeadas para hacer la palabra distinguible.
Informacin Rpida ayuda para entregar informacin de sintaxis, la cual aparece
automaticamente cuando se tipea un procedimiento o nombre de mtodo.
Lista de Propiedades/Mtodos un men colgante que muestra una lista de
propiedades y mtodos disponibles a un objeto seguido de un punto (.) en la
sintaxis.
Lista de Constantes un men colgante que muestra constantes vlidas para la
propiedad o argumento que se est creando.
Ayuda de datos muestra informacin de la variable colocada bajo el cursor
cuando VBA se encuentra en modo de bloqueo.
Porque los formularios del usuario (user forms) pueden ser desplegados sin modo,
los usuarios pueden interactuar con las ventanas de dilogo de la aplicacin Solomon
mientras la ventana de dilogo se est mostrando.
Para completar los formularios Microsoft est el diseador de formularios integrado
(integrated form designer) IDE. Este diseador, integrado en el IDE, entrega de
elementos que permiten al desarrollador de Solomon disear elementos de interface y
escribir cdigo de la aplicacin en el mismo ambiente de trabajo.
10
11
12
13
14
15
Click
Button
Default
Control
Chk
Control
PV (possible value)
Text Control
LineGotFocus
Grid
LineChkEvent
Grid
Load
Form
Display
Form
Hide
Form
OnFinish
Update
OnInsert
Update
OnCancel
Update
OnUpdate
Update
OnDelete
Update
16
Declarando Variables
VBA soporta mtodos de declaracin de variables. Eso s, dentro del contexto de
Solomon, usted debe seguir ciertas reglas al declarar variables.
No sea redundante en sus declaraciones de variables. Considere declarar estas como
globales (GLOBAL) antes que de tipo DIM en cada subrutina. De esta forma, usted
necesitar declararlas solamente una vez. Coloque Option Explicit en
General_Declarations en el comienzo de cada archivo como tambin en los archivos
externos. Esto es una funcin de VB que asegura una declaracin de variable explcita.
Tanto VB como VBA soportan el uso de $, % y # como variables String, Integer y
Double respectivamente.
Usted no necesita fijar el campo a (NULL) dentro del programa de control. Al
declarar dos variables globales tal como se muestra en los ejemplos de tipo de
estructura, usted simplemente necesita fijar bRecord = nRecord para colocar el registro
en cero o bRecord.FieldName = nRecord.FieldName para colocar el registro en cero en
un campo (field) particular.
17
18
Este ejemplo compara dos fechas. Note que usted debe inclur .Val en el nombre de
variables cuando sea apropiado:
Sub Test_Click()
Dim TestDate1 As Sdate
Dim TestDate2 As Sdate
TestDate1.Val = GetObjectValue("cinvcdate")
TestDate2.Val = GetObjectValue("cdocdate")
serr1 = DateCmp(TestDate1, TestDate2)
If serr1 = 0 Then
Call MessBox("Dates are equal", MB_OK, "Message")
ElseIf serr1 > 0 Then
Call MessBox("invdate greater", MB_OK, "Message")
ElseIf serr1 < 0 Then
Call MessBox("docdate greater", MB_OK, "Message")
End If
End Sub
19
20
21
Estructuras (Structures)
Usted no puede declarar simplemente una variable, hacer una declaracin SQL y
capturar el resultado de la declaracin SQL para colocarlo dentro de esta variable.
Usted tiene que declarar una estructura para cualquier resultado de una declaracin
SQL (incluyendo funciones agregadas). Si usted crea estructuras especiales para
funciones agregadas o declaraciones de seleccin especiales select fld1, fld2 desde el
registro) (no recomendado) usted tiene que inclur todo los campos en la declaracin
de seleccin y todo campo en la restriccin no inclurlo en la lista de seleccin.
Por ejemplo, la siguiente declaracin select:
Select CustId, Name, Zip From Customer Where
City = 'Findlay' and Zip = '45840' and CurrBal > 0;
Al usar funciones SQL agregadas como se ve en el segundo ejemplo arriba, usted debe
usar las funciones SQL sgroupfetch.
22
Este evento default tiene que forzarse para ser ejecutado por lo siguiente (Note que esto
ser colocado tipicamente en un evento chk precedente):
serr = setdefaults("Form1", "cuser1")
Para realizar chqueo de errores en este campo, coloque lo siguiente en el evento chk:
Sub cuser1_Chk(chkstrg$, retval%)
serr = DateCheck(chkstrg)
If serr = -1 Then
' Invalid Day
Call Messbox("Invalid day, please re-enter", MB_OK,
"Message")
retval = errnomess
ElseIf serr = -2 Then
'Invalid Month
Call Messbox("Invalid month, please re-enter", MB_OK,
"Message")
retval = errnomess
23
24
En el cdigo:
serr1 = sqlfetch1(c1, "GetCustomer" + sparm(chkstrg),
bCustomer, Len(bCustomer))
25
26
Este ejemplo utiliza 01.010 para crear automaticamente una entrada auto-balanceada
Journal. Coloque el Batch.User3 en la parte inferior del formulario. Esto es usado para
guardar la cifra de tapn (plug amount).
General Declarations:
Global Diff#
Sub CreatePlug()
CrTotal = Val(GetObjectValue ("ccrtot"))
DrTotal = Val(GetObjectValue ("cdrtot"))
Diff = FPSub(DrTotal, CrTotal, 2)
serr1 = SetObjectValue ("cuser3", Str$(Diff))
End Sub
Sub cdramt_Chk(chkstrg$, retval%)
Call CreatePlug
End Sub
Sub ccramt_Chk(chkstrg$, retval%)
Call CreatePlug
End Sub
Sub spread1_LineChk(action%, maintflg%, retval%)
Call CreatePlug
End Sub
Sub cacct_Chk(chkstrg$, retval%)
Dim PlugAmount As Double
If Trim$(chkstrg) = "0000" Then
' Plug the Offset
PlugAmount = GetObjectValue ("cuser3")
If PlugAmount > 0 Then
Serr1 = SetObjectValue ("ccramt", Str$(PlugAmount))
ElseIf PlugAmount < 0 Then
Serr1 = SetObjectValue ("cdramt",
Str$(-1 * PlugAmount))
End If
End If
End Sub
27
Este ejemplo acumula la cifra total de transacciones en Voucher and Adjustment Entry
(03.010.00), y fija por defecto la cifra de transaccin para cada lnea a la cifra
requerida a balancear el documento a los detalles. Coloque las siguientes tres lneas
en General_Declarations:
Dim Original#
Dim Sum#
Dim LineAmount#
Sub spread1_linegotfocus(maintflg%, retval%)
Original = Val (GetObjectValue ("cOrigDocAmt"))
If maintflg = INSERTED and Original <> 0 Then
Sum = Val (GetObjectValue ("cDocBal"))
LineAmount = FPSub (Original, Sum, 2)
Serr1 = SetObjectValue ("cTranAmt", Str$(LineAmount))
End If
End Sub
28
Propiedades Solomon
29
Propiedades Solomon
Propiedad BlankErr
Determina si un valor vlido debe ser introducido o reseteado para un campo.
Observaciones
Setear esta propiedad en Verdadero (True) indica que este campo necesita un valor.
Setear esta propiedad en Falso (False) indica que el campo es opcional. Campos
deshabilitados (disabled) y/o invisibles (invisible) no deben tener esta propiedad en
Verdadero, a menos que sean reseteados con un valor vlido. Si un control es marcado
para requerir un valor (Verdadero) desde la aplicacin, entonces no debe estar marcado
como opcional (Falso) desde el Administrador de Adaptaciones. Sin embargo, si un
control es marcado como opcional desde la aplicacin, puede estar marcado como
requerido desde el Administrador de Adaptaciones.
Para modificar el valor de la propiedad BlankErr en tiempo de ejecucin, se debe usar
la declaracin SetProp en vez de modificar la propiedad directamente desde el cdigo
de VB. El uso de SetProp permite al sistema seguir la pista a los cambios de valores de
las propiedades para evitar conflicos con las adaptaciones.
Tambin Vea
Enabled Property, Declaracin MSetProp, Declaracin SetProp, Propiedad Visible
30
Propiedad Enabled
Determina si el ususario puede o no modificar el contenido de un control.
Observaciones
Un valor verdadero (True) de esta propiedad indica que este control est habilitado,
muentras que un valor falso (False) deshabilita este control. Campos requeridos no
debieran ser deshabilitados, a menos que sean reseteados en forma automtica con un
valor vlido.
Para modificar el valor de la propiedad Enabled, la declaracin SetProp debe usarse,
en vez de modificar el valor de la propiedad directamente en el cdigo de VB. El uso
de SetProp permite al sistema seguir la pista a los cambios de valores de las
propiedades para evitar conflicos con las adaptaciones y/o otras APIs tales como la
declaracin DisplayMode.
Si un control es deshabilitado por la aplicacin, entonces no puede ser habilitado
utilizando el Administrador de Adaptaciones. Sin embargo, si un control es habilitado
por la aplicacin, entonces puede ser deshabilitado por el Administrador de
Adaptaciones. El valor de la propiedad Enabled puede limitarse en tiempo de
ejecucin pero no ampliarse, dependiendo del nivel al cual los cambios son hechos
(todo usuario, un usuario, etc.). Vea la seccin de Seguridad de la documentacin de
Administrador de Adaptaciones. La propiedad de Enabled no debe ser usada en el
control SAFGrid.
Tambin Vea
Propiedad BlankErr, Declaracin SetProp, Propiedad Visible
Propiedades Solomon
31
Propiedad FieldName
Facilita un ligamiento apropiado entre el control y las variables de dato VB
subyacentes, operando en conjunto con la declaracin SetAddr en el tiempo de
ejecucin.
Observaciones
La informacin de cada dato de control de entrada individual es almacenada en una
variable VB subyacente. En tiempo de ejecucin el control y la variable asociada de
almacenamiento VB son ligadas usando una combinacin de la propiedad FieldName
del control y un llamado correspondiente a la declaracin SetAddr desde el formulario
(form) Form1_Load.
La propiedad FieldName contiene un valor Struct.FieldName junto con otra
informacin ms detallada como el valor de offset del campo (Field Offset Value), tipo
de declaracin (Declare Type) y longitud (Length). Como mnimo, un valor debe ser
introducido en el campo Struct.Field.Name. Este valor estar normalmente en el
formato bTableName.FieldName. La parte del nombre que identifica a la tabla tiene
que corresponder exactamente a la cadena de caracteres del nombre de la tabla, el cual
es pasado en una llamada correspondiente a la declaracin SetAddr. Sin embargo, no
es necesario que corresponda a un nombre de una tabla actual que exista en la base de
datos.
Los campos offset de campo (Field Offset), tipo de declaracin (Declare Type) y
longitud (Length) son opcionales dependiendo de si el nombre de la tabla referenciado
por Struct.FieldName es o no el nombre de la tabla en la base de datos. Si
Struct.FieldName referencia una tabla en la base de datos, entonces SWIM puede
accesar informacin detallada relacionada con cada campo individual utilizando el
diccionario de datos de SQL. Si el nombre de tabla referenciado no corresponde al
nombre de la tabla en la base de datos, entonces se tiene que colocar valores a los
campos offset de campo (Field Offset), tipo de declaracin (Declare Type) y longitud
(Length).
La propiedad FieldName puede ser modificada en tiempo de diseo solamente, no
puede ser modificada en tiempo de ejecucin.
La siguiente tabla contiene los tipos de declaracin (Declare Type) y longitud (Length)
para varios tipos de datos estandar.
Tipo de dato SQL
Tipo de dato VB
Tipo de
Declaracin
Longitud
Character
String
Integer(2)
Integer
Float
Double
Date
SDate
Logical
Integer
Tambin Vea
Declaracin VBA_SetAddr
32
Propiedad Heading
Contiene el ttulo (caption) para la correspondiente grilla de columna para controles
asociados con SAFGrid.
Observaciones
Los encabezados de columna pueden ser implementados conteniendo ms que una
lnea, separando el texto de cada lnea mediante una coma, tal como Lnea uno, lnea
dos.
Para modificar el valor de la propiedad Heading en tiempo de ejecucin, la declaracin
SetProp debiera ser usada, en vez de modificar la propiedad directamente en el cdigo
de VB. El uso de SetProp permite al sistema seguir la pista a los cambios de valores de
las propiedades y as evitar conflictos con las adaptaciones.
Si aparece dentro de una grilla un grupo de botones de opciones (option button group),
la grilla utiliza la propiedad Heading del primer botn de opcin como la cabecera de
la columna.
Tambin Vea
Declaracin MSetProp, declaracin SetProp
Propiedades Solomon
33
Propiedad Mask
Determina el tipo y nmero de caracteres que puede ser introducido en un campo
particular.
Observaciones
Cada caracter en la propiedad Mask corresponde a un caracter en el campo
desplegado. Si un caracter de mscara (mask character) es uno de los tipos de mscara
soportados, entonces el valor vlido correspondiente ser permitido para esa posicin
particular. De otro modo, el caracter es considerado como una cadena de caracteres
literal (literal string) para ser desplegada dentro del campo. Estas cadenas de caraceters
literales (literal string) son desplegadas unicamente haciendo que el cursor salte sobre
ellas al introducir valores. Adems, las cadenas de caracteres literales (literal string) no
sern almacenadas en el valor resultante bajo el campo de datos, ya que existen
solamente para fines visuales.
Para modificar el valor de la propiedad Mask en tiempo de ejecucin, la declaracin
SetProp debiera ser usada, en vez de modificar la propiedad directamente en el cdigo
de VB. El uso de SetProp permite al sistema seguir la pista a los cambios de valores de
las propiedades y as evitar conflictos con las adaptaciones.
El valor de la propiedad Mask puede limitarse en tiempo de ejecucin pero no
ampliarse, dependiendo del nivel al cual los cambios son hechos (todo usuario, un
usuario, etc.). Vea la seccin de Seguridad de la documentacin de Administrador de
Adaptaciones.
La siguiente tabla entrega una lista de los tipos de mscara soportados y su definicin
correspondiente:
Caracter de
Mscara
Descripcin
Numrico (0-9)
Tambin Vea
Declaracin SetProp
34
Propiedad Max
Determina el valor vlido mximo para el control.
Observaciones
Para modificar el valor de la propiedad Max en tiempo de ejecucin, la declaracin
SetProp debiera ser usada, en vez de modificar la propiedad directamente en el cdigo
de VB. El uso de SetProp permite al sistema seguir la pista a los cambios de valores de
las propiedades y as evitar conflictos con las adaptaciones.
El valor de la propiedad Max puede ser adaptada a un valor menor utilizando el
Administrador de Adaptaciones. Sin embargo, la propiedad Max no puede ser
adaptada a un valor mayor. Vea la seccin Seguridad en la documentacin del
Administrador de Adaptaciones.
Tambin Vea
Propiedad Min, declaracin SetProp
Propiedades Solomon
35
Propiedad Min
Determina el valor vlido mnimo para un control.
Observaciones
Para modificar el valor de la propiedad Min en tiempo de ejecucin, la declaracin
SetProp debiera ser usada, en vez de modificar la propiedad directamente en el cdigo
de VB. El uso de SetProp permite al sistema seguir la pista a los cambios de valores de
las propiedades y as evitar conflictos con las adaptaciones.
El valor de la propiedad Min puede ser adaptada a un valor mayor utilizando el
Administrador de Adaptaciones. Sin embargo, la propiedad Min no puede ser adaptada
a un valor menor. Vea la seccin Seguridad en la documentacin del Administrador
de Adaptaciones.
Tambin Vea
Propiedad Max Property, declaracin SetProp
36
Propiedad TabIndex
Determina la secuencia lgica de controles dentro del formulario (form).
Observaciones
Cuando el usuario orpime la tecla Tab, el orden de progreso a travs de los controles es
determinado por el valor de la propiedad TabIndex especificada durante la
construccin del programa. Sin embargo, hay varias excepciones a esta regla general.
En particular, el foco saltar por sobre el control de la siguiente secuencia tab en el
caso de que este control est deshabilitado (disabled) o invisible (invisible). Adems, el
valor de la propiedad TabIndex puede ser modificada utilizando el Administrador de
Adaptaciones. Esto permite que el orden lgico de datos de entrada pueda ser
modificado para circunstancias nicas en una ventana particular.
La propiedad TabIndex es usada tambin por llamadas API referenciando un nmero
determinado de controles tales como: SetDefault, SetProp y DispFields. Este tipo de
llamadas API permiten a la aplicacin especificar el primer y ltimo control sobre el
que la operacin diseada debiera ser realizada. Todos los controles que tengan un
TabIndex entre el TabIndex del primer control y el TabIndex del ltimo control
sern includos en el grupo de los controles objetivo.
Esta propiedad puede ser modificada en tiempo de diseo solamente, no puede ser
modificada en tiempo de ejecucin.
Tambin Vea
Declaracin DispField, declaracin SetDefaults, declaracin SetProp
Propiedades Solomon
37
Propiedad Visible
Detrmina si el control es visible o no.
Observaciones
Un valor verdadero (True) de esta propiedad hace que el control est visible, mientras
que el valor falso (False) hace que el control est invisible.
Campos requeridos o necesarios no debieran hacerse invisibles, a menos que sean
reseteados a un valor vlido en forma automtica.
Para modificar el valor de la propiedad Visible en tiempo de ejecucin, la declaracin
SetProp debiera ser usada, en vez de modificar la propiedad directamente en el cdigo
de VB. El uso de SetProp permite al sistema seguir la pista a los cambios de valores de
las propiedades y as evitar conflictos con las adaptaciones.
Si un control es puesto invisible por la aplicacin, entonces no puede ser puesto visible
utilizando el Administrador de Adaptaciones. Sin embargo, si un control es puesto
visible por la aplicacin, puede ser puesto invisible por el Administrador de
Adaptaciones.
La siguiente advertencia menciona cmo la propiedad Visible se relaciona con el
control SAFGrid. En tiempo de ejecucin, Solomon fuerza a la grilla (grid) a ser
visible durante la carga inicial. No fije esta propiedad en tiempo de diseo para el
control SAFGrid. De la misma forma, no llame SetProp() en un control de visin de
formulario (form-view control), porque esto revela un intento de modificar la
propiedad Visible en forma de fila a fila, lo cual no es soportado.
La unica modificacin en tiempo de ejecucin apropiada que se puede realizar a la
visibilidad de un componente de grilla es hacer visible o hacer desaparecer una
columna entera, basado en una regla manejada mediante datos. Por ejemplo, suponga
que la Aplicacin A tenga una grilla con 10 campos. Supongamos adems, que los
campos 7, 8, 9 y 10 no pueden ser visibles antes de que el Mdulo XYZ haya sido
instalado y configurado. Esto significara que la Aplicacin A necesita esconder o
hacer invisibles los campos 7, 8, 9 y 10. Dado que estos campos estn asociados con un
SAFGrid, quisiramos esconder las columnas de la grilla que corresponden a los
campos 7, 8, 9 y 10. Esta operacin puede llevarse a cabo durante Form_Load
llamando MsetProp() para cada uno de los campos a ser ocultados cada vez
especificando un valor falso (False) para la propiedad Visible. Note que en el escenario
MSetProp(), esta llamada debe hacerse antes de que SAFGrid reciba foco (tal como al
cargar la ventana o en un evento Chk en un nivel de encabezado). No realice llamadas
a MsetProp() desde eventos SAFGrid, tales como LineGotFocus().
Para ocultar un SAFGrid, fije la propiedad Visible del formulario (form) subyacente
en falso (False).
Tambin Vea
Propiedad BlankErr, propiedad Enable, declaracin MSetProp, declaracin SetProp
38
39
Button clicks
Antes
Field default
Despus
Field chk
Despus
Field PV
Grid linegotfocus
Despus
Grid linechk
Despus
Form Load
Form Display
Form Hide
Finish
Despus
Insert
Cancel
Despus
Update
Delete
40
Sintaxis
Sub object_Chk ([Index],ChkStrg, retval)
Observaciones
Cunado el usuario modifica el valor de un campo, generalmente el nuevo valor necesita
ser validado (por ejemplo chequeo de errores). Si el nuevo valor es vlido, entonces la
aplicacin podra realizar otras operaciones relacionadas, tales como resetear o
deshabilitar otros campos. En el evento Chk se coloca normalmente este tipo de
cdigo, dado que este evento es llamado cada vez que un valor es modificado en un
campo.
El evento Chk puede gatillarse tambin en otro memento, cuando el usuario no est
modificando directamente el valor de un control. Por ejemplo, navegar sobre registros
existentes en un nivel normal utilizando los botones de la barra de herramientas First,
Last, Prev y Next e ingresar nuevos valores claves a los campos para visualizar
diferentes registros es conceptualmente equivalente para el usuario. Como
consecuencia de esto, al navegar sobre registros existentes en un nivel normal, el
evento Chk es gatillado cada vez que el usuario navega de un registro al siguiente
independientemente de cmo la operacin de navegacin haya sido invocada (por
ejemplo introduciendo datos o usando la barra de herramientas). El evento Chk
tambin puede gatillarse en relacin a la propiedad Trigger. Por ejemplo, utilizando la
propiedad Trigger, se puede definir una relacin entre CampoA y CampoB, de tal
forma que el CampoB deba ser revalidado (por ejemplo, su evento Chk deba ser
llamado) cada vez que el valor del CampoA se modifique.
El evento Chk utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Index
Integer
ChkStng
string
Integer
41
La siguiente tabla describe los valores posibles que pueden ser asignados a RetVal y su
efecto correspondiente en el sistema una vez que el programa control realice un exit al
evento Chk:
RetVal
Descripcin
NoAutoChk
A Message Number
ErrNoMess
Ejemplo 1
El siguiente ejemplo muestra el evento Chk, en un control de campo no clave, en el
cual un registro correspondiente al valor de ChkStrg debe ser buscado desde la base de
datos para el uso de la aplicacin. Si el registro no puede ser encontrado, entonces se
considerar un error.
42
Ejemplo 2
Sub cFieldA_Chk(chkstrg$, retval%)
' Verify this is what we wanted.
If Trim$( chkstrg$) = "BADVALUE" Then
Retval% = 8033 ' return message number 8033: Invalid data.
Value
End If
End Sub
43
Sintaxis
Sub object_Click ([Index])
Observaciones
Use este evento para gatillar acciones como respuesta cuando un botn sea presionado.
El evento Click utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Index
Integer
Ejemplo
Sub Button1_Click()
'Display new subform
Call DispForm("Form2",True)
End Sub
44
Sintaxis
Sub object_Default ([Index], OldValue, retval)
Observaciones
El valor por defecto para cualquier control de dato de entrada particular puede ser
especificado mediante la propiedad Dafault o el evento Default. La propiedad Default
puede ser usada cuando el valor por defecto no es accidental por sobre todo otro item
de datos. Sin embargo, si la metodologa para determinar los valores por defecto varan
segn situaciones particulares, entonces el cdigo debe estar escrito para el evento
Default. Si se ha definido una propiedad Default, entonces el evento Default no ser
utilizado.
Dentro del evento Default, el referenciar directamente a la variable VB en la cual el
control est ligado fija el valor por defecto del campo relevante. Por ejemplo, si el
control est ligado al campo de cadena de caracteres bTableA.FieldA dentro de la
propiedad FieldName, entonces dentro del evento Default el valor del campo puede ser
predefinido de una forma tal que bTableA.FieldA = StringValue. El valor del dato
por defecto para un grupo de botones SAFOption es siempre derivado desde el primer
botn de opcin del grupo, dado que por definicin slo un botn de opcin puede ser
seleccionado dentro de un grupo particular.
El evento Default utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Index
Integer
OldValue
String
retval
integer
Ejemplo
Si un control (cFieldA) es ligado a un campo de cadena de caracteres llamado
bTableA.FieldA dentro de su propiedad FieldName, entonces dentro del evento
Default el valor del campo puede ser puesto por defecto de la forma tal que
bTableA.FieldA = StringValue.
Sub cFieldA_Default(newvalue$, retval%)
'Default this field to 'String Value'
Call SetBufferValue("bTableA.FieldA", "StringValue")
End Sub
45
46
Sintaxis
Sub object_OnDelete (Level, InsertFlg, LevelsDone, LevelsLeft, RetVal)
Observaciones
Para comprender cuando ocurre un evento OnDelete, el desarrollador necesita
comprender el concepto de alto nivel de lo que es una operacin DELETE. La
operacin es diferente del evento en el hecho de que el evento OnDelete compromete
slo una parte de una serie de eventos implicados en la operacin DELETE.
Una operacin DELETE es iniciada cuando el usuario hace un click sobre el botn
Delete en la barra de tareas Solomon. La nica excepcin es cuando el usuario borra
una lnea de detalle (detail line) desde una grilla Solomon, en cuyo caso el evento
LineChk es llamado.
Una operacin DELETE abarca la siguiente serie de acciones y/o eventos. Si la
aplicacin contiene ms de un nivel normal (Normal level) entonces el usuario ser
consultado acerca de cul de los registros niveles normal est siendo borrado. El
proceso comenzar con los niveles el usuario seleccione y contina para cada nivel
non-Lookup en orden desde LEVEL0 hasta LEVELn.
El evento OnDelete es llamado para cada nivel. Si este es el primer nivel a ser
procesado, entonces una transaccin de base de datos an no ha sido iniciada.
Como consecuencia de esto, la aplicacin debe llamar TranBeg si es que necesita
realizar operaciones de actualizacin/borrado de la base de datos durante la
primera pasada del evento OnDelete.
Si la aplicacin no ha modificado el valor de RetVal en el paso anterior, entonces
la tabla maestra para el nivel ha sido borrada. La tabla maestra para cada nivel
particular es la tabla identificada por el llamado de VBA_SetAddr para ese nivel
particular.
Una vez que todos los niveles que hayan sido modificados previamente hayan sido
actualizados satisfactoriamente, se termina la transaccin de la base de datos y una
operacin NEW es iniciada automaticamente para preparar la aplicacin para entrada
de datos.
Si ocurren errores durante la operacin DELETE en cualquier nivel, entonces la
completa operacin es abortada- incluyendo la transaccin de la base de datos.
Tipo
Descripcin
Level
Integer
LevelsDone
Integer
Retval
Integer
47
48
Sintaxis
Sub object_PV ([Index], FieldValue, Action)
Observaciones
El flujo de evento PV va a procesar el nivel macro ms alto (self, 500) seguida por
cada nivel de macro inferior hasta que el parmetro de accin haya sido fijado a algo
diferente del valor por defecto (no hay accin). Si todas las llamadas a macros han sido
hechas y la accin por defecto an est fijada, entonces el dilogo de aplicacin
subyacente de la aplicacin PV ser llamada (si es que existe).
Si el evento PV regresa un valor diferente a los valores aceptados se desplegar un
mensaje de error y el evento ser tratado como un valor sin accin.
El evento PV es unicamente para fijar el valor del campo. No revisa el campo para
validacin. Esto va a ocurrir ms tarde en el evento de revisin (check) del campo
(para cada nivel correspondiente). Este evento pretende permitir el desarrollo de
dilogos de preguntas.
El evento PV utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Index
Integer
FieldValue
string
Action
integer
Descripcin
Accept
Cancel
No Action
Example
Global PVAction As Integer
Sub cFieldA_PV(fieldstrg$, action%)
Dim Result As String
' Setup Choices in sub-form combo box for user to choose PV.
Call SetProp( "cPvListCombo", "List", "A;Asset Account,E;Expense
Account,L;Liability Account")
PVAction = Cancel
'Display the PV form.
Call DispForm( "Form2", True)
' If the OK button was pressed on the sub-form then PVAction was
set to Accept
If PVAction = Accept Then
Result = GetObjectValue( "cPVListCombo")
If Trim(Result) = "A" Then
' Default Asset Account used.
Fieldstrg$ = "1030"
ElseIf Trim(Result) = "E" Then
'Default Expense Account
Fieldstrg$ = "7200"
Else
'Default Liability Account
Fieldstrg$ = "2070"
End If
End If
action = PVAction
End Sub
49
50
Sintaxis
Sub object_OnUpdate (Level, InsertFlg, LevelsDone, LevelsLeft, RetVal)
Observaciones
Para comprender cuando ocurre el evento OnUpdate, un desarrollador necesita
comprender primero el concepto de ms alto nivel de lo que es una operacin SAVE.
La operacin se diferencia del evento en el hecho de que el evento OnUpdate
compromete slo un segmento de una serie de eventos implicados en la operacin
SAVE.
Cualquera de los siguientes acontecimientos inicia la operacin SAVE:
Cuando el usuario hace un click sobre el botn Save de la barra de herramientas de
Solomon.
Cuando el usuario hace un click sobre el botn Finish de la barra de herramientas
de Solomon.
Cuando el usuario responde afirmativamente (Yes) a la pregunta Do you want
to save your outstanding changes?. Esta pregunta ocurre cada vez que el usuario
ha modificado datos e intenta introducir un nuevo item, navegar a un diferente
item o cerrar la ventana sin salvar los cambios.
Una operacin SAVE est compuesta por la siguiente serie de acciones y/o eventos por
cada nivel que haya sido modificado en el orden desde LEVEL0 a LEVELn. Por
ejemplo, si la unica informacin que ha sido modificada recide en LEVEL0, entonces
slo el LEVEL0 va a ser procesado durante la operacin SAVE. Una transaccin de la
base de datos comienza antes de cualquier proceso de niveles.
El evento OnUpdate es llamado para el nivel.
Nota: TranEnd no debe llamarse jams por la aplicacin dentro del evento OnUpdate,
dado que el sistema quedara inhabilitado de volver marcha atrs la completa operacin
SAVE!
Si la aplicacin no ha modificado el valor de RetVal en el paso anterior, entonces
la tabla maestra (master table) para el nivel ser actualizada. La tabla maestra para
cada nivel particular es la tabla identificada por la llamada a VBA_SetAddr para
este nivel particular.
Una vez que todos los niveles que hayan sido modificados hayan sido actualizados
satisfactoriamente, la transaccin de la base de datos termina. El evento OnUpdate es
llamado entonces una vez mas. El parmetro de nivel va a tener un valor
correspondiente a la constante simblica de fin (Finished symbolic constant), definida
en el mdulo VBTools_VBA. En este momento, el status de nivel para todos los
niveles debiera tener el valor de NOTCHANGED. Adems, el status de lnea para
cada detalle de lnea (detail line) dentro de cada grilla debe tambin tener el valor de
NOTCHANGED.
51
52
Tipo
Descripcin
Level
Integer
InsertFlg
Integer
LevelsDone
Integer
LevelsLeft
Integer
retval
Integer
Ejemplo
Global GridHandle%
Sub OnUpdate(level%, insertflg%, retval%)
Dim MaintFlag%
If Level = 0 Then
' Call is made so that if any changes are made that would
affect grid currency,
' the MsetRowNum function will reset it.
If serr1 = 0 Then
Row = mgetrownum(GridHandle%)
End If
' Move to top of array
err1 = mfirst(GridHandle%, MaintFlag%)
While serr1 = 0
serr2 = sqlfetch1(c1, "XnewTable.Key" +
sparm(GetObjectValue("ckey")), _
bXNewTable, Len(bXNewTable))
Select Case MaintFlag%
Case Updated 'Existing line is updated
Call supdate1(c1, "XNewTable", bXNewTable,
Len(bXNewTable))
Case Inserted 'Existing line is new inserted one.
Call sinsert1(c1, "XNewTable", bXNewTable,
Len(bXNewTable))
Case Deleted 'Existing line was deleted.
Call sdelete1(c1, "XNewTable")
End Select
err1 = mnext(GridHandle%, MaintFlag%)
Wend
' reset memory array currency, then re-display grid
Call MsetRowNum(GridHandle%, Row)
Call Mdisplay(GridHandle%)
End If
End Sub
53
54
Sintaxis
Sub object_Display ()
Observaciones
Este evento ocurre despus de que un formulario de ventana de aplicacin es
desplegado (dibujado en la pantalla).
Nota: cuando usted crea procedimientos para eventos relacionados, tales como
Activate, GotFocus, Paint y Resize, debe estar seguro de que sus acciones no tengan
conflicto y que no causen eventos recursivos.
Ejemplo
Global GridHandle%
Sub Form1_Display()
' Extend the current grid with the new table.
GridHandle = GetGridHandle("Spread1")
serr1 = VBA_MExtend(GridHandle, bXNewTable, Len(bXNewTable))
Call DisplayGrid
End Sub
55
Sintaxis
Sub object_Hide ()
Observaciones
Este evento ocurre luego de que un formulario de ventana de aplicacin es ocultado (ya
no est visible).
Nota: cuando usted crea procedimientos para eventos relacionados, tales como
Activate, GotFocus, Paint y Resize, debe estar seguro de que sus acciones no tengan
conflicto y que no causen eventos recursivos.
56
Sintaxis
Sub object_Load ()
Observaciones
Este evento ocurre para todos los formulario de una aplicacin mientas la ventana se
est cargando.
Nota: cuando usted crea procedimientos para eventos relacionados, tales como
Activate, GotFocus, Paint y Resize, debe estar seguro de que sus acciones no tengan
conflicto y que no causen eventos recursivos.
Example
Sub Form1_Load()
' Allocate buffer and cursor for custom table containing additional
fields.
Call SetAddr("bxNewTable", bxNewTable, nxNewTable, Len(bxNewTable))
Call SQLCursor(c1, NOLEVEL + SQLUpdate)
End Sub
57
Sintaxis
Sub object_ LineChk (Action, RecMaintFlg, RetVal)
Observaciones
Cada vez que el usuario inserta, actualiza o borra una lnea de detalle dentro de un
control SAFGrid, se gatilla el evento LineChk. En los casos de insercin y
actualizacin, el evento no se ejecuta hasta que el usuario no abandona la lnea de
detalle.
Este evento es utilizado frecuentemente para realizar lgicas de borrado especial para
las lneas de detalle (detail line) que el usuario quiera borrar. Por ejemplo, la pantalla
de mantencin del General Ledger Chart of Accounts contiene una grilla que muestra
todos los registros de la tabla Accounts. El usuario puede borrar registros Account
facilitando que el nmero de cuenta correspondiente no sea usado en nunguna ventana
de determinacin de la configuracin del software dentro de otras reas. Esto es
implementado usando la lgica dentro del evento LineChk.
Registros borrados son copiados de la memoria de arreglo subyacente a un arreglo de
memoria temporal deleted record. El manejo de recursos de este arreglo de memoria
puede ser obtenido usando la funcin MGetDelHandle.
El evento LineChk usitiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Action
integer
RecMaintFlg
integer
RetVal
integer
Descripcin
INSERTED
UPDATED
DELETED
ABANDONED
Una lnea de detalle (detail line) existente nunca fue creada y est
siendo abortada.
58
Descripcin
NEWROW
Indica que el usuario est comenzando una insercin de una nueva lnea
de detalle (detail line). El estado de la lnea de detalle ser modificado a
INSERTED, luego de que todos los campos hayan sido chequeados de
errores y ningn error ocurra durante el evento LineChk.
INSERTED
UPDATED
NOTCHANGED
Ejemplo
Sub Spread1_LineChk(action%, maintflg%, retval%)
Dim FieldValue As String * 20
Dim Dvalue As Double
If action% = INSERTED Or action% = UPDATED Then
Call GetBufferValue("bTableA.FieldA",FieldValue)
Dvalue = GetObjectValue("cqty")
If Trim$(FieldValue) = "" And Dvalue > 0.0 Then
retval = 2 ' Must set the Field Value if a Quantity
exist.
Call ApplSetfocus("cqty")
End If
End If
End Sub
59
Sintaxis
Sub object_ LineGotFocus (RecMaintFlg, RetVal)
Observaciones
Cada vez que el usuario mueve o inserta una lnea de detalle dentro de un control de
grilla de Solomon, el evento LineGotFocus es llamado inmediatamente.
El parmetro RecMaintFlg puede ser evaluado posteriormente para determinar si el
usuario est agregando una nueva lnea de detalle (detail line) o no. En este caso,
valores por defecto pueden ser explcitamente asignados a los campos dentro del
registro de detalle (detail record), para el cual no existe un control correspondiente. Por
ejemplo, asuma que TableA es una tabla de cabecera y TableB es un registro de detalle
(detail record). En este caso, cada registro de TableA podra tener muchos registros
TableB desplegados dentro de SAFGrid. Sin embargo, lo importante es que el primer
segmento clave para TableB debiera inclur un campo que se relacione directamente a
TableA (por ejemplo el campo de conexin (join field)). Este tipo de campo es el
candidato ideal para colocarse por defecto en el evento LineGotFocus, dado que tendr
siempre el mismo valor (por ejemplo el valor de TableA.KeyField), y por lo tanto
creando un control invisible cuya propiedad Default no sea realmente necesaria.
El evento LineGotFocus utiliza los siguientes atgumentos:
Argumento
Tipo
Descripcin
RecMaintFlg
Integer
RetVal
Integer
60
Descripcin
NEWROW
INSERTED
UPDATED
NOTCHANGED
Ejemplo 1
El siguiente ejemplo fue tomado de la ventana del mdulo de planilla Earnings Type
Maintenance (02.270.00). Esta ventana es del tipo header/detail teniendo la tabla
EarnType como la tabla de cabecera y dos registros de detalle (detail records) en la
grilla a saber ValEarnDed y Deduction. La tabla maestra es ValEarnDed para el nivel
de detalle (detail level) y la tabla Deduction se adjunta slo para fines descriptivos. En
todo caso, note que que el resto de NEWROW y el correspondiente trabajo ha sido
realizado solamente para las lneas de detalle (detail lines).
Sub Spread_ValEarnDed_LineGotFocus (maintflg%, retval%)
If (maintflg = NEWROW) Then
'Null out secondary records on the detail line
bDeduction = nDeduction
'Initialize the master detail record with the key field
ID from the
'header record
bValEarnDed.EarnTypeId = bEarnType.Id
End If
End Sub
Ejemplo 2
Sub Spread1_LineGotFocus(action%, maintflg%, retval%)
If maintflg% = NEWROW Then
' Default current line field.
Dim FieldValue As String * 20
Call GetBufferValue("bTableA.FieldA",FieldValue)
Call SetBufferValue("bTableB.FieldA", FieldValue)
End If
End Sub
61
Sintaxis
Sub object_ OnCancel (Level, RetVal)
Observaciones
Cuando el usuario hace un click sobre el botn Cancel en la barra de tareas de
Solomon, el evento OnCancel es llamado una vez por cada nivel en orden desde
LEVEL0 hasta LEVELn.
Este evento es utilizado normalmente en aplicaciones de un solo nivel constante
(Single Constant Level), tal como las ventanas de la determinacin de la configuracin
de software (setup). Este tipo de aplicaciones no tienen campos claves que puedan ser
re-ejecutados, como para retomar la informacin de despliegue. Como consecuencia, el
evento OnCancel entrega a la aplicacin una oportunidad para retomar el registro del
nivel constante (Constant level), por ejemplo el registro setup.
El evento OnCancel utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Level
integer
retval
integer
Ejemplo 1
El siguiente recorte de cdigo fue tomado de la ventana Payroll Employee
Maintenance.
Sub OnCancel (level%, retval%)
Dim PRSetup_Fetch As Integer
'Initialize bPRSetup
PRSetup_Fetch = SqlFetch1(CSR_PRSetup, "PRSetup_All", bPRSetup,
LenB(bPRSetup))
If (PRSetup_Fetch = 0) Then
'Display fields from existing PRSetup record
Call DispFields(PNULL, PNULL, PNULL)
Else
'Default all controls for insert mode
Call SetDefaults(PNULL, PNULL, PNULL)
End If
62
Ejemplo 2
Global GridHandle%
Sub OnCancel(level%, retval%)
' Null out the New Description Column and re-display it since it
will be reloaded
Call Mset("cdescr1", nXTablet.Descr)
Call Mdisplay(GridHandle)
' Change to not changed since NULLing out changes status
Call SetLevelChg(Level0, NOTCHANGED)
' Reload the grid
Call DisplayGrid
End Sub
63
Sintaxis
Sub object_ OnFinish (Level, Updated, RetVal)
Observaciones
El evento OnFinish es llamado cuando el usuario ha terminado con la informacin
desplegada actualmente, para permitir a la aplicacin una oportunidad para realizar
operaciones especficas relacionadas con los datos antes de que abandone la ventana
del usuario. Por ejemplo, considere que el usuario acaba de introducir alguna clase de
informacin financiera y ahora simplemente va a cerrar la aplicacin dado que ha
completado su tarea inicial. En ese instante la aplicacin podra advertir al usuario que
la informaicin se encuentra inestable, y preguntarle si quiere o no remediar el
problema. Sin tal advertencia, el usuario no notar el error hasta que posteriormente su
accin cause algn otro problema.
Se considera que el usuario ha terminado con la informacin desplegada actualmente
cuando realiza cualquiera de las siguientes operaciones:
Cuando el usuario hace un click sobre el botn Finish de la barra de tareas de
Solomon. En este caso, el evento OnFinish es gatillado despus de que se gatilla el
evento OnUpdate cuando la operacin save es incluso necesaria (por ejemplo
cuando alguna infoamcin se modifica).
Cuando el usuario intenta ingresar un nuevo item, navegar a un item diferente o
cerrar la ventana. Si la informacin ha sido modificada, el usuario ser interrogado
por si quiere o no salvar las modificaciones sealadas. Si el usuario indica que no,
la ventana ser refrescada con la informacin existente en la base de datos, de
forma que la informacin correcta est disponible en el momento de que el evento
OnFinish sea llamado.
El evento OnFinish es llamado una vez por cada nivel en orden desde el LEVELn al
LEVEL0. Note que este evento es llamado en orden inverso si se compara con los
eventos NewLevel, OnUpdate, OnDelete y OnCancel. Este orden inverso permite a la
aplicacin reportar problemas primero con los datos en su nivel ms granular.
La aplicacin puede abortar el evento OnFinish modificando el parmetro RetVal. En
este caso la accin del usuario es tambin abortada. Por ejemplo, asuma que el usuario
tiene RecordA en la pantalla y luego hace un click en el botn Next de la barra de
herramientas de Solomon. Claramente esto indica que el usuario ha terminado de ver el
registro RecordA y ahora quiere ver el registro siguiente presumiblemente RecordB.
Como consecuencia, el evento OnFinish es llamado junsto antes de navegar al
RecordB. Si la aplicacin fija RetVal, digamos a un nmero de mensaje Solomon,
entonces el mensaje correspondiente ser desplegado cuando el evento OnFinish para
el nivel actual termine, y la operacin de vavegacin ser abortada. Dado que la
operacin de navegacin fue abortada, el usuario ser an capaz de ver el RecordA.
64
Tipo
Descripcin
Level
Integer
Updated
Integer
No utilizado actualmente.
retval
Integer
65
Sintaxis
Sub object_ OnInsert (Level, RetVal)
Observaciones
Para comprender cuando ocurre el evento OnInsert, el desarrollador debe comprender
primero un concepto de alto nivel acerca de lo que se refiere bajo una operacin Insert.
La operacin se diferencia del evento en el hecho de que el evento OnInsert
compromete slo un segmento de una serie de eventos implicados en la operacin
Insert.
Cualquiera de los siguientes acontecimientos inicia una operacin Insert:
Cuando ScreenInit es llamado desde Form1_Load.
Cuando el usuario hace un click sobre el botn New de la barra de herramientas de
Solomon.
Cuando el usuario hace un click sobre el botn Finish de la barra de herramientas
de Solomon. En este caso, el evento OnInsert se gatilla despus de que los eventos
OnUpdate y OnFinish se hayan completado satisfactoriamente.
Cuando el usuario hace un click sobre el botn Delete de la barra de herramientas
de Solomon. Luego de que el registro haya sido borrado satisfactoriamente en el
evento OnDelete, la aplicacin se prepara a s misma para recibir nueva
informacin iniciando automaticamente una operacin Insert.
Cuando el usuario nevega previamente al primer registro o finalmente al ltimo
registro en una tabla usando los botones Prev o Next de la barra de herramientas
de Solomon.
Cuando el usuario ingresa un valor que no existe en la base de datos para uno o
ms campos claves (key fields). Por ejemplo si una aplicacin contiene tres
campos claves, entonces una operacin Insert ser iniciada si la combinacin de
los valores de los tres campos claves no existen en la base de datos.
Una operacin Insert compromete la siguiente serie de acciones y/o eventos por cada
nivel no detallado (non-detail level) comenzando por el nivel en el cual la nueva
operacin fue iniciada. Por ejemplo, si la operacin Insert se inici en LEVEL0, los
niveles sern procesados en orden desde LEVEL0 a LEVELn.
La tabla maestra (master table) para el nivel ha sido borrada. La tabla maestra para
cada nivel particular es la tabla identificada por el llamado a VBA_SetAddr para
ese nivel particular.
El evento OnInsert es llamado por el nivel
Todos los controles del nivel son fijados por defecto.
Dado que el colocar los nuevos registros de detalle de nivel (detail level records)
dentro del control de grilla de Solomon a sus valores iniciales, es realizado dentro del
evento LineGotFocus, el evento OnInsert no es llamado para los niveles de detalle.
66
Tipo
Descripcin
Level
integer
retval
integer
Ejemplo
El siguiente extracto de cdigo fue tomado de la ventana Payroll Employee
Maintenance.
Sub OnInsert (level%, retval%)
If (level = LEVEL0) Then
'Force ALL default values to be applied to EMPLOYEE level
BEFORE
'Evaluate_Properties() is called.
Call Level_SetDefaults(PNULL, PNULL, PNULL, LEVEL0)
bEmployee.CalQtr = bPRSetup.CurrCalQtr
bEmployee.CalYr = bPRSetup.CurrCalYr
'Re-evaluate the properties of all controls whose
property settings
'depend upon data values.
Call Evaluate_Properties(FLD_ALL)
'Set retval to keep Swim from defaulting LEVEL0 controls
again.
RetVal = NoAction
End If
End Sub
67
Accin
Declaracin AliasConstant
Funcin ApplGetParms
Funcin ApplGetParmValue
Declaracin ApplSetFocus
Declaracin ApplSetParm
Funcin CallChks
Funcin DateCheck
Funcin DateCmp
Funcin DateMinusDate
Declaracin DatePlusDays
Declaracin
DatePlusMonthSetDay
Funcin DateToIntlStr
Funcin DateToStr
Funcin DateToStrSep
Funciones DBNavFetch
Declaracin DispFields
Declaracin DispForm
Funcin DParm
Declaracin Edit_Cancel
Declaracin Edit_Close
Funcin Edit_Delete
68
Funcin/Declaracin
Funcin Edit_Finish
Accin
Ejecuta el botn Finish de la barra de herramientas.
Funcin Edit_First
Funcin Edit_Last
Funcin Edit_New
Funcin Edit_Next
Funcin Edit_Prev
Declaracin Edit_Save
Funcin FPAdd
Funcin FParm
Funcin FPDiv
Funcin FPMult
Funcin FPRnd
Funcin FPSub
Declaracin GetBufferValue
Funcin GetDelGridHandle
Funcin GetGridHandle
GetObjectValue
Funcin GetProp
Funcin GetSqlType
Declaracin GetSysDate
Declaracin GetSysTime
Declaracin HideForm
Declaracin IncrStrg
Declaracin IntlStrToDate
Funcin IParm
Funcin Is_TI
Funcin Launch
Funcin MCallchks
69
Funcin/Declaracin
Accin
Funcin MCallchks
Declaracin MClear
Declaracin MClose
Funcin MDelete
Declaracin MDisplay
Declaracin Mess
Declaracin Messbox
Declaracin Messf
Funcin MessResponse
Funcin MFindControlName
Funcin MFirst
Funcin MGetLineStatus
Funcin MGetRowNum
Declaracin MInsert
Declaracin MKey
Funcin MKeyFind
Declaracin MKeyFld
Declaracin MKeyOffset
Funcin MLast
Declaracin MLoad
Funcin MNext
70
Funcin/Declaracin
Funcin MPrev
Accin
Mueve al registro anterior en un arreglo de memoria
designado.
Funcin MRowCnt
Declaracin MSet
Funcin MSetLineStatus
Declaracin MSetProp
Declaracin MSetRowNum
Declaracin Msort
Declaracin MUpdate
Funcin NameAltDisplay
Funcin PasteTemplate
Funcin PeriodCheck
Funcin PeriodMinusPeriod
Funcin PeriodPlusPerNum
Funciones PVChkFetch
Declaracin SaveTemplate
Funcin Sdelete
Funcin SdeleteAll
Declaracin SetBufferValue
Funcin SetDefaults
Declaracin SetLevelChg
Funcin SetObjectValue
Declaracin SetProp
Declaracin SetStatusBarText
Funciones SFetch
Funcin/Declaracin
Funcin SGroupFetch
Accin
Captura el grupo del siguiente valor agregado para
deplegarlo.
Declaracin SInsert
Funcin Sparm
Declaracin Sql
Declaracin SqlCursor
SqlCursorEx
Funcin SqlErr
Declaracin SqlErrException
Declaracin SqlExec
Funciones SqlFetch
Declaracin SqlFree
Libera un cursor.
Declaracin SqlSubst
Declaracin StrToDate
Declaracin StrToTime
Declaracin SUpdate
Funcin TestLevelChg
Funcin TimeToStr
Declaracin TranAbort
Declaracin TranBeg
Declaracin TranEnd
Funcin TranStatus
Funcin VBA_MExtend
Funciones VBA_MOpen
Declaracin VBA_SetAddr
71
72
Nota: en las siguientes secciones algunos ejemplos de cdigo pueden exceder una lnea. En ese caso, el smbolo
indica un carcter de continuidad de lnea. La lnea completa debe estar en una sola lnea en la ventana de
cdigo de eventos (event code window).
73
Declaracin AliasConstant
Use esta funcin para apodar ciertas constantes Solomon utilizadas especificamente en
Transaction Import. Esto puede ser de ayuda si usted est usando un idioma diferente
(las palabras de ingls Comment, Insert y Change podran ser reemplazadas por las
palabras alternativas de otro idioma). Los valores posibles son mostrados a
continuacin.
Sintaxis
Call AliasConstant(Constant, Alias )
Observaciones
Constantes que puedan ser redefinidas utilizando la funcin AliasConstant incluyen:
Comment
Insert
Delete
Change
Processed
Separator
Delimiter
LevelN (where N is 0 to 9)
Checked
Unchecked
Press
Ejemplo
Call AliasConstant("Change", "Update")
Call AliasConstant("Delimiter", ";")
Call AliasConstant("Separator", "!")
Call AliasConstant("Level0", "Batch")
Call AliasConstant("Level1", "Detail")
74
Funcin ApplGetParms
Recupera un parmetro entregado por otra aplicacin de Solomon Tools for Visual
Basic.
Sintaxis
ParmValue = ApplGetParms()
Observaciones
La declaracin ApplGetParms puede ser usada para recuperar parmetros, los cuales
hayan sido entregados originalmente por otra aplicacin de herraminetas de Solomon
para Visual Basic (Solomon Tools for Visual Basic) utilizando la funcin Launch. Se
pueden recuperar mltiples parmetros realizando llamadas sucesivas a
ApplGetParams.
Si la aplicacin que es llamada entrega los parmetros va secciones de nombres de
parmetros (named parameter sections), utilizando la declaracin
ApplSetParamValue en conjunto con la funcin Launch, entonces ApplGetParams
slo ser capaz de recuperar parmetros de la seccin por defecto de Solomon (default
Solomon section). Usando la funcin ApplGetParamValue es la nica forma por la
cual la aplicacin llamada puede recuperar los parmetros de cualquier seccin de
parmetros diferente a la seccin por defecto de Solomon (default Solomon section).
La funcin ApplGetParms utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
ParmValue
String
Ejemplo
Following code for 03.270.00 (the launched application):
Sub Form1_Load
' Variable to store the passed Parameter to this screen
' Under RDT scenario, this code would be in Form_Load.
Dim VendorParm$
VendorParm = ApplGetParms()
If Trim$(VendorParm) <> "" Then
' Screen was called from another application.
' Set the value of the ID field to what was
' passed in by Launch() function
serr1 = SetObjectValue("cvendid", VendorParm)
End If
End Sub
Tambin Vea
Funcin ApplGetParmValue, declaracin ApplSetParmValue, funcin Launch
75
Funcin ApplGetParmValue
Recupera un parmetro entregado por otra aplicacin de Solomon Tools for Visual
Basic.
Sintaxis
ParmValue = ApplGetParmValue(ParmSection, ParmName)
Observaciones
Parmetros entregados a una aplicacin Solomon Tools for Visual Basic puede ser
recuperado mediante dos diferentes mtodos: ApplGetParms y ApplGetParmValue.
Estas funciones se diferencian en que ApplGetParams no soporta mltiples secciones
de parmetros, mientras que ApplGetParamValue soporta esta funcionalidad ms
sofisticada. Como consecuencia, el usar ApplGetParamValue es la nica forma en
que la aplicacin que llama pueda recuperar parmetros de cualquier seccin diferente
a la seccin por defecto de Solomon. Por ejemplo, si la aplicacin que realiza la
llamada enva un parmetro diseado especificamente para VBA, slo la funcin
ApplGetParmValue puede ser usada para recuperar ese parmetro particular, dado
que la seccin de nombre de VBA puede ser requerida explicitamente a a travs del
argumento ParmSection.
Secciones de nombres de parmetros facilitan la eliminacin de conflictos, los cuales
pueden ocurrir en el programa de destino cuando la aplicacin misma, como tambin el
cdigo de VBA adaptado y agregado mediante el Administrador de Adaptaciones
(Customization Manager) estn ambos tratando de recibir parmetros diferentes. Por
ejemplo, la ventana del mdulo de Solomon Document Maintenance (03.250.00),
puede recibir dos parmetros opcionales que facilitan la funcionalidad de cambiar
rapidamente entre las ventanas: Reference Number y Vendor ID. El evento Form_Load
siempre llama una vez a ApplGetParams para determinar si algn parmetro ha sido
pasado a la aplicacin. Si existe un parmetro se asume que es el Reference Number y
por lo tanto la aplicacin llama nuevamente a ApplGetParams contando con que el
siguiente parmetro sea Vendor ID. Si llamadas adicionales a ApplGetParams usando
cdigo VBA adaptan esta ventana posteriormente, ocurrir un conflicto operacional.
Si una aplicacin tal fuera ser llamada mediante un solo parmetro, diseado para ser
recibido mediante el cdigo adaptado VBA, sera recibido encambio por la llamada
ApplGetParms realizada por la aplicacin subyacente. Por consiguiente, la llamada a
ApplGetParms en cdigo VBA no retornar ningn valor de parmetro.
76
Tipo
Descripcin
ParmValue
String
ParmSection
String
ParmName
String
77
Ejemplo
El siguiente ejemplo ilustra como pasar parmetros hacia una aplicacin de
herramientas Solomon para Visual Basic (Solomon Tools for Visual Basic) y cdigo
VBA adaptado al mismo tiempo y evitando conflictos entre ambos.
Cdigo en la aplicacin que realiza la llamada:
Call ApplSetParmValue(PRMSECTION_VBRDT, "Batch Nbr", "000001")
Call ApplSetParmValue(PRMSECTION_VBRDT, "Document Nbr", "123456")
Call ApplSetParmValue(PRMSECTION_BSL, "Example Parm", "Example
Parameter To VBA or BSL Code")
'Call another Solomon application
Launch( "SOLOMONAPP", "")
As String
Dim Parm_DocumentNbr
As String
Tambin Vea
Funcin ApplGetParms, declaracin ApplSetParmValue, funcin Launch
78
Funcin ApplGetReturnParms
Recibe un parmetro retornado desde una aplicacin secundaria que finaliz ahora.
Sintaxis
ParmValue = ApplGetReturnParms()
Observaciones
Si una aplicacin de herramientas Solomon para Visual Basic (Solomon Tools for
Visual Basic) necesita devolver parmetros al programa desde el cual fue llamado
originalmente, lo puede hacer dando uno de los parmetros a ScreenExit. Cuando el
control retorna posteriormente a la aplicacin que llam, puede realizar una o ms
llamadas a ApplGetReturnParms para recuperar satisfactoriamente cada parmetro
individual.
La funcin ApplGetReturnParms tiene los siguientes argumentos:
Argumento
Tipo
Descripcin
ParmValue
String
Tambin Vea
Declaracin ScreenExit
79
Declaracin ApplSetFocus
Fija el foco a un control designado.
Sintaxis
Call ApplSetFocus( TargetCtrl)
Observaciones
ApplSetFocus es el mtodo preferido para fijar explicitamente el foco a un control
dado o control objetivo. El uso del mtodo SetFocus de Visual Basic causar un error
fatal VB si el control objetivo est deshabilitado (disabled) o invisible. Los
desarrolladores deben recordar siempre que que el seteo de la propiedad del control
objetivo en tiempo de diseo no se puede garantizar para que se mantenga inalterado
durante el tiempo de ejecucin. Por ejemplo, el control objetivo puede estar habilitado
(enabled) y visible en la aplicacin estndar, y por lo tanto el SetFocus funcionar sin
problemas durante el testeo. Sin embargo, el usuario final puede posteriormente
realizar una adaptacin, y dentro de otras cosas, deshabilitar el control objetivo y con
esto revelando un delicado defecto en la aplicacin subyacente referente al uso del
mtodo SetFocus.
La declaracin ApplSetFocus utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
TargetCtrl
string
Ejemplo
Call ApplSetFocus("cDiscBal")
80
Declaracin ApplSetParmValue
Agrega un parmetro adicional a la lista de parmetros que sern enviados a la
siguiente aplicacin llamada por la funcin Launch.
Sintaxis
Call ApplSetParmValue(ParmSection, ParmName, ParmValue)
Observaciones
Herramientas Solomon para Visual Basic usa la funcin Launch para iniciar otra
aplicacin. Hay dos mtodos diferentes para que la la aplicacin que llame pase
parmetros hacia la aplicacin llamada.
El primer mtodo es pasar parmetros a la aplicacin llamada usando el argumento
Launch, diseado especificamente para este propsito. Los parmetros pasados
mediante este mtodo son agrupados y pasados directamente a la aplicacin llamada
mediante el comando fsico mismo. Como consecuencia, bajo este mtodo el tamao
y/o nmero de parmetros est limitado al largo mximo del comando, menos el
nmero de bytes usado por Solomon para requerimientos internos, los cuales pueden
variar segn las circunstancias.
Un mtodo ms robusto para pasar los parmetros es usando la declaracin
ApplSetParmValue en conjunto con la funcin Launch. La principal ventaja de usar
este mtodo es que permite a la aplicacin que llama agrupar parmetros en secciones
nombradas y etiquetar explicitamente parmetros individuales usando nombres de
parmetros. El agrupar parmetros en grupos nombrados elimina conflictos que
ocurriran en el programa llamado cuando la aplicacin misma o cdigo VBA adaptado
agregado mediante el Administrador de Adaptaciones (Customization Manager), estn
ambos tratando de recibir parmetros diferentes. Vea la funcin ApplGetParmValue
para una explicacin ms detallada de este conflicto potencial.
La primera llamada a ApplSetParmValue crear un archivo temporal de destino y
colocar al primer parmetro en ese archivo. Por defecto, este archivo ser creado en el
directorio WINDOWS. Esto puede ser modificado editando la entrada TempDirectory
de la seccin [Miscellaneous] del archivo Solomon.ini. A continuacin hay un ejemplo
del directorio C:\TEMP especificado como el directorio del archivo de parmetros:
[Miscellaneous]
TempDirectory=C:\TEMP
81
Tipo
Descripcin
ParmSection
String
ParmName
String
ParmValue
String
Ejemplo
El siguiente ejemplo ilustra dos diferentes mtodos para llamar ROI para desplegar el
reporte de la lista de vendedores (Vendor List) en la pantalla para todos los vendedores
(Vendors) que tengan un balance superior a cero.
Pase parmetros a ROI mediante un argumento de un largo parmetro a Launch. Este
mtodo no funcionar siempre, dado que el completo contenido de ParmStr tiene que
caber en la lnea fsica de comandos.
Dim ParmStr
As String
Tambin Vea
Funcin ApplGetParms, funcin ApplGetParmValue, funcin Launch
82
Funcin CallChks
Realiza comprobacin de errores en un objeto especfico cuando se produce el evento
Chk.
Sintaxis
IntVar = CallChks (formctl$, ctl$)
Observaciones
Esta funcin es til cuando usted quiere ejecutar una comprobacin de errores en
forma manual en un objeto especfico, porque el valor de otro objeto ha cambiado. Esto
permite gatillar otro evento Chk bajo el control del programa.
La funcin CallChks utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
IntVar
Integer
formctl
String
ctl
String
Ejemplo
'Object 1 Chk event
Dim Result#, DrAmt#, CrAmt#
DrAmt = GetObjectValue("cdramt")
CrAmt = GetObjectValue("ccramt")
Result = FPAdd(DrAmt, CrAmt, MONEY)
If Result < 0 Then
Call MessBox("Negative Entry", MB_OK, "Message")
End If
'Object 2 Chk event (contains ccramt)
serr1 = CallChks("Form1", "object1")
Tambin Vea
Funcin GetObjectValue, funcin SetObjectValue
83
Funcin DateCheck
Verifica si una fecha de una cadena de caracteres (date string) en el formato
MMDDYYYY representa o no una fecha vlida.
Sintaxis
RetVal = DateCheck(DateString)
Observaciones
La funcin DateCheck utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RetVal
Integer
DateString
String
Ejemplo
datestr = "02291991"
serr = DateCheck(datestr)
If serr = -1 Then
'Invalid day
Else If serr = -2 Then
'Invalid month
End If
Tambin Vea
Declaracin StrToDate
84
Funcin DateCmp
Compara dos valores de fecha.
Sintaxis
Cmp = DateCmp(Date1, Date2)
Observaciones
Para determinar si una fecha es nula o no, use DateCmp(Date, NULLDATE).
NULLDATE es una variable global declarada en el mdulo VBTools_VBA, la cual
est inicializada apropiadamente por el sistema en el inicio de cada aplicacin de
herramientas Solomon para Visual Basic.
La funcin DateCmp utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Cmp
Integer
Date1
Date2
Ejemplo
Dim TestDate1 As Sdate
Dim TestDate2 As Sdate
TestDate1.Val = GetObjectValue("cinvcdate")
TestDate2.Val = GetObjectValue("cdocdate")
serr1 = DateCmp(TestDate1, TestDate2)
If serr1 = 0 Then
Call MessBox("Dates are equal", MB_OK, "Message")
ElseIf serr1 > 0 Then
Call MessBox("invdate greater", MB_OK, "Message")
ElseIf serr1 < 0 Then
Call MessBox("docdate greater", MB_OK, "Message")
End If
Funcin DateMinusDate
Retorna la diferencia (en das) entre dos fechas.
Sintaxis
NbrDays = DateMinusDate(Date1, Date2)
Observaciones
La funcin DateMinusDate utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
NbrDays
Long
Date1
Fecha de inicio
Date2
Fecha de fin
Ejemplo
Dim Date1 As Sdate
Dim Date2 As Sdate
Date1.Val = GetObjectValue("cdate1")
Date2.Val = GetObjectValue("cdate2")
serr1 = DateMinusDate(Date1, Date2)
Call MessBox("Number of Days is " + Str$(serr1), MB_OK, "Message")
Tambin Vea
Declaracin DatePlusDays, declaracin DatePlusMonthSetDay
85
86
Declaracin DatePlusDays
Agrega un nmero designado de das a una fecha existente.
Sintaxis
Call DatePlusDays(CurrDate, NbrDaysToAdd, ResultingDate)
Observaciones
La declaracin DatePlusDays utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
CurrDate
NbrDaysToAdd
Integer
ResultingDate
Ejemplo
Dim OldDate As Sdate
Dim NewDate As Sdate
Dim DaysToAdd%
OldDate.Val = GetObjectValue("cdocdate")
DaysToAdd = 30
Call DatePlusDays(OldDate, DaysToAdd, NewDate)
Call MessBox("New Date is " + DateToStrSep(NewDate), MB_OK, "Message")
Tambin Vea
Funcin DateMinusDate, Declaracin DatePlusMonthSetDay
87
Declaracin DatePlusMonthSetDay
Agrega un nmero designado de meses a una fecha existente y fija la parte del da de la
fecha resultante a un da especfico del mes.
Sintaxis
Call DatePlusMonthSetDay(CurrDate, NbrMthsToAdd, SetSpecificDay,
ResultingDate)
Observaciones
La declaracin DatePlusMonthSetDay utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
CurrDate
NbrMthsToAdd
Integer
SetSpecificDay
Integer
ResultingDate
Fecha resultante.
Ejemplo
Dim OldDate As Sdate
Dim NewDate As Sdate
Dim DayOfMonth%
Dim MonthsToAdd%
DayOfMonth = 30
MonthsToAdd = 3
Call StrToDate("11211992", OldDate)
Call DatePlusMonthSetDay (OldDate, MonthsToAdd, DayOfMonth, NewDate)
'NewDate will be 02/28/1993 even though the DayOfMonth is 30
Call MessBox("New Date is " + DateToStrSep(NewDate), MB_OK, "Message")
Tambin Vea
Funcin DateMinusDate, declaracin DatePlusDays
88
Funcin DateToIntlStr
Convierte una fecha especfica en formato short date de Windows.
Sintaxis
ShortDateStr = DateToIntlStr(DateToConvert)
Observaciones
DateToIntlStr convertir una fecha desde el formato de base de datos SQL hacia el
formato de short date de Windows.
La funcin DateToIntlStr utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
ShortDateStr
String
DateToConvert
Tambin Vea
Funcin DateToStr, fcuncin DateToStrSep, declaracin IntlStrToDate, declaracin
StrToDate
Funcin DateToStr
Convierte un valor de fecha desde el formato de base de datos SQL a un a cadena de
caracteres (string) en formato MMDDYYYY.
Sintaxis
DateString = DateToStr(DateToConvert)
Observaciones
La funcin DateToStr utiliza los siguienes argumentos:
Argumento
Tipo
Descripcin
DateString
String
DateToConvert
Ejemplo
'Example sets a field to current system date
Dim NewDate as Sdate
Dim NewStrDate$
Call GetSysDate(NewDate)
NewStrDate = DateToStr(NewDate)
serr1 = SetObjectValue("cpaydate", NewStrDate)
Tambin Vea
Funcin DateToStr, funcin DateToStrSep, declaracin IntlStrToDate, declaracin
StrToDate
89
90
Funcin DateToStrSep
Convierte un valor de fecha desde el formato de base de datos SQL a un a cadena de
caracteres (string) en formato MMDDYYYY.
Sintaxis
DateString = DateToStrSep(DateToConvert)
Observaciones
Las funciones DateToStrSep y DateToStr se diferencian solamente en el hecho de
que DateToStrSep inserta un caracter de separacin entre el mes, da y ao de la
cadena de caracteres.
La funcin DateToStrSep utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
DateString
String
DateToConvert
Ejemplo
Dim TodaysDate As Sdate
Call GetSysDate(TodaysDate)
Call MessBox("Current Date is " + DateToStrSep(TodaysDate),
MB_OK, "Message")
Tambin Vea
Funcin DateToStr, funcin DateToStrSep, declaracin IntlStrToDate, declaracin
StrToDate
91
Funciones DBNavFetch
Recupera un registro compuesto (composite record) desde la base de datos usando una
declaracin SQL de la propiedad DBNav de un control SAFMaskedText.
Sintaxis
RetVal = DBNavFetch1(Ctrl, Cursor, SQLParmValue, bTable1, bTable1Length)
RetVal = DBNavFetch4(Ctrl, Cursor, SQLParmValue, bTable1, bTable1Length,
bTable2, bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length)
RetVal = DBNavFetch8(Ctrl, Cursor, SQLParmValue, bTable1, bTable1Length,
bTable2, bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length, bTable5,
bTable5Length, bTable6, bTable6Length, bTable7, bTable7Length, bTable8,
bTable8Length)
Observaciones
DBNavFetch1, DBNavFetch4 y DBNavFetch8 pueden ser usados para recuperar un
registro compuesto (composite record), basado en el texto SQL de la propiedad DBVav
del control SAFMaskedText especificado en el parmetro Ctrl. Estas funciones no son
aplicables si la propiedad DBNav no contiene una declaracin SQL o no contiene un
nombre de procedimiento guardado.
Todos los controles SAFMaskedText tienen las propiedades PV y DBNav, y cada una
puede contener una declaracin SQL. Las funciones DBNavFetch1 y PVChkFetch1
son similares, pero usan la declaracin SQL de dos propiedades diferentes, de la
propiedad DBNav y la propiedad PV respectivamente. Normalmente la funcin
PVChkFetch1 ser usada en conjunto con la propiedad PV para facilitar una ventana
de valores posibles (Possible Values) como tambin la captura del registro actual. Si
los requerimientos del programa especifican la necesidad de capturar un registro, pero
no entrega una ventana de valores posibles (Possible Values window), entonces
DBNavFetch1 necesitar ser usado en conjunto con la propiedad DBNav. Esta
situacin puede aparecer en ventanas que contengan mltiples campos claves (key
fields), en donde el ltimo campo clave no necesite una ventana de valor posible
(Possible Value window). Un ejemplo de este caso es Employee W2 History (02.260),
el cual tiene dos campos claves: identificacin de empleado (Employee ID) y ao de
calendario (Calendar Year). Los requerimientos de la ventana son que el usuario es
forzado a ingresar un Employee ID basado en una tabla de empleados (Employee
table), la cual debiera estar visible a travs de una ventana de valores posibles (Possible
Values window). Sin embargo, no existe una tabla en el sistema Solomon para definir
un ao de calendario vlido, y por lo tanto una ventana de valores posibles no es
aplicable, dado que cualquier valor numrico es vlido. Una vez que el ltimo campo
clave haya sido ingresado, un registro nico correspondiente a ambos campos claves
debe ser capturado desde la base de datos. Dado que Calendar Year es el ltimo campo
clave y la ventana de valores posibles no es requerida para ese campo, la funcin
DBNavFetch1 fue usada en conjunto con la propiedad DBNav del control Calendar
Year.
DBNavFetch1 fue diseada para declaraciones SQL que retornen datos desde una sola
tabla (single table). Para declaraciones SQL ms avanzadas que tengan una o ms
asociaciones de tablas, use DBNavFetch4 o DBNavFetch8.
92
Tipo
Descripcin
RetVal
Integer
Ctrl
Cursor
Integer
SQLParmValue
String
bTable1
User-defined datatype
bTable1Length
Integer
Ejemplo
Sub cCalYr_Chk (chkstrg As String, retval As Integer)
Dim W2Federal_Fetch
As Integer
Tambin Vea
Funciones PVChkFetch
93
Declaracin DispFields
Despliega el valor del campo de dato subyacente correspondiente al control designado.
Sintaxis
Call DispFields(Form, Control)
Observaciones
Cada control de datos Solomon est asociado con una variables Visual Basic
subyacente mediante una combinacin de su propiedad FieldName y una llamada
VBA_SetAddr asociada. El sistema va a actualizar el despliegue del valor de una
variables VB subyacente automaticamente, tal como cuando un nuevo registro es
cargado. Sin embargo, cuando la aplicacin modifica directamente el valor de una
variable VB subyacente a un control de dato Solomon, entonces puede necesitar llamar
a la declaracin DispFields para mostrar el nuevo valor en el control pertinente.
DispFields puede ser usado para mostrar un rango de controles basados en su
propiedad de orden TabIndex.
La declaracin DispFields utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Form
Control
Control
Control
94
Ejemplo
El siguiente cdigo extrado desde la ventana del mdulo de Payroll, Earnings Type
Maintenance (02.270.00), ilustra cmo la declaracin DispFields debe ser usada
despus de que la variable VB subyacente a un control de datos particular haya sido
modificado automaticamente. El cdigo es del evento Chk del control combo box
(combo box control) de Earnings Tipe.
'Displaying all fields on a form
If Level = 0 Then
'Set defaults for all objects on NewInfo subform
'then re-display the results
serr1 = SetDefaults("NewInfo", "")
Call DispFields("NewInfo", "")
End If
'Displaying one field on a form
Dim NewDate as Sdate
Dim NewStrDate$
Call GetSysDate(NewDate)
NewStrDate = DateToStr(NewDate)
serr1 = SetObjectValue("cpaydate", NewStrDate)
Call DispFields("Form1", "cpaydate")
Tambin Vea
Propiedad FieldName, declaracin MDisplay, propiedad TabIndex, declaracin
VBA_SetAddr
95
Declaracin DispForm
Despliega un sub-formulario (subform) designado.
Sintaxis
Call DispForm(SubFormName, CenterIt)
Observaciones
DispForm causar que el sub-formulario (subform) designado sea desplegado en
forma modal (modally). Esto significa que ningn otro formulario (form) de la misma
aplicacin pueda recibir el foco hasta que el sub-formulario haya sido ocultado
mediante el llamado a HideForm.
DispForm will cause the designated subform to be displayed modally, meaning that no
other form from the same application can receive focus until the subform is hidden via
a call to HideForm.
Form1 es desplegado siempre en forma automatica por el sistema. Por consiguiente,
este llamado es slo necesario para sub-formularios (subforms).
La declaracin DispForm utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
SubFormName
String
CenterIt
Integer
Ejemplo
'Display new subform
Call DispForm("NewForm", True)
Tambin Vea
Declaracin HideForm
96
Funcin DParm
Convierte una fecha en una cadena de caracteres de parmetros SQL (SQL parameter
string).
Sintaxis
SQLParmStr = DParm(DateToConvert)
Observaciones
La funcin DParm utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
SQLParmStr
String
DateToConvert
Ejemplo
'Example retrieves the last voucher date for
'current vendor and selects a count of all documents
'less than the last voucher date
Dim SqlStr$
Dim CountDoc As Long
Dim DateComp As Sdate
DateComp.Val = GetObjectValue("clastvodate")
SqlStr = "Select Count(*) from APDoc Where DocDate < "
+ Dparm(DateComp)
Call Sql(c1, SqlStr)
serr1 = sgroupfetch1(c1, CountDoc, Len(CountDoc))
Call MessBox("Number of Documents: " + str$(CountDoc), MB_OK, "Message")
Tambin Vea
Funcin FParm, funcin IParm, funcin SParm
97
Declaracin Edit_Cancel
Ejecuta el botn Cancel de la barra de herramientas.
Sintaxis
Call Edit_Cancel
Observaciones
Esta funcin corresponde a la seleccin de cencelar en el men Edit de Solomon o su
barra de herramientas. Utilice esta funcin siempre que ejecute la funcin de cancelar
de Solomon desde un programa VBA.
Ejemplo
Ejemplo usado en el botn de empujar (push button) para realizar la funcin cancelar.
Sub Cancel_Click()
Call Edit_Cancel
End Sub
Tambin Vea
Declaracin Edit_Close, funcin Edit_Finish
98
Declaracin Edit_Close
Ejecuta el botn Close de la barra de herramientas.
Executes the Close toolbar button.
Sintaxis
Call Edit_Close
Observaciones
Esta funcin corresponde a la seleccin de cerrar (close) en el men Edit de Solomon o
su barra de herramientas. Utilice esta funcin siempre que ejecute la funcin de cerrar
de Solomon desde un programa VBA.
Ejemplo
Ejemplo usado en el botn push para realizar la funcin cerrar (close function)
Sub Close_Click()
Call Edit_Close
End Sub
Tambin Vea
Funcin Edit_Next, funcin Edit_Last
99
Funcin Edit_Delete
Ejecuta el botn Delete de la barra de herramientas.
Sintaxis
RetVal = Edit_Delete (LevelNumber)
Observaciones
Esta funcin corresponde a la seleccin de borrar (delete) en el men Edit de Solomon
o su barra de herramientas. Utilice esta funcin siempre que ejecute la funcin de
borrar (delete) de Solomon en el nivel especificado desde un programa VBA.
La funcin Edit_Delete utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RetVal
Integer
LevelNumber
Integer
Ejemplo
En el ejemplo se navega hasta la cuarta fila en la ventana de entradas Journal, y luego
se borra de lnea.
Dim LvlStr$, Lvl%, I%
serr1 = GetProp("cacct", PROP_LEVEL, LvlStr)
Lvl = Val(LvlStr)
serr1 = Edit_First(Lvl)
'Already on first row, go down 3 more
For I = 1 To 3
serr1 = Edit_Next(Lvl)
Next I
'Delete existing row
serr1 = Edit_Delete(Lvl)
Tambin Vea
Funcin Edit_New, declaracin Edit_Save
100
Funcin Edit_Finish
Ejecuta el botn Finish de la barra de herramientas.
Sintaxis
RetVal=Edit_Finish(LevelNumber)
Observaciones
Esta funcin corresponde a la seleccin de finalizar (finish) en el men Edit de
Solomon o su barra de herramientas. Utilice esta funcin siempre que ejecute la
funcin de finalizar (finish) de Solomon en el nivel especificado desde un programa
VBA.
La funcin Edit_Finish utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RetVal
Integer
LevelNumber
Integer
Ejemplo
El ejemplo realiza un finish en un botn push.
serr1=Edit_Finish
Tambin Vea
Declaracin Edit_Cancel, declaracin Edit_Save
101
Funcin Edit_First
Ejecuta el botn First de la barra de herramientas.
Sintaxis
RetVal = Edit_First (LevelNumber)
Observaciones
Esta funcin corresponde a la seleccin de primero (First) en el men Edit de Solomon
o su barra de herramientas. Utilice esta funcin siempre que ejecute la funcin de
navegacin de la base de datos de Solomon First en el nivel especificado desde un
programa VBA.
La funcin Edit_First utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RetVal
Integer
LevelNumber
Integer
Ejemplo
En este ejemplo se navega a travs de lneas de detalle (detail lines) de una entrada de
publicacin (journal) existente. Va hacia la primera lnea primero, y luego a la
siguiente hasta que finaliza.
Sub NavToEndOfList_Click()
Dim LvlStr$, Lvl%
serr1 = GetProp("cacct", PROP_LEVEL, LvlStr)
Lvl = Val(LvlStr)
serr1 = Edit_First(Lvl)
While serr1 <> NotFound
serr1 = Edit_Next(Lvl)
Wend
End Sub
Tambin Vea
Funcin Edit_Next, funcin Edit_Last
102
Funcin Edit_Last
Ejecuta el botn Last de la barra de herramientas.
Sintaxis
RetVal = Edit_Last (LevelNumber)
Observaciones
Esta funcin corresponde a la seleccin de ltimo (Last) en el men Edit de Solomon o
su barra de herramientas. Utilice esta funcin siempre que ejecute la funcin de
navegacin de la base de datos de Solomon Last en el nivel especificado desde un
programa VBA.
La funcin Edit_Last utiliza los siguientes argumentos::
Argumento
Tipo
Descripcin
RetVal
Integer
LevelNumber
Integer
Ejemplo
En este ejemplo se navega a travs de lneas de detalle (detail lines) de una entrada de
publicacin (journal) existente. Va hacia la ltima lnea primero, y luego a la anterior
hasta que finaliza.
Sub NavToTopOfList_Click()
Dim LvlStr$, Lvl%
serr1 = GetProp("cacct", PROP_LEVEL, LvlStr)
Lvl = Val(LvlStr)
serr = Edit_Last(Lvl)
While serr = 0
serr = Edit_Prev(Lvl)
Wend
End Sub
Tambin Vea
Funcin Edit_Next, funcin Edit_First
103
Funcin Edit_New
Ejecuta el botn New de la barra de herramientas.
Sintaxis
RetVal = Edit_New (LevelNumber)
Observaciones
Esta funcin corresponde a la seleccin de nuevo (New) en el men Edit de Solomon o
su barra de herramientas. Utilice esta funcin siempre que ejecute la funcin New en el
nivel especificado desde un programa VBA.
La funcin Edit_New utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RetVal
Integer
LevelNumber
Integer
Ejemplo
Este ejemplo inserta un nuevo documento bajo en control de programa:
Dim LvlStr$, Lvl%
serr1 = GetProp("crefnbr", PROP_LEVEL, LvlStr)
Lvl = Val(LvlStr)
serr1 = Edit_New(Lvl)
Tambin Vea
Declaracin Edit_Save, funcin Edit_Delete
104
Funcin Edit_Next
Ejecuta el botn Next de la barra de herramientas.
Sintaxis
RetVal = Edit_Next (LevelNumber)
Observaciones
Esta funcin corresponde a la seleccin de siguiente (Next) en el men Edit de
Solomon o su barra de herramientas. Utilice esta funcin siempre que ejecute la
funcin de navegacin de la base de datos de Solomon Next en el nivel especificado
desde un programa VBA.
La funcin Edit_Next utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RetVal
Integer
LevelNumber
Integer
Ejemplo
En este ejemplo se navega a travs de lneas de detalle (detail lines) de una entrada de
publicacin (journal) existente. Va primero hacia la primera lnea, y luego a la
siguiente hasta que finaliza.
Sub NavToEndOfList_Click()
Dim LvlStr$, Lvl%
serr1 = GetProp("cacct", PROP_LEVEL, LvlStr)
Lvl = Val(LvlStr)
serr1 = Edit_First(Lvl)
While serr1 <> NotFound
serr1 = Edit_Next(Lvl)
Wend
End Sub
Example inserts a new row into row 6 of an existing
GL Journal entry
Sub InsertAtRowSix_Click()
Dim Cntr
As Integer
Dim Dval
As Double
Dim Ivis
As String
Dim Lvl
As Integer
105
Tambin Vea
Funcin Edit_Prev, funcin Edit_Last
106
Funcin Edit_Prev
Ejecuta el botn Prev de la barra de herramientas.
Sintaxis
RetVal = Edit_Prev (LevelNumber)
Observaciones
Esta funcin corresponde a la seleccin de anterior (Previous) en el men Edit de
Solomon o su barra de herramientas. Utilice esta funcin siempre que ejecute la
funcin de navegacin de la base de datos de Solomon Previous en el nivel
especificado desde un programa VBA.
La funcin Edit_Prev utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RetVal
Integer
LevelNumber
Integer
Ejemplo
En este ejemplo se navega a travs de lneas de detalle (detail lines) de una entrada de
publicacin (journal) existente. Va hacia la ltima lnea primero, y luego a la anterior
hasta que finaliza.
Sub NavToTopOfList_Click()
Dim LvlStr$, Lvl%
serr1 = GetProp("cacct", PROP_LEVEL, LvlStr)
Lvl = Val(LvlStr)
serr1 = Edit_Last(Lvl)
While serr1 = 0
serr1 = Edit_Prev(Lvl)
Wend
End Sub
Tambin Vea
Funcin Edit_Next, funcin Edit_First
107
Declaracin Edit_Save
Ejecuta el botn Save de la barra de herramientas.
Sintaxis
Call Edit_Save
Observaciones
Esta funcin corresponde a la seleccin de salvar (Save) en el men Edit de Solomon o
su barra de herramientas. Utilice esta funcin siempre que ejecute la funcin de
navegacin de la base de datos de Solomon Save en el nivel especificado desde un
programa VBA.
Ejemplo
Este ejemplo ejecuta la funcin Solomon de salvar (save):
Dim TimeOfDay As Stime
Call GetSysTime(TimeOfDay)
serr1 = SetObjectValue("cuser1", TimeOfDay)
Call Edit_Save
Tambin Vea
Funcin Edit_New, funcin Edit_Delete
108
Funcin FPAdd
Suma dos valores de punto flotante de doble precisin (double-precision floating point)
con una precisin de redondeo designada.
Sintaxis
Result = FPAdd(Dbl1, Dbl2, Precision)
Observaciones
Errores ocurridos durante la operacin de adicin, tales como desbordamiento
(overflow), sern manejados en forma automatica por el sistema. Estos tipos de errores
causarn que el mensaje de error apropiado sea desplegado en la pantalla, o bien sea
escrito en el registro de estado de procesos dependiendo del contexto en el cual el error
haya ocurrido. Luego de que la condicin de error haya sido reportada apropiadamente,
la aplicacin ser finalizada.
La funcin FPAdd utiliza los siguientes argumentos:
Argumento
Result
Dbl1
Dbl2
Precision
Tipo
Double
Double
Double
Integer
Descripcin
Valor de retorno
Primer valor
Segundo valor
Precisin de redondeo
Ejemplo
'Add the current to future balance for a total balance
Dim CurrentBalance#
Dim FutureBalance#
Dim TotalBal#
CurrentBalance = GetObjectValue("ccurrbal")
FutureBalance = GetObjectValue("cfuturebal")
TotalBal = FPAdd(CurrentBalance, FutureBalance, MONEY)
Call MessBox(Str$(TotalBal), MB_OK, "Message")
Tambin Vea
Funcin FPDiv, funcin FPMult, funcin FPRnd, funcin FPSub
109
Funcin FParm
Convierte un valor de punto flotante de doble precisin a una cadena de caracteres de
parmetro SQL (SQL parameter string).
Sintaxis
SQLParmStr = FParm(DblToConvert)
Observaciones
La funcin FParm utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
SQLParmStr
String
DblToConvert
Double
Ejemplo
Dim MaxAmount#
Dim SqlStr$
Dim CountDoc As Long
'Obtain documents with balance over MaxAmount
MaxAmount = 1000
SqlStr = "Select Count(*) From ARDoc Where DocBal > "
SqlStr = SqlStr + FParm(MaxAmount)
Call Sql(c1, SqlStr)
serr1 = sgroupfetch1(c1, CountDoc, Len(CountDoc))
Call MessBox ("Documents over Max: " + Str$(CountDoc), MB_OK, "Message")
Tambin Vea
Funcin DParm, funcin IParm, funcin SParm
110
Funcin FPDiv
Divide un valor de punto flotante de doble precisin por otro con una precisin de
redondeo designada.
Sintaxis
Result = FPDiv(Dbl1, Dbl2, Precision)
Observaciones
Esta funcin dividir el valor de Dbl1 por Dbl2 y retornar el resultado.
Errores ocurridos durante la operacin de divisin, tales como divisin por cero, sern
manejados en forma automatica por el sistema. Estos tipos de errores causarn que el
mensaje de error apropiado sea desplegado en la pantalla, o bien sea escrito en el
registro de estado de procesos dependiendo del contexto en el cual el error haya
ocurrido. Luego de que la condicin de error haya sido reportada apropiadamente, la
aplicacin ser finalizada.
La funcin FPDiv utiliza los siguientes argumentos:
Argumento
Result
Dbl1
Dbl2
Precision
Tipo
Double
Double
Double
Integer
Descripcin
Valor de retorno
Primer valor
Segundo valor
Precisin de redondeo
Ejemplo
Dim Var1#, Var2#, Result#
Var1 = 100
Var2 = 10
Result = FPDiv(Var1, Var2, MONEY)
'Result is 10
Call MessBox(Str$(Result), MB_OK, "Message")
Tambin Vea
FuncinFPAdd, funcin FPMult, funcin FPRnd, funcin FPSub
111
Funcin FPMult
Multiplica dos valores de punto flotante de doble precisin (double-precision floating
point) con una precisin de redondeo designada.
Sintaxis
Result = FPMult(Dbl1, Dbl2, Precision)
Observaciones
Errores ocurridos durante la operacin de multiplicacin, tales como desbordamiento
(overflow), sern manejados en forma automatica por el sistema. Estos tipos de errores
causarn que el mensaje de error apropiado sea desplegado en la pantalla, o bien sea
escrito en el registro de estado de procesos dependiendo del contexto en el cual el error
haya ocurrido. Luego de que la condicin de error haya sido reportada apropiadamente,
la aplicacin ser finalizada.
La funcin FPMult utiliza los siguientes argumentos:
Argumento
Tipo
Descripci
Result
Double
Valor de retorno
Dbl1
Double
Primer valor
Dbl2
Double
Segundo valor
Precision
Integer
Precisin de redondeo
Ejemplo
Dim Var1#, Var2#, Result#
Var1 = 100
Var2 = 10
Result = FPMult(Var1, Var2, MONEY)
'Result is 1000
Call MessBox(Str$(Result), MB_OK, "Message")
Tambin Vea
Funcin FPAdd, funcin FPDiv, funcin FPRnd, funcin FPSub
112
Funcin FPRnd
Redondea un valor de punto flotante de doble precisin (double-precision floatingpoint) a una precisin de redondeo designada.
Sintaxis
Result = FPRnd(DblToRound, Precision)
Observaciones
Errores ocurridos durante la operacin de redondeo, tales como desbordamiento
(overflow), sern manejados en forma automatica por el sistema. Estos tipos de errores
causarn que el mensaje de error apropiado sea desplegado en la pantalla, o bien sea
escrito en el registro de estado de procesos dependiendo del contexto en el cual el error
haya ocurrido. Luego de que la condicin de error haya sido reportada apropiadamente,
la aplicacin ser finalizada.
La funcin FPRnd utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Result
Double
Valor de retorno
DblToRound
Double
Precision
Integer
Precisin de redondeo
Ejemplo
El ejemplo realiza una declaracin SQL para rescatar una suma total de documentos,
luego depliega los resultados en una ventana de mensaje y le da formato al nmero.
Dim SqlStr$
Dim Result#
SqlStr = "Select Sum(OrigDocAmt) From ARDoc"
Call Sql(C1, SqlStr)
serr1 = sgroupfetch1(C1, Result, Len(Result))
Call MessBox(Format$ (FPRnd(Result, MONEY) , "$###,###,###.00"),
MB_OK, "Message")
Tambin Vea
Funcin FPAdd, funcin FPDiv, funcin FPMult, funcin FPSub
113
Funcin FPSub
Resta un nmero de punto flotante de doble precisin a otro de mismo tipo, con una
precisin de redondeo designada.
Sintaxis
Result = FPSub(Dbl1, Dbl2, Precision)
Observaciones
Esta funcin va a restar el valor de Dbl2 al valor Dbl1 y retornar el resultado.
Errores ocurridos durante la operacin de resta, tales como desbordamiento (overflow),
sern manejados en forma automatica por el sistema. Estos tipos de errores causarn
que el mensaje de error apropiado sea desplegado en la pantalla, o bien sea escrito en el
registro de estado de procesos dependiendo del contexto en el cual el error haya
ocurrido. Luego de que la condicin de error haya sido reportada apropiadamente, la
aplicacin ser finalizada.
La funcin FPSub utiliza los siguientes argumentos:
Argumento
Result
Dbl1
Dbl2
Precision
Tipo
Double
Double
Double
Integer
Descripcin
Valor de retorno
Primer valor
Segundo valor
Precisin de redondeo
Ejemplo
Dim Var1#, Var2#, Result#
Var1 = 1000
Var2 = 300
Result = FPSub(Var1, Var2, MONEY)
'Result will be 700.00
Call MessBox(Format$(Result, "####.00"), MB_OK, "Message")
Tambin Vea
Funcin FPAdd, funcin FPDiv, funcin FPMult, funcin FPRnd
114
Declaracin GetBufferValue
Obtiene el valor del buffer de datos del campo de una aplicacin Solomon subyacente.
Sintaxis
Call GetBufferValue(bTable.FieldName, Str)
Observaciones
Si una aplicacin VBA realiza su propia llamada VBA_SetAddr, puede referenciar
cualquier estructura desde su cdigo. Sin embargo, si la estructura de la aplicacin
Solomon subyacente necesita ser referenciada, y estos campos no estn representados
ocmo objetos en el formulario (form), esta declaracin permite a la aplicacin VBA
obtener estos valores. Si los campos fueran objetos en el formulario, la aplicacin VBA
puede encambio simplemente realizar un GetObjectValue.
La declaracin GetBufferValue utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
bTable.FieldName
String
Str
String
Ejemplo
' get account number from gltran record
Dim AccountValue As String * 10
Call GetBufferValue("bgltran.acct",AccountValue)
Tambin Vea
Declaracin SetBufferValue
115
Funcin GetDelGridHandle
Retorna el manejador de recursos (resource handle) del arreglo de memoria usado para
guardar temporalmente lneas de detalle (detail lines) borradas del control SAFGrid
designado.
Sintaxis
DelMemHandle = GetDelGridHandle( SpreadSheetObj)
Observaciones
Cada control SAFGrid est asociado a dos arreglos de memoria subyacentes que el
sistema abre automaticamente durante la carga del formulario (Form Load). El arreglo
de memoria primario guarda los registros que son actualmente visibles en la grilla. El
manejador de recursos de este arreglo de memoria primario es retornado por la funcin
GetGridHandle. Sin embargo, otro arreglo es tambin creado para guardar
temporalmente registros borrados por el usuario hasta que se realice una operacin
salvar (save) y se actualice la base de datos. El manejador de recursos para este arreglo
de memoria puede ser retomado usando la funcin GetDelGridHandle.
Una vez que el menejador de recursos para el arreglo de memoria para registros
borrados haya sido tomado, la aplicacin puede usarlo para mostrar los registros
borrados por el usuario usando llamados a MFirst y MNext.
La funcin GetDelGridHandle utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
DelMemHandle
Integer
SpreadSheetObj
String
Ejemplo
serr1 = GetDelGridHandle("Spread1")
Tambin Vea
Funcin GetGridHandle
116
Funcin GetGridHandle
Obtiene el manejador de grilla (grid handle) para un objeto Spreadsheet.
Sintaxis
IntVar = GetGridHandle (SpreadControlName$)
Observaciones
Retorna el manejador del arreglo de memoria para un objeto spreadsheet especfico. Es
til si la aplicacin quiere usar las funciones de arreglo de memoria para navegar a
travs de un objeto spreadsheet. Debe ser usado con extrema precaucin, dado que la
aplicacin subyacente puede pasar por sobre suposiciones de los arreglos de memoria
realizados en el programa VBA.
La funcin GetGridHandle utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
IntVar
Integer
SpreadControlName
String
Ejemplo
Dim MemHandle As Integer
MemHandle = GetGridHandle("Spread1")
Tambin Vea
Declaracin MSet
Funcin GetObjectValue
Obtiene el valor de un objeto especfico del formulario.
Sintaxis
RetVal = GetObjectValue(ControlName)
Observaciones
Cada vez que una aplicacin VBA necesite obtener un valor de dato de cualquier
control del formulario, esta funcin debe ser usada.
La funcin GetObjectValue utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RetVal
Defenido por
usauario
ControlName
String
Ejemplo
Dim TestDate1 As Sdate
TestDate1.Val = GetObjectValue("cinvcdate")
'Double field example
Dim CrTotal#
CrTotal = Val(GetObjectValue ("ccrtot"))
'Logical field example
'Note that an integer variable type is declared
Dim Var1%
Var1 = GetObjectValue("cmultichk")
If Var1 = 0 Then
Call MessBox("Value is UnChecked or False", MB_OK, "Message")
ElseIf Var1 = 1 Then
Call MessBox("Value is Checked or True", MB_OK, "Message")
End If
'Integer field example
Dim CycleCount%
CycleCount = GetObjectValue("ccycle")
'String field example
Dim DispCountry As String
DispCountry = GetObjectValue("ccountry")
Tambin Vea
Funcin SetObjectValue
117
118
Funcin GetProp
Obtiene el valor de una propiedad de un objeto especfico.
Sintaxis
RetVal = GetProp(ObjectName, PropName, PropValue)
Observaciones
Esta funcin permite a una amplicacin VBA obtener el valor de una propiedad de
cualquier objeto en pantalla. Adems del valor de la propiedad, la aplicacin tambin
puede obtener el nivel asociado al objeto particular. Esta funcin es til para funciones
tipo Edit_, como tambin para funciones SetProp, ya que usted puede as verificar el
valor de la propiedad antes de fijar dicho valor.
La funcin GetProp utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RetVal
Integer
ObjectName
String
PropName
String
PropValue
User Defined
PROP_BLANKERR
(required)
Integer
TRUE / FALSE
PROP_CAPTION
String
PROP_CUSTLIST
String
PROP_ENABLED
Integer
PROP_HEADING
String
PROP_LEVEL
String
PROP_MASK
String
PROP_MIN
String
PROP_MAX
String
PROP_TABSTOP
Integer
TRUE / FALSE
PROP_VISIBLE
Integer
TRUE / FALSE
TRUE / FALSE
119
Ejemplo
En el ejemplo se navega a travs de una serie de cosas en la ventana de Journal Entry:
Sub NavThruBatches_Click()
Dim Lvl As Integer
Dim LvlStr As String * 1
' Since cbatnbrh is a key field, level will be
' returned as "0,k" not "0"
' So declare lvlstr as a one-character string, so
' we get back only "0", and then manually convert it
' for use in Edit calls
serr = GetProp("cbatnbrh",PROP_LEVEL, LvlStr)
Lvl = Val(LvlStr)
'Perform navigation to first batch
serr = Edit_First(Lvl)
While serr <> NotFound
DoEvents
serr = Edit_Next(Lvl)
Wend
End Sub
Tambin Vea
Declaracin SetProp, funcin Edit_Next
120
Funcin GetSqlType
Determina qu tipo de servidor de base de datos est siendo usado.
Sintaxis
SqlType = GetSqlType()
Observaciones
Solomon soporta actualmente un tipo de base de datos SQL: Microsoft SQL Server .
Esta es una API antigua, la cual es soportada por muchos tipos de bases de datos.
Compatibilidad inversa se ha preservado.
La funcin GetSqlType retorna una de las siguientes constantes globales de tipo
integer declaradas en el mdulo VBTools_VBA:
Valor de Retorno
Descripcin
MSSqlType
Ejemplo
Dim SqlDatabaseBeingUtilized
As Integer
SqlDatabaseBeingUtilized = GetSqlType()
121
Declaracin GetSysDate
Recupera la fecha del sistema actual.
Sintaxis
Call GetSysDate(Date)
Observaciones
La declaracin GetSysDate utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Date
Ejemplo
Esta rutina de ejemplo fija un campo de fecha existente a la fecha del sistema.
Sub setdate_Click()
Dim NewDate as Sdate
Dim NewStrDate$
Call GetSysDate(NewDate)
NewStrDate = DateToStr(NewDate)
serr1 = SetObjectValue("cpaydate", NewStrDate)
Call DispFields("Form1","cpaydate")
End Sub
Tambin Vea
Declaracin GetSysTime
122
Declaracin GetSysTime
Recupera la hora del sistema actual.
Sintaxis
Call GetSysTime(Time)
Observaciones
La declaracin GetSysTime utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Time
Ejemplo
'Obtain current system time
Dim SystemTime As Stime
Call GetSysTime(SystemTime)
Call MsgBox("Current Time is: " + TimeToStr(SystemTime),
MB_OK, "Message")
Tambin Vea
Declaracin GetSysDate
123
Declaracin HideForm
Oculta un sub-formulario (subform) que ha sido desplegado previamente mediante un
llamado a DispForm.
Sintaxis
Call HideForm(SubFormName)
Observaciones
Esta funcin es usada tipicamente en el evento click de los botones OK o Cancel del
sub-formulario designado.
La declaracin HideForm utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
SubFormName
String
Ejemplo
Sub OkButton_Click()
Call HideForm("NewForm")
End Sub
Tambin Vea
Declaracin DispForm
124
Declaracin IncrStrg
Incrementa una representacin de una cadena de caracteres (string representation) de
un nmero de valor.
Sintaxis
Call IncrStrg(StringNbr, Length, Increment)
Observaciones
La declaracin IncrStrg utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
StringNbr
String
Length
Integer
Increment
Integer
Ejemplo
Dim BatNbrLength
As Integer
BatNbrLength = LenB(Trim$(bGLSetup.LastBatNbr))
'Increment last batch number to the next sequential value (within the
'size of batch numbers actually being used - i.e., BatNbrLength).
Call IncrStrg(bGLSetup.LastBatNbr, BatNbrLength, 1)
125
Declaracin IntlStrToDate
Convierte una cadena de caracteres de fecha (date string) desde el estilo de fecha corto
de Windows (Windows short date style) hacia el formato de bae de datos SQL.
Sintaxis
Call IntlStrToDate(DateStrToConvert, SQLDate)
Observaciones
IntlStrToDate puede ser usado para convertir una cadena de caracteres formateada
segn el estilo de fecha corto de Windows (Windows short date style) a un formato
adecuado para ser almacenado en un campo de fecha de la base de datos SQL.
La declaracin IntlStrToDate utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
DateStrToConvert
String
SQLDate
Tambin Vea
Funcin DateToIntlStr, funcin DateToStr, funcin DateToStrSep, declaracin
StrToDate
126
Funcin IParm
Convierte un tipo integer a un parmetro de cadena de caracteres SQL.
Sintaxis
SQLParmStr = IParm(IntToConvert)
Observaciones
La funcin IParm utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
SQLParmStr
String
IntToConvert
Integer
Ejemplo
Estos ejemplos asumen que la siguiente declaracin SQL fue usada para crear un
procedimiento guardado llamado GLTran_Module_BatNbr_LineNbr.
Select * from GLTran
where Module = @parm1
and BatNbr = @parm2
and LineNbr between @parm3beg and @parm3end
order by Module, BatNbr, LineNbr;
Este extracto de cdigo muestra cmo el procedimiento anterior puede ser usado para
recuperar todas las transacciones en GL Batch #000123.
SqlStr = " GLTran_Module_BatNbr_LineNbr" + SParm("GL") +
SParm("000123") + IParm(INTMIN) + IParm(INTMAX)
GLTran_Fetch = SqlFetch1(CSR_GLTran, SqlStr, bGLTran, LenB(bGLTran))
While ( GLTran_Fetch = 0)
GLTran_Fetch = SFetch1( CSR_GLTran, bGLTran, LenB(bGLTran))
Wend
Tambin Vea
Funcin DParm, funcin FParm, funcin SParm
127
Funcin Is_TI
Retorna si la aplicacin Solomon est en modo Transaction Import o no lo est.
Sintaxis
IntVar = Is_TI()
Observaciones
Esta funcin es til si usted quiere suprimir respuestas de usuario y/o dilogos cuando
la aplicacin se est ejecutando en modo Transaction Import.
La funcin Is_TI retorna lo siguiente:
True La aplicacin se est ejecutando en modo Transaction Import.
False La aplicacin no se est ejecutando en modo Transaction Import.
Ejemplo
El siguiente ejemplo determina si la aplicacin est o no en modo Transaction Import:
If Is_TI = False Then
'Perform logic or routine only desired in standard mode.
(not Transaction Import mode)
End If
Tambin Vea
Declaracin AliasConstant
128
Funcin Launch
Ejecuta otro programa ejecutable.
Sintaxis
RetVal = Launch (CommandLine, SAFApp, WaitFlag, WindowFlag)
Observaciones
Permite ejecutar cualquier ventana Solomon (o cualquier otra aplicacin Windows)
desde cualquier otra ventana Solomon. Usted tambin puede pasar parmetros a las
ventanas Solomon y usar la funcin ApplGetParms en la aplicacin ejecutada para
recibir los parmetros.
La funcin Launch utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RetVal
Integer
CommandLine
String
SAFApp
Integer
WaitFlag
Integer
WindowFlag
Integer
129
Para ejecutar un reporte de Solomon, usted debe executar la aplicacin ROI con los
parmetros apropiados. Los parmetros disponibles que pueden ser pasados a ROI (y
su descripcin) se muestran a continuacin:
Parmetro
Descripcin
/RUN
/WHERE
/DEBUG
/FORMAT
/PSCRN
/TEMPLATE
Ejemplo
A continuacin est el cdigo para 03.270.00 (la aplicacin ejecutada):
Sub Form1_Load
' Variable to store the passed Parameter to this screen
Dim VendorParm$
VendorParm = ApplGetParms()
If Trim$(VendorParm) <> "" Then
' Screen was called from another application.
' Set the value of the ID field to what was
' passed in by Launch() function
serr1 = SetObjectValue("cvendid", VendorParm)
End If
End Sub
Tambin Vea
Funcin ApplGetParms, funcin ApplGetParmValue, declaracin ApplSetParmValue
130
El siguiente cdigo es para la ventana del mdulo Voucher and Adjustment Entry
(03.010.00) (la aplicacin que realiza la ejecucin). An cuando este ejemplo usa un
botn push, podra ser colocado en el evento Chk de un control particular. La sintaxis
sera muy similar excepto que chkstrg sera evaluada y pasada a la funcin Launch():
Sub VendorScrn_Click()
' Obtain the Current ID in this screen and pass
' as a parameter to other EXE
Dim CmdLine$
Dim VendParm$
VendParm = GetObjectValue("cvendid")
If Trim$(VendParm) <> "" Then
' Note that VendParm is passed twice with a PRMSEP between
' Also note the space following 0327000. This is also
' required.
CmdLine = "0327000 " + VendParm + PRMSEP + VendParm
' The third parm indicates Wait = True. This will allow
' the Launched application to share the same SQL session,
' therefore, an extra session is not used. This exhibits the
' same behavior from a shared session perspective as Quick
' Maintenance.
serr1 = Launch(CmdLine, True, True, 0)
End If
End Sub
Funcin MCallChks
Realiza verificacin de errores en una columna especfica de un objeto de grilla.
Sintaxis
IntVar = (gridhandle%, ctlbeg$, ctrlend$)
Observaciones
Esta funcin es til cuando usted quiere ejecutar manualmente la verificacin de
errores en una columna de un objeto de grilla, porque se ha modificado algn otro
valor del objeto. Esto le permite gatillar el evento Chk bajo control de programa.
La funcin MCallChks utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
IntVar
Integer
gridhandle
Integer
ctlbeg
String
ctlend
String
Tambin Vea
Funcin CallChks, funcin GetGridHandle
131
132
Declaracin MClear
Borra todos los registros de un arreglo de memoria designado.
Sintaxis
Call MClear(MemHandle)
Observaciones
La declaracin MClear puede ser usada para borrar el contenido de un arreglo de
memoria existente. El arreglo permanecer con su espacio asignado y puede ser usado
nuevamente.
La declaracin MClear utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
MemHandle
Integer
Tambin Vea
Funciones VBA_MOpen
Declaracin MClose
Cierra un arreglo de memoria existente.
Sintaxis
Call MClose(MemHandle)
Observaciones
MClose puede usarse para cerrar un arreglo de memoria, el cual haya sido abierto
previamente mediante las funciones VBA_MOpen.
La declaracin MClose utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
MemHandle
Integer
133
134
Ejemplo
Ilustra cmo cerrar un arreglo de memoria, el cual ya no es necesario para la
aplicacin.
Dim Mem_Account
As Integer
Dim CSR_Account
As Integer
Dim SqlStr
As String
Dim Account_Fetch
As Integer
Tambin Vea
Funciones VBA_MOpen
135
Funcin MDelete
Borra el registro actual del arreglo de memoria designado.
Sintaxis
RecFetch = MDelete(MemHandle, RecMaintFlg)
Observaciones
El registro actual de un arreglo de memoria puede ser borrado usando la funcin
MDelete. Despus de que el registro haya sido borrado, el sistema navegar en forma
automatica hacia el siguiente registro, dado que siempre debe haber un registro actual
en el arreglo de memoria, asumiendo desde luego, que exista uno o ms registros. Por
lo tanto, el valor de retorno y el correspondiente estado del registro aplican al registro
que le sigue al registro borrado.
Cuando este llamado es usado en un arreglo de memoria asociado a un control
SAFGrid, ser necesario hacer un llamado a MDisplay para sincronizar
apropiadamente la apariencia de SAFGrid con el arreglo de memoria.
La funcin MDelete utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RecFetch
Integer
MemHandle
Integer
RecMaintFlg
Integer
Tambin Vea
Declaracin MDisplay, declaracin MInsert, declaracin MUpdate
136
Declaracin MDisplay
Despliega el contenido actual del arreglo de memoria designado en su control
SAFGrid correspondiente.
Sintaxis
Call MDisplay(MemHandle)
Observaciones
Cada control SAFGrid est asociado con un arreglo de memoria subyacente, el cual es
abierto automaticamente. Cada vez que un dato dentro de este arreglo de memoria es
modificado directamente por la aplicacin, contrarestando lo hecho por el usuario, el
control SAFGrid tiene que ser desplegado posteriormente de nuevo.
Cuando MDisplay es llamado, el registro actual del arreglo de memoria ser
desplegado en la parte superior del control SAFGrid. De esta manera, por ejemplo, si
la aplicacin quiere desplegar al primer registro del arreglo de memoria en la parte
superior del control SAFGrid, debe llamar primero a Mfirst para moverse al primer
registro y luego llamar a MDisplay.
La declaracin MDisplay utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
MemHandle
Integer
137
Ejemplo
Sub cBegProcessing_Click ()
Dim RecFound
As Integer
Dim MemMaintFlg
As Integer
Dim Nbr_Of_Batches_Processed
As Integer
138
Declaracin Mess
Despliega un mensaje desde el archivo de mensajes de Solomon y espera hasta que el
usuario elija un botn.
Sintaxis
Call Mess(MsgNumber)
Observaciones
Al instalar Solomon, un archivo de texto ASCII llamado Messages.csv es copiado al
directorio de programa Solomon. Este archivo contiene todos los mensajes relativos al
producto Solomon incluyendo todas las aplicaciones desarrolladas en forma
independiente, creadas con las herramientas de Solomon para Visual Basic. Cada
mensaje tiene, entre otras cosas, un nmero de mensaje. Un mensaje particular puede
ser desplegado en la pantalla pasando su nmero de mensaje asociado a la declaracin
Mess.
La declaracin Messf debe ser usada si el texto del mensaje contiene parmetros
reemplazables.
La funcin MessResponse puede ser usada para determinar el botn que fue elegido
por el usuario para cerrar el mensaje de texto.
La declaracin estndar de mensajes de texto de Visual Basic (VB MsgBox) no debe
ser usada en aplicaciones desarrolladas con las herramientas de Solomon para Visual
Basic, a fin de evitar conflictos con otras utilidades Solomon, tales como
Cut/Copy/Paste y Transaction Import. Estas aplicaciones tienen sofisticacin
incorporada para responder a mensajes de la aplicacin subyacente, durante
operaciones particulares como paste e import. Sin embargo, esta funcionalidad
automtica no aplica a mensajes desplegados utilizando la declaracin estndar
MsgBox de Visual Basic. La declaracin MessBox ha sido suministrada para facilitar
una funcionalidad similar a la declaracin estndar MsgBox de Visual Basic, con la
excepcin de que MessBox no crea conflictos con otras utilidades Solomon.
La declaracin Mess utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
MsgNumber
Integer
139
Cada registro (i.e., mensaje) contenido dentro del archivo Messages.csv contiene los
siguientes campos separados por una coma:
Nombre del Campo
Comentarios
Message Number
Category
Language
0 para ingls.
Type
Box Type
Record Type
Message Text
El campo Box Type dentro del archivo Messages.csv puede tener los siguientes
valores:
Valor de Box Type
cono
Botones
Ninguno
OK
OK
16
Pare
OK
OK
48
Exclamacin
OK
OK
64
Informacin
OK
OK
36
Pregunta
Yes / No
Yes
292
Pregunta
Yes / No
No
33
Pregunta
OK / Cancel
OK
Ejemplo
La ventana del mdulo Employee Maintenance (02.250.00) permite al usuario ingresar
el nmero de excepcin personal demandado por cualquier empleado particular en la
sub-ventana de informacin miscelnea (Miscellaneous Information subscreen). Cada
vez que este valor es modificado, al usuario se le pregunta, mediante un mensaje, si el
nuevo nmero total de excepciones personales debe ser utilizad para cada deduccin
individual para propsitos de clculo.
El mensaje nmero 739 es el mensaje desplegado, y su texto asociado es el siguiente:
Do you want to update the employees deductions with the new exemption value?
Este mensaje particular tambin despliega dos botones un botn Yes y uno No. La
funcin MessResponse es llamada posteriormente para determinar cul de estos dos
botones seleccion el usuario para cerrar la ventana de texto.
140
As Integer
MemArray_NbrRecs = MRowCnt(MemArray_EmpDeduction)
'If the memory array has any records in it then prompt the user
'whether or not he/she wants to update the number of PERSONAL
'EXEMPTIONS on ALL existing employee deductions.
If (MemArray_NbrRecs > 0) Then
Call Mess( 739)
If (MessResponse() = IDYES) Then
Call MSet(F0225004.cNbrPersExmpt, chkstrg)
Call MDisplay(MemArray_EmpDeduction)
End If
End If
End Sub
Tambin Vea
Declaracin MessBox, declaracin Messf, funcin MessResponse
141
Declaracin MessBox
Despliega un mensaje y espera a que el usuario elija una opcin.
Sintaxis
Call MessBox(Msg, Type, Title)
Observaciones
La declaracin estndar de mensajes de texto de Visual Basic (VB MsgBox) no debe
ser usada en aplicaciones desarrolladas con las herramientas de Solomon para Visual
Basic, a fin de evitar conflictos con otras utilidades Solomon, tales como
Cut/Copy/Paste y Transaction Import. Estas aplicaciones tienen sofisticacin
incorporada para responder a mensajes de la aplicacin subyacente, durante
operaciones particulares como paste e import. Sin embargo, esta funcionalidad
automtica no aplica a mensajes desplegados utilizando la declaracin estndar
MsgBox de Visual Basic. La declaracin MessBox ha sido suministrada para facilitar
una funcionalidad similar a la declaracin estndar MsgBox de Visual Basic, con la
excepcin de que MessBox no crea conflictos con otras utilidades Solomon.
La funcin MessResponse puede ser usada para determinar el botn que fue elegido
por el usuario para cerrar el mensaje de texto.
La declaracin MessBox utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Msg
String
Type
Integer
Title
String
Ejemplo
Dim FactAmt#
FactAmt = GetObjectValue("cannmemo2")
If FactAmt <> 0 Then
Call MessBox("Display Excel During Execution?", MB_YESNO,
" Message")
End If
Tambin Vea
Declaracin Mess, declaracin Messf, funcin MessResponse
142
Declaracin Messf
Da formato a un mensaje del arhivo de mensajes Solomon con parmetros
reemplazables, luego lo despliega y espera a que el usuario elija una opcin.
Sintaxis
Call Messf(MsgNumber, Parm1Str, Parm2Str, Parm3Str, Parm4Str, Parm5Str,
Parm6Str)
Observaciones
Al instalar Solomon, un archivo de texto ASCII llamado Messages.csv es copiado al
directorio de programa Solomon. Este archivo contiene todos los mensajes relativos al
producto Solomon incluyendo todas las aplicaciones desarrolladas en forma
independiente, creadas con las herramientas de Solomon para Visual Basic. Cada
mensaje tiene, entre otras cosas, un nmero de mensaje. El mensaje tambin puede
contener hasta seis parmetros reemplazables, colocando %s en los puntos apropiados
dentro del mensaje de texto. Un mensaje particular puede ser luego desplegado en la
pantalla pasando su nmero de mensaje asociado a la declaracin Messf junto con los
valores de datos para cada parmetro reemplazable.
La declaracin Mess debe ser usada si el texto del mensaje no contiene parmetros
reemplazables.
La funcin MessResponse puede ser usada para determinar el botn que fue elegido
por el usuario para cerrar el mensaje de texto.
La declaracin estndar de mensajes de texto de Visual Basic (VB MsgBox) no debe
ser usada en aplicaciones desarrolladas con las herramientas de Solomon para Visual
Basic, a fin de evitar conflictos con otras utilidades Solomon, tales como
Cut/Copy/Paste y Transaction Import. Estas aplicaciones tienen sofisticacin
incorporada para responder a mensajes de la aplicacin subyacente, durante
operaciones particulares como paste e import. Sin embargo, esta funcionalidad
automtica no aplica a mensajes desplegados utilizando la declaracin estndar
MsgBox de Visual Basic. La declaracin MessBox ha sido suministrada para facilitar
una funcionalidad similar a la declaracin estndar MsgBox de Visual Basic, con la
excepcin de que MessBox no crea conflictos con otras utilidades Solomon.
143
Tipo
Descripcin
MsgNumber
Integer
Parm1Str
String
Parm2Str
String
Parm3Str
String
Parm4Str
String
Parm5Str
String
Parm6Str
String
Cada registro (i.e. mensaje) contenido dentro del archivo Messages.csv contiene los
siguientes campos separados por una coma:
Nombre del Campo
Comentarios
Message Number
Category
Language
0 para ingls.
Type
Box Type
Record Type
Message Text
144
El campo Box Type dentro del archivo Messages.csv puede tener los siguientes
valores:
Valor de Box Type
cono
Botones
Ninguno
OK
OK
16
Pare
OK
OK
48
Exclamacin
OK
OK
64
Informacin
OK
OK
36
Pregunta
Yes / No
Yes
292
Pregunta
Yes / No
No
33
Pregunta
OK / Cancel
OK
Ejemplo
La ventana del mdulo Manual Check Entry (02.040.00) utiliza el siguiente cdigo
para advertir al usuario del hecho de que un asunto est fuera de balance.
El mensaje nmero 818 es el mensaje desplegado y su texto asociado en el archivo de
mensajes Solomon es el siguiente:
Batch is out of balance by %s. Do you want to edit?
Este mensaje particular depliega dos botones para el mensaje un botn Yes y un
botn No. La funcin MessResponse es llamada posteriormente para determinar cul
opcin ha elegido el usuario para cerrar la ventana de este mensaje de texto.
'Make sure that the batch itself is in balance with the documents.
Batch_Out_Of_Bal_Amt = FPSub(bBatch.CtrlTot, bBatch.DrTot, MONEY)
If (Batch_Out_Of_Bal_Amt <> 0#) Then
Call Messf( 818, Str$(Batch_Out_Of_Bal_Amt), "", "", "",
"", "")
If (MessResponse() = IDYES) Then
'User decided to edit the batch - so abort the
Finish
retval = ErrNoMess
'Set focus on the Batch Control Total field
Call ApplSetFocus(cCtrlTot)
End If
End If
Tambin Vea
Declaracin Mess, declaracin MessBox, funcin MessResponse
Funcin MessResponse
Retorna el botn elegido por el usuario para cerrar la ltima ventana de texto
desplegada mediante las declaraciones Mess, Messf o MessBox.
Sintaxis
ButtonId = MessResponse()
Observaciones
La funcin MessResponse retorna una de las siguientes constantes simblicas
declaradas en el mdulo VBTools_VBA:
Valor de Retorno
Descripcin
IDOK
Se seleccion el botn OK
IDYES
IDNO
Se seleccion el botn No
IDCANCEL
IDABORT
IDRETRY
IDIGNORE
Ejemplo
Dim Response%
Dim WSheet As Object
Call MessBox("Display Excel During Execution?", MB_YESNO, " Message")
Response = MessResponse()
DoEvents
'Start Microsoft Excel and create the object.
Set WSheet = CreateObject("Excel.Sheet")
'Make Excel Visible for Demo purposes
If Response = IDYES Then
WSheet.Application.Visible = True
End If
Tambin Vea
Declaracin Mess, declaracin Messf
145
146
Funcin mFindControlName
Retorna una lista de nombres de controles presentes en la aplicacin actual.
Sintaxis
ControlName = mFindControlName(FirstFlag)
Observaciones
La funcin mFindControlName es usada para retornar el primer y subsiguiente nombre
de control en el orden de ndice tab (tab index order). Esta funcin es til en los casos
en que usted quiere escribir cdigo que es genrico, pero necesita basarse en
nombres de controles especficos. Al escribir cdigo genrico, en vez de cdigo
especfico para una pantalla, usted puede reutilizarlo ms seguido. Esta funcin puede
ser usada mayoritariamente en los casos en que usted quiera circular a travs de todos
los controles dentro de una pantalla, y fijar propiedades especficas basadas en ciertas
caractersticas (tales como color de fondo o textos de ayuda).
Nota: En controles agregados por el Administrador de Adaptaciones (Customization
Manager), la propiedad Tab Index es fijada en 900. Este valor puede ser modificado
opcionalmente, y pudiera ser deseable asegurar rdenes de tab esperados. Cuando, sin
embargo, hay controles insertados que tienen rdenes de ndice tab (tab index order)
idnticos, mFindControlName descubre estos controles en el orden en que fueron
creados.
La funcin The mFindControlName utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
ControlName
String
FirstFlag
Integer
147
Ejemplo
Este ejemplo realiza un ciclo a travs de todos los controles para determinar cual tiene
una propiedad PV. Si un control tiene una propiedad PV, su propiedad ToolTipText es
fijada para indicar que la tecla F3 est disponible.
Dim CtlName As String, SResult As String
' Find the first control on the screen
CtlName = mFindControlName(1)
While (Trim$(CtlName) <> "")
' Get the PV property to determine F3 (inquiry)
serr1 = GetProp(CtlName, "PV", SResult)
If serr1 = 0 And Trim(SResult) <> "" Then
' A PV property exists
serr1 = GetProp(CtlName, "ToolTipText", SResult)
If serr1 = 0 And Trim(SResult) = "" Then
' Set the tooltiptext property if it is not in use
SResult = "Press F3 for list of Possible Values."
Call SetProp(CtlName, "ToolTipText", SResult)
End If
End If
' Find the next control
CtlName = mFindControlName(0)
Wend
Este ejemplo realiza un ciclo a travs de todos los controles para determinar cual tiene
fijada la propiedad blankerr en True. Estos pretenden ser campos requeridos. Si un
control tiene una propiedad blankerr en True, su color de fondo es fijado azul para
proveer una indicacin visual de que es requerido:
Dim CtlName As String, SResult As String
' Find the first control on the screen
CtlName = mFindControlName(1)
While (Trim$(CtlName) <> "")
' Get the 'blankerr' property to determine required controls.
serr1 = GetProp(CtlName, "Blankerr", iresult)
If serr1 = 0 And iresult = True Then
' Blankerr property found and control is required.
serr1 = GetProp(CtlName, "BackColor", SResult)
If serr1 = 0 Then
lresult = &HFFFF80
Call SetProp(CtlName, "BackColor", SResult)
End If
End If
CtlName = mFindControlName(0) ' Find the next control
Wend
148
Funcin MFirst
Mueve hacia el primer registro dentro de un arreglo de memoria.
Sintaxis
RecFetch = MFirst(MemHandle, RecMaintFlg)
Observaciones
MFirst mueve hacia el primer registro de un arreglo de memoria especificado, y copia
el contenido del registro del arreglo dentro de la estructura de datos previamente
especificada en el llamado a la funcin VBA_MOpen, usada para abrir originalmente
el arreglo de memoria relevante.
Cuando este llamado es usado en un arreglo de memoria asociado con un control
SAFGrid (por ejemplo arreglos de memoria abiertos automaticamente), un llamado a
MDisplay ser necesario para sincronizar apropiadamente la apariencia SAFGrid con
el arreglo de memoria.
La funcin MFirst utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RecFetch
Integer
MemHandle
Integer
RecMaintFlg
Integer
Tambin Vea
Funcin MLast, funcin MNext, funcin MPrev
149
Funcin MGetLineStatus
Retorna el estado de lnea (line status) del registro actual en el arreglo de memoria
designado.
Sintaxis
RecMaintFlg = MGetLineStatus(MemHandle)
Observaciones
La funcin MGetLineStatus permite a la aplicacin rescatar el estado del registro
actual del arreglo de memoria en cualquier momento.
La funcin MGetLineStatus utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RecMaintFlg
Integer
MemHandle
Integer
Tambin Vea
Funcin MSetLineStatus
150
Funcin MGetRowNum
Retorna el nmero de fila/registro del registro actual en el arreglo de memoria
designado.
Sintaxis
CurrRecNbr = MGetRowNum(MemHandle)
Observaciones
La funcin MGetRowNum utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
CurrRecNbr
Integer
MemHandle
Integer
Tambin Vea
Funcin MRowCnt, declaracin MSetRowNum
151
Declaracin MInsert
Inserta un nuevo registro a un arreglo de memoria designado.
Sintaxis
Call Minsert(MemHandle)
Observaciones
MInsert es usado para agregar un nuevo registro a un arreglo de memoria. Esto es
realizado copiando el contenido de todas las estructuras de datos previamente
asociadas con el arreglo de memoria designado a un nuevo registro de arreglo de
memoria. Las estruicturas de datos son asociadas con los arreglos de memoria en la
llamada a la funcin VBA_MOpen usada para abrir originalmente el arreglo de
memoria relevante. El nuevo registro del arreglo de memoria va a tener un estado de
lnea de INSERTED.
Cuando este llamado es usado en un arreglo de memoria asociado con un control
SAFGrid (por ejemplo arreglos de memoria abiertos automaticamente), un llamado a
MDisplay ser necesario para sincronizar apropiadamente la apariencia SAFGrid con
el arreglo de memoria.
La declaracin MInsert utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
MemHandle
Integer
152
Ejemplo
Este ejemplo ilustra como los registros pueden ser insertados a un arreglo de memoria
bajo el control del programa.
Dim Mem_Account
As Integer
Dim CSR_Account
As Integer
Dim SqlStr
As String
Dim Account_Fetch
As Integer
Tambin Vea
Funcin MDelete, funcin MSetLineStatus, declaracin MUpdate, funciones
VBA_MOpen
153
Declaracin MKey
Define un campo clave (key field) para un arreglo de memoria previamente abierto.
Sintaxis
Call MKey(MemHandle, KeySegmentNbr, TableDotFieldName, Ascending)
Observaciones
Ocasionalmente un programa va a necesitar la habilidad para localizar un registro
particular dentro de un arreglo de memoria basado en uno o ms valores de campos
claves. La funcin MKeyFind puede ser usada para cumplir esta tarea, asumiendo que
el orden de clasificacin (sort order) del arreglo de memoria haya sido definido
previamente. Arreglos de memoria asociados a un control SAFGrid tienen inicializado
su orden de clasificacin automaticamente, basado en los controles de campos claves
contenidos dentro de la grilla (i.e. marcados con una k en la propiedad levels de los
controles). Todo otro arreglo de memoria tiene que tener su orden de clasificacin
definido explcitamente mediante algn mtodo. Los mtodos para definir un campo
clave, tales como MKey, MKeyFld, MKeyOffset, y MsetRowNum, varan
primordialmente en la forma en que adquieren informacin detallada de un campo
clave, tal como el tipo de dato (datatype), tamao (size) y offset de byte dentro de un
tipo de dato definido por el usuario.
La declaracin MKey es el mtodo ms simple y comn de todos para definir un
campo clave de un arreglo de memoria. MKey es muy simple, porque el sistema va a
determinar automaticamente la informacin requerida de campo clave para el
TableDotFieldName, basado en el llamado a VBA_SetAddr para la tabla relevante y
su correspondiente informacin de directorio de dato dentro de la base de datos. Las
dos restricciones para el mtodo MKey son que slo puede ser usado para campos
cuyas tablas existan en la base de datos (i.e. contrariamente a una memoria de variable
que exista slo dentro del cdigo VB) y que una llamada a VBA_SetAddr tiene que
haber sido hecha previamente para la tabla relevante.
Se pueden definir claves multi-segmentos mediante llamados secesivos a MKey con
diferentes valores de argumentos KeySegmentNbr.
154
Tipo
Descripcin
MemHandle
Integer
KeySegmentNbr
Integer
TableDotFieldName
String
Ascending
Integer
Ejemplo
Este ejemplo ilustra como abrir un arreglo de memoria y definir mltiples campos
clave.
Dim Mem_ValEarnDed
As Integer
Tambin Vea
Funcin MKeyFind, declaracin MKeyFld, declaracin MKeyOffset, declaracin
MSetRowNum, declaracin MSort, funciones VBA_MOpen
155
Funcin MKeyFind
Encuentra un registro especfico en un arreglo de memoria clasificado, basado en
valores de campos clave designados.
Sintaxis
RecFetch = MKeyFind(MemHandle, KeySeg1Val, KeySeg2Val, KeySeg3Val,
KeySeg4Val, KeySeg5Val)
Observaciones
Ocasionalmente un programa va a necesitar la habilidad para localizar un registro
particular dentro de un arreglo de memoria basado en uno o ms valores de campos
claves. La funcin MKeyFind puede ser usada para cumplir esta tarea, asumiendo que
el orden de clasificacin (sort order) del arreglo de memoria haya sido definido
previamente. Arreglos de memoria asociados a un control SAFGrid tienen inicializado
su orden de clasificacin automaticamente, basado en los controles de campos claves
contenidos dentro de la grilla (i.e. marcados con una k en la propiedad levels de los
controles). Todo otro arreglo de memoria tiene que tener su orden de clasificacin
definido explcitamente mediante algn mtodo. Los mtodos para definir un campo
clave, tales como MKey, MKeyFld, MKeyOffset, y MsetRowNum, varan
primordialmente en la forma en que adquieren informacin detallada de un campo
clave, tal como el tipo de dato (datatype), tamao (size) y offset de byte dentro de un
tipo de dato definido por el usuario.
Si no existe un registro cuyo campo clave corresponda exactamente al argumento
KeySeg?Val, el sistema localizar la correspondencia ms cercana. Sin embargo,
retornar un NOTFOUND a la aplicacin.
La funcin MKeyFind utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RecFetch
Integer
MemHandle
Integer
KeySeg1Val
Integer, Double
or String
KeySeg2Val
Integer, Double
or String
KeySeg3Val
Integer, Double
or String
KeySeg4Val
Integer, Double
or String
KeySeg5Val
Integer, Double
or String
156
Ejemplo
Este ejemplo ilustra como abrir un arreglo de memoria y cargar el completo cuadro de
cuentas de Solomon (Solomon Chart of Accounts) hacia el arreglo creado
recientemente, y luego encuentra un registro de cuenta especfico.
Dim Mem_Account
As Integer
Dim CSR_Account
As Integer
Dim SqlStr
As String
Dim Account_Fetch
As Integer
Tambin Vea
Declaracin MKey, declaracin MKeyFld, declaracin MKeyOffset, declaracin
MSetRow, declaracin MSetRowNum, declaracin MSort, funciones VBA_MOpen
157
Declaracin MKeyFld
Define un campo clave para un arreglo de memoria previamente abierto.
Sintaxis
Call MKeyFld(MemHandle, KeySegmentNbr, TableDotFieldName, bTable,
Ascending)
Observaciones
Ocasionalmente un programa va a necesitar la habilidad para localizar un registro
particular dentro de un arreglo de memoria basado en uno o ms valores de campos
claves. La funcin MKeyFind puede ser usada para cumplir esta tarea, asumiendo que
el orden de clasificacin (sort order) del arreglo de memoria haya sido definido
previamente. Arreglos de memoria asociados a un control SAFGrid tienen inicializado
su orden de clasificacin automaticamente, basado en los controles de campos claves
contenidos dentro de la grilla (i.e. marcados con una k en la propiedad levels de los
controles). Todo otro arreglo de memoria tiene que tener su orden de clasificacin
definido explcitamente mediante algn mtodo. Los mtodos para definir un campo
clave, tales como MKey, MKeyFld, MKeyOffset, y MsetRowNum, varan
primordialmente en la forma en que adquieren informacin detallada de un campo
clave, tal como el tipo de dato (datatype), tamao (size) y offset de byte dentro de un
tipo de dato definido por el usuario.
El mtodo MKeyFld es similar al mtodo MKey, excepto a que no requiere un
llamado de VBA_SetAddr para la tabla relevante.
Se pueden definir claves multi-segmentos mediante llamados secesivos a MKeyFld
con diferentes valores de argumentos KeySegmentNbr.
158
Tipo
Descripcin
MemHandle
Integer
KeySegmentNbr
Integer
TableDotFieldName
String
bTable
Tipo de dato
definido por el
usuario
Ascending
Integer
159
Ejemplo
Este ejemplo ilustra como abrir un arreglo de memoria y definir mltiples campos
claves.
Dim Mem_ValEarnDed
As Integer
Tambin Vea
Declaracin MKey, funcin MKeyFind, declaracin MKeyOffset, declaracin
MSetRowNum, declaracin MSort, funciones VBA_MOpen
160
Declaracin MKeyOffset
Define un campo clave para un arreglo de memoria abierto previamente.
Sintaxis
Call MKeyOffset(MemHandle, KeySegmentNbr, bTable, KeyFldByteOffset,
KeyFldDataType, KeyFldDataLength, Ascending)
Observaciones
Ocasionalmente un programa va a necesitar la habilidad para localizar un registro
particular dentro de un arreglo de memoria basado en uno o ms valores de campos
claves. La funcin MKeyFind puede ser usada para cumplir esta tarea, asumiendo que
el orden de clasificacin (sort order) del arreglo de memoria haya sido definido
previamente. Arreglos de memoria asociados a un control SAFGrid tienen inicializado
su orden de clasificacin automaticamente, basado en los controles de campos claves
contenidos dentro de la grilla (i.e. marcados con una k en la propiedad levels de los
controles). Todo otro arreglo de memoria tiene que tener su orden de clasificacin
definido explcitamente mediante algn mtodo. Los mtodos para definir un campo
clave, tales como MKey, MKeyFld, MKeyOffset, y MsetRowNum, varan
primordialmente en la forma en que adquieren informacin detallada de un campo
clave, tal como el tipo de dato (datatype), tamao (size) y offset de byte dentro de un
tipo de dato definido por el usuario.
El mtodo MKeyOffset es el mtodo ms flexible para definir campos claves de
arreglos de memoria, pero tambin es el ms detallado y minucioso para codificar. Est
diseado para facilitar la definicin de un campo clave que no existe en la base de
datos, y por lo tanto no tiene informacin de dato de diccionario correlacionada. Esta
situacin puede ocurrir si uno de los tipos definidos por usuario en un arreglo de
memoria es slo declarado en VB y no existe en la base de datos. En este caso, el
sistema no tiene modo de determinar el offset del byte desde el comienzo de la
estructura para cada campo particular, ni el tipo de dato del campo, ni el largo del
campo. La declaracin MKeyOffset permite al desarrollador pasar toda esta
informacin detallada relacionada al campo clave designado en forma explcita, dado
que no existe en el directorio de datos SQL.
Se pueden definir claves multi-segmentos mediante llamados secesivos a MKeyOffset
con diferentes valores de argumentos KeySegmentNbr.
161
Tipo
Descripcin
MemHandle
Integer
KeySegmentNbr
Integer
bTable
Tipo de dato
definido por el
usuario
KeyFldByteOffset
Integer
KeyFldDataType
Integer
KeyFldDataLength
Integer
Ascending
Integer
162
Ejemplo
El siguiente ejemplo ilustra un arreglo de memoria que contiene slo campos
seleccionados de la tabla Employee, el cual nunca ha sido clasificado por ID de
Employee. Con solo guardar campos seleccionados Employee en el arreglo de
memoria, se consumir mucho menos memoria para cada registro dentro del arreglo de
memoria.
Dado que no todos los campos de la tabla de la base de datos Employee estn
contenidos dentro del tipo de datos definido por el usuario Employee_SelFld, la
informacin de directorio de datos en la base de datos SQL correspondiente a la tabla
estndar Employee, no es usable por el sistema para propsitos de determinar la
informacin del campo clave requerido. Como consecuencia, MKeyOffset tiene que
ser usado para implementar la clasificacin en el campo clave Employee.
Este es cdigo para declarar tipos de dato definidos por el usuario que contengan slo
campos seleccionados desde la tabla Employee. Note que el campo Name est siendo
declarado deliberadamente antes del campo EmpId, de modo de ilustrar adicionalmente
la completa flexibilidad de MKeyOffset.
Type Employee_SelFld
Name
As String * 30
EmpId
As String * 10
End Type
Global bEmployee_SelFld
As Employee_SelFld
Este es cdigo para abrir el arreglo de memoria para el tipo de dato definido por el
usuario Bemployee_SelFld, y que define Employee ID como campo clave.
Dim Mem_Employee_SelFld
As Integer
163
Este es cdigo que carga un arreglo de memoria con campos relevantes seleccionados
para todo empleado dentro de la base de datos. Note que el orden de los campos en la
declaracin Select SQL, corresponde al orden de los campos de tipos de dato definidos
por el usuario Employee_SelFld.
Dim CSR_Employee_SelFld
As Integer
Dim SqlStr
As String
Dim Employee_SelFld_Fetch
As Integer
'Allocate a cursor
Call SqlCursor(CSR_Employee_SelFld, NOLEVEL)
'Initialize cursor with a SQL statement and immediately fetch
'the first record
SqlStr = "Select Name, EmpId from Employee Order By EmpId"
Employee_SelFld_Fetch = SqlFetch1(CSR_Employee_SelFld, SqlStr,
bEmployee_SelFld, LenB(bEmployee_SelFld))
'Read through all subsequent Employee records, inserting each one into
'the memory array.
While(Employee_SelFld_Fetch = 0)
'Insert current Employee record into the memory array
Call MInsert( Mem_Employee_SelFld)
'Fetch the next Employee record
Employee_SelFld_Fetch = SFetch1(CSR_Employee_SelFld,
bEmployee_SelFld, LenB(bEmployee_SelFld))
Wend
Tambin Vea
Declaracin MKey, funcin MKeyFind, declaracin MKeyFld, declaracin
MSetRowNum, declaracin MSort, funciones VBA_MOpen
164
Funcin MLast
Se mueve hacia el ltimo registro en un arreglo de memoria designado.
Sintaxis
RecFetch = MLast(MemHandle, RecMaintFlg)
Observaciones
MLast mueve hacia el ltimo registro de un arreglo de memoria especificado, y copia
el contenido del registro del arreglo dentro de la estructura de datos previamente
especificada en el llamado a la funcin VBA_MOpen, usada para abrir originalmente
el arreglo de memoria relevante.
Cuando este llamado es usado en un arreglo de memoria asociado con un control
SAFGrid (por ejemplo arreglos de memoria abiertos automaticamente), un llamado a
MDisplay ser necesario para sincronizar apropiadamente la apariencia SAFGrid con
el arreglo de memoria.
La funcin MLast utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RecFetch
Integer
MemHandle
Integer
RecMaintFlg
Integer
Tambin Vea
Funcin MFirst, funcin MNext, funcin MPrev
165
Declaracin MLoad
Carga un arreglo de memoria con todos los registros retornados desde la base de datos
mediante una declaracin SQL.
Sintaxis
Call MLoad(MemHandle, Cursor)
Observaciones
Existen dos caminos para cargar datos directamente desde una base de datos a un
arreglo de memoria. El mtodo ms obvio es insertando registro a registro dentro del
arreglo de memoria hasta que no hayan ms registros en la base de datos. Un mtodo
ms simple es cargar el arreglo entero mediante un nico llamado a la declaracin
MLoad. El nico requerimiento es que el cursor pasado como parmetro a la
declaracin MLoad tiene que haber estado inicializado mediante una declaracin SQL
Select o un procedimiento guardado, para que est listo para retornar datos. Se puede
inicializar el cursor pasando la declaracin SQL Select o el procedimiento guardado,
junto con cualquier otro parmetro necesario.
La declaracin MLoad utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
MemHandle
Integer
Cursor
Integer
Ejemplo
El siguiente ejemplo ilustra un arreglo de memoria que contiene slo campos
seleccionados de la tabla Employee, el cual nunca ha sido clasificado por ID de
Employee. Con solo guardar campos seleccionados Employee en el arreglo de
memoria, se consumir mucho menos memoria para cada registro dentro del arreglo de
memoria.
Dado que no todos los campos de la tabla de la base de datos Employee estn
contenidos dentro del tipo de datos definido por el usuario Employee_SelFld, la
informacin de directorio de datos en la base de datos SQL correspondiente a la tabla
estndar Employee, no es usable por el sistema para propsitos de determinar la
informacin del campo clave requerido. Como consecuencia, MKeyOffset tiene que
ser usado para implementar la clasificacin en el campo clave Employee.
Este es cdigo para declarar tipos de dato definidos por el usuario que contengan slo
campos seleccionados desde la tabla Employee. Note que el campo Name est siendo
declarado deliberadamente antes del campo EmpId, de modo de ilustrar adicionalmente
la completa flexibilidad de MKeyOffset.
Type Employee_SelFld
Name
EmpId
End Type
As String * 30
As String * 10
166
Global bEmployee_SelFld
As Employee_SelFld
Code to open a memory array for the bEmployee_SelFld user-defined datatype and
define Employee ID as the key field.
Dim Mem_Employee_SelFld
As Integer
Code to load the memory array with relevant selected fields for all employees in the
database. Notice that the order of the fields in the SQL Select statement correspond to
the order of the fields in the Employee_SelFld user-defined datatype.
Dim CSR_Employee_SelFld
As Integer
Dim SqlStr
As String
Dim Employee_SelFld_Fetch
As Integer
'Allocate a cursor
Call SqlCursor(CSR_Employee_SelFld, NOLEVEL)
'Initialize cursor with a SQL statement and immediately fetch
'the first record
SqlStr = "Select Name, EmpId from Employee Order By EmpId"
Employee_SelFld_Fetch = SqlFetch1(CSR_Employee_SelFld, SqlStr,
bEmployee_SelFld, Len(bEmployee_SelFld))
'Read through all subsequent Employee records, inserting each one into
the
'memory array.
While(Employee_SelFld_Fetch = 0)
'Insert current Employee record into the memory array
Call MInsert( Mem_Employee_SelFld)
'Fetch the next Employee record
Employee_SelFld_Fetch = SFetch1(CSR_Employee_SelFld,
bEmployee_SelFld, Len(bEmployee_SelFld))
Wend
Tambin Vea
Declaracin Sql
167
Funcin MNext
Se mueve hacia el siguiente registro en el arreglo de memoria designado.
Sintaxis
RecFetch = MNext(MemHandle, RecMaintFlg)
Observaciones
MNext mueve hacia el prximo registro de un arreglo de memoria especificado, y
copia el contenido del registro del arreglo dentro de la estructura de datos previamente
especificada en el llamado a la funcin VBA_MOpen, usada para abrir originalmente
el arreglo de memoria relevante.
Cuando este llamado es usado en un arreglo de memoria asociado con un control
SAFGrid (por ejemplo arreglos de memoria abiertos automaticamente), un llamado a
MDisplay ser necesario para sincronizar apropiadamente la apariencia SAFGrid con
el arreglo de memoria.
La funcin MNext utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RecFetch
Integer
MemHandle
Integer
RecMaintFlg
Integer
Tambin Vea
Funcin MFirst, funcin MLast, funcin MPrev
168
Funcin MPrev
Se mueve hacia el registro anterior en el arreglo de memoria designado.
Sintaxis
RecFetch = MPrev(MemHandle, RecMaintFlg)
Observaciones
MPrev mueve hacia el registro anterior de un arreglo de memoria especificado, y copia
el contenido del registro del arreglo dentro de la estructura de datos previamente
especificada en el llamado a la funcin VBA_MOpen, usada para abrir originalmente
el arreglo de memoria relevante.
Cuando este llamado es usado en un arreglo de memoria asociado con un control
SAFGrid (por ejemplo arreglos de memoria abiertos automaticamente), un llamado a
MDisplay ser necesario para sincronizar apropiadamente la apariencia SAFGrid con
el arreglo de memoria.
La funcin MPrev utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RecFetch
Integer
MemHandle
Integer
RecMaintFlg
Integer
Tambin Vea
Funcin MFirst, funcin MLast, funcin MNext
169
Funcin MRowCnt
Retorna el nmero de registro en un arreglo de memoria designado.
Sintaxis
NumRecs = MRowCnt( MemHandle)
Observaciones
La funcin MRowCnt utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
NumRecs
Integer
MemHandle
Integer
Ejemplo
Global ArrayHandle%, Rows%
ArrayHandle = GetGridHandle("Spread1")
Rows = MRowCnt(ArrayHandle)
Tambin Vea
Funciones VBA_MOpen
170
Declaracin MSet
Fija explcitamente el valor de un control particular para cada registro en su control
SAFGrid correspondiente.
Sintaxis
Call MSet(Control, NewDataValue)
Observaciones
La declaracin MSet utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Control
String
NewDataValue
String
Tambin Vea
Declaracin MSetProp
171
Funcin MSetLineStatus
Fija el estado de lnea del registro actual en el arreglo de memoria designado.
Sintaxis
RetVal = MSetLineStatus(MemHandle, NewLineStatus)
Observaciones
Cada registro dentro de un arreglo de memoria tiene su propio estado de lnea (line
status), tal como INSERTED, UPDATED o NOTCHANGED. El sistema modifica
automaticamente el estado de lnea, basado en el tipo de la ltima actividad realizada
en cualquier registro particular de un arreglo de memoria. Por ejemplo, si un registro es
insertado en un arreglo de memoria utilizando MInsert, entonces el estado de este
nuevo registro del arreglo de memoria ser fijado automaticamente a INSERTED. Sin
embargo, ocasionalmente, la aplicacin puede necesitar asignar un estado de lnea
especfico a un registro particular de un arreglo de memoria. En estos casos, la funcin
MSetLineStatus puede usarse para llevar a cabo esta tarea.
Un uso comn de esta funcin es cuando un arreglo de memoria asociado a un control
SAFGrid es cargado de la base de datos bajo control de la aplicacin. En este caso los
registros son insertados al arreglo de memoria mediante llamadas sucesivas a MInsert.
Sin embargo, ya que los datos no son modificados en el lapso de tiempo entre que son
capturados y son insertados en el arreglo de memoria, el estado de lnea del registro del
arreglo de memoria resultante es forzado a cambiar de INSERTED a NOTCHANGED.
La funcin MSetLineStatus utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RetVal
Integer
MemHandle
Integer
RecMaintFlg
Integer
172
Ejemplo
Este ejemplo ilustra como cargar un arreglo de memoria desde una base de datos y al
mismo tiempo fuerza el estado de lnea de todos los registros de arreglos de memoria
insertados recientemente a NOTCHANGED.
Dim Mem_Account
As Integer
Dim CSR_Account
As Integer
Dim SqlStr
As String
Dim Account_Fetch
As Integer
Dim Retval
As Integer
Tambin Vea
Funcin MGetLineStatus, declaracin MInsert, declaracin MUpdate
173
Declaracin MSetProp
Fija el valor de una propiedad particular para el control de vista de formulario (formview control) designada, como tambin para su control SAFGrid asociado.
Sintaxis
Call MSetProp(Control, PropertyName, NewPropValue)
Observaciones
En tiempo de ejecucin, cada columna de un control SAFGrid est asociada con un
control adaptado de las herramientas Solomon para Visual Basic (i.e. vista de
formulario) subyacente. La declaracin MSetProp puede ser usada para modificar el
valor de una propiedad tanto para el control subyacente, como para la columna
relevante en la grilla asociada. Por ejemplo, una columna completa puede ser
deshabilitada utilizando la declaracin MSetProp.
Si la aplicacin quiere modificar valores de propiedades lnea por lnea, en vez de
afectar la columna completa, entonces necesitar manejar los valores de propiedades
usando llamados a la declaracin SetProp desde el evento LineGotFocus de cada
lnea de detalle individual.
La declaracin MSetProp utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Control
String
PropertyName
String
NewPropValue
String or
Integer
Ejemplo
'Disable the ExtRefNbr Column
Call MsetProp("cextrefnbr", PROP_ENABLED, False)
'Enable the ExtRefNbr Column
Call MsetProp("cextrefnbr", PROP_ENABLED, True)
Tambin Vea
Propiedad BlankErr, propiedad Enabled, propiedad Heading, propiedad Mask,
propiedad Min, propiedad Max, propiedad SetProp, propiedad Visible
174
Declaracin MSetRowNum
Fija el nmero de fila/registro actual de un arreglo de memoria designado.
Sintaxis
Call MSetRowNum( MemHandle, NewCurrRecNbr)
Observaciones
Una aplicacin puede saltar a un registro de arreglo de memoria especfico mediante la
funcin MKeyFind o la declaracin MSetRowNum. MSetRowNum salta a un nmero
de registro especfico, mientras que MKeyFind localiza al registro mediante valores de
campos claves designados.
La declaracin MSetRowNum utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
MemHandle
Integer
NewCurrRecNbr
Integer
Tambin Vea
Funcin MGetRowNum, funcin MKeyFind
175
Declaracin MSort
Clasifica datos contenidos dentro de un arreglo de memoria existente, basado en
campos claves predefinidos.
Sintaxis
Call MSort( MemHandle)
Observaciones
Esta declaracin clasificar todos los registros existentes dentro de un arreglo de
memoria designado, basado en campos claves definidos previamente mediante las
declaraciones MKey, MKeyFld, MkeyOffset, o MSetRowNum.
Si los datos dentro del arreglo de memoria son cargados inicialmente y mantenidos en
el orden apropiado, un llamado a MSort no ser necesario. MSort slo necesita ser
llamado si uno o ms registros dentro del arreglo de memoria no estn en un orden
consistente con los campos claves definidos previamente. Cuandos los datos estn
fuera de orden, MKeyFind no funcionar apropiadamente, dado que asume que los
datos dentro del arreglo de memoria son consistentes con la secuencia de clasificacin
predefinida.
Despus del llamado a MSort, los arreglos de memoria asociados a un control SAFGrif
requieren un llamado a MDisplay para re-desplegar la grilla.
Tambin Vea
Declaracin MKey, funcin MKeyFind, funcin MKeyOffset, declaracin
MSetRowNum, funciones VBA_MOpen
176
Declaracin MUpdate
Actualiza el registro de arreglo de memoria actual de un arreglo de memoria designado
con un nuevo valor de dato.
Sintaxis
Call MUpdate(MemHandle)
Observaciones
MUpdate es utilizado para actualizar un registro existente de un arreglo de memoria
especfico. Esto es realizado copiando el nuevo contenido de todas las estructuras de
datos asociadas previamente con el arreglo de memoria designado sobre el registro del
arreglo de memoria existente. Las estructuras de datos son asociadas a un arreglo de
memoria en el llamado a la funcin VBA_MOpen, usada para abrir originalmente el
arreglo de memoria relevante. Si el registro del arreglo de memoria tiene un estado de
lnea INSERTED antes del llamado a MUpdate, entonces el estado de lnea
permanecer INSERTED. En todos los otros casos, el registro del arreglo de memoria
tendr un estado de lnea de UPDATED.
La declaracin MUpdate utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
MemHandle
Integer
Tambin Vea
Funcin MDelete, declaracin MInsert, funcin MSetLineStatus, funciones
VBA_MOpen
177
Funcin NameAltDisplay
Despliega un campo de cadena de caracteres con caracteres de intercambio suprimidos.
Sintaxis
StrVar = NameAltDisplay ( FieldName)
Observaciones
Para acomodar la clasificacin alternada por nombre, Solomon almacena la mayora de
los campos de address y name basado en la posicin de @ dentro del nombre.
Por ejemplo, para que The Jones Company sea clasificado con Js, este nombre debe
ser introducido como The @Jones Company. Solomon luego almecena esta entrada
como Jones Company~The. Si usted desea recuparar y/o manipular este campo
posteriormente en cdigo VBA, esta funcin modifica el nombre y elimina el ~ y el @.
En este ejemplo, Jones Company~The, como guardado en la base de datos, es
desplegado como The Jones Company.
La funcin NameAltDisplay utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
StrVar
String
FieldName
String
Ejemplo
Dim SwapName$, OrigName$
OrigName = GetObjectValue("cname")
Call MessBox(OrigName, MB_OK, "Orig Name")
SwapName = NameAltDisplay(OrigName)
Call MessBox(SwapName, MB_OK, "Swap Name")
Tambin Vea
Funcin GetObjectValue, funcin SetObjectValue
178
Funcin PasteTemplate
Pega informacin de la plantilla designada dentro de la aplicacin actual.
Sintaxis
RetVal = PasteTemplate(TemplateID)
Observaciones
La caracterstica de plantillas Solomon hace posible guardar datos de la pantalla actual
y pegar estos datos subsecuentemente dentro de esa misma pantalla ms tarde. Las
plantillas pueden ser guardadas a la base de datos mediante la declaracin
SaveTemplate, como tambin mediante el item de men Template en el men Edit.
Una vez que una plantilla haya sido creada, puede ser pegada a su aplicacin fuente
bajo el control de programa usando la funcin PasteTemplate, como tambin
mediente el item de men Template del men Edit.
La funcin PasteTemplate utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RetVal
Integer
TemplateID
String
Tambin Vea
Declaracin SaveTemplate
179
Funcin PeriodCheck
Verifica si una cadena de caracteres peridica en el formato YYYYPP representa un
perodo fiscal vlido o no.
Sintaxis
RetVal = PeriodCheck(PeriodString)
Observaciones
La funcin PeriodCheck utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RetVal
Integer
PeriodString
String
Ejemplo
'Example placed in Chk event of a String user field
'The mask property on this field is Custom mask Type, 99-9999
Dim Year$, Period$
Year = Right$(chkstrg, 4)
Period = Left$(chkstrg, 2)
serr = PeriodCheck(Year + Period)
180
Funcin PeriodMinusPeriod
Retorna el nmero de perodos entre dos perdos fiscales.
Sintaxis
NbrPeriods = PeriodMinusPeriod(PerNbr1, PerNbr2)
Observaciones
La funcin PeriodMinusPeriod utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
NbrPeriods
Integer
PerNbr1
String
PerNbr2
String
Nota: Esta funcin usar el nmero de perodos en un ao fiscal, tal como se especifica
en el registro GLSetup, a fin de obtener un resultado exacto.
Ejemplo
Dim Period1$, Period2$
Dim NumPers%
Period1 = GetObjectValue("cperpost")
Period2 = "199312"
NumPers = PeriodMinusPeriod(Period1, Period2)
If NumPers < 0 Then
Call MessBox("Cannot post back further than 12-93", MB_OK,
"Solomon Message")
End If
Tambin Vea
Funcin PeriodPlusPerNum
181
Funcin PeriodPlusPerNum
Agrega un nmero designado de perodos a un perodod fiscal existente.
Sintaxis
ResultingPerNbr = PeriodPlusPerNum(CurrPerNbr, NbrPeriodsToAdd)
Observaciones
La funcin PeriodPlusPerNum utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
ResultingPerNbr
String
CurrPerNbr
String
NbrPeriodsToAdd
Integer
Nota: Esta funcin usar el nmero de perodos en un ao fiscal, tal como se especifica
en el registro GLSetup, a fin de obtener un resultado exacto.
Ejemplo
'Increment PerPost to the next fiscal period
Dim NewPeriod$, PeriodToPost$, NumberOfPeriods%
NumberOfPeriods = 1
PeriodToPost = GetObjectValue("cperpost")
NewPeriod = PeriodPlusPerNum(PeriodToPost, NumberOfPeriods)
Tambin Vea
Funcin PeriodMinusPeriod
182
Funciones PVChkFetch
Recupera un registro compuesto desde la base de datos, usando una declaracin SQL
de la propiedad PV de un control SAFMaskedText.
Sintaxis
RetVal = PVChkFetch1(Ctrl, Cursor, SQLParmValue, bTable1, bTable1Length)
RetVal = PVChkFetch4(Ctrl, Cursor, SQLParmValue, bTable1, bTable1Length,
bTable2, bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length)
RetVal = PVChkFetch8(Ctrl, Cursor, SQLParmValue, bTable1, bTable1Length,
bTable2, bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length, bTable5,
bTable5Length, bTable6, bTable6Length, bTable7, bTable7Length, bTable8,
bTable8Length)
Observaciones
Cada control SAFMaskedText tiene una propiedad PV, la cual puede contener una
declaracin SQL o un nombre de procedimiento guardado. Estas funciones pueden ser
usadas para capturar una instancia de registro compuesto, basado en el texto SQL de la
propiedad PV del control especificado en el parmetro Ctrl. Estas funciones no son
aplicables si la propiedad PV no contiene una declaracin SQL o un nombre de
procedimiento guardado.
PVChkFetch1 est diseado para declaraciones SQL que retornen datos de una nica
tabla. Para declaraciones SQL ms avanzadas que tengan una o ms tablas asociadas se
puede utilizar PVChkFetch4 o PVChkFetch8.
La funcin PVChkFetch1 utiliza los siguientes argumentos (PVChkFetch4 y
PVChkFetch8 tienen cuatro y ocho estructuras de tablas respectivamente, y largos
correspondientes. PNULL debe usarse para parmetros de estructura de tablas no
usados, como tambin un largo correspondiente de cero, tal como PNULL, 0).
Argumento
Tipo
Descripcin
RetVal
Integer
0 si el registro es capturado
satisfactoriamente. Se retorna NOTFOUND si
ningn registro concuerda con la clusula de
restriccin de PV de la declaracin SQL.
Ctrl
Control
Cursor
Integer
SQLParmValue
String
bTable1
Tipo de dato
definido por el
usuario
bTable1Length
Integer
183
Ejemplo
El siguiente ejemplo ilustra el uso de PVChkFetch1 en el evento Chk de un control de
Payroll Work Location ID. Dado que PNULL es pasado para el parmetro de control,
la declaracin SQL en la propiedad PV del control cWrkLocId se usa a s misma. El ID
ingresado por el usuario es pasado al evento Chk como chkstrg. Al enviar este valor a
PVChkFetch1, ser usado como el ltimo parmetro de la clusula de restriccin de
PV de la declaracin SQL.
Sub cWrkLocId_Chk (chkstrg As String, retval As Integer)
Dim WorkLocation_Fetch
As Integer
Tambin Vea
Funciones DBNavFetch
184
Declaracin SaveTemplate
Salva o guarda informacin de la aplicacin actual a una plantilla designada.
Sintaxis
Call SaveTemplate(TemplateID, Description, AppliesToUserID, IncludeLowerLevels,
StartingLevelNbr)
Observaciones
La caracterstica de plantillas Solomon hace posible guardar datos de la pantalla actual
y pegar estos datos subsecuentemente dentro de esa misma pantalla ms tarde. Las
plantillas pueden ser guardadas a la base de datos mediante la declaracin
SaveTemplate, como tambin mediante el item de men Template en el men Edit.
Cada plantilla puede contener transacciones completas y entidades o campos
individuales seleccionados por el usuario. Caractersticas de das relativos o peridicos
permiten a una plantilla pegar datos relativos a la fecha actual y el perodo fiscal. Las
plantillas pueden ser diseadas como privadas a un usuario especfico o pblicos para
todo usuario. Las plantillas son guardadas en la base de datos del sistema, y por ello
son independientes de cualquier base de datos de una aplicacin particular.
A menos que se especifique lo contrario, todos los valores de fecha y valores
peridicos pegados desde una plantilla sern iguales a la fecha comercial Solomon
(Solomon business date), localizada en el men File, y el perodo actual para el
mdulo. Para sobreescribir esta accin por defecto, el dato que est ingresando el
usuario para la plantilla, debe especificar una nueva fecha relativa o valor peridico
para cada campo deseado. Esto es hecho justo antes de salvar una plantilla. El
especificar una fecha relativa o un valor peridico para un campo contenido en lneas
de detalle de una grilla cambiar el valor de la plantilla para ese campo para todas las
lneas de detalle. Valores relativos pueden ser defenidos seleccionando la fecha
pertinente o campo peridico y presienando F2 para iniciar la ventana de fecha relativa
(Relative Date) o la ventana de perodo relativo (Relative Period) la que sea
apropiada.
185
Tipo
Descripcin
TemplateID
String
Description
String
Descripcin de la plantilla.
AppliesToUserID
String
IncludeLowerLevels
Integer
StartingLevelNbr
Integer
Tambin Vea
Funcin PasteTemplate
186
Declaracin SDelete
Borra el registro actual desde una tabla designada dentro de una vista SQL existente.
Sintaxis
Call SDelete(Cursor, TablesDeletingFrom)
Observaciones
Un valor de *.* puede ser entregado como nombre de tabla, indicando que todos los
registros actuales en la vista existente sern borrados. Por favor, note que este llamado
requiere que el registro actual ya haya sido capturado mediante las funciones
SqlFetch1 o SFetch1, de tal manera que el cursor designado tenga un registro actual.
La declaracin SDelete utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Cursor
Integer
TablesDeletingFrom
String
Ejemplo
'Example is deleting in Solomon's OnDelete event
'Note that the following fetch been has issued in
'a preceding event prior to the delete call
serr1 = SqlFetch1(c1, "XCustInfo_All" +
sparm(chkstrg), bXCustAddlInfo, Len(bXCustAddlInfo))
Sub Delete(level%, retval%)
If Level = 0 Then
serr1 = sdelete(c1, "XCustAddlInfo")
End If
End Sub
Tambin Vea
Funciones SFetch, funciones SqlFetch
187
Funcin SDeleteAll
Borra todos los registros de la(s) tabla(s) designada(s) dentro de una vista predefinida.
Sintaxis
RetVal = SDeleteAll(Cursor, TablesDeletingFrom)
Observaciones
Borra los registros de algunas o todas las tablas dentro de una vista basado en
restricciones. Una vista debe haber sida inicializada previamente para el cursor
especfico, mediante las funciones Sql, SFetch1 o SqlFetch4. Si no se especifican
restricciones al inicializar el cursor, entonces este llamado borrar todos los registros
de la(s) tabla(s) designada(s) dentro de la vista.
La funcin SDeleteAll utiliza los siguientes argumentos:
Argument
Type
RetVal
Integer
Description
Cursor
Integer
TablesDeletingFrom
String
Ejemplo
Borra todos los vendedores que tengan cero en su balance.
Dim SqlStr
As String
Tambin Vea
Funciones SFetch, declaracin Sql, funciones SqlFetch
188
Declaracin SetBufferValue
Fija un campo de buffer de datos de una aplicacin Solomon subyacente a un valor
especificado.
Sintaxis
Call SetBufferValue(bTable.FieldName, Str)
Observaciones
Si una aplicacin VBA realiza su propia llamada VBA_SetAddr, puede entonces
referenciar cualquiera de estas estructuras desde dentro del cdigo. Sin embargo, si las
estructuras de la aplicacin Solomon subyacente necesitan ser referenciados y estos
compos no estn representados como objetos en el formulario, esta declaracin permite
a la aplicacin VBA obtener estos valores. Si los campos fueran objetos en el
formulario, la aplicacin VBA puede simplemente realizar un SetObjectValue.
Est alerta, que el uso de este llamado en ciertos momentos podra comprometer la
funcionalidad de la aplicacin Solomon subyacente, especialmente si se modifica un
campo condicional. De la misma forma, la aplicacin subyacente podra modificar el
valor, si usted lo ha fijado demasiado pronto.
La declaracin SetBufferValue utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
bTable.FieldName
String
Str
String
Ejemplo
Call SetBufferValue("bGLTran.RefNbr","000099")
Tambin Vea
Declaracin GetBufferValue
189
Declaracin SetDefaults
Fija uno o ms controles a su valor por defecto usando la propiedad Default o el cdigo
del evento Default.
Sintaxis
RetVal = SetDefaults (FormObjectName, FieldObjectName)
Observaciones
Cada objeto de dato tiene una propiedad Default y un evento Default. Cada objeto de
dato particular puede usar uno de estos dos mtodos para definir un dato por defecto a
s mismo. El sistema usa estos mtodos cada vez un objeto de dato particular es
inicializado a su valor por defecto. Una discusin exhaustiva de todas las veces que
esto ocurre est bajo la declaracin SetDefaults. Sin embargo, una vez que esto ocurre,
es cuando la aplicacin explcitamente le indica al sistema hacer esto mediante la
declaracin SetDefaults referenciando el objeto relevante.
La declaracin SetDefaults puede usarse para defenir por defecto todos los objetos de
un sub-formulario. La declaracin Level_SetDefaults es funcionalmente equivalente,
excepto a que puede ser usada para fijar por defecto todos los objetos que tengan un
nmero de nivel particular.
Dado que SetDefaults implica un cambio en el valor del dato del objeto designado, el
sistema marca el objeto como requerido para validacin de errores. Sin embargo, el
sistema no realiza la validacin de errores inmediatamente (por ejemplo, no ejecuta el
evento Chk inmediatamente). Sin embargo, se garantiza que la validacin de errores
ocurra antes de cualquier actualizacin de la base de datos.
Note que si la aplicacin necesita eliminar (null-out) un campo particular, quiz porque
el campo ya no sea aplicable, debe hacerlo explcitamente dentro del programa y luego
redesplegar el objeto relevante mediante la declaracin DispField. Despus de que el
objeto haya sido redesplegado, puede ser deshabilitado mediante la declaracin
SetProp. La declaracin SetDefaults no debe ser usada en estos casos, an cuando el
control relevante no tenga un valor en la propiedad Default y no tenga cdigo en el
evento Default. Un desarrollador podra extraarse del por qu de esta precausin,
dado que el campo est eliminado cuando no exista propiedad Default y no exista
cdigo de evento Default, y por ello, la aplicacin trabaje correctamente durante las
pruebas. El siguiente cdigo ilustra conceptualmente como eliminar y deshabilitar un
control que ya no es aplicable:
Record.Field = NULL (0 for numeric datatypes , "" for string datatype)
Call DispFields("Form1", "cField")
Call SetProp ("cField", PROP_ENABLED, False)
190
Tipo
Descripcin
RetVal
Integer
FormObjectName
String
FieldObjectName
String
Ejemplo
Este ejemplo captura desde una tabla adaptada, evala el valor de retorno y establece
un formulario adaptado para entradas o ediciones.
serr1 = sqlfetch1(c1, "XCustAddlInfo_CustId" +
sparm(chkstrg), bXCustAddlInfo, Len(bXCustAddlInfo))
If serr1 = NOTFOUND Then
serr1 = SetDefaults("NewInfo", "")
bXCustAddlInfo.CustId = chkstrg
Found_Cust = "N"
Else
Found_Cust = "Y"
End If
Call DispFields("NewInfo","")
Tambin Vea
Declaracin DispField, declaracin SetProp
191
Sintaxis
Call SetLevelChg(LevelNbr, Status)
Observaciones
Cada nivel de actualizacin, tal como se define en la propiedad Levels del control
SAFUpdate, tiene una bandera de estado de nivel correspondiente, la cual es
mantenida en forma automtica por el sistema. El propsito de la bandera de estado de
nivel es facilitar la optimizacin de actualizaciones de bases de datos realizados como
respuesta a los botones de la barra de herramientas Parent. En general, estas banderas
permiten al sistema realizar solamente actualizaciones de bases de datos para niveles
de actualizacin que hayan sido modificados. Si ninguna informacin ha cambiado,
entonces ninguna informacin necesita ser guardada.
Como se mecion anteriormente, estas banderas de actualizacin son mantenidas en
forma automtica por el sistema. Cuando un registro existente es cargado, la bandera es
fijada a NOTCHANGED. Si cualquier campo no clave es modificado
subsecuentemente, entonces la bandera de estado de nivel para el nivel correspondiente
es fijada a UPDATED. Cuando un nuevo registro es ingresado, la bandera de estado de
nivel es fijada a INSERTED.
La declaracin SetLevelChg permite a la aplicacin sobreescribir el valor actual de la
bandera de estado para un nivel particular. Esto puede ser til si un valor de dato es
modificado en el programa, y por ello el sistema necesita ser notificado que algo ha
cambiado, para que de esta forma la informacin correspondiente sea guardada cuando
el usuario oprima el botn Save en la barra de herramientas.
La declaracin SetLevelChg utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
LevelNbr
Integer
Status
Integer
192
Ejemplo
La ventana Earnings Type Maintenance (02.270.00) del mdulo Payroll contiene un
botn que llena la grilla en forma automtica con todas las deducciones (Deductions).
Esto equivale a insertar registros dentro de la grilla (i.e. dentro del arreglo de memoria
subyacente) bajo el control de programa. Dado que los datos no son ingresados
mediante la interfaz de usuario, el sistema necesita ser notificado que informacin a
nivel de grilla (i.e. LEVEL1 en este caso) ha sido actualizada mediante el programa, y
por ello necesita ser guardada. Sin embargo, esta notificacin slo es necesaria si el
sistema no es conciente de que estos datos hayan sido modificados.
'If any records were inserted into the memory array then we need to make
'sure that the level status for the detail level is something other than
'NOTCHANGED so the system will know that something needs to be saved.
If (AnyRecsInserted = True) Then
If (TestLevelChg(LEVEL1) = NOTCHANGED) Then
Call SetLevelChg(LEVEL1, UPDATED)
End If
End If
Tambin Vea
Funcin TestLevelChg
193
Funcin SetObjectValue
Fija el valor de campo de un objeto especfico.
Sintaxis
IntVar = SetObjectValue( ObjectName, Value)
Observaciones
Esta funcin le permite fijar el valor de cualquier objeto ligado en la pantalla. El objeto
debe estar en el formulario para poder ser fijado. Si usted desea fijar un valor de un
campo que no est en el formulario, puede usar la declaracin SetBufferValue.
El evento Chk del objeto que usted fija tambin se ejecuta, de modo de realizar la
validacin de errores.
La funcin SetObjectValue utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
IntVal
Integer
ObjectName
String
Value
String
Ejemplo
Dim CommissionAmount As Double
Dim ExtendedAmount As Double
ExtendedAmount = Val (chkstrg$)
If ExtendedAmount <= 1000 Then
CommissionAmount = 1
ElseIf ExtendedAmount <= 2000 then
CommissionAmount = 2
ElseIf ExtendedAmount <= 3000 then
CommissionAmount = 3
Else
CommissionAmount = 4
End If
serr1 = SetObjectValue ("ccmmnpct", Str$(CommissionAmount))
Tambin Vea
Funcin GetObjectValue, declaracin SetBufferValue
194
Declaracin SetProp
Fija las propiedades de objetos en tiempo de ejecucin.
Sintaxis
Call SetProp (ObjectName, PropertyName, PropertyValue)
Observaciones
Permite a la aplicacin fijar valores de propiedades en tiempo de ejecucin. Esta
funcin no debiera ser usada para fijar valores por defecto de las propiedades.
La declaracin SetProp utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
ObjectName
String
PropertyName
String
PropertyValue
Integer
PROP_BLANKERR (requerida)
Integer
TRUE / FALSE
PROP_CAPTION
String
PROP_CUSTLIST
String
PROP_ENABLED
Integer
PROP_HEADING
String
PROP_MASK
String
PROP_MIN
String
PROP_MAX
String
PROP_TABSTOP
Integer
TRUE / FALSE
PROP_VISIBLE
Integer
TRUE / FALSE
TRUE / FALSE
195
Ejemplo
'Enable push button
Call SetProp("OpenButton", PROP_ENABLED, True)
'Disable push button
Call SetProp("OpenButton", PROP_ENABLED, False)
'Make an object invisible
Call SetProp("cname", PROP_VISIBLE, False)
'Example uses a password dialog for setting a field invisible at runtime
Dim PassWord$
PassWord = PasswordBox$("Enter the Password Override","Message")
' Get password (case sensitive)
If Trim$(PassWord) = "SYSADMIN" Then
MsgBox(PassWord)
Call SetProp("clastchkdate", PROP_VISIBLE, True)
End If
Tambin Vea
Declaracin MSetProp, funcin SetDefaults
196
Declaracin SetStatusBarText
Desplega texto en la barra de estado (Status Bar) de la aplicacin.
Sintaxis
Call SetStatusBarText (StatusBarText, ToolTip)
Observaciones
Esta funcin permite fijar texto en la barra de herramientas. El primer parmetro
contiene el texto a ser desplegado en la barra de herramientas, el segundo parmetro
contiene el texto a ser desplegado en el cuadro de ayuda al lado izquierdo de la barra
de herramientas. Si se entrega una cadena de caracteres vaca () para el segundo
parmetro, el texto del primer parmetro ser usado para el cuadro de ayuda.
Ejemplo
Este ejemplo despliega la descripcin de cuenta en la barra de estado de la aplicacin
en Journal Entry (01.010).
Sub cacct_Chk(chkstrg$, retval%)
Dim SqlStr as String
Dim xDescr as String
Dim xRetVal as Integer
' Get Account information.
SqlStr = "Select * from account where acct = " & chkstrg
xRetVal = SqlFetch1(xCursor, SqlStr, bAccount, Len(bAccount))
Call SetStatusBarText( bAccount.Descr, "")
End Sub
197
Funciones SFetch
Se utiliza para capturar un registro compuesto de la base de datos, basado en alguna
declaracin SQL predefinida o procedimiento guardado.
Sintaxis
RetVal = SFetch1(Cursor, bTable1, bTable1Length)
RetVal = SFetch4(Cursor, bTable1, bTable1Length, bTable2, bTable2Length,
bTable3, bTable3Length, bTable4, bTable4Length)
RetVal = SFetch8(Cursor, bTable1, bTable1Length, bTable2, bTable2Length,
bTable3, bTable3Length, bTable4, bTable4Length, bTable5, bTable5Length, bTable6,
bTable6Length, bTable7, bTable7Length, bTable8, bTable8Length)
Observaciones
Para capturar informacin desde el servidor, se debe saber cual tabla, registros y
campos son requeridos por un cursor particular. Consecuentemente, el cursor debe ser
inicializado primero, ya sea con una declaracin SQL o un procedimiento guardado,
mediante la declaracin Sql o las funciones SqlFetch1, SqlFetch4 o SqlFetch8. Una
vez que la vista de la base de datos haya sido establecida, estas funciones van a rescatar
el siguiente registro secuencialmente, consistente con la clusula Order By de la
declaracin SQL usada para inicializar la vista. Despus de que el ltimo registro de la
vista haya sido retornado, todas las siguientes llamadas a SFetch1, SFetch4 y SFetch8
retornarn NOTFOUND.
SFetch1 est diseado para declaraciones SQL que retornen datos de una nica tabla.
Para declaraciones SQL ms avanzadas que tengan una o ms tablas asociadas se
puede utilizar SFetch4 o SFetch8.
La funcin SFetch1 utiliza los siguientes argumentos (SFetch4 y SFetch8 tienen
cuatro y ocho estructuras de tablas respectivamente, y largos correspondientes. PNULL
debe usarse para parmetros de estructura de tablas no usados, como tambin un largo
correspondiente de cero, tal como PNULL, 0).
198
Argumento
Tipo
Descripcin
RetVal
Integer
0 si el registro es capturado
satisfactoriamente. Se retorna NOTFOUND si
no existe ningn otro registro adicional en la
vista actual.
Cursor
Integer
bTable1
Tipo de dato
definido por el
usuario
bTable1Length
Integer
Ejemplo
Este ejemplo establece una conexin entre la tabla de inventario y la pantalla existente
para visualizacin y navegacin unicamente.
(general) declarations:
'$include: "inventor.dh"
Form1_Load
Call VBA_SetAddr(c1, "bInventory", bInventory, Len(bInventory))
Call SqlCursor(c1, NOLEVEL)
Dim SqlStmt$
SqlStmt = "Select * from Inventory Where ClassID = 'BOX'Order By ClassID"
Call Sql(c1, SqlStmt)
serr1 = Sfetch1(c1, bInventory, Len(bInventory))
While serr1 <> NOTFOUND
'Check LastCost
If bInventory.LastCost > 0 Then
'Last Cost is positive
End If
Tambin Vea
Declaracin Sql, funciones SqlFetch
199
200
Funciones SGroupFetch
Se utiliza para capturar un registro compuesto de la base de datos, basado en alguna
declaracin SQL predefinida o procedimiento guardado que contenga una o ms
funciones agregadas grupales (group aggregate functions) y/o clusulas.
Sintaxis
RetVal = SGroupFetch1(Cursor, bTable1, bTable1Length)
RetVal = SGroupFetch4(Cursor, bTable1, bTable1Length, bTable2, bTable2Length,
bTable3, bTable3Length, bTable4, bTable4Length)
RetVal = SGroupFetch8(Cursor, bTable1, bTable1Length, bTable2, bTable2Length,
bTable3, bTable3Length, bTable4, bTable4Length, bTable5, bTable5Length, bTable6,
bTable6Length, bTable7, bTable7Length, bTable8, bTable8Length)
Observaciones
Para capturar informacin desde el servidor, se debe saber cual tabla, registros y
campos son requeridos por un cursor particular. Consecuentemente, el cursor debe ser
inicializado primero, ya sea con una declaracin SQL o un procedimiento guardado,
mediante la declaracin Sql. SGroupFetch1, SGroupFetch4 o SGroupFetch8 estn
diseadas solamente para los casos en que la declaracin SQL usada para inicializar el
cursor contenga uno o ms de lo siguiente:
Funciones de aglomeracin grupal (Group aggregate functions), tales como Count
y Sum
Palabra clave DISTINCT
Clusula GROUP BY
Clusula HAVING
Subqueries
El equivalente lgico de las funciones SFetch1, SFetch4 y SFetch8 debe ser usado si
la declaracin SQL no contiene ninguno de los items indicados arriba. Una vez que la
vista de la base de datos haya sido establecida, estas funciones van a rescatar el
siguiente registro secuencialmente, consistente con la clusula Order By de la
declaracin SQL usada para inicializar la vista. Despus de que el ltimo registro de la
vista haya sido retornado, todas las siguientes llamadas a SGroupFetch1,
SGroupFetch4 y SGroupFetch8 retornarn NOTFOUND.
SGroupFetch1 est diseado para declaraciones SQL que retornen datos de una nica
tabla. Para declaraciones SQL ms avanzadas que tengan una o ms tablas asociadas se
puede utilizar SGroupFetch4 o SGroupFetch8.
La funcin SGroupFetch1 utiliza los siguientes argumentos (SGroupFetch4 y
SGroupFetch8 tienen cuatro y ocho estructuras de tablas respectivamente, y largos
correspondientes. PNULL debe usarse para parmetros de estructura de tablas no
usados, como tambin un largo correspondiente de cero, tal como PNULL, 0).
201
Argumento
Tipo
Descripcin
RetVal
Integer
Cursor
Integer
bTable1
Tipo de dato
definido por el
usuario
bTable1Length
Integer
Nota: el tipo y largo de los datos retornados pueden variar cuando la declaracin SQL
contiene una o ms aglomeraciones grupales. Para la aglomeracin grupal COUNT, los
datos sern retornados siempre como integer de 4 bytes (i.e. tipo de dato Long VB).
Las aglomeraciones grupales MIN y MAX retornan siempre el mismo tipo de dato y
largo como el campo en el cual se basa. Las aglomeraciones grupales SUM y AVG
siempre retornan valores de punto flotante de 8 bytes (i.e. tipo de dato Double VB).
202
Ejemplo
El ejemplo recupera la ltima fecha de comprobante (voucher date) para el vendedor
actual y selecciona una cuenta de todos los documentos anteriores a la ltima fecha de
comprobante.
Dim SqlStr$
Dim CountDoc As Long
Dim DateComp As Sdate
DateComp.Val = GetObjectValue("clastvodate")
SqlStr = "Select Count(*) from APDoc Where DocDate < " + Dparm(DateComp)
Call Sql(c1, SqlStr)
serr1 = sgroupfetch1(c1, CountDoc, Len(CountDoc))
Print "Number of Documents: " + str$(CountDoc)
Second Example
Dim QtyOnHand#, TotCost#, SqlStmt$, ItemID$, MessStr$
SqlStmt = "Select Sum(QtyOnHand), Sum(TotCost) from ItemSite Where
ItemSite.InvtId = @parm1 Order By ItemSite.InvtId"
ItemId = GetObjectValue("cinvtid")
Call Sql(c1, SqlStmt)
Call SqlSubst(c1, "parm1", ItemID)
Call SqlExec(c1)
serr1 = sgroupfetch4(c1, QtyOnHand, Len(QtyOnHand), TotCost,
Len(TotCost), "", 0, "", 0)
MessStr = "Qty On Hand " + Str$(QtyOnHand) + "Total Cost "+ Str$(TotCost)
Call MessBox( MessStr, MB_OK, "Message")
Tambin Vea
Funciones SFetch, declaracin Sql
203
Declaracin SInsert
Inserta un registro dentro de cada tabla especificada dentro de una vista de base de
datos existente.
Sintaxis
Call SInsert1(Cursor, TablesInsertingInto, bTable1, bTable1Length)
Call SInsert4(Cursor, TablesInsertingInto, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length)
Call SInsert8(Cursor, TablesInsertingInto, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length, bTable5,
bTable5Length, bTable6, bTable6Length, bTable7, bTable7Length, bTable8,
bTable8Length)
Observaciones
Nuevos registros pueden ser inserados mediante el programa directamente a una table
de base de datos mediante el uso de las declaraciones SInsert1, SInsert4 y SInsert8.
Para insertar informacin a la base de datos, el servidor debe saber primero que tablas
estn siendo referenciadas con un cursor particular. Consecuentemente, el cursor debe
ser inicializado primero mediante una declaracin SQL o un procedimiento guardado,
mediante el uso de la declaracin Sql o las funciones SqlFetch1, SqlFetch4 o
SqlFetch8. Una vez que la vista de la base de datos haya sido establecida, estas
funciones van a insertar un nuevo registro dentro de cada tabla referenciada en el
argumento TablesInsertingInto, usando datos de argumentos de estructura de tablas
correspondientes.
SInsert1 est diseada para declaraciones SQL que referencian una tabla nica. En
este caso, TablesInsertingInto es siempre el nombre de la tabla nica referenciada. Para
declaraciones SQL ms avanzadas que tengan una o ms tablas asociadas se puede
utilizar SInsert4 o SInsert8. El referenciar ms de una tabla no fuerza
automaticamente la insercin de un registro dentro de cada tabla de la vista cada vez
que se usa SInsert4 o SInsert8 en el cursor correspondiente. Un registro nico slo
ser insertado a cada tabla explicitamente especificado en el argumento
TablesInsertingInto, siempre que cada nombre de tabla especificado sea tambin
referenciado en la declaracin SQL, la cual fue usada para inicializar la vista actual.
As, por ejemplo, si TableA y TableB son las nicas dos tablas referenciadas en la
declaracin SQL usada para inicializar la vista actual, entonces un valor de TableXYZ
ser invlido para el argumento TablesInsertingInto.
204
Tipo
Descripcin
Cursor
Integer
TablesInsertingInto
String
bTable1
Tipo de dato
definido por el
usuario.
bTable1Length
Integer
Ejemplo
Ejemplo adjunto al evento OnUpdate de la pantalla de Solomon:
If Level = 0 Then
If Found_Cust = "Y" then
Call supdate1(c1, "XCustAddlInfo",
bXCustAddlInfo,Len(bXCustAddlInfo))
Else
Call sinsert1(c1,"XCustAddlInfo",
bXCustAddlInfo,Len(bXCustAddlInfo))
End If
End If
Example 2
Insert new entry into Customer and ARHist tables
Call Sinsert4(c1, "*.*", bCustomer, Len(bCustomer),
bARHist, Len(bARHist), "", 0, "", 0)
Tambin Vea
Declaracin Sql, funciones SqlFetch
205
Funcin SParm
Convierte una cadena de caracteres a un parmetro de cadena de caraceteres SQL.
Sintaxis
SQLParmStr = SParm(StrToConvert)
Observaciones
La funcin SParm utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
SQLParmStr
String
StrToConvert
String
Ejemplo
Este ejemplo asume que la siguiente declaracin SQL fue usada para crear un
procedimiento guardado llamado Employee_EmpId.
Select * from Employee where EmpId LIKE @parm1 order by EmpId
Tambin Vea
Funcin DParm, funcin FParm, funcin IParm
206
Declaracin Sql
Inicializa una nueva vista de base de datos.
Sintaxis
Call Sql(Cursor, SqlStr)
Observaciones
Toma el texto SQL especificado, lo compila y luego lo ejecuta. Si se requieren
operaciones de captura, entonces de debe llamar a una funcin SFetch. Si la
declaracin SQL est realizando una operacin Update Set, Delete From o Insert Into,
no se requieren operqaciones de captura subsecuentes. Si la declaracin SQL est
referenciando uno o ms parmetros, entonces las funciones SqlSubst y SqlExec
tambin deben ser llamadas.
La declaracin Sql utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Cursor
Integer
SqlStr
String
Ejemplo
Dim SqlStr
As String
Tambin Vea
Funciones SFetch, declaracin SqlExec, declaracin SqlSubst
207
Declaracin SqlCursor
Destina un nuevo cursor de base de datos.
Sintaxis
Call SqlCursor(Cursor, Flags)
Observaciones
Toda comunicacin de lectrura/escritura entre una aplicacin y la base de datos debe
ocurrir a travs de un cursor de base de datos. Un cursor es basicamente un recurso de
la base de datos usado para rastrear informacin de bajo nivel requerida para
implementar las operaciones de lectura/escritura de la base de datos SQL. Por ejemplo,
un cursor rastrea la declaracin SQL usada para inicializar la vista actual, cuales
campos individuales fueron seleccionados, el registro actual dentro de la vista, como
tambin informacin ms detallada.
Cada nivel dentro de la pantalla debe tener un cursor correspondiente ubicado dentro
del evento Form_Load de Form1, para facilitar las actividades de lectura/escritura de la
base de datos en ese nivel. Adicionalmente, muchos de los llamados API SQL dentro
de las herramientas de Solomon para Visual Basic, tales como Sql, SFetch1,
SqlFetch1 y SUpdate1 requieren un cursor de base de datos como uno de sus
argumentos.
Cada aplicacin puede tener un mximo de 36 cursores. Los cursores que ya no se
estn utilizando por la aplicacin pueden ser liberados opcionalmente mediante la
declaracin SqlFree. Todos los cursores son liberados en forma automtica por el
sistema cuando la aplicacin termina de ejecutarse (i.e. cuando se llama ScreenExit).
La declaracin SqlCursor utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Cursor
Integer
Flags
Integer
208
Las siguientes constantes simblicas pueden ser colocadas como Flags (al agregarlas a
las constantes simblicas requeridas LEVEL0 a LEVEL9 o NOLEVEL):
SqlList Operaciones de lectura/escritura realizadas en el cursor sern guardadas
automaticamente para mejorar el rendimiento. Si una aplicacin actualiza an un
registro en un cursor almacenado, debe actualizar todas las lecturas de registro con
ese cursor dentro de la misma transaccin de base de datos. Si el cumplimiento de
este requerimiento falla, resultar un error de sparse update.
SqlSystemDb Todas las operaciones de la base de datos sern conducidas en la
base de datos del sistema, en vez de ser conducidas en la base de datos de la
aplicacin.
Ejemplo
'Example declares a dynamic cursor in Form1_Load
'because it will be used elsewhere in the application
'NoLevel indicates no updating on this cursor,
'only lookups will be performed
Call SqlCursor(c1, NoLevel)
'NoLevel + SQLList indicates a buffered cursor
Call SqlCursor(c2, NoLevel + SqlList)
'Example declares a static cursor in Chk event. Note
'that a previous SqlCursor call was not made for c3:
Dim SqlStmt$
Dim CountResult As Long
SqlStmt = "Select Count(*) from Customer"
Call Sql(c3, SqlStmt)
serr1 = SgroupFetch1(c3, CountResult, Len(CountResult))
Call MessBox("Count is: " + Str$(CountResult), MB_OK, "Message")
Tambin Vea
Funciones SFetch, declaraciones SInsert, declaracin Sql, funciones SqlFetch,
declaracin SqlFree, declaraciones SUpdate
209
Declaracin SqlCursorEx
Destina un nuevo cursor de base de datos.
Sintaxis
Call SqlCursorEx(Cursor, Flags, CursorName, ReferencedTableNames,
UpdateTableNames)
Observaciones
Toda comunicacin de lectrura/escritura entre una aplicacin y la base de datos debe
ocurrir a travs de un cursor de base de datos. Un cursor es basicamente un recurso de
la base de datos usado para rastrear informacin de bajo nivel requerida para
implementar las operaciones de lectura/escritura de la base de datos SQL. Por ejemplo,
un cursor rastrea la declaracin SQL usada para inicializar la vista actual, cuales
campos individuales fueron seleccionados, el registro actual dentro de la vista, como
tambin informacin ms detallada.
Cada nivel dentro de la pantalla debe tener un cursor correspondiente ubicado dentro
del evento Form_Load de Form1, para facilitar las actividades de lectura/escritura de la
base de datos en ese nivel. Adicionalmente, muchos de los llamados API SQL dentro
de las herramientas de Solomon para Visual Basic, tales como Sql, SFetch1,
SqlFetch1 y SUpdate1 requieren un cursor de base de datos como uno de sus
argumentos. Si el manejador de cursor entregado a una de esas llamadas API SQL no
ha sido destinado previamente, entonces ser destinado automaticamente durante la
llamada. Sin embargo, es necesario estar consciente del hecho de que todos los
cursores no destinados explcitamente, mediante un llamado SqlCursorEx, son
designados automaticamente como cursores de solo-lectura.
Cada aplicacin puede tener un mximo de 36 cursores. Los cursores que ya no se
estn utilizando por la aplicacin pueden ser liberados opcionalmente mediante la
declaracin SqlFree. Todos los cursores son liberados en forma automtica por el
sistema cuando la aplicacin termina de ejecutarse (i.e. cuando se llama ScreenExit).
210
Tipo
Descripcin
Cursor
Integer
Flags
Integer
CursorName
String
ReferencedTableNames
String
UpdateTableNames
String
211
212
213
Funcin SqlErr
Obtiene el valor de retorno de la ltima operacin SQL realizada.
Sintaxis
RetVal = SqlErr()
Observaciones
Esta funcin puede ser usada luego de cualquier llamado SQL que sea una declaracin
(opuesto a una funcin), para obtener un valor de retorno. Por ejemplo, la llamada
SInsert1 es declarada una subrutina y no retorna un valor a la aplicacin. En la
mayora de los casos, la aplicacin no necesita verificar el retorno de esta llamada,
dado que SWIM atrapa por defecto todos los cdigos de retorno, salvo las constantes
simblicas 0 y NOTFOUND. Sin embargo, en casos especiales, en donde la
declaracin SqlErrException es usada para darle ms control de manejo de errores a
la aplicacin, la aplicacin necesitar obtener el cdigo de retorno. Esta funcin se usa
para ese propsito.
La funcin SqlErr retorna una de las siguientes constantes globales integer, declaradas
en el mdulo VBTools_VBA:
Valor de Retorno
Descripcin
DUPLICATE
Ejemplo
Este ejemplo ilustra cmo insertar un registro Batch numerado nicamente dentro de la
base de datos. El ejemplo asume que una transaccin de base de datos est activa
cuando se llama el procedimiento ilustrado. SqlErrException y SqlErr son usados
para detectar error de duplicidad de nmero batch, sin causar que Swim aborte la
transaccin. El procedimiento de ejemplo recibe dos parmetros:
BatchStruct Un registro Batch, el cual va a ser grabado en la base de datos, que
YA tiene todos los campos relevantes inicializados, EXCETPUANDO el nmero
batch.
AutoNbr_SqlStr El nombre de un procedimiento guardado de nmero propio,
el cual va a capturar los campos AutoBat y LastBatNbr (en ese orden) de uno de
los registros setup.
Sub BATCH_AUTONBR_INSERT (BatchStruct As Batch, ByVal AutoNbr_SqlStr As
String)
Dim AutoNbrFetch
As Integer
214
Tambin Vea
Declaracin SqlErrException
215
Declaracin SqlErrException
Revierte la lgica de manejo de errores para uno o ms cdigos de errores.
Sintaxis
Call SqlErrException (ToggleFlag, ErrorToExcept)
Observaciones
Por defecto, todos los cdigos de errores, excepto 0 y NOTFOUND, son atrapados
dentro de SWIM y no son retornados a la aplicacin. Para alterar este comportamiento,
la aplicacin puede usar la declaracin SqlErrException para decirle a SWIM que no
atrape ciertos errores, y los retorne a la aplicacin. Esta declaracin es usada en
conjunto con la funcin SqlErr.
Note que la aplicacin es responsable de revertir la excepcin, una vez que ya no sea
necesaria.
La declaracin SqlErrException utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
ToggleFlag
Integer
ErrorToExcept
Integer
216
Ejemplo
Dim DupFlag%
DupFlag = DUPLICATE
'Tell the Solomon to return DUPLICATE status messages
Call SqlErrException(EXCEPTION_ON, DUPLICATE)
'Loop until a non duplicate number is assigned
Do Until DupFlag <> DUPLICATE
'Increment last reference number
Call IncrStrg(bARSetup.LastRefNbr, Len(bARSetup.LastRefNbr, 1)
'Attempt to insert the new refnbr
bARDoc.RefNbr = bARSetup.LastRefNbr
bRefNbr.RefNbr = bARDoc.RefNbr
Call sinsert1(c8, "RefNbr", bRefNbr, Len(bRefNbr))
'Check the return value for duplicates
DupFlag = SqlErr() 'DUPLICATE or 0
Loop 'Until exited with a good Refnbr
Tambin Vea
Funcin SqlErr
Declaracin SqlExec
Ejecuta una declaracin SQL dentro de lnea.
Sintaxis
Call SqlExec(Cursor)
Observaciones
Ejecuta una declaracin SQL dinmica en un cursor que ha sido inicializado
previamente con llamadas a las declaraciones Sql y SqlSubst (en ese orden).
La declaracin SqlExec utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Cursor
Integer
Ejemplo
Dim VendorCount&, SqlStmt$
SqlStmt = "Select Count(*) from Vendor Where VendId Like @parm1"
Call Sql(c1, SqlStmt)
Call SqlSubst(c1, "parm1", "V001%")
Call SqlExec(c1)
serr1 = sgroupfetch1(c1, VendorCount, Len(VendorCount))
Call MessBox("Count is " + Str$(VendorCount), MB_OK, "Message")
Tambin Vea
Declaracin Sql, declaracin SqlSubst
217
218
Funciones SqlFetch
Usadas para inicializar una nueva vista de base de datos y recuperar inmediatamente un
registro compuesto.
Sintaxis
RetVal = SqlFetch1(Cursor, SqlStr, bTable1, bTable1Length)
RetVal = SqlFetch4(Cursor, SqlStr, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length)
RetVal = SqlFetch8(Cursor, SqlStr, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length, bTable5,
bTable5Length, bTable6, bTable6Length, bTable7, bTable7Length, bTable8,
bTable8Length)
Observaciones
Para poder recuperar informacin desde una base de datos, primero debe ser
inicializada una vista de base de datos, especificando qu tablas, campos y criterios de
restriccin se van a utilizar. Segundo, una peticin por datos debe ser enviada al
servidor desde una vista actual. Cada una de las funciones SqlFetch1, SqlFetch4 y
SqlFetch8 realizan efectivamente ambas de estas operaciones en una nica llamada, lo
cual requirira de otra forma una combinacin de dos llamadas (i.e. Sql y SqlFetch1).
En situaciones de secuencias, en donde un programa necesita leer secuencialmente a
travs de mltiples registros en una vista, estas funciones son convenientes para
inicializar una vista y capturar inmediatamente el primer registro. Sin embargo, no
debieran ser usadas para los registros subsiguientes, dado que la vista es re-establecida
cada vez que se llama a SqlFetch1, SqlFetch4 o SqlFetch8, y por ello ellas slo
recuperarn siempre el primer registro de la vista. En estos casos, SFetch1, SFetch4 o
SFetch8 pueden ser usados para capturar los registros subsiguientes.
SqlFetch1 est diseada para declaraciones SQL que referencian una tabla nica. Para
declaraciones SQL ms avanzadas que tengan una o ms tablas asociadas se puede
utilizar SqlFetch4 o SqlFetch8.
La funcin SFetch1 utiliza los siguientes argumentos (SqlFetch4 y SqlFetch8 tienen
cuatro y ocho estructuras de tablas respectivamente, y largos correspondientes. PNULL
debe usarse para parmetros de estructura de tablas no usados, como tambin un largo
correspondiente de cero, tal como PNULL, 0).
219
Argumento
Tipo
Descripcin
RetVal
Integer
Cursor
Integer
SqlStr
String
bTable1
Tipo de dato
definido por el
usuario
bTable1Length
Integer
Ejemplo 1
Ejemplo del evento CustId chk, el cual captura nueva informacin de tabla.
SUB ccustid_Chk(chkstrg$, retval%)
serr1 = sqlfetch1(c1, "XCustAddlInfo_CustId" + sparm(chkstrg),
bXCustAddlInfo, Len(bXCustAddlInfo))
If serr1 = NOTFOUND Then
serr1 = SetDefaults("NewInfo", "")
bXCustAddlInfo.CustId = chkstrg
Found_Cust = "N"
Else
Found_Cust = "Y"
End If
Call DispFields("NewInfo","")
END SUB
220
Ejemplo 2
'Select Unreleased APDocs and Join Vendor Table
Dim SqlStmt$
SqlStmt$ = "Select * from APDoc, Vendor Where APDoc.VendId =
Vendor.VendId(+) And APDoc.Rlsed = 'False'
Order by APDoc.RefNbr
serr1 = sqlfetch4(c1, SqlStmt, bAPDoc, Len(bAPDoc),
bVendor,Len(bVendor),
"", 0, "", 0)
Tambin Vea
Funcin DParm, funcin FParm, funcin IParm, funciones SGroupFetch, funcin
SParm, declaracin Sql, funciones SqlFetch
221
Declaracin SqlFree
Libera un cursor de base de datos, el cual ya no es necesario para la aplicacin.
Sintaxis
Call SqlFree(Cursor)
Observaciones
La declaracin SqlFree es usada para liberar cursores que hayan sido establecidos con
la declaracin SqlCursor. El uso de esta declaracin es completamente opcional. Es
usada normalmente cuando un cursor ya no es necesitado por una aplicacin, cuyo
nmero total de cursores est muy cerca del lmite mximo. Todos los cursores son
liberados en forma automtica por el sistema al terminar la ejecucin de la aplicacin
(i.e. cuando se llama ScreenExit).
La declaracin SqlFree utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Cursor
Integer
Ejemplo
El ejemplo utiliza SqlFree en una sub-rutina general.
Get APSetup Information set global variable NextRefNbr
Sub GetSetupInfo()
Call SqlCursor(c1)
Call SqlFetch1(c1, "APSetup_All", bAPSetup, Len(bAPSetup))
NextRefNbr = bAPSetup.LastRefNbr
Call SqlFree(c1)
End Sub
Tambin Vea
Declaracin SqlCursor
222
Declaracin SqlSubst
Especifica un valor de dato para un parmetro de sustitucin de una declaracin SQL
dentro de lnea, previamente ejecutada mendiante la funcin Sql.
Sintaxis
Call SqlSubst(Cursor, ParmName, ParmValue)
Observaciones
SqlSubst le permite especificar valores para una o ms variables de sustitucin en una
declaracin SQL dentro de lnea, que es ejecutada mediante la declaracin Sql. No
es utilizada en procedimientos guardados.
Esta declaracin debe ser llamada despus de la declaracin Sql y antes de la
declaracin SqlExec. Puede ser llamada cualquier nmero de veces antes de que se
llame SqlExec, dependiendo de quntos valores de parmetros hayan para sustitur
dentro de la declaracin SQL.
La declaracin SqlSubst utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Cursor
Integer
ParmName
String
ParmValue
String
Ejemplo
Dim VendorCount&, SqlStmt$
SqlStmt = "Select Count(*) from Vendor Where VendId Like @parm1"
Call Sql(c1, SqlStmt)
Call SqlSubst(c1, "parm1", "V001%")
Call SqlExec(c1)
serr1 = sgroupfetch1(c1, VendorCount, Len(VendorCount))
Call MessBox ( "Count is " + Str$(VendorCount), MB_OK, "Message")
Tambin Vea
Declaracin Sql, declaracin SqlExec
223
Declaracin StrToDate
Convierte un valor de fecha desde una cadena de caracteres en formato MMDDYYYY
hacia un formato de fecha SQL.
Sintaxis
Call StrToDate(DateStringToConvert, SQLDate)
La declaracin StrToDate utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
DateStringToConvert
String
SQLDate
Ejemplo
Dim NewDate As Sdate
Call StrToDate("10311994", NewDate)
Tambin Vea
Funcin DateToIntlStr, funcin DateToStr, funcin DateToStrSep, declaracin
IntlStrToDate
224
Declaracin StrToTime
Convierte un valor de hora desde un formato de cadena de caracteres HHMMSShh
hacia el formato de hora SQL.
Sintaxis
Call StrToTime(TimeStringToConvert, SQLTime)
La declaracin StrToTime utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
TimeStringToConvert
String
SQLTime
Ejemplo
Dim TimeVal As Stime
Dim TimeStr As String
TimeStr = "12010000"
Call StrToTime(TimeStr, TimeVal)
Tambin Vea
Funcin TimeToStr
225
Declaracin SUpdate
Actualiza un registro de cada tabla especificada dentro de una vista de base de datos
existente.
Sintaxis
Call SUpdate1(Cursor, TablesUpdating, bTable1, bTable1Length)
Call SUpdate4(Cursor, TablesUpdating, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length)
Call SUpdate8(Cursor, TablesUpdating, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length, bTable5,
bTable5Length, bTable6, bTable6Length, bTable7, bTable7Length, bTable8,
bTable8Length)
Observaciones
Los registros existentes pueden ser actualizados directamente en el programa mediante
el uso de las declaraciones SUpdate1, SUpdate4 y SUpdate8. Sin embargo, antes de
que un registro pueda ser actualizado, primero debe ser capturado, usando una de las
funciones SFetch1, SFetch4 y SFetch8 o SqlFetch1, SqlFetch4 y SqlFetch8. La
operacin de captura que precede la actualizacin debe hacerse usando la misma
vista/cursor de la base de datos, en la cual la actualizacin ocurra. Por ejemplo, si la
captura ocurre en el CursorA, entonces la actualizacin debe tambin ocurrir en el
CursorA. Sin embargo, una vez que la vista de la base de datos haya sido establecida,
estas funciones actualizarn el registro actual en la vista para cada tabla referenciada en
el argumento TablesUpdating, usando datos de los argumentos de la estructura de tabla
correspondiente.
SUpdate1 est diseada para declaraciones SQL que referencian una tabla nica. En
este caso, TablesUpdating es siempre el nombre de la tabla nica referenciada
actualmente. Para declaraciones SQL ms avanzadas que tengan uno o ms ligamientos
de tablas se puede usar SUpdate4 o SUpdate8. El referenciar ms de una tabla no
obliga automticamente actualizar el registro actual de cada tabla de cada vista cada
vez que se usa SUpdate4 o SUpdate8 en el cursor correspondiente. El registro actual
de una tabla particular de la vista ser actualizado nicamente si su nombre de tabla
correspondiente es especificado explcitamente en el argumento TablesUpdating,
mientras cada nombre de tabla especificado sea tambin referenciado en la declaracin
SQL, la cual fue usada para inicializar la vista actual. De esta forma, por ejemplo, si
TableA y TableB son las nicas dos tablas referenciadas en la declaracin SQL usada
para inicializar la vista actual, entonces un valor de TableXYZ ser invlido para el
argumento TablesUpdating.
La funcin SUpdate1 usa los siguientes argumentos (SUpdate4 y SUpdate8 tiene
cuatro y ocho estructuras de tablas y largos correspondientes. PNULL debiera ser
entregado para estructuras de tablas no usadas, como tambin un largo correspondiente
de cero, tal como PNULL, 0).
226
Argumento
Tipo
Descripcin
Cursor
Integer
TablesUpdating
String
bTable1
Tipo de dato
definido por el
usuario
bTable1Length
Integer
Nota: las actualizaciones de bases de datos que ocurran en cursores destinados por
SqlCursorEx usando la bandera SqlList (i.e. cursores guardados temporalmente) tiene
dos requerimientos nicos. Primero, la aplicacin debe actualizar todos los registros
que lee, usando un cursor guardado temporalmente, aunque actualice un solo registro.
El no cumplir con este requerimiento resultar en un error de actualizacin sparse.
Segundo, la aplicacin no debe modificar la vista en el cursor luego de que las
actualizaciones hayan ocurrido, hasta despus de que la transaccin haya terminado.
Por ejemplo, si la aplicacin est leyendo y actualizando registros de TableA en el
cursor guardado temporalmente CursorA, entonces CursorA no debiera ser usado para
cualquier otro propsito hasta despus de que la transaccin de la base de datos haya
finalizado. Si no se hacen actualizaciones usando el CursorA, entonces este
requerimiento no aplica.
Ejemplo
Este simple ejemplo actualiza todos los registros GLTran en General Ledger Batch
000001. En Solomon la liberacin de los registros GLTran conlleva lgica de
aplicacin adicional, lo cual no es relevante para la ilustracin de la declaracin
SUpdate4, y por ello ha sido remodido del ejemplo.
Este ejemplo asume que el procedimiento guardado
GLTran_Module_BatNbr_LineNbr fue originalmente creado mediante la siguiente
declaracin SQL:
Select * from GLTran
where Module = @parm1
and BatNbr = @parm2
and LineNbr between @parm3beg and @parm3end
order by Module, BatNbr, LineNbr
227
Dado que la declaracin SQL ms arriba solamente recoge datos slo desde tablas
nicas (por ejemplo, la tabla GLTran), SUpdate1 sera adecuado. Sin embargo, en este
ejemplo, SUpdate4 es usado para ilustrar como pasar , 0 para argumentos de
estructuras de tablas no usados.
Dim CSR_GLTran
Dim SqlStr
Dim GLTranFetch
As Integer
As String
As Integer
= "U"
= LTRUE
Tambin Vea
Fucniones SFetch, declaracin SqlCursor, funciones SqlFetch
228
Funcin TestLevelChg
Retorna la bandera de estado de actualizacin actual para un nivel especfico.
Sintaxis
Status = TestLevelChg(LevelNbr)
Observaciones
Cada nivel de actualizacin, tal como se define en la propiedad Levels del control
SAFUpdate, tiene una bandera de estado de nivel correspondiente que es mantenida
automticamente por el sistema. El propsito de la bandera de estado de nivel es
facilitar la optimizacin de la actualizacin de las bases de datos, realizada en respuesta
a los botones Parent de la barra de herramientas. En general, estas banderas permiten al
sistema realizar solamente actualizaciones de las bases de datos para niveles
actualizados, los cuales hayan sido modificados realmente. Si ninguna informacin se
ha modificado, entonces ninguna informacin necesita ser guardada.
Como mencionado anteriormente, estas banderas de actualizacin son mantenidas
atomticamente por el sistema. Cuando un registro existente es cargado, la bandera es
fijada a NOTCHANGED. Si algn campo no clave es modificado subsiguientemente,
entonces la bandera de estado de nivel para el nivel correspondiente ser fijada a
UPDATED. Cuando se est ingresando un nuevo registro, la bandera de estado de
nivel se fija a INSERTED.
La funcin TestLevelChg permite a la aplicacin accesar el valor actual de esta
bandera para un nivel especfico. La bandera de estado de nivel actual puede ser
sobreescrita por la aplicacin usando la declaracin SetLevelChg.
La funcin TestLevelChg utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
Status
Integer
LevelNbr
Integer
229
Ejemplo
La ventana del mdulo Earnings Type Maintenance (02.270.00) contiene un botn
para poblar automticamente la grilla con todas las deducciones. Esto equivale a
insertar registros dentro de la grilla (i.e. dentro de su arreglo de memoria subyacente),
bajo control de programa. Dado que los datos no son ingresados mediante la interfaz
del usuario, el sistema necesita ser notificado que informacin a nivel de grilla (i.e.
LEVEL1 en este caso) ha sido actualizada mediante el programa, y por lo tanto
necesita ser guardada. Sin embargo, tal notificacin slo necesita ocurrir si el sistema
no est al tanto de que los datos han sido modificados.
'If any records were inserted into the memory array then we need to make
'sure that the level status for the detail level is something other than
'NOTCHANGED so the system will know that something needs to be saved.
If (AnyRecsInserted = True) Then
If (TestLevelChg(LEVEL1) = NOTCHANGED) Then
Call SetLevelChg(LEVEL1, UPDATED)
End If
End If
Tambin Vea
Declaracin SetLevelChg
230
Funcin TimeToStr
Convierte un valor de hora desde el formato SQL a una cadena de caracteres en
formato HHMMSShh.
Sintaxis
TimeString = TimeToStr(TimeToConvert)
Observaciones
La funcin TimeToStr utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
TimeString
String
TimeToConvert
Ejemplo
'If any records were inserted into the memory array then we need to make
'sure that the level status for the detail level is something other than
'NOTCHANGED so the system will know that something needs to be saved.
If (AnyRecsInserted = True) Then
If (TestLevelChg(LEVEL1) = NOTCHANGED) Then
Call SetLevelChg(LEVEL1, UPDATED)
End If
End If
Tambin Vea
Declaracin StrToTime
231
Declaracin TranAbort
Aborta la transaccin de base de datos actual.
Sintaxis
Call TranAbort
Observaciones
La declaracin TranAbort permite a la aplicacin abortar una transaccin de base de
datos, la cual fue iniciada mediante la declaracin TranBeg.
El llamar a la declaracin TranAbort no es, sin embargo, el mtodo recomendado para
abortar transacciones. Si la transaccin a ser abortada es una operacin de
actualizacin (update operation) para una pantalla de aplicacin, entonces el mtodo
recomendado es que la aplicacin fije RetVal de su evento OnUpdate del control
SAFUpdate ya sea a un nmero de mensaje de error o a la constante simblica
ErrNoMess definida en el mdulo VBTools_VBA. Esto tambin tendr el efecto de
abortar la transaccin de base de datos actual.
Ejemplo
Call TranBeg(True)
....
'Perform Processing
.....
'Determine any error condition that would cause the transaction to abort
If ErrorCondition Then
Call TranAbort
End If
'Perform the Insert Or Update
Sinsert...
OR
Supdate...
OR
Sdelete...
'End Transaction/Commit Work to Database
Call TranEnd
Tambin Vea
Declaracin TranBeg, declaracin TranEnd, evento OnUpdate
232
Declaracin TranBeg
Inicia una transaccin de base de datos.
Sintaxis
Call TranBeg(IsAbortable)
Observaciones
Todas las actualizaciones de una base de datos deben ocurrir dentro de una transaccin
de base de datos. Todas las actualizaciones a la base de datos no sern realizadas en la
base de datos, hasta que la transaccin no haya finalizado mediante la declaracin
TranEnd.
Si ocurriera cualquier error durante la transaccin de la base de datos, entonces el
sistema aborta automticamente (i.e. quitar) todas las actualizaciones que ocurran
durante la transaccin, en vez de agregarlos a la base de datos. Si la transaccin es una
operacin de actualizacin para una pantalla de la aplicacin, entonces ser abortada
cuando la aplicacin fije RetVal en el evento OnUpdate del control SAFGrid ya sea a
un nmero de mensaje de error o a la constante simblica ErrNoMess definida en el
mdulo VBTools_VBA.
La declaracin TranBeg utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
IsAbortable
Integer
Ejemplo
Call TranBeg(True)
'Perform Processing
'Determine any error condition that would cause the transaction to abort
If ErrorCondition Then
Call TranAbort
End If
'Perform the Insert Or Update
Sinsert...
OR
Supdate...
OR
Sdelete
'End Transaction/Commit Work to Database
Call TranEnd
Tambin Vea
Declaracin TranEnd, funcin TranStatus, evento OnUpdate
233
Declaracin TranEnd
Finaliza la transaccin de base de datos actual y coloca todas las actualizaciones a la
base de datos.
Sintaxis
Call TranEnd
Observaciones
Si ocurriera cualquier error durante la transaccin de la base de datos, entonces el
sistema aborta automticamente (i.e. quitar) todas las actualizaciones que ocurran
durante la transaccin, en vez de colocarlas a la base de datos. Si la transaccin es una
operacin de actualizacin para una pantalla de la aplicacin, entonces ser abortada
cuando la aplicacin fije RetVal en el evento OnUpdate del control SAFGrid ya sea a
un nmero de mensaje de error o a la constante simblica ErrNoMess definida en el
mdulo VBTools_VBA.
Ejemplo
Call TranBeg(True)
'Perform Processing
'Determine any error condition that would cause the transaction to abort
If ErrorCondition Then
Call TranAbort
End If
'Perform the Insert Or Update
Sinsert...
OR
Supdate...
OR
Sdelete...
'End Transaction/Commit Work to Database
Call TranEnd
Tambin Vea
Declaracin TranBeg, funcin TranStatus, evento OnUpdate
234
Funcin TranStatus
Retorna el estado de la transaccin de base de datos actual, o la ltima realizada.
Sintaxis
IntegerErrVal = TranStatus()
Observaciones
Si una transaccin de base de datos no est abierta, entonces se retorna el estado de la
ltima transaccin de base de datos realizada.
Si la transaccin fue exitosa, se retorna el valor cero.
Si se retorna un valor diferente de cero, esto indica que ocurri un error fatal durante la
transaccin, y por ello ser, o ya ha sido abortada. En este caso, el valor de retorno
actual es en s mismo el nmero de mensaje de error que describe la naturaleza del
problema.
Ejemplo
Call TranBeg(True)
'Perform Processing
'Determine any error condition that would cause the transaction to abort
If ErrorCondition Then
Call TranAbort
End If
'Perform the Insert Or Update
Sinsert...
OR
Supdate...
OR
Sdelete...
'Test for Database condition
If TranStatus() <> 0 Then
Call TranAbort
End If
'End Transaction/Commit Work to Database
Call TranEnd
Tambin Vea
Declaracin TranBeg, declaracin TranEnd, evento OnUpdate
235
Funcin VBA_MExtend
Expande la grilla de una aplicacin, de tal modo que se pueda agregar otra estructura
de tabla a la grilla.
Sintaxis
RetVal = VBA_MExtend(MemHandle, bTable1, bTable1Length)
Observaciones
A pesar de que esta funcin se suministra para extender el nmero de tablas que son
accesadas por el control de grilla, la aplicacin VBA es responsable por todas las
entradas/salidas de la base de datos hacia la nueva tabla. Esto incluye el uso de
funciones de arreglo de memoria para circular a travs de la grilla en tiempo de
grabado, para determinar si el contenido de la estructura de la tabla subyacente ha
cambiado y realizar las acciones apropiadas.
La funcin VBA_MExtend utiliza los siguientes argumentos:
Argumento
Tipo
Descripcin
RetVal
Integer
MemHandle
Integer
bTable1
Tipo de dato
definido por
el usuario
bTable1Length
Integer
Ejemplo
El siguiente ejemplo expande la grilla para el grfico de la pantalla de cuentas
(accounts screen). Agrega la definicin de una nueva tabla, Xaccount, a la grilla
account.
Global GridHandle As Integer
'Calls in Form1_Load event:
Call VBA_SetAddr("bXAccount", bXAccount, nXAccount, LenB(bXAccount))
Call SQLCursor(c1, NOLEVEL)
'Calls in Form1_Display
GridHandle = GetGridHandle("Spread1")
serr1 = VBA_MExtend(GridHandle, bXAccount, LenB(bXAccount))
Tambin Vea
Fuincin GetGridHandle, declaracin VBA_SetAddr
236
Funciones VBA_MOpen
Abre un nuevo arreglo de memoria y retorna un nmero nico de arreglo de memoria
correspondiente.
Sintaxis
MemHandle = VBA_MOpen(DelRetToSystem, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length)
MemHandle = VBA_MOpen8(DelRetToSystem, bTable1, bTable1Length, bTable2,
bTable2Length, bTable3, bTable3Length, bTable4, bTable4Length, bTable5,
bTable5Length, bTable6, bTable6Length, bTable7, bTable7Length, bTable8,
bTable8Length)
Observaciones
Un arreglo de memoria debe estar abierto antes de poder realizar las operaciones de
insert, update, delete o navegacin del arreglo de memoria. El manejador de arreglo de
memoria retornado por VBA_MOpen y VBA_MOpen8 es utilizado al realizar este
tipo de operaciones en arreglos de memoria.
VBA_MOpen asigna espacio de memoria para hasta cuatro estructuras de tablas,
mientras que VBA_MOpen8 puede manejar hasta ocho estructuras de tablas diferentes
para cada registro de arreglo de memoria.
VBA_MOpen es slo usado para abrir arreglos de memoria que no estn asociados a
un control SAFGrid. Los arreglos de memoria que correspondan a grillas son abiertos
automticamente.
Las funciones VBA_MOpen utilizan los siguientes argumentos (VBA_MOpen8 tiene
ocho estructuras de tablas y largos correspondientes. PNULL debe usarse para
parmetros de estructuras de tablas no usados, de la forma PNULL,0)
Argumento
Tipo
Descripcin
MemHandle
Integer
bTable1
Tipo de dato
bTable1Length
Integer
bTable2
Tipo de dato
definido por el
usuario
bTable2Length
Integer
bTable3
Tipo de dato
definido por el
usuario
bTable3Length
Integer
237
Argumento
Tipo
Descripcin
bTable4
Tipo de dato
definido por el
usuario
bTable4Length
Integer
Ejemplo
Este ejemplo ilustra como abrir un arreglo de memoria y cargar el completo
Solomon Chart of Accounts dentro del arreglo recientemente creado.
Dim Mem_Account
As Integer
Dim CSR_Account
As Integer
Dim SqlStr
As String
Dim Account_Fetch
As Integer
Tambin Vea
Declaracin MClear, declaracin MClose, funcin MDelete, declaracin MDisplay,
funcin MFirst, declaracin MInsert, declaracin MKey, funcin MKeyFind, funcin
MLast, funcin MNext, funcin MPrev, declaracin MUpdate
238
Declaracin VBA_SetAddr
Asocia un nombre de tabla a una variable VB y un nmero opcional de nivel de
pantalla.
Sintaxis
Call VBA_SetAddr(TableNameStr, bTableName, nTableName, bTableNameLength)
Observaciones
La declaracin VBA_SetAddr facilita el ligamiento apropiado entre variables de dato
VB y controles de entrada relevantes en tiempo de ejecucin incluyendo los controles
creados por el Administrador de Adaptaciones.
Aunque SWIM tenga acceso a amplia informacin acerca de cualquier control de dato
de entrada particular, una parte sustancial de informacin no puede ser determinada
solamente mirando el control. En particular, SWIM necesita saber en qu parte de la
memoria se guardan los datos para el control. Dado que los datos son guardados en una
variable VB subyacente, SWIM no tiene medios para determinar directamente en
dnde se guarda esta variable VB dentro de la memoria. La declaracin
VBA_SetAddr es usada por la aplicacin para resolver este problema.
Para facilitar la explicacin de la vinculacin entre la declaracin VBA_SetAddr y los
controles de entrada de dato correspondientes, considere el siguiente tipo de dato
definido por el usuario y un llamado a VBA_SetAddr correspondiente para la tabla de
base de datos Account:
Type Account
Acct
Como String * 10
Active
Como Integer
ConsolAcct
Como String * 10
CuryId
Como String * 4
Descr
Como String * 30
NoteID
Como Long
RatioGrp
Como String * 2
SummPost
Como String * 1
Type
Como String * 2
User1
Como String * 30
User2
Como String * 30
User3
Como Double
User4
Como Double
End Type
Global bVBVarAccount As Account, nVBVarAccount As Account
Call VBA_SetAddr( "bAccount", bVBVarAccount, nVBVarAccount,
LenB(bVBVarAccount))
239
240
Tipo
Descripcin
TableNameStr
String
bTableName
Tipo de
datos
definido
por el
usuario
nTableName
Tipo de
datos
definido
por el
usuario
bTableNameLength
Integer
241
Ejemplo
External .dh file
Esto declara una estructura que corresponde a la tabla Solomon Country. Note que el
largo exacto del campo debe estar declarado y que las estructuras de memoria temporal
y memoria temporal NULL estn declaradas como global.
Type Country
CountryId
As String * 3
Descr
As String * 30
End Type
Global bCountry As Country, nCountry As Country
En eventos Customization:
(general) declarations
Tambin Vea
Propiedad FieldName
243
Glosario
BSL
La sigla para el lenguaje Basic Script Language (BSL).
BSL.DH
Un archivo de formato de texto en el directorio de programa Solomon, el cual contiene
declaraciones globales y declaraciones de funciones para todas las funciones de ncleo
de Solomon, las cuales pueden ser usadas en el lenguaje Basic Script Language.
call by reference
Los argumentos entregados por referencia a un procedimiento pueden ser modificados
por el procedimiento. Procedimientos escritos en Basic son definidos para recibir sus
argumentos mediante referencias. Si usted llama un procedimiento tal, y le entrega una
variable, y si el procedimiento modifica su parmetro formal correspondiente,
modificar la variable. El pasar una expresin mediante referencia es legal en Basic; si
el procedimiento llamado modifica su parmetro correspondiente, un valor temporal va
a ser modificado sin efectos aparentes al llamador.
call by value
Cuando se pasa un argumento por medio de valor a un procedimiento, el procedimiento
llamado recibe una copia del argumento. Si el procedimiento llamado modifica su
parmetro formal correspondiente, no tendr efecto en el llamador. Procedimientos
escritos en otros lenguajes, como C, pueden recibir sus argumentos por medio de valor.
comment
Un comentario (comment) es texto que documenta un programa. stos no tienen efecto
en el programa (excepto para metacomandos). En Basic, un comentario (comment)
comienza con una comilla, y contina hasta el final de la lnea. Si el primer caracter del
comentario es un signo pesos ($), el comentario es interpretado como un metacomando
(metacommand). Las neas que comiencen con Rem tambin son comentario.
control ID
Esto puede ser una cadena de caracteres de texto, en cuyo caso es el nombre del control, o puede ser un identidicador numrico (numeric ID). Note que los identificadores
de controles (control IDs) son sensibles a letras maysculas y minsculas y no incluyen
el punto que aparece antes de la identificacin (ID). Identificadores numricos
dependen del orden en el cual los controles de dilogo son definidos. Usted puede
comprobar el nmero de identificacin usando la funcin DlgControlID.
244
dialog control
Un tem en una caja de dilogo (dialog box), tal como una caja de lista (list box), caja
combinada (combo box) o botn de comando.
function
Una funcin (function) es un procedimiento que retorna un valor. En Basic, el valor de
retorno se especifica asignando un valor al nombre de la funcin, tal como si la funcin
fuera una variable.
IntelliSense
IntelliSense ayuda a crear cdigo (scripts) libre de errores mediante la presentacin de
nombres de mtodos y propiedades, al tiempo que usted tipea un nombre de un objeto
o API.
label
Una etiqueta (label) identifica una posicin en el programa, en la cual se contina la
ejecucin usualmente como resultado de la ejecucin de una declaracin GoTo. Para
ser reconocida como etiqueta, un nombre debe comenzar en la primera columna, y
debe ser seguida inmediatamente por dos puntos (:). Palabras reservadas no son
etiquetas vlidas.
metacommand
Un metacomando (metacomand) es un comando que da instrucciones al compilador de
como construr el programa. En Basic, los metacomandos son especificados en
comentarios que comienzan con un signo pesos ($).
name
Un nombre (name) en Basic debe partir con una letra (A a la Z). El resto del nombre
puede contener tambin dgitos (0 al 9) y un caracter de subrayado (_). Un nombre no
puede contener ms de 40 caracteres. Caracteres de tipo no son considerados como
parte de un nombre.
Object Model
El modelo de objeto (Object Model) es una especificacin de lo esencial de un objeto
en un sistema dado, que incluye la descripcin de las caractersticas del objeto
(atributos) y una descripcin de las relaciones estticas y dinmicas que existen entre
objetos. En el caso de aplicaciones Solomon, el modelo de objeto es una coleccin de
objetos que representan colectivamente una pantalla.
precedence order
El sistema usa VBA para determinar cul operador evaluar primero, segundo, y as
sucesivamente, dentro de una expresin. Operadores con una precedencia mayor son
evaluados antes de los con precedencia menor. Operadores con igual precedencia son
evaluados de izquierda a derecha. El orden de precedencia por defecto (de mayor a
menor) son: numrico (numeric), cadena de caracteres (string), comparaciones
(comparision), lgico (logical).
245
procedure
Un procedimiento (procedure) es una serie de declaraciones VBA y funciones
ejecutadas como una unidad. Subprogramas (Sub) y funciones (Funcin) son llamados
procedimientos.
subprogram
Un subprograma (subprogram) es un procedimiento que no retorna un valor.
type character
Un caracter tipo (type character) es un caracter especial, usado como sufijo para un
nombre de funcin, variable o constante. El caracter define el tipo de dato de la
variable o funcin. Los caracteres son: $ (Dynamic String), % (Integer), & (Long
integer), ! (Single precision floating point), # (Double precision floating point), @
(Currency exact fixed point).
vartype
Es la etiqueta interna usada para identificar el tipo de valor asignado actualmente a una
variable de tipo variante (variant). Se utilizan los siguientes: 0 (Empty), 1 (Null), 2
(Integer), 3 (Long), 4 (Single), 5 (Double), 6 (Currency), 7 (Date), 8 (String), 9
(Object).
246
247
ndice
controles ActiveX 3, 11
cursor 165, 186, 187, 197, 198, 200, 203, 207, 209,
217, 221, 225
cursor almacenado 208, 211
custom control 10
Chk 15
A
abortar transacciones 231
ActiveX 2
actualizaciones de bases de datos 191, 226
Add-In Manager 12
Administrador de Adaptaciones 1, 3, 4, 16, 29, 75,
146, 238
AliasConstant 67
almacenamiento 211
ApplGetParms 67
ApplGetParmValue 67
ApplGetReturnParms 78
Application Program Interface 15
ApplSetFocus 67
ApplSetParmValue 67
arreglo de memoria 132, 136, 148
D
DataTips 5
DateCmp 67
DateCheck 67
DateMinusDate 67
DatePlusDays 67
DatePlusMonthSetDay 67
DateToIntlStr 67
DateToStr 67
DateToStrSep 67
DBNavFetch 67
declaracin Select SQL 163
Default 15
Delete 39
DELETE 24
deshabilitar un control 189
diccionario de datos SQL 239
DIM 16
directorio de mdulos VBA 16
DispFields 67
DispForm 67
Display 15
Double 16, 201, 245
Dparm 67
DParm 96
B
bandera de estado de nivel 191, 228
banderas de optimizacin 210
base de datos 17, 31, 41, 46, 50, 51, 63, 89, 90, 91
BlankErr 29
Button clicks 39
C
cabecera 32, 59, 60
cadena de caracteres vaca 196
Call Stack 7
CallChks 67, 82
campo clave 69, 91, 153, 154, 155, 157, 158, 160,
161
campo de caracter 22
campo de datos 33, 40, 70
cargar datos 165
Click 15, 43
cdigo genrico 146
cdigo VBA 16, 39
cdigos de errores 215
Complete Word 5
condicin de error 108, 110, 111, 112, 113
constante simblica ErrNoMess 47, 52, 57, 64,
231, 232, 233
control page 10
control templates 10
E
Edit_Cancel 67
Edit_Close 67, 98
Edit_Delete 67
Edit_Finish 100
Edit_First 101
Edit_Last 68
Edit_New 68
Edit_Next 68
Edit_Prev 68
Edit_Save 68
Editor de Cdigo 5
evento click 123
evento Default 44, 189
248
IParm 68
Is_TI 68
Field chk 39
Field default 39
Field PV 39
FieldName 31
Form Display 39
Form Hide 39
Form Load 39
formularios Microsoft 9
FPAdd 68
FParm 68
FPDiv 68
FPMult 68
FPRnd 68, 112
FPSub 68
funciones agregadas 21, 200
funciones de mensaje 18
G
GetBufferValue 68
GetDelGridHandle 68
GetGridHandle 68
GetObjectValue 68
GetProp 68
GetSqlType 68
GetSysDate 68
GetSysTime 68
globales 16, 120, 213, 243
Grid linechk 39
Grid linegotfocus 39
GUI 14
H
habilitado 30
herramientas de deteccin y eliminacin de
errores 7
Hide 15
HideForm 68
I
IDE 1, 4, 6, 7, 245
Immediate window 7
IncrStrg 68
INSERT 24
INSERTED 135, 148, 149, 151, 164, 167, 168, 171
Integer 16
IntelliSense 5, 16, 244
Interface de Aplicacin de Programa 15
IntlStrToDate 125
K
Kernel 16, 17, 24
L
Launch 68
ligamiento 238
LineChk 57
LineChkEvent 15
LineGotFocus 15
List Constants 5
List Properties/Methods 5
Load 15
Locals window 7
llamado SQL 213
M
Mask 33
Max 34
MCallchks 68, 69
MCallChks 131
MClear 69
MClose 69
MDelete 69
MDisplay 69
mensaje 18
Mess 69
Messages.csv 138, 139, 142, 144
Messbox 69
MessBox 141
Messf 69
MessResponse 69
mFindControlName 146
MFirst 69
MGetLineStatus 69
MGetRowNum 69
Microsoft SQL Server 120
Min 35
MInsert 69
MKey 69
MKeyFind 69
MKeyFld 69
MKeyOffset 69
MLast 69
MLoad 69
MNext 69
modelo de objetos 1, 3
mdulo VBTools_VBA 16
Q
Quick Info 5
R
registro borrado 135
registro compuesto 70, 91, 92, 182, 197, 200, 211,
212, 218
ROI, launch 130
rutinas de uso comn 39
N
NameAltDisplay 70
nivel 17, 191, 207
nivel de batch 17
nivel de detalle 17, 60
nivel macro 48
nmero de mensaje 18, 41, 47, 63, 69, 138, 231
nmero de registro 169, 174
O
objeto 8
objeto ligado 193
objetos de ventana incrustados 14
OLE Controls 11
OnCancel 15, 39
OnDelete 15
OnFinish 15, 39
OnInsert 15, 39
OnUpdate 15, 39
operacin DELETE 46
operacin Insert 65
operacin NEW 46
operacin SAVE 50, 52
operaciones de base de datos 211, 212
operaciones le lectura 211
Option Explicit 16
P
pginas de control 10
PasteTemplate 70
PeriodCheck 70
PeriodMinusPeriod 70
PeriodPlusPerNum 181
procedure 55
propiedad Default 44, 189
propiedad Trigger 40
propiedades 14
PV 15
PVChkFetch 70
249
S
SaveTemplate 70
Sdelete 70
SDelete 186
SdeleteAll 70
SDeleteAll 187
seccin de parmetro 74, 76
seleccin de anterior 106
seleccin de cerrar 98
seleccin de finalizar 100
seleccin de nuevo 103
seleccin de primero 101
seleccin de salvar 107
seleccin de siguiente 104
seleccin de ltimo 102
SetBufferValue 70
SetDefaults 70
SetLevelChg 70
SetObjectValue 70
SetProp 70
SetStatusBarText 70
SFetch 70
SGroupFetch 200
SInsert 71
sintaxis SQL 24
Solomon.ini 80
Sparm 71
SParm 205
Sql 71
SqlCursor 71
SqlCursorEx 71
SqlErr 71
SqlErrException 71
SqlExec 71
SqlFetch 71
SqlFree 71
SqlSubst 71
StrToDate 71
StrToTime 71
SUpdate 71
250
T
tabla maestra 60
TestLevelChg 71
TimeToStr 71
TranAbort 71
TranBeg 71
TranEnd 71
TranStatus 71
U
UPDATE 24
V
validacin de errores 189, 193
VB MsgBox statement 142
VBA 1, 3
VBA_Mextend 71
VBA_MExtend 235
VBA_MOpen 71
VBA_SetAddr 71
ventana de propiedades 6
Visor de Objetos 8
W
Watches window 7