Estoy tratando de hacer Etiquetas por productos para poder imprimir Codigos de Barra de la siguiente Forma: Arriba el Codigo del Articulo, En la Mitad Codigo de Barra del Articulo (para lector) y abajo del nombre del articulo.
Cree el Reporte en Query manager y su layaut de impresion que me traiga:
ItemCode, Codebars, itemName
No logro agregar en el layout la imagen del campo del codigo de barra del producto.
Me podrian orientar como puedo lograr verlo: Ver imagen:
Si tienen como hacerlo mas facil en Crystal también me puede ayudar:
A diferencia del manejo de layour de impresión, CR es mas facil por su interfaz gráfica y la facilidad de integrar campos al reporte, adicional que puedes agregar muchos elementos con solo drag & drop. Por medio de la link que te comparto puedes darte una idea de como se realiza.
Los errores que te aparecen son error de sintaxis, es decir el código que insertaste no está bien indentado.
Function Generar_EAN128(Codigo as String) As String
' V 2.0.0 ' Esta función permite generar el código de barras para mostrarlo con la fuente CODE128.TTF
' - Parametros : cadenas del código
' - Retorno: retorna una cadena que permite representar generar el código de barras con la fuente CODE128.TTF
' retorna una cadena vacía si no se puede representar el código de barras
dim i, checksum, mini, dummy as number
dim code128 as string
dim tableB As Boolean
code128=""
If Len(Codigo) > 0 Then ' Verificar si los caracteres son válidos
For i = 1 To Len(Codigo)
Select Case Asc(Mid(Codigo, i, 1))
Case 32 To 126, 203
Case Else
Codigo=""
Exit For
End Select
Next
End If
If Len(Codigo) > 0 Then 'Calcular de la cadena de código optimizando el uso de las tablas B y C
tableB=true
i = 1 ' Iniciar el indice de la cadena
Do While i <= Len(Codigo)
If tableB Then 'Ver si interesa cambiar a la tabla C si para 4 dígitos de inicio o final sino 6 dígitos
mini = IIf(i = 1 Or i + 3 = Len(Codigo), 4, 6)
mini = TestNum (Codigo, i, mini)
If mini < 0 Then 'Cambiando a la tabla C
If i = 1 Then 'Iniciando con la tabla C
code128 = Chr(210)
Else 'Cambiar a la tabla C
code128 = code128 & Chr(204)
End If
tableB = False
Else
If i = 1 Then code128 = Chr(209) 'Iniciando con la tabla B
End If
End If
If Not tableB Then 'Si estabamos en la tabla C se intentan procesar 2 dígitos
mini = 2
mini = TestNum (Codigo, i, mini)
If mini < 0 Then 'Procesar 2 dígitos
dummy = Val(Mid(Codigo, i, 2))
dummy = IIf(dummy < 95, dummy + 32, dummy + 105)
code128 = code128 & Chr(dummy)
i = i + 2
Else 'Si no tiene 2 dígitos se cambia a la tabla B
code128 = code128 & Chr(205)
tableB = True
End If
End If
If tableB Then 'Procesar 1 dígito con la tabla B
code128 = code128 & Mid(Codigo, i, 1)
i = i + 1
End If
Loop 'Calcular el checksum
For i = 1 To Len(code128)
dummy = Asc(Mid(code128, i, 1))
dummy = IIf(dummy < 127, dummy - 32, dummy - 105)
If i = 1 Then checksum = dummy
checksum = (checksum + (i - 1) * dummy) Mod 103
Next 'Calculando el código ASCII de checksum
checksum = IIf(checksum < 95, checksum + 32, checksum + 105) 'Añadir el checksum y parar
code128 = code128 & Chr(checksum) & Chr(211)
End If
Generar_EAN128=code128
End Function
Function TestNum (Codigo As string, i As number, mini As number) As Number 'Si los caracteres de la variable mini desde la variable i son numericos entonces se devuelve 0
mini = mini - 1
If i + mini <= Len(Codigo) Then
Do While mini >= 0
If Asc(Mid(Codigo, i + mini, 1)) < 48 Or Asc(Mid(Codigo, i + mini, 1)) > 57 Then Exit Do
mini = mini - 1
Loop
End If
TestNum = mini
End Function
De está forma debería funcionar.
PD: Antes de guardar utiliza el botón de verificar formular.