Su IP: 18.97.9.170
La Factoria
La factoría es el componente más esencial del modelo de extensibilidad de ClearLight.
Cada script que es llamado desde ClearLight recibe una referencia global a un objeto de la clase CFactoria, con el identificador Factoria. El hecho de que la referencia sea global significa que sus miembros pueden ser referenciados sin calificacion. Es decir, da lo mismo escribir Factoria.ExecuteSQL que ExecuteSQL (a menos que dentro del script exista un miembro con el mismo nombre).
La factoría ofrece funciones de utilidad general y métodos para acceder a los objetos de la aplicación desde el componente externo. El generador de formatos (DocFormatter) y el generador de reportes (RepGenADO) tambien reciben una referencia a la Factoria, y de eso nos ocuparemos más adelante. De momento, describiremos los métodos de la factoría y explicaremos como usarlos.
Codigo fuente
completo de CFactoria.cls para el sistema administrativo. (14/07/2016)
Codigo fuente completo de CFactoria.cls para
las aplicaciones de punto de ventas. (06/09/2015)
registrarBeneficiario(Nombre) Las operaciones de salida de dinero piden el nombre de un beneficiario. Esta función le permite a los componentes de extensión registrar los nombres de los beneficiarios de los egresos registrados en ellos. Es más o menos equivalente a ejecutar "SELECT INTO Beneficiarios (Nombre) VALUES (" & StringDB(Nombre) & ")" despues de asegurarnos de que el nombre no exista. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function
ListadoCuentaEntidad(ByVal tipoEntidad As String, ByVal
codigoEntidad As String) Inicia la generacion del reporte de Estado de Cuenta Detallado para la entidad (ISPC) especificada en los argumentos. Es útil para las extensiones complejas, que utilicen sus propias implementaciones de las interfaces ISPC/ISDOC. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function GetSetting(Section, Key,
default) Permite acceder a un valor de registro (dentro de la seccion HKCU\Software\VB And VBA Program Settings\<Key>). Antes de buscar en el registro, ClearLight trata de ubicar el valor requerido en el archivo ClearLight.ini en la carpeta de datos. Si no se encuentrea el valor, se devuelve el especificado en default. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function CheckForWildcards(codigo,
Tabla, nombreCodigo) As String Determina si el argumento codigo es una "solicitud de proximo correlativo" para la columna <nombreCodigo> de la tabla <Tabla>. Las solicitudes de proximo correlativo están formadas por un prefijo opcional seguido de tantos signos de interrogación como dígitos se requieran en el nuevo codigo, e.g.: 00?????. El programa va a buscar en la columna <nombreCodigo> de la tabla <Tabla> el mayor valor cuyos primeros n caracteres sean iguales a los n caracteres del prefijo, que estén seguidos por tantos dígitos como signos de interrogación haya en la solicitud, y devolverá el proximo valor numerico correspondiente. Si <codigo> no es una solicitud de proximo correlativo válida, se devolverá su valor inicial. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function PuedeUsarAlmacen(codigoUsuario
As String, codigoAlmacen As String, Optional ByVal warn As Boolean =
False) As Boolean Determina si el usuario cuyo codigo se pasa como primer argumento (codigoUsuario) tiene permisos para operar sobre el almacen indicado por el segundo argumento (codigoAlmacen). El parámetro opcional warn specifica si el programa debe dar una advertencia en caso de que el usuario no tenga permisos sobre el almacen. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function usrDLL() As CUsrDLL Devuelve una nueva instancia de la clase CUsrDLL, uilizada dentro de ClearLight como contenedor de las DLL de extensión. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function ultimaAutorizacionPor() As String: Devuelve el código del supervisor que suministró su clave para la ultima autorización requerida por la aplicacion. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function connString() As String:
Devuelve la cadena de conexión para la base de datos
de la empresa activa.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function ReadScalar(ByVal
selectSentence As String, ParamArray args() As Variant) As Variant:
(selectSentence) es una instrucción SELECT en
SQL, donde la posición de los parámetros va indicada por un signo de
interrogación (?), y los parámetros (representados en la firma
mediante el arreglo de parámetros args) van a continuación de
la misma. OwnerObject, en este ejemplo, podría ser un objeto
de la clase clsFacturas. La función ReadScalar devolverá el saldo
actual del cliente a quien se emitió la factura. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function ExecuteSQL(ByVal sqlSentence
As String, ParamArray args() As Variant) As Long
Ejecuta una "consulta de acción" (DELETE, UPDATE,
INSERT, etc) sobre la base de datos abierta por la aplicación.
Devuelve la cantidad de registros afectados por la operación. Este trozo de código aumenta en 10% el Precio 1 de
todos los productos de la linea cuyo código introduzca el usuario. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function OpenRecordset(selectSentence
As String, ParamArray args() As Variant)
Devuelve un objeto ADODB.Recordset (un cursor o
conjunto de resultados) con los registros que satisfacen la
consulta. Este ejemplo muestra un cuadro de diálogo con la referencia, fecha y monto de todas las facturas pendientes en la cuenta de uncliente cuyo código se encuentra almacenado en la variable codigoCliente.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function
ensamblarSegmentoSQL(ByVal segmentTemplate As String, Param Array()
args As Varint) As String <segmentTemplate> contiene texto SQL donde elementos variables cuyos valores actuales vienen contenidos en el arreglo <args> están representados por signos de interrogacion. El valor devuelto es el resultado de reemplazar cada signo de interrogación en segmentTemplate por el valor en el índice correspondiente de args formateado según lo requiere el proveedor de acceso a datos. Ejemplo: Dim dt as Date dt = #11-29-2010# s = ensamblarSegmenteSQL("WHERE Fecha = ?", dt) s será igual a "WHERE Fecha = '20101129'", si estamos conectados a una BD de SQL Server, o "WHERE Fecha = #11-29-2010#" si la BD fuera de Access. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public
Function
PuedeUsarAlmacen(codigoUsuario As String, codigoAlmacen As String,
Optional ByVal warn As Boolean = False) As Boolean Determina si el usuario identificado por codigoUsuario tiene permiso para registrar operaciones contra el almacén identificado por codigoAlmacen. El parámetro opcional Warn indica si se debe mostrar una advertencia al operador en caso de que el permiso sea denegado. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function usrDLL() As CUsrDLL Devuelve una instancia de CUsrDLL (v. frmdlls.php) para ser usado desde los formularios de DLLs de extensión. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Property Let FechaGlobal(ByVal dt As
Date) Public Property Get FechaGlobal() As Date: Permite especificar la fecha general de operacion cuando se va a ejecutar una transacción que afecte los saldos de cuentas o entidades. Es requerida por los algoritmos heredados del proceso de reconversión monetaria para determinar el tipo de unidad (bolivares viejos/bolivares fuertes) en el que están expresados los valores monetarios. Ejemplo: FechaGlobal = Date() Asigna la fecha actual a FechaGlobal para forzar la interpretación de los valores monetarios al tipo de unidad corriente (BsF.). |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function EstaAutorizado(ByVal m As
Integer) As Boolean Devuelve un valor
lógico (True/False) indicando si el usuario tiene permiso para
ejecutar la operación designada por el argumento (m) Los valores de
(m) con su correspondiente descripción pueden consultarse en la
tabla "perfilElementos" de la base de datos. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function Suscriptores() As Collection Devuelve una colección con los archivos "suscriptores" de las operaciones de exportacion Ejemplo: Dim s (datosExportacion) es una función que genera una cadena con los datos de exportacion de la operación que estamos realizando. El código del ejemplo escribe esa información en cada uno de los suscriptores registrados en ClearLight.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Sub mAdvertencia(s As String) Si algun error u otra condición requiere que se de información al usuario, pero la aplicación se encuentra en medio de una transacción de base de datos, los registros modificados están bloqueados, y esperar una rspuesta del usuario puede causar un bloqueo de las operaciones de otros usuarios. La secuencia de los controladores de ClearLight sigue este esquema: On Error GoTo ErrHandler SetGlobalLock StartTransaction {proceso] CommitTransaction ResumePoint: FreeGlobalLock Exit Sub ErrHandler: ReportarError AbortTransaction Resume ResumePoint Todos los mensajes enviados al usuario desde código contenido dentro de un bloque SetGlobalLock/FreeGlobalLock son retenidos por el controlador de la operación y mostrados en una ventana de texto al llamar a FreeGlobalLock. Como norma general, todos los mensajes de advertencia que se emitan dsde scripts complementarios de un proceso (por ejemplo postFactura.vbs) deben emitirse llamando a mAdvertencia, nunca a MsgBox. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function DeterminarFormato(sValueID As
String, sOptionsKey As String, sDefVal As String, Optional
pOwnerObject As Object = Nothing) As String Devuelve el nombre del archivo de formato correspondiente al tipo de documento contenido en sValueID.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Sub ReportarError(isFatal As Boolean,
numError As Long, sDescripcion As String, stLocus As String) Reporta un error al usuario, siguiendo los mismos principios ya descritos para mAdvertencia
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function SetGlobalLock(Optional s As
String = "") As Boolean Public Sub FreeGlobalLock() Public Function StartTransaction() As Boolean Public Function CommitTransaction() As Boolean Public Function AbortTransaction() As Boolean Estos procedimientos le permiten al componente externo controlar el "bloqueo global". Se usa para implementar controladores de operación desde un componente externo (lo más probable es que sean usados desde una DLL de extensión). Ejemplo: Factoria.SetGlobalLock
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function FechaDB(Fecha) As String Public Function TimeDateDB(Fecha) As String Public Function StringDB(starg) As String Public Function NumeroDB(dblArg) As String Estas funciones devuelven una cadena que contiene el valor del argumento en el formato requerido para ser usado en una sentencia SQL válida para la BBDD en uso. Ejemplo: Dim s, fi, ff La necesidad de estas funciones se ha reducido con la incorporación de los metodos ReadScalar, ExecuteSQL y OpenRecordset, y se preservan para mantener la compatibilidad con scripts más antiguos.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function AppExeName() As String Devuelve el nombre del programa en ejecución. Algunos scripts (particularmente posExt.vbs) son usados por el sistema administrativo y por los puntos de venta indistintamente. Supongamos que estamos automatizando un pequeño mercado que tiene un área de cafetería. Los productos vendidos en esta área tienen un precio un 5% superior al que tienen cuando son presentados en la caja de salida. Para las cajas de salida se usa el punto de ventas extendido (clrCaja11.exe), pero para la cafetería se usa el punto de ventas de restaurantes (clrCaja4). Como posExt.vbs contiene una gran cantidad de funcionalidad común, no es práctico colocarlo en la carpeta de programas de la caja de la cafetería. Por eso (y porque normalmente es la mejor opción), se decidió mantener un solo posExt.vbs en la carpeta general de datos. La situación podría manejarse tambien configurando el registro de la cafetería para que trabaje con el precio 2, que será equivalente al precio1 más el 5%. Pero ello requiere que los administradores del negocio actualicen dos precios en vez de uno. Las aplicaciones de punto de ventas llaman a la funcion CalcularPrecio para que calcule los precios de venta de cada producto que se pasa a la factura. Entonces podríamos implementar la solcuión siguiente: Ejemplo: Public Function CalcularPrecio()
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function AppPath() As String Devuelve la carpeta donde está contenido el programa en ejecución.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function DataPath() As String Devuelve la direccion de la carpeta de datos de la empresa activa.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function DoIncluirIVA() As Boolean Indica si los precios de venta deben mostrarse con el IVA incluído. Está determinado por el valor de la variable de registro IVAEdit
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function Format(ByVal arg As Variant,
ByVal Formato As Variant) As Variant Implementa la funcion Format tal como está definida en Visual Basic para permitir su uso desde los scripts. Consulte la ayuda de VB5/6 para más detalles.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function VerificarUsuario(stArgCaption
As String) As Integer Abre una ventana
de solicitud de clave de usuario con el contenido de (stArgCaption)
en su barra de título. Devuelve el Nivel del usuario cuya clave se
suministró, o cero (0) si no se introdujo ninguna clave.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function NewForm2(sFormName As String)
As Object Crea un formulario de la clase especificada en (sFormName), lo agrega a la colección de formularios de la aplicación y devuelve una referencia al mismo. Puede usarse para activar formularios estandar de ClearLight desde componentes de extensión. Ejemplo: Const LIMITE_GENERAL = 2500 (elCliente) es una instanca de clsClientes que fue creado en algún momento anterior. Si su saldo es mayor para el momento de ejecutar este trozo de código, se abrirá automáticamente una forma de cobranzas con los datos del ciente ya cargados. La ejecución de script se detendrá hasta que la forma se cierre (eso es lo que significa el 1 despues de Show). Es probable que durante este intervalo aparezcan algunos mensajes indicando que "el script está tomando demasiado tiempo de ejecución", a los que el usuario deberá responder indicando que desea seguir ejecutando el script. Al cerrarse el formulario, se recarga el regfistro del cliente (Refresh) y se determina si su saldo sigue siendo mayor que el limite general. De ser así, se interrumpe la ejecución del procedimiento.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Sub SubmitDoc(pDoc As Object, Optional
TipoE As String = "") La impresión de los diferentes documentos generados por cada operacióon no se realiza inmediatamente, sino que se le entrega al controlador de transacciones (al que se hizo referencia en la descripcion de SetGlobalLock, StarTransaction, etc. más arriba) para que la ejecute una vez que todos los bloqueos hayan sido levantados. (pDoc) es una referencia a un objeto que implemente el metodo ViewPrint(autoPrint As Boolean). Si (pDoc) expone la propiedad TipoEntidad, no es necesario pasar un valor en TipoE. De lo contrario se deberá especificar unq cadena de tres caracteres reconocible por la función GetDocumento(tipo) en posExt.vbs, que es la responsable de obtener los documentos agregados por componentes de extensibilidad. Ejemplo: Private Sub ProcesarEntrega()
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function NewForm(sFormName) As
CFormEnvelope Esta función es similar a NewForm2, con la diferencia de que en lugar de devolver una referencia directa al formulario la devuelve a una instancia de CFormEnvelope, que permite el acceso al formulario original mediante la propiedad Form. En algunos casos sin un patrón claramente discernible, el paso directo de formularios a los componentes externos causa problemas, mientras que pasarlos dentro de un envoltorio funciona correctamente.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function Forms() Devuelve una referencia a la coleccion Forms de VB6, que contiene referencias a cada una de las formas activas en la aplicacion. Ejemplo: Dim f, s Muestra un cuadro de mensaje con una lista de todos los formularios activos en ClearLight.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function FormByName(sFormName) As Form Devuelve una referencia a una forma activa a partir del tipo. NewForm y NewForm2 crean una nueva forma, mientras que FormByName busca una forma del tipo especificado por (sFormName) entre las formas abiertas. Si hay más de una forma del mismo tipo, FormByName devolverá una referencia a la más antigua. Si se quiere buscar una forma específica de un tipo, se deberá recorrer la colección Forms hasta ubicar la forma requerida. Ejemplo: esCredito = Factoria.FormByName("frmPOS").cbxCondicion.Text <> "CONTADO" Este trozo de código (extraido de un
FactPosImprimir.vbs) determina si la factura es a credito,
examinando el valor del control cbxCondicion de la forma frmPOS. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function
NumeroProximoDocumento(TipoEntidad, doIncrement) As Long Llama al objeto Contadores de la aplicación para determinar el número del próximo documento del tipo especificado en (TipoEntidad). (doIncrement) indica si se debe incrementar el número del próximo documento. Se usa para implementar el proceso de documentos intrinsecos de ClearLight desde contextos de operacion definidos por componentes externos.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function
UltimaAutorizacionPor() As String Devuelve el código de usuario cuya clave se suministró para la última autorización otorgada dentro del sistema. Permite a los componentes de extensión registrar o validar el usuario que autorizó una determinada operación. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Public Function CrearObjeto(istrCodigoClase)
As Object Este es el método fundamental de la factoria. Devuelve un objeto de la aplicación en función del valor contenido en istrCodigoClase, según la siguiente tabla (el valor de istrCodigoClase no es sensible a la difrencia entre mayusculas y minúsculas):
Para obtener información acerca de cada una de las clases a las que se puede acceder mediante la factoria, consulte el programa Documentador. Los nombres de los métodos y propiedades de cada clase son bastante descriptivos. Las valores calificados con la observación "instancia global" son objetos implementados en variables globales de la aplicación cuyo "ciclo de vida" debe estar determinado por la aplicación. No se debe intentar su destrucción ni llamar a ninguno de los métodos de limpieza que puedan contener. Tampoco se deben asignar valores a ninguna de sus propiedades públicas, a menos que exista una razón válida para ello y que se sepa lo que se está haciendo.
|
La factoría es revisada y ampliada continuamente. Cada vez que una nueva extensión requiere acceso a un objeto no publicado se agrega; cada vez que echamos de menos algun servicio durante el desarrollo de un script o DLL se implementa.
El Documentador puede descargarse aquí (Documentador.zip),
y la versión más reciente de la base de datos (que debe estar en la misma
carpeta que el programa) puede descargarse aquí (vbPrjDoc.zip).