Marcar registros impresos desde una base de datos de Excel
Pregunta
BarTender solo puede leer desde una base de datos, pero me gustaría marcar una fila como leída en Excel una vez que se haya procesado. ¿Es posible hacer esto?
Respuesta
La mejor manera de hacerlo es crear un campo adicional en la hoja de Excel que funcione como un indicador de "Etiqueta impresa". Cuando se utiliza un registro para imprimir una etiqueta, se escribe un valor en el campo "Etiqueta impresa" para marcarlo como ya impreso. Al conectar el archivo de Excel, se puede usar una consulta que omita cualquier registro que tenga el campo "Etiqueta impresa" marcado.
Lamentablemente, BarTender en cuanto a conectividad con bases de datos es una aplicación de solo lectura. Esto significa que, para escribir un valor de vuelta en un registro impreso de la base de datos, necesitaremos usar la capacidad de VB Scripting incorporada en BarTender. Aquí tienes los archivos de ejemplo:
En el archivo de Excel hay dos campos, uno para el producto y otro que indica cuándo el registro del producto ha sido impreso.
En el formato de etiqueta de BarTender, he hecho una conexión al archivo de Excel, que se asume estará en la carpeta "C:\Seagull". Utiliza una consulta para encontrar y, por lo tanto, posiblemente imprimir solo aquellos productos (registros) que no tengan la palabra "YES" en la columna "Printed". La opción de seleccionar el registro al momento de imprimir está activada, permitiendo al usuario elegir cuáles de los registros que no han sido impresos se van a imprimir.
Durante el trabajo de impresión, el script de VB contenido en el objeto en rojo (ubicado fuera de la etiqueta) ejecuta una sección de código que se conecta al archivo de Excel, encuentra el registro que se está imprimiendo y establece el campo "Printed" en el valor "YES", de modo que la próxima vez que el usuario imprima, ese registro ya no estará disponible en el cuadro de selección al imprimir. El script de VB es el siguiente.
Evento OnNewRecord
'Definir los nombres de los objetos.
dim objConn
dim strConn
dim rs
'Definir las constantes de los parámetros de conexión a la base de datos.
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H0001
'Conectar al archivo de Excel.
Set objConn = CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='C:\Seagull\Fruits.xls';Extended Properties=""Excel 8.0;HDR=YES;"""
'Crear un conjunto de registros con el registro actual que se está imprimiendo.
Set rs = CreateObject("ADODB.Recordset")
rs.open "SELECT * FROM [Sheet1$]", objConn, adOpenStatic, adLockOptimistic, adCmdText
rs.Find "Product = '" & Field("Sheet1$.Product") & "'"
'Establecer el campo "Printed" del registro en "YES" para marcarlo como impreso.
rs.Fields("Printed") = "YES"
rs.Update
Los elementos en negrita se pueden cambiar según la ruta y el nombre de tu archivo de Excel, así como los nombres de los campos que desees buscar y actualizar. Puedes usar este ejemplo y adaptarlo a tus propias necesidades de impresión de etiquetas.