Variables
Las variables deben declararse en la parte superior de los procedimientos
Las primeras letras indican el tipo de variable:
- Para strings, una s
- Para numéricas, una n
- Para fechas, una d
- Los recordsets siempre rst
- La base de datos siempre db
Si el nombre es compuesto de varias palabras se inicia cada palabra en mayúsculas
- Dim rstPedidosVentasLineas as recordset
Si se declaran varias variables del mismo tipo se ponen todas en la misma línea. Ejemplo:
- Dim rstVP as recordset, rstVPLIN as recordset
- Dim sSQL as string, sCliente as string
Recorrer un recordset
En este ejemplo
- Declaramos las variables
- Asignamos valor a la de base de datos y la de recordset
- Verificamos si hay algún registro y si no lo hay terminamos el procedimiento
- Nos movemos al primer registro
- Hacemos un bucle hasta el EOF End Of File
- Ejecutamos el código
- Nos movemos al siguiente registro
- Salimos del bucle
Código
- Dim db As Database
- Dim rst As Recordset
- Set db = CurrentDb()
- Set rst = CurrentDb().OpenRecordset(«Consumir líneas TMP», dbOpenDynaset, dbSeeChanges)
- If rst.RecordCount = 0 Then
- MsgBox «No se ha consumido nada de esta OP», vbCritical, «Preparaciones Consumir»
- Exit Function
- End If
- rst.MoveFirst
- Do Until rst.EOF
- ‘Código a ejecutar
- rst.MoveNext
- Loop
Usar un procedimiento NAX
Explicación
- Abrimos el control de errores de NAX
- Declaramos la variable y asignamos valor al objeto
- Iniciamos el objeto
- Aplicamos un método y ejecutamos el control de errores
- Aplicamos el método añadir
- Usamos el método acabar
- Mostramos los errores
Uso del objeto producción
- Call ErroresAbrir
- Dim naxProduccion As a3ERPActiveX.OrdenProduccion
- Set naxProduccion = New a3ERPActiveX.OrdenProduccion
- naxProduccion.Iniciar
- naxProduccion.Modifica rst!IDPROD
- Call Errores
- naxProduccion.ConsumirComponente rst!IDLINP, rst!Consumido, CStr(Date), «S»
- Call Errores
- naxProduccion.Anade
- Call Errores
- naxProduccion.Acabar
- Call Errores
- Call ErroresMostrar
Uso del objeto traspaso
- Call ErroresAbrir
- Dim naxTraspasar As a3ERPActiveX.Traspaso
- Set naxTraspasar = New a3ERPActiveX.Traspaso
- naxTraspasar.Iniciar
- naxTraspasar.Borra Me.IDTraspaso
- Call Errores
- naxTraspasar.Acabar
- Call Errores
- Call ErroresMostrar
Funciones de dominio agregado
Dcount: Para saber cuántos registros tiene una tabla
DCount(«*», «Fabricar TMP»)
Ejemplo para contar cuantos registros hay en la tabla Fabricar TMP, y si son distintos de 0 mostrar un mensaje
- If DCount(«*», «Fabricar TMP») <> 0 Then
- If MsgBox(«Hay Fabricar pendientes de traspasar al A3ERP, seguro que quiere salir», vbCritical + vbDefaultButton2 + vbYesNo, Me.Name) = vbNo Then
- Exit Sub
- End If
- If MsgBox(«Hay Fabricar pendientes de traspasar al A3ERP, seguro que quiere salir», vbCritical + vbDefaultButton2 + vbYesNo, Me.Name) = vbNo Then
- End If
Lo mismo pero aplicando un criterio para contar los registros que cumplen el criterio
Contar cuantos registros hay en la tabla OP Histórico, para la OP que contiene la variable nOP
- DCount(«*», «[OP Histórico]», «OP=» & nOP)
Contar cuantos registros hay en la tabla dbo_escandallos para el articulo que contiene la variable sArticulo. Como es un string usamos los ‘ para encerrar la variable
- DCount(«*», «dbo_escandallo», «codartp = ‘» & sArticulo & «‘»)
Dlookup: Para buscar un valor en una tabla
Por ejemplo buscar el valor del campo situación en la tabla Pedidos ventas A3ERP líneas para el numero de línea que contiene la variable nLinea
- DLookup(«Situación», «[Pedidos ventas A3ERP líneas]», «[Numero línea]=» & nLinea)
Buscar el valor del campo Haylotes en la tabla artículos, para el valor de la variable Me.Componente, que como es un string encerramos entre ‘
- DLookup(«HAYLOTES», «Artículos», «Articulo='» & Me.Componente & «‘»)
Mensajes con msgbox
Mensajes para mostrar un texto
- MsgBox «No ha guardado», vbCritical, Me.Caption
Siempre después del texto ponemos un icono con alguno de los valores vb que se muestran al desplegar, y al final el Me.caption, que da el nombre del formulario
Mensajes para hacer una pregunta
- If MsgBox(«Seguro que quiere borrar el traspaso», vbQuestion + vbDefaultButton2 + vbYesNo) = vbNo Then
- Exit Sub
- End If
Ponemos el icono de interrogación, que este activo el segundo botón, y que pregunte si o no.
Ejecutar una consulta de parámetros
A veces interesa montar una consulta y dejar algún campo que se le pase como parámetro antes de ejecutarla.
Los parámetros en las consultas siempre los empezamos con la letra q, por ejemplo qPreparacion.
En el código declaramos la variable, pasamos el parámetro y ejecutamos. Este ejemplo ejecuta la consulta Preparaciones actualizar consumido, pasándole como parámetro el valor de la variable nPreparacion
- Dim qDef As QueryDef
- Set qDef = db.QueryDefs(«Preparaciones actualizar consumido»)
- qDef.Parameters![qPreparacion] = nPreparacion
- qDef.Execute
Enviar un email
El siguiente código conecta con Outlook, pone los datos para enviar un email y lo muestra en pantalla o lo envía directamente.
Recomiendo usar el código y comentar lo que no se vaya a usar
- Dim olkApp As Outlook.Application
- Dim olkNameSpace As Outlook.NameSpace
- Dim objMailItem As Outlook.MailItem
- Set olkApp = New Outlook.Application
- Set olkNameSpace = olkApp.GetNamespace(«MAPI»)
- Set objMailItem = olkApp.CreateItem(olMailItem)
- With objMailItem
- .To =”elquesea@dominio.com”
- .CC = “mail de l
- .BCC = eMailCCO
- .Subject = “texto del asunto”
- .Body = “texto del mensaje”
- .Attachments.Add Trim(sFichero) ‘Si hay que adjuntar un fichero hay que pasar una variable con la ruta, nombre y extensión.
- .Send
- .Display
- End With
- Set objMailItem = Nothing
- Set olkNameSpace = Nothing
- Set olkApp = Nothing
Funciones útiles
Función Hayalgo() para ver si una variable tiene algún contenido
Esta función la usamos para mirar si una variable tiene algún valor, tiene algo, contiene algo.
Se considera que no tiene nada si es, null, “” o 0
Ejemplo: si no hay algo en qArticulo mostramos un mensaje.
- If Not hayalgo(Me.qArticulo) Then
- MsgBox «No ha indicado artículo», vbCritical, Me.Caption
- Exit Sub
- End If
Función NAC() para retornar 0 si no hay un valor numérico en una variable
Si la variable que pasamos es un número, la devuelve, en caso contrario devuelve 0, por ejemplo si pasamos un nulo o un “”.
Es básica para convertir posibles valores nulos a 0
Ejemplo: si los contadores fueran nulos los trata como ceros
- Me.Cantidad_fabricada = NAC(Me.Contador_final) – NAC(Me.Contador_inicial)
Función Cuadrar() para cuadrar una variable a la derecha como hace el ERP
Tiene un parámetro opcional, la longitud a cuadrar. Si no se pasa se cuadra a 8 caracteres
- Me.qProveedor = cuadrar(Me.qProveedor)
- Me.qArticulo = cuadrar(Me.qArticulo, 15)
- Me.qLote = cuadrar(Me.qLote, 25)
Función Ceros() para formatear una variable con ceros a la izquierda
Formatea una variable a la cantidad de ceros que indiquemos
Se le pasan dos parámetros la variable y la cantidad de ceros
- campotabla = ceros(Me.Listado, 6)
En este ejemplo campo tabla toma el valor de Me.listado pero en formato 000000
Es lo mismo que aplicar la función format pero se desarrolló para simplificar el código.
Función DatoEmpresa() para obtener el valor de un campo de la empresa activa
Devuelve el valor del campo que indiquemos en la empresa de ASOFT a la que estamos conectados.
- sDirectorio = datoempresa(«Carpeta»)
En este ejemplo la variable sDirectorio toma el valor del campo Carpeta de la empresa activa de ASOFT
Función IRA3ERP() para ir a un fichero y registro de A3erp
Le pasamos dos parámetros
- El fichero de a3erp que debe abrirse
- El valor del campo clave que debe buscarse
Este ejemplo abre a3erp y muestra el artículo que está en Me.articulo
- Call iraa3erp(«Artículos», Me.Articulo)
Este ejemplo abre a3erp y muestra el albarán compras que tiene el IDALBC que pasamos como valor
- Call iraa3erp(«Albaranes compras», IDALBC)
Si no pasamos el segundo parámetro crea un registro nuevo
- Call iraa3erp(“Clientes”, «»)
Función IrAConDatoSQL para abrir un formulario de Asoft y mostrar el registro que nos intereses
Le pasamos tres parámetros
- El nombre del formulario
- El nombre del campo clave
- El valor a buscar en el campo clave
En este ejemplo abre pedidos ventas, y muestra el registro que en el campo Pedido tiene el valor “P00001”
- Call iracondato(«Pedidos ventas», «Pedido», “P00001”)
Código
- Dentro de un procedimiento o una estructura (IF, NEXT, DO) las sentencias deben ir indentadas
- En la cabecera debe haber un Option explicit, cosa que obliga a declarar las variables
- Si hacemos referencia a un objeto del formulario pondremos Me.
- No declarar variables que no haya que usarlas más de vez
Formularios
Medida de los formularios de edición de datos
- Ancho 27 cm
- Alto 17 cm
- Pie 1 cm
Medida de los formularios de selección
- Altura cabecera 3
- Ancho 27
Campos combo
- Deben tener en el evento doble clic con la función =IRA()
- Si la tabla en que se basan tiene un campo Descripción o un campo Nombre, en el combo debe verse esto, NO el código
Campos
- Si es numérico, poner siempre doble, salvo que se indique lo contrario
- En los formularios campos numéricos deben tener formato Estándar, con 2 decimales y alineados a la derecha