VERSION 1.0 CLASS BEGIN MultiUse = -1 'True Persistable = 0 'NotPersistable DataBindingBehavior = 0 'vbNone DataSourceBehavior = 0 'vbNone MTSTransactionMode = 0 'NotAnMTSObject END Attribute VB_Name = "CFactoria" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = True Attribute VB_PredeclaredId = False Attribute VB_Exposed = False Option Explicit Private sqlTraceStat As Boolean Private xtraObjects As Collection '--------------------------------------------------------------------------------------- ' Procedure : LoadScriptFile ' DateTime : 06/09/2015 12:31 ' Author : Leonardo Azpurua ' Purpose : Carga un archivo de script en el control especificado por pDest '--------------------------------------------------------------------------------------- ' Public Function LoadScriptFile(sFileName As String, Optional pDest As Object = Nothing, Optional bNotifyErrors As Boolean = True) As Boolean LoadScriptFile = mScriptExecute.LoadScriptFile(sFileName, pDest, bNotifyErrors) End Function '--------------------------------------------------------------------------------------- ' Procedure : ExisteProcedimiento ' DateTime : 06/09/2015 12:31 ' Author : Leonardo Azpurua ' Purpose : Determina si el script contiene el procedimiento '--------------------------------------------------------------------------------------- ' Public Function ExisteProcedimiento(Script As Object, ByVal procName As String) As Boolean ExisteProcedimiento = mScriptExecute.ExisteProcedimiento(Script, procName) End Function '--------------------------------------------------------------------------------------- ' Procedure : addObject ' DateTime : 06/09/2015 12:31 ' Author : Leonardo Azpurua ' Purpose : Agrega el objeto a la lista de objetos devueltos por "CrearObjeto" ' el id del objeto está en Name '--------------------------------------------------------------------------------------- ' Public Sub addObject(Name As String, arg As Object) On Error Resume Next xtraObjects.Add arg, Name If err.Number Then err.clear End Sub '--------------------------------------------------------------------------------------- ' Procedure : removeObject ' DateTime : 06/09/2015 12:32 ' Author : Leonardo Azpurua ' Purpose : Elimina un objeto de la lista de objetos dinámicos de CrearObjeto '--------------------------------------------------------------------------------------- ' Public Sub removeObject(Name) On Error Resume Next xtraObjects.Remove Name If err.Number <> 0 Then err.clear End Sub '--------------------------------------------------------------------------------------- ' Procedure : FindFile ' DateTime : 06/09/2015 12:33 ' Author : Leonardo Azpurua ' Purpose : Determina la ubicación del archivo según la lista de ' prioridades estandar '--------------------------------------------------------------------------------------- ' Public Function FindFile(sFileName) As String FindFile = mScriptExecute.FindFile(CStr(sFileName)) End Function '--------------------------------------------------------------------------------------- ' Procedure : dateAdd ' DateTime : 06/09/2015 12:33 ' Author : Leonardo Azpurua ' Purpose : Implementa dateAdd para ser usado desde vbscript '--------------------------------------------------------------------------------------- ' Public Function dateAdd(ByVal interval As String, ByVal amount As Double, ByVal fecha As Date) As Date dateAdd = lmDateAdd.dateAdd(interval, amount, fecha) End Function '--------------------------------------------------------------------------------------- ' Procedure : generarUsrReport ' DateTime : 06/09/2015 12:34 ' Author : Leonardo Azpurua ' Purpose : Permite la activacion de un reporte de usuario desde un componente de ' extensión (DLL o Script) '--------------------------------------------------------------------------------------- ' Public Function generarUsrReport(usrReportName As String, ParamArray Variables() As Variant) As Boolean Dim s As String, retVal As Boolean On Error GoTo ErrHandler s = FindFile(usrReportName) If s <> "" Then Dim elGenRep As New RepGen7.CReporte elGenRep.SetDBName sConnString, BuildDataPath("", AppName), Factoria elGenRep.AddVariable "NOMBREEMPRESA", Empresa.NombreEmpresa elGenRep.AddVariable "OPERADOR", UsuarioActivo.codigo Dim i As Integer i = 0 Do While i < UBound(Variables) elGenRep.AddVariable CStr(Variables(i)), Variables(i + 1) i = i + 2 Loop elGenRep.LoadFile s elGenRep.GenerarReporte mIVAEDit.Factoria retVal = True Else mAdvertencia "No se encontró el archivo " & usrReportName retVal = False End If ResumePoint: generarUsrReport = retVal Exit Function ErrHandler: Dim sErrD As String, nErrN As Long sErrD = err.Description: nErrN = err.Number err.clear ReportarError False, nErrN, sErrD, "Factoria::generarUsrReport" Resume ResumePoint End Function '--------------------------------------------------------------------------------------- ' Procedure : incrementarNC ' DateTime : 27/10/2013 08:06 ' Author : Leonardo Azpurua ' Purpose : Recibe una cadena terminada en una secuencia de numeros, y devuelve una ' cadena formada por el prefijo no numerico de la cadena original seguido ' por el sucesor de la parte numerica terminal '--------------------------------------------------------------------------------------- ' Public Function incrementarNC(arg As String) As String Dim unn As Integer, ch As String Dim numSeg As String, v As Currency unn = Len(arg): ch = " " Do While unn > 0 Mid(ch, 1, 1) = Mid(arg, unn, 1) If ch < "0" Or ch > "9" Then ' found no num... numSeg = Mid(arg, unn + 1) If numSeg = "" Then ' no hay un terminal no numerico incrementarNC = arg: Exit Function End If v = CCur(numSeg) + 1 numSeg = Format(v, String(Len(numSeg), "0")) incrementarNC = Left(arg, unn) & numSeg Exit Function End If unn = unn - 1 Loop v = CCur(arg) + 1 incrementarNC = Format(v, String(Len(arg), "0")) End Function '--------------------------------------------------------------------------------------- ' Procedure : carpetaFotos ' DateTime : 01/09/2013 11:12 ' Author : Leonardo Azpurua ' Purpose : Devuelve la ruta de la carpeta de foto '--------------------------------------------------------------------------------------- ' Public Function carpetaFotos() As String Dim sRetVal As String sRetVal = GetSetting("ClearLight", "General\CarpetaFotos", "") If sRetVal = "" Then sRetVal = BuildDataPath("", "ClearLight") & "Fotos\" carpetaFotos = mFileNames.normalizePath(sRetVal) End Function '--------------------------------------------------------------------------------------- ' Procedure : setSQLTrace ' DateTime : 31/05/2013 21:25 ' Author : Leonardo Azpurua ' Purpose : Permite activar/desactivar el trazado de la ejecución de sentencias SQL ' desde un componente externo '--------------------------------------------------------------------------------------- ' Public Function fNavPlan() As FNavegadorPlan Set fNavPlan = New FNavegadorPlan End Function Public Function getRangoFechas(fi, ff, msg) As Boolean Dim finic As Date, ffinal As Date Dim retVal As Boolean finic = fi: ffinal = ff retVal = mGlobales.getRangoFechas(finic, ffinal, CStr(msg)) If retVal Then fi = finic: ff = ffinal End If getRangoFechas = retVal End Function ' ------------------------------------------------ ' Funciones para el soporte de las interfaces de ' usuario V7 Public Function TemaUI() As Tema Set TemaUI = mMain.TemaUI End Function Public Function getSysIcon(iconID As Integer) As IPictureDisp Set getSysIcon = mGlobales.getSysIcon((iconID)) End Function Public Function loadFileIcon(fileName As String) As IPictureDisp Set loadFileIcon = mGlobales.loadFileIcon(fileName) End Function ' ------------------------------------------------- Public Sub setSQLTrace(Value) On Error Resume Next sqlTraceStat = lmdbHandle.doSQLtrace lmdbHandle.doSQLtrace = CBool(Value) If err.Number Then MsgBox "ERROR (" & err.Number & "): " & err.Description, vbCritical, "Factoria.setSQLTrace" End If On Error GoTo 0 End Sub Public Sub toggleTrace() On Error Resume Next sqlTraceStat = lmdbHandle.doSQLtrace lmdbHandle.doSQLtrace = Not sqlTraceStat If err.Number Then MsgBox "ERROR (" & err.Number & "): " & err.Description, vbCritical, "Factoria.toggleTrace" End If On Error GoTo 0 End Sub Public Sub restoreSQLTrace() lmdbHandle.doSQLtrace = sqlTraceStat End Sub '--------------------------------------------------------------------------------------- ' Procedure : registrarBeneficiario ' DateTime : 11/11/2012 12:09 ' Author : Leonardo Azpurua ' Purpose : Agrega un nombre a la tabla de beneficiarios '--------------------------------------------------------------------------------------- ' Public Sub registrarBeneficiario(nombre) If CStr(nombre) = "" Then Exit Sub ExecuteSQL "IF NOT Exists (SELECT Nombre FROM Beneficiarios WHERE Nombre = ?) INSERT INTO Beneficiarios (Nombre) VALUES (?)", CStr(nombre), CStr(nombre) End Sub ' CFactoria: Proveedor de objetos, referencias y servicios para ' componentes en VBScript Public Function ListadoCuentaEntidad(ByVal tipoEntidad As String, ByVal codigoEntidad As String) Dim listado As New clsListaMovsISPC listado.Generar tipoEntidad, codigoEntidad, codigoEntidad End Function Public Function GetSetting(Section, Key, default) GetSetting = lmGetSetting.GetSetting("ClearLight", Section, Key, default) End Function Public Function CheckForWildcards(codigo, Tabla, nombreCodigo) As String CheckForWildcards = lmWildCards.CheckForWildcards(CStr(codigo), CStr(Tabla), CStr(nombreCodigo)) End Function Public Function PuedeUsarAlmacen(codigoUsuario As String, codigoAlmacen As String, Optional ByVal warn As Boolean = False) As Boolean PuedeUsarAlmacen = lmUsuarios.PuedeUsarAlmacen(codigoUsuario, codigoAlmacen, warn) End Function Public Function usrDLL() As CUsrDLL Set usrDLL = New CUsrDLL End Function Public Function UltimaAutorizacionPor() As String UltimaAutorizacionPor = UsuarioUltimaAutorizacion End Function Public Function connString() As String connString = sConnString End Function Public Function ensamblarSegmentoSQLA(ByVal segmentTemplate, args As Variant) As String ensamblarSegmentoSQLA = lmdbHandle.ensamblarSegmentoSQLA(segmentTemplate, args) End Function Public Function ensamblarSegmentoSQL(ByVal segmentTemplate, ParamArray args() As Variant) As String Dim v() As Variant, n As Integer, b As Integer b = UBound(args) If b >= 0 Then ReDim v(b) For n = 0 To b v(n) = args(n) Next End If ensamblarSegmentoSQL = lmdbHandle.ensamblarSegmentoSQLA(segmentTemplate, v) End Function Public Function ReadScalarA(ByVal selectSentence As String, args) As Variant ReadScalarA = lmdbHandle.ReadScalarA(selectSentence, args) End Function Public Function ReadScalar(ByVal selectSentence As String, ParamArray args() As Variant) As Variant Dim v() As Variant, n As Integer, b As Integer b = UBound(args) If b >= 0 Then ReDim v(b) For n = 0 To b v(n) = args(n) Next End If ReadScalar = lmdbHandle.ReadScalarA(selectSentence, v) End Function Public Function ExecuteSQLA(ByVal sqlSentence As String, args As Variant) As Long ExecuteSQLA = lmdbHandle.ExecuteSQLA(sqlSentence, args) End Function Public Function ExecuteSQL(ByVal sqlSentence As String, ParamArray args() As Variant) As Long Dim v() As Variant, n As Integer, b As Integer b = UBound(args) If b >= 0 Then ReDim v(b) For n = 0 To b v(n) = args(n) Next End If ExecuteSQL = lmdbHandle.ExecuteSQLA(sqlSentence, v) End Function Public Function OpenRecordsetA(selectSentence As String, args As Variant) Set OpenRecordsetA = lmdbHandle.OpenRecordsetA(selectSentence, args) End Function Public Function OpenRecordset(selectSentence As String, ParamArray args() As Variant) Dim v() As Variant, n As Integer, b As Integer b = UBound(args) If b >= 0 Then ReDim v(b) For n = 0 To b v(n) = args(n) Next End If Set OpenRecordset = lmdbHandle.OpenRecordsetA(selectSentence, v) End Function Public Function DoIncluirIVA() As Boolean DoIncluirIVA = mIVAEDit.DoIncluirIVA() End Function Public Property Let FechaGlobal(ByVal dt As Date) mIVAEDit.FechaGlobal = dt End Property Public Property Get FechaGlobal() As Date FechaGlobal = mIVAEDit.FechaGlobal End Property Public Function EstaAutorizado(ByVal m As Integer) As Boolean Dim p As PermisosUsuario p = m EstaAutorizado = lmUsuarios.EstaAutorizado(UsuarioActivo.codigo, p) End Function Public Function Suscriptores() As Collection Set Suscriptores = mGlobales.Suscriptores End Function Public Sub mAdvertencia(s As String) mGlobalLock.mAdvertencia s End Sub Public Function DeterminarFormato(sValueID As String, sOptionsKey As String, sDefVal As String, Optional pOwnerObject As Object = Nothing) As String DeterminarFormato = mDefinirFormato.DeterminarFormato(sValueID, sOptionsKey, sDefVal, pOwnerObject) End Function Public Sub ReportarError(isFatal As Boolean, numError As Long, sDescripcion As String, stLocus As String) mGlobalLock.ReportarError isFatal, numError, sDescripcion, stLocus End Sub Public Function SetGlobalLock(Optional s As String = "") As Boolean SetGlobalLock = mGlobalLock.SetGlobalLock(s) End Function Public Sub FreeGlobalLock() mGlobalLock.FreeGlobalLock End Sub Public Function StartTransaction() As Boolean StartTransaction = lmdbHandle.StartTransaction End Function Public Function CommitTransaction() As Boolean CommitTransaction = lmdbHandle.CommitTransaction End Function Public Function AbortTransaction() As Boolean AbortTransaction = lmdbHandle.AbortTransaction End Function Public Function FechaDB(fecha) As String FechaDB = lmdbHandle.FechaDB(CDate(fecha)) End Function Public Function TimeDateDB(fecha) As String TimeDateDB = lmdbHandle.TimeDateDB(CDate(fecha)) End Function Public Function StringDB(starg) As String StringDB = lmdbHandle.StringDB(CStr(starg)) End Function Public Function NumeroDB(dblArg) As String NumeroDB = lmdbHandle.NumeroDB(CDbl(dblArg)) End Function Public Function AppExeName() As String AppExeName = App.EXEName End Function Public Function AppPath() As String AppPath = App.Path & "\" End Function Public Function DataPath() As String DataPath = BuildDataPath("", AppName) End Function Public Function Format(ByVal arg As Variant, ByVal Formato As Variant) As Variant Dim vRetVal As Variant vRetVal = VBA.Format(arg, Formato) Format = vRetVal End Function Public Function VerificarUsuario(stArgCaption As String) As Integer VerificarUsuario = lmUsuarios.VerificarUsuario(stArgCaption) End Function Public Sub SubmitDoc(pDoc As Object, Optional TipoE As String = "") mGlobalLock.SubmitDoc pDoc, TipoE End Sub Public Function NewForm(sFormName) As CFormEnvelope Dim f As Form, Env As CFormEnvelope On Error GoTo ErrHandler Set f = Forms.Add(sFormName) Set Env = New CFormEnvelope Env.SetForm f ResumePoint: Set NewForm = Env Exit Function ErrHandler: Set Env = Nothing Resume ResumePoint End Function Public Function NewForm2(sFormName) As Form Dim f As Form On Error GoTo ErrHandler Set f = Forms.Add(sFormName) ResumePoint: Set NewForm2 = f Exit Function ErrHandler: Set f = Nothing Resume ResumePoint End Function Public Function Forms() Set Forms = VB.Forms() End Function Public Function FormByName(sFormName) As Form Dim f For Each f In Forms If UCase(f.Name) = UCase(sFormName) Then Set FormByName = f Exit Function End If Next Set FormByName = Nothing End Function Public Function ExtendEval(Owner As Object, fileName As String, sVarId, vRetBuffer, sRetString) As Boolean Dim bRetVal As Boolean, vRetVal As Variant bRetVal = mScriptExecute.ExtendEval(Owner, fileName, sVarId, vRetVal) If bRetVal Then vRetBuffer = vRetVal sRetString = vRetVal End If ExtendEval = bRetVal End Function Public Sub EditarDetallesSesion() Dim f As frmEliminarDetSesion If SesionActiva.detalles.Count = 0 Then Exit Sub Set f = New frmEliminarDetSesion f.LoadSesion f.Show vbModal Unload f End Sub Public Function NumeroProximoDocumento(tipoEntidad, doIncrement) As Long NumeroProximoDocumento = contadores.NumeroProximoDocumento(CStr(tipoEntidad), CBool(doIncrement)) End Function Public Function CrearObjeto(istrCodigoClase) As Object Dim pRetObject As Object On Error Resume Next Set pRetObject = xtraObjects.item(istrCodigoClase) If err.Number <> 0 Then err.clear Else Set CrearObjeto = pRetObject Exit Function End If On Error GoTo 0 Select Case UCase(istrCodigoClase) Case "ACUMULADORIMPUESTOS", "ACUMULADORIVA" Set pRetObject = New AcumuladorImpuestos Case "ALMACEN" Set pRetObject = New clsAlmacen Case "ALMACENES" Set pRetObject = Almacenes Case "ALMACENBANCOS" Set pRetObject = AlmacenBancos Case "ALMACENITEMSVENTA" Set pRetObject = AlmacenItemsVenta Case "ALMACENITEMSINVENTARIO" Set pRetObject = AlmacenItemsInventario Case "ALMACENCLIENTES" Set pRetObject = AlmacenClientes Case "ALMACENPROVEEDORES" Set pRetObject = AlmacenProveedores Case "ALMACENCUENTAS" Set pRetObject = AlmacenCuentas Case "ALMACENVENDEDORES" Set pRetObject = AlmacenVendedores Case "ALMACENDETALLESITEMVENTA" Set pRetObject = AlmacenDetallesItemVenta Case "ALTERNOS" Set pRetObject = AlmacenAlternos Case "CODIGOALTERNO" Set pRetObject = New clsAlternoItemVenta Case "COMPONENTEITV" Set pRetObject = New clsComponenteItemVenta Case "APP" Set pRetObject = App Case "ATRIBUTOS" Set pRetObject = New clsAtributoEntidad Case "BANCO" Set pRetObject = New clsBancos Case "BCOMPROBANTE" Set pRetObject = New clsBufferComprobante Case "CIERREFACTPOS" Set pRetObject = New CCierreFactPos Case "CLIENTE", "CLIENTEPOS" Set pRetObject = New clsClientes Case "COLECCION" Set pRetObject = New Collection Case "COMPROBANTE" Set pRetObject = New clsComprobante Case "COMPROBANTEALMACEN" Set pRetObject = New clsComprobanteAlmacen Case "CONDICIONES" Set pRetObject = Condiciones Case "CONTACTO" Set pRetObject = New clsContactos Case "CUENTA" Set pRetObject = New clsCuenta Case "CUENTAPOS" Set pRetObject = New clsCuentasPOS Case "DATABASE" Set pRetObject = dbHandle Case "DETALLECE", "DCE" Set pRetObject = New clsDetalleCuentaEntidad Case "DETALLEFACTURA" Set pRetObject = New clsDetallesFactura Case "DETALLECAJA" Set pRetObject = New CDetalleIngreso Case "DEVNNEE", "DEVOLUCIONNE" Set pRetObject = New CDevolucionNNEE Case "DEVOLUCIONVENTA" Set pRetObject = New clsDevolucionVenta Case "DOCUMENTOISPC" Set pRetObject = New clsDocumentosISPC Case "EMPRESA" Set pRetObject = Empresa Case "FACTURA" Set pRetObject = New clsFacturas Case "DETALLEFACTURA", "DETFACT" Set pRetObject = New clsDetallesFactura Case "FACTURAPOS" Set pRetObject = New clsFacturasPOS Case "RENGLONFACTPOS" Set pRetObject = New clsRenglonFactPOS Case "INSTANCIADOR" Set pRetObject = New clsInstanciadorEntidad Case "ITEMINVENTARIO" Set pRetObject = New clsItemInventario Case "ITEMVENTA" Set pRetObject = New clsItemVenta Case "LINEPRINTER" Set pRetObject = New CLinePrinter ' Case "LOTE" ' Set pRetObject = New CLote Case "MOVIMIENTOBANCO" Set pRetObject = New clsMovimientoBanco Case "MOVIMIENTOCAJA" Set pRetObject = New CMovimientoCaja Case "NOTAENTREGA" Set pRetObject = New clsNNEE Case "SUPLEMENTONOTAENTREGA" Set pRetObject = New clsNNEESuplemento Case "NOTADCPP", "NOTADCCP" Set pRetObject = New clsNotasDCCP Case "PRINTER" Set pRetObject = Printer Case "PRINTERS" Set pRetObject = Printers Case "PROCESADORFACTURAS" Set pRetObject = New CProcesadorFacturas Case "PROCESADORCOMPRAS" Set pRetObject = New CProcesadorCompras Case "PROCESADORCOTIZACION" Set pRetObject = New CProcesadorCotizacion Case "PROCESADORNNEE" Set pRetObject = New CProcesadorNNEE Case "PROVEEDOR" Set pRetObject = New clsProveedores Case "SESION" Set pRetObject = SesionActiva Case "SERVIDORPERFILES", "PERFILES" Set pRetObject = servidorPerfiles Case "NUEVASESION" Set pRetObject = New clsSesionPOS Case "RETENCIONIVA" Set pRetObject = New CRelacionIVARetenido pRetObject.setFactoria Me Case "SESIONES" Set pRetObject = Sesiones Case "TIPOSIMPUESTO" Set pRetObject = TiposImpuesto Case "USUARIO" Set pRetObject = New clsUsuario pRetObject.SetUsuario UsuarioActivo.codigo Case "VSLIB" Set pRetObject = CreateObject("VSLIB.VSLRTLIB") Case "VENDEDOR" Set pRetObject = New clsVendedores #If IsNotMain = 0 Then Case "ALMACENDCE" Set pRetObject = AlmacenDetallesEntidad Case "AJUSTE" Set pRetObject = New clsAjuste Case "CIERREZ" Set pRetObject = New clsCierreZ Case "TEMPAJUSTE" Set pRetObject = New CAjusteTemporal Case "CONSIGNACION" Set pRetObject = New CRecepcionConsignacion Case "COTIZACION" Set pRetObject = New clsCotizacion Case "DEVOLUCIONCOMPRA" Set pRetObject = New clsDevolucionCompra Case "ORDENCOMPRA" Set pRetObject = New clsOrdenesCompra Case "PROCESADORORDEN" Set pRetObject = New CProcesadorOrden Case "DETALLEOC" Set pRetObject = New clsDetalleOrdenCompra Case "PROCESARCONTEO" Set pRetObject = New CProcesarConteo Case "SERIALESDETALLE" Set pRetObject = New CSerialesRenglon Case "SCRIPT", "POSEXT", "PSCRIPTPOS" Set pRetObject = pScriptPOS Case "GENERALSCRIPT", "PSCRIPT" Set pRetObject = pScript Case "SERIALESDOCUMENTO" Set pRetObject = New CSerialesDocumento Case "SERVDOCFIS" Set pRetObject = ServerDF Case "SERVICIOSCAJA" Set pRetObject = ServiciosCaja Case "INGRESOCAJA" Set pRetObject = New CIngresoCaja Case "DETALLEINGRESO" Set pRetObject = New CDetalleIngreso Case "DOCFIS", "DOCUMENTOFISCAL" Set pRetObject = createDF Case "SERVRETISLR", "SERVICIOSISLR" Set pRetObject = ServiciosISLR Case "PRESENTADORPAGOS", "HISTORIAPAGOS" Set pRetObject = New CHistoriaPagosFactura Case "PROCESADORCOBRANZA" Set pRetObject = New CProcesadorCobranza Case "RECIBOMERCANCIA", "FACTURACOMPRA" Set pRetObject = New clsReciboMercancia Case "DETALLECOMPRA", "DETRCM" Set pRetObject = New clsDetallesCompra Case "SERIES" Set pRetObject = Series Case "TEMA" Set pRetObject = TemaUI Case "TRANSFERENCIA" Set pRetObject = New clsTransferencia Case "RENGLONTRANSFERENCIA" Set pRetObject = New clsRenglonesTransferencia Case "COTSPP" Set pRetObject = New clsAlmacenCotsPP Case "RENGLONSESION" Set pRetObject = New clsRenglonSesion #End If Case Else Set pRetObject = Nothing End Select Set CrearObjeto = pRetObject End Function Public Function GetDocFis(org As Object) As CDocumentoFiscal Dim laForma As frmGetDocFis, elDoc As CDocumentoFiscal Set laForma = New frmGetDocFis Set elDoc = laForma.GetDocumento(org) Unload laForma Set GetDocFis = elDoc End Function Private Sub Class_Initialize() Set xtraObjects = New Collection End Sub