Publicado el 2 comentarios

Reparar Datos MyBusiness POS

En algunas ocasiones las base de datos se dañan con fallas de hardware, apagones inesperados del servidor y transacciones interrumpidas incorrectamente. SQL Server provee de sentencias que permiten verificar y reparar una base de datos con inconsistencias o dañada.Antes de realizar el siguiente procedimiento deberia realizar un respaldo de la base de datos dañada si lo permite SQL Server o hacer una copia física de los archivos.



  • Paso 1: se coloca la base de datos en modo emergencia y usuario único
    Alter Database mibd SET SINGLE_USER
    Alter Database mibd SET EMERGENCY
  • Paso 2: Reparar la base datos
    DBCC CHECKDB(‘mibd’, REPAIR_ALLOW_DATA_LOSS).

Repita este paso hasta que el mensaje sea ‘0 errores encontrados’ para la base de datos. La sentecia CHECKDB con la opcion REPAIR_ALLOW_DATA_LOSS elimina datos de ser necesario para realizar la reparación o corregir la consistencia de los datos, para una reparación más rápida y sin pérdida de datos pruebe la opcion REPAIR_REBUILD, aunque en ocasiones con esta opción no se repara completamente la base de datos.

  • Paso 3.  Aplicar ajuste en el tamaño de la base de datos y el log
    ckup log [TuBaseDeDatos] with Truncate_Only
    DBCC SHRINKDATABASE ( [TuBaseDeDatos], 5 )
  • Paso 4: Regresar a multiusuario y colocar en linea la base de datos
    Alter Database mibd SET ONLINE
    Alter Database mibd SET MULTI_USER

Fuente:

http://www.aortiz.net/2013/06/reparar-base-de-datos-sql-server-2005-o.html?m=1

Publicado el 1 comentario

Disponibilidad del servicio SQL y puerto 1400

  1. Dirigirse al icono de inicio de windows y seleccionar en la carpeta de Microsoft SQL Server 2005/Herramientas de Configuración/Administrador de Configuración
  2. Le aparecerá una pantalla como la siguiente en donde se muestra que los servicios de SQL SERVER 2005 (se encuentran en el rectángulo rojo) están activados.  Si alguno esta en color rojo, lo debe seleccionar, dando un clic con el botón derecho y elegir Propiedades
  3. Le aparecerá una ventana, seleccione la pestaña Servicio, posteriormente Automático en el Modo de inicio. Dar un clic en Aplicar y en Aceptar.
  4. Verifique que el Puerto 1400 este liberado, siga las instrucciones:
  5. En el icono Protocolos for SQLEXPRESS, verifique si los protocolos de SQL Server están habilitados
  6. Seleccione el Protocolo TCP/IP, Clic con el botón derecho y elegir propiedades
  7. Debe seleccionar la pestaña IP Addresses, verifique que en la parte inferior tenga el Puerto Dinámico 1400

+ IP All

TCP Dynamic Ports      1400

En caso de que no esté o aparezca en blanco, colocar el número de puerto 1400.

Publicado el Dejar un comentario

Ejemplo Verificador de Precios personalizado


El siguiente bloque de código permite realizar la consulta al catálogo de productos, verl las características y agregar el artículo al punto de venta.
Este código se implementa en el ambiente de desarrollo, creas un formulario; en la pestaña diseño solo agregas las etiquetas y textbox.

'jofelchez@gmail.com Jose Felix WhatsApp 7222816462
'Ejemplo de verificador de precios
Option Explicit
Dim mcp,mcl,mcm
Dim mca
Dim mcc
dim Busqueda,cCondicion
dim ApruebaEliminar
dim rstArticulo,rstClavesadd
dim rstArt
dim nPartida,n

Sub Form_Load()
'Lista.visible = false
'Grid.RowMode = True
Grid.MultiSelect = True

Me.Caption = "Verificador de Artículos"

lblArticulo.font.size = 14
lblDescripcion.font.size = 14
lblPrecio.font.size = 14
lblUnidad.font.size = 14
lblPresentacion.font.size = 14
lblCantPres.font.size = 14
'txtArticulo.ForeColor = vbGreen

LimpiarVentana
end sub

Sub Text_KeyDown()

Dim rstProds

if ControlEvento.Tag = "txtArticulo" Then
If KeyCode = 40 Then
Set Busqueda = CreateObject ("MyBBusquedaArticulos.BusquedaArticulos")
Set Busqueda.Ambiente = Ambiente
Set Busqueda.Control = txtArticulo
Busqueda.MuestraForma
Set Busqueda = Nothing
txtArticulo.SetFocus
Exit Sub
End if

End If

If KeyCode = 27 Then
DescargaForma
End If

End Sub

Function FDecimal(dValor)
FDecimal = Replace(dValor, ",", ".")
End Function

Sub Text_LostFocus()

If ControlEvento.Tag = "txtArticulo" Then
LimpiarVentana
call VerificarArticulo(txtArticulo)

End If

End Sub

sub VerificarArticulo(Articulo)

Dim s, s_adicional
dim Presentacion, Cant_Presentacion
Presentacion = ""
Cant_Presentacion = ""

cCondicion = ""
if txtArticulo <> "" then
cCondicion = cCondicion & " and prods.articulo = '" & txtArticulo & "' "
end if
s_adicional = ""

s = ""
s = s & "SELECT "
s = s & "prods.articulo As 'Articulo', "
s = s & "prods.descrip As 'Descripción', "
s = s & "impuestos.impuesto As 'Impuesto', "
'If Ambiente.rstEstacion("conimpuesto") <> 0 Then
' s = s & " precio1 * (1 + ( impuestos.valor / 100 )) As 'Precio 1', "
' s = s & " precio2 * (1 + ( impuestos.valor / 100 )) As 'Precio 2', "
' s = s & " precio3 * (1 + ( impuestos.valor / 100 )) As 'Precio 3', "
' s = s & "prods.costo_u * (1 + ( impuestos.valor / 100 )) As 'Costo Ultimo', "
'else
' s = s & " precio1 As 'Precio 1', "
' s = s & " precio2 As 'Precio 2', "
' s = s & " precio3 As 'Precio 3', "
' s = s & "prods.costo_u As 'Costo Ultimo', "
'end if
s = s & " precio1 * (1 + ( impuestos.valor / 100 )) As 'Precio 1', "
s = s & " precio2 * (1 + ( impuestos.valor / 100 )) As 'Precio 2', "
s = s & " precio3 * (1 + ( impuestos.valor / 100 )) As 'Precio 3', "
s = s & "prods.costo_u * (1 + ( impuestos.valor / 100 )) As 'Costo Ultimo', "

s = s & "prods.existencia As 'Existencia', "
s = s & "prods.linea As 'Línea', "
s = s & "prods.marca As 'Marca', "
s = s & "Fabricante As 'Fabricante', "
s = s & "Unidad As 'Unidad', "
s = s & "Invent As 'Control Inventario', "
s = s & "ParaVenta As 'Para venta', "
s = s & "Bloqueado As 'Bloqueado', "
s = s & "Bloqueado As 'Granel' "
s = s & "FROM prods INNER JOIN impuestos ON impuestos.impuesto = prods.impuesto "
s = s & "WHERE prods.articulo <> 'SYS' "

s_adicional = s & cCondicion
s_adicional = s_adicional & " ORDER BY 'Descripción' "

'mymessage "" & s_adicional
'SetSessionValue Ambiente, "SQLPRODUCTOS", s
Set rstArticulo = CreaRecordSet( "" & s_adicional , Ambiente.Connection )
'Set rstArticulo = CreaRecordSet( "SELECT * FROM tickettext where NombreTicket = ", Ambiente.Connection )

If rstArticulo.EOF Then
Set rstClavesadd = CreaRecordSet( "SELECT * FROM clavesadd WHERE clave = '" & txtArticulo & "'", Ambiente.Connection )

If Not rstClavesadd.EOF Then
'mymessage "si hay presentacion " & rstClavesadd("articulo")
'Set rstProd = CreaRecordSet( "SELECT * FROM prods WHERE articulo = '" & rstClavesadd("articulo") & "'", Ambiente.Connection )
Set rstArticulo = CreaRecordSet( "SELECT * FROM (" & s & ") a WHERE Articulo = '" & rstClavesadd("articulo") & "'", Ambiente.Connection )
Presentacion = rstClavesadd("clave") & " - " & rstClavesadd("dato1")
Cant_Presentacion = Val2(rstClavesadd("Cantidad"))
End If

End If

If Not rstArticulo.EOF then 'clEmpty(rstArticulo("Artículo")) Then
txtArticulo = rstArticulo("Articulo")
lblArticulo = "Artículo: " & rstArticulo("Articulo")
lblDescripcion = "Descripción: " & rstArticulo("Descripción")
lblPrecio = "Precio: " & formato(rstArticulo("Precio 1"),"##,##0.00" )
lblUnidad = "Unidad: " & rstArticulo("Unidad")
if Presentacion <> "" then
lblPresentacion = "Presentación: " & Presentacion
lblCantPres = "Cantidad presentación: " & Cant_Presentacion
end if
End If

end sub

Sub NuevaPartida(rstArticulo, nPrecio)
on error resume next
Set rstVenta = Rst("SELECT venta FROM ventas WHERE venta = " & ParentObject.Venta, Ambiente.Connection)
'mymessage "" & rstArticulo & nPrecio
If rstVenta.EOF Then
SalvaVenta False
End If

Query.Reset
Query.strState = "INSERT"
Query.AddField "partvta", "clave", ""
Query.AddField "partvta", "prcantidad", 1
Query.AddField "partvta", "venta", ParentObject.Venta
Query.AddField "partvta", "articulo", rstArticulo("Articulo")
Query.AddField "partvta", "cantidad", 1
Query.AddField "partvta", "precio", nPrecio / ParentObject.tipoDeCambio
Query.AddField "partvta", "preciobase", rstArticulo("precio1") / ParentObject.tipoDeCambio
Query.AddField "partvta", "descuento", 0
Query.AddField "partvta", "impuesto", rstArticulo("valor")
Query.AddField "partvta", "observ", Trim(rstArticulo("Descrip"))
Query.AddField "partvta", "partida", 0
Query.AddField "partvta", "usuario", ParentObject.Ambiente.uId
Query.AddField "partvta", "usufecha", Date
Query.AddField "partvta", "usuhora", Formato(Time, "HH:mm:ss")
Query.AddField "partvta", "almacen", 1
Query.AddField "partvta", "lista", 1
Query.AddField "partvta", "caja", ParentObject.Ambiente.Estacion
Query.AddField "partvta", "estado", "PE"
Query.AddField "partvta", "devconf", 0
Query.AddField "partvta", "iespecial", rstArticulo("iEspecial")
Query.AddField "partvta", "kit", rstArticulo("kit")
Query.AddField "partvta", "costo_u", rstArticulo("costo_u")
Query.AddField "partvta", "costo", rstArticulo("costo")
Query.AddField "partvta", "donativo", rstArticulo("Donativo") / ParentObject.tipoDeCambio
Query.AddField "partvta", "invent", 1
Query.Exec

nPartida = LastInsertedId(ParentObject.Ambiente.Connection)

ParentObject.fg2.Redraw = False

For n = ParentObject.UltimaPartida To ParentObject.fg2.Rows - ParentObject.fg2.FixedRows
If clEmpty(fg2.TextMatrix(n, 0)) Then
ParentObject.fg2.TextMatrix(n, 10) = 1
ParentObject.fg2.TextMatrix(n, 0) = rstArticulo("Articulo")
ParentObject.fg2.TextMatrix(n, 1) = 1
ParentObject.fg2.TextMatrix(n, 2) = nPrecio / ParentObject.tipoDeCambio
ParentObject.fg2.TextMatrix(n, 3) = Formato(0, formatoDeDinero)
ParentObject.fg2.TextMatrix(n, 5) = Formato(rstArticulo("Valor"), Ambiente.FDinero)
ParentObject.fg2.TextMatrix(n, 6) = Trim(rstArticulo("Descrip"))
ParentObject.fg2.TextMatrix(n, 14) = Formato(rstArticulo("iEspecial"), Ambiente.FDinero)
ParentObject.fg2.Row = n
ParentObject.fg2.Col = 6
ParentObject.fg2.CellFontBold = True
ParentObject.fg2.Col = 1
ParentObject.fg2.TextMatrix(n, 7) = nPartida
ParentObject.fg2.TextMatrix(n, 8) = 1
ParentObject.fg2.TextMatrix(n, 9) = 1
ParentObject.fg2.TextMatrix(n, 12) = Val2(rstArticulo("costo_u"))
ParentObject.fg2.TextMatrix(n, 17) = Val2(rstArticulo("Donativo")) / ParentObject.tipoDeCambio

ParentObject.UltimaPartida = n
AjustaPartida (n)

Exit For

End If
Next

ParentObject.CantidadDeArticulos = 0
ParentObject.Peso = 0

CalculaImportes
ParentObject.fg2.Redraw = True

ParentObject.Peso = 0
End Sub

Sub Button_click()

Select Case ControlEvento.Tag
Case "cmdAgregarPartida"
'Agregamos la recarga al punto de venta a través de NuevaPartida
Set rstArt = Rst("SELECT prods.*, impuestos.valor FROM prods, impuestos WHERE prods.impuesto = impuestos.impuesto " & _
" and prods.articulo = '" & txtArticulo & "' ", Ambiente.Connection)
If not rstArt.EOF Then
'SalvaVenta False
NuevaPartida rstArt, Val2(rstArt("precio1"))
End If

End Select
txtArticulo.SetFocus
End Sub

Sub LimpiarVentana()
lblArticulo = "Artículo: "
lblDescripcion = "Descripción: "
lblPrecio = "Precio: "
lblUnidad = "Unidad: "
'if Presentacion <> "" then
lblPresentacion = " "
lblCantPres = " "
'end if
end sub

Publicado el Dejar un comentario

ALTA DE ARTICULOS ASIGNANDO ALMACEN

ALTA DE ARTICULOS ASIGNANDO ALMACEN

 

1.-Dar de Alta Productos.

2.-Modificacion de Productos.

3.-Asignacion de Almacen Dado de Alta.

4.-Solicitud de Precio.

5.-Venta Agranel.

6.-Cambio de Clave.

7.-Despliega la Clave Anterior.

8.-Modificacion de Existecias (Directa).

9.-Despliega los Articulos en General.

10.-Despliega los Articulos en el almacen Seleccionado.

 

Nestor Octavio Guzman Bernal

Desarrollador de Soluciones

Cel.: (722) 7 70 16 56

WhatsApp: (722) 7 70 16 56

 

 

 

Publicado el Dejar un comentario

Ejemplo de consulta WSDL

El siguiente ejemplo funciona para consumir servicios web SOAP.



'jofelchez@gmail.com
'whatsapp 7222816462
'Alta de catálogo de productos desde halpmybusinesspos.info
Public imagen
Public info
Public codigoEncontrado

Sub Form_Load()
Dim wf

Me.Caption = “ALTA ULTRARAPIDA”

cmdCancelar.Cancel = True

txtSKU.TabIndex = 0
txtDescripcion.TabIndex = 1
txtImpuesto.TabIndex = 2
txtPrecio.TabIndex = 3
cmdAceptar.TabIndex = 4
cmdCancelar.TabIndex = 5

codigoEncontrado = False
txtImpuesto = 0
txtSKU.Text = “” & GetSessionValue( Ambiente, “SKU_BUSCADO” )

End Sub

Sub procesaCadena( c )
Dim n, s, i

c = Mid( c, 4 )

Do While True
n = clAt( “:–:”, c )

If n = 0 Then
Exit Do
Else
i = i + 1

If i = 1 Then
txtSKU = Mid( c, 1, n – 1 )
End If

If i = 2 Then
txtDescripcion = Mid( c, 1, n – 1 )
End If

If i = 3 Then
txtPrecio = Formato( Val2(Mid( c, 1, n – 1 )), “##,##0.00” )
txtPrecio.SelStart = 0
txtPrecio.SelLength = Len( txtPrecio )
End If

If i = 4 Then
imagen = Mid( c, 1, n – 1 )
End If

If i = 5 Then
info = Mid( c, 1, n – 1 )
End If

If i = 6 Then
txtImpuesto = Formato( Val2(Mid( c, 1, n – 1 )), “##,##0.00” )
End If

c = Mid( c, n + 4 )

End If

Loop

End Sub

Sub Button_click()
Select Case ControlEvento.Tag
Case “cmdAceptar”

Call salvaDatos()

Case “cmdCancelar”
DescargaForma
End Select

End Sub

Sub salvaDatos()
Dim Query, rstImpuesto, codigoImpuesto, wf,longitudDescipcion,informacion
dim rstProds

If clEmpty( txtSKU ) Then
MyMessage “Es necesario que indique el código de barras del producto”
txtSKU.Setfocus
Exit Sub
End If

If Val2( txtPrecio ) <= 0 Then
MyMessage “Es necesario que indique el precio del producto”
txtDescripcion.SetFocus
Exit Sub
End If

Set Query = NewQuery()
Set Query.Connection = Ambiente.Connection

Set rstImpuesto = CreaRecordSet( “SELECT * FROM impuestos WHERE valor = ” & Val2( txtImpuesto ), Ambiente.Connection )

If rstImpuesto.EOF Then
Query.strState = “INSERT”
Query.AddField “impuestos”,”Impuesto”, “I” & txtimpuesto
Query.AddField “impuestos”,”Descrip”, “I” & txtimpuesto
Query.AddField “impuestos”,”Valor”, txtimpuesto
Query.AddField “impuestos”,”Usuario”, Ambiente.Uid
Query.AddField “impuestos”,”usuFecha”, Date
Query.AddField “impuestos”,”usuHora”, Formato( Time, “hh:mm:ss” )
Query.Exec

codigoImpuesto = “I” & txtimpuesto
Else

codigoImpuesto = rstImpuesto(“impuesto”)

End If

Set rstProds = CreaRecordSet( “SELECT articulo FROM prods WHERE articulo = ‘” & txtSKU & “‘”, Ambiente.Connection )

longitudDescipcion = len(txtDescripcion)
informacion = Lcase(Mid( txtDescripcion, 1, longitudDescipcion – 7))
informacion = replace(informacion,”ñ”,”%C3%B1″) ‘ñ
informacion = replace(informacion,”á”,”a”) ‘a
informacion = replace(informacion,”é”,”e”) ‘e
informacion = replace(informacion,”í”,”i”) ‘i
informacion = replace(informacion,”ó”,”o”) ‘o
informacion = replace(informacion,”ú”,”u”) ‘u

Query.Reset

If rstProds.EOF Then
Query.strState = “INSERT”
Query.AddField “prods”, “linea”, “SYS”
Query.AddField “prods”, “marca”, “SYS”
Query.AddField “prods”, “ubicacion”, “SYS”
Query.AddField “prods”, “fabricante”, “SYS”
Query.AddField “prods”, “imagen”, info

Else
Query.strState = “UPDATE”
Query.Condition = “articulo = ‘” & txtSKU & “‘”

End If

Query.AddField “prods”, “articulo”, txtSKU
Query.AddField “prods”, “descrip”, txtDescripcion
Query.AddField “prods”, “precio1”, Val2(txtPrecio) / (1 + (Val2( txtImpuesto ) / 100))
Query.AddField “prods”, “impuesto”, codigoImpuesto
Query.AddField “prods”, “paraventa”, 1
Query.AddField “prods”, “invent”, 1
Query.AddField “prods”, “url”, “https://mbasic.facebook.com/search/photos/?source=filter&isTrending=0&q=” & informacion
Query.Exec

Set rstProds2 = CreaRecordSet( “SELECT top 1 ARTICULO, prods.DESCRIP, prods.LINEA, prods.MARCA, PRECIO1, UNIDAD, IMPUESTO, INVENT, lineas.descrip as descripLinea, marcas.descrip as descripMarca FROM prods left join lineas on prods.linea = lineas.linea left join marcas on prods.marca= marcas.marca WHERE prods.autor is null or prods.autor <> ‘1’ order by articulo desc “, Ambiente.Connection )
If not rstProds2.EOF Then
consulta “INSERT IGNORE INTO prods (ARTICULO, DESCRIP, LINEA, MARCA, PRECIO1, UNIDAD, IMPUESTO, INVENT, DESCRIPLINEA, DESCRIPMARCA, USUFECHA ) VALUES (‘” & rstProds2(“ARTICULO”) & “‘, ‘” & rstProds2(“DESCRIP”) & “‘ , ‘” & rstProds2(“LINEA”) & “‘ , ‘” & rstProds2(“MARCA”) & “‘ , ‘” & rstProds2(“PRECIO1”) & “‘ , ‘” & rstProds2(“UNIDAD”) & “‘ , ‘” & rstProds2(“IMPUESTO”) & “‘ , ‘” & rstProds2(“INVENT”) & “‘ , ‘” & rstProds2(“DESCRIPLINEA”) & “‘ , ‘” & rstProds2(“DESCRIPMARCA”) & “‘ , now() ) ”
Ambiente.Connection.Execute “update prods set autor = 1 where articulo = ‘” & rstProds2(“ARTICULO”) & “‘ ”

end if

on error resume next
ParentObject.txtFields(3) = “”
ParentObject.LlenaPartida txtSKU.Text

DescargaForma

End Sub

Sub Form_Activate()
On Error Resume Next

If clEmpty( txtDescripcion ) Then
txtDescripcion.SetFocus()
Else
If Not clEmpty( txtImpuesto ) Then
txtPrecio.SetFocus
Else
txtImpuesto.SetFocus
End If
End If

End Sub

Sub consulta(MiArticulo)
Dim NS, NS_SOAP, NS_SOAPENC, NS_XSI, NS_XSD

NS = “urn:miserviciowsdl”

NS_SOAP = “http://schemas.xmlsoap.org/soap/envelope/”
NS_SOAPENC = “http://schemas.xmlsoap.org/soap/encoding”
NS_XSI = “http://www.w3.org/2001/XMLSchema-instance”
NS_XSD = “http://www.w3.org/2001/XMLSchema”

‘ The URL of the Web service.
Dim URL
URL = “https://demo.helpmybusinesspos.info/ws/servicio_2.php?wsdl”

‘ The URL of the operation (function).
Dim Operation_HMBP
Operation_HMBP = “urn:MyServicewsdl#GetData2”

‘ XML DOM objects.
Dim DOM, Envelope, Body, Operation, Param

‘ Creates an XML DOM object.
Set DOM = CreateObject(“MSXML2.DOMDocument.6.0”)

‘ Creates the main elements.
Set Envelope = DOM.createNode(1, “SOAP-ENV:Envelope”, NS_SOAP)
Envelope.setAttribute “xmlns:soapenc”, NS_SOAPENC
Envelope.setAttribute “xmlns:xsi”, NS_XSI
Envelope.setAttribute “xmlns:xsd”, NS_XSD
DOM.appendChild Envelope
Set Body = DOM.createElement(“SOAP-ENV:Body”)
Envelope.appendChild Body

‘ Creates an element for the TIPOSDECAMBIO function.
‘Set Operation = DOM.createNode(1, “ns1:GetData”, NS)
Set Operation = DOM.createNode(1, “ns1:GetData2”, NS)
Body.appendChild Operation

‘ Creates an element for the Celsius parameter (passes a value of 33 °C).
‘Parámetro 1
Set Param = DOM.createNode(1, “ID”, NS)
Param.Text = MiArticulo
Operation.appendChild Param

‘Parámetro 2
‘Set Param2 = DOM.createNode(1, “baseDeDatos”, NS)
‘Param2.Text = MibaseDeDatos
‘Operation.appendChild Param2

‘Parámetro 3
‘Set Param3 = DOM.createNode(1, “cliente”, NS)
‘Param3.Text = MiCliente
‘Operation.appendChild Param3

‘ Releases the objects.
Set Param = Nothing
Set Operation = Nothing
Set Body = Nothing
Set Envelope = Nothing

Set NodeList = DOM.getElementsByTagName(“*”)
For Each Element in NodeList
If Element.tagName = “return” then

‘cortar hasta el primer pipe
nPos = clAt( “|”, “” & Element.Text )
cArticulo = Mid( Element.Text, 1, nPos – 1)
txtSku = trim(cArticulo)

cDescripcion = Mid( Element.Text, nPos + 1)
‘cortar hasta el segundo pipe
nPos = clAt( “|”, “” & cDescripcion )
cDescripcion = Mid( cDescripcion,1, nPos – 1)
txtDescripcion = trim(cDescripcion)

Exit For

End If
Next

‘ Releases the objects.
Set Element = Nothing
Set NodeList = Nothing
Set DOM = Nothing

End Sub

Sub procesaRespuesta( sMensaje)
Dim Query, rstArticulo
Dim NodeList, Element

mymessage “” & sMensaje

Set Query = NewQuery()
Set Query.Connection = Ambiente.Connection

Set xml = CreateObject(“Msxml2.DOMDocument.3.0”)
xml.loadXML((sMensaje))
Set NodeList = xml.getElementsByTagName(“*”)
For Each Element in NodeList
If Element.tagName = “bm:Obs” then
msgbox “Tipo de cambio : ” & Trim(Element.getAttribute(“OBS_VALUE”) ) & vbCrLf & “Fecha : ” & Trim(Element.getAttribute(“TIME_PERIOD”) )
Exit For
End If
Next
End Sub

Sub Text_LostFocus()

If ControlEvento.Tag = “txtSku” Then
consulta “SELECT articulo, descrip, precio1,linea,marca, impuesto FROM prods WHERE articulo = ‘” & trim(txtSKU) & “‘ or articulo like ‘%” & Cambia(“%”, ” “, txtSKU) & “%’ or descrip like ‘%” & Cambia(“%”, ” “, txtSKU) & “%’ order by articulo ”
Form_Activate
End If

End Sub