Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Barcode 128a Generar codigo de barras (https://www.clubdelphi.com/foros/showthread.php?t=70242)

sitrico 08-10-2010 22:31:47

Barcode 128a Generar codigo de barras
 
Buenas, actualmente tengo una función escrita en delphi que permite calcular el código de barras en formato code128a, para usarlo solo tengo que instalar una fuente code128 y calcular la cadena antes de mandar a imprimir.

Lo que quisiera es poder implementar una funcion similar en SQL Server.

Pongo el código delphi.

Código Delphi [-]
unit BarcodeTools;

interface

Function Code128a(DataToEncode:String) : String;

implementation

Uses sysutils;

Function Code128a(DataToEncode:String) : String;
// Esta funcion fue traducida desde un macro excel descargado de internet
// permite codificar en code 128a una texto dado.
// Incluye calculo de digito de verificación
Var
PrintableString : String;
StringLength, i, WeightedTotal,
CurrentCharNum, CurrentValue : Integer;
CheckDigitValue : Integer;
C128CheckDigit : Char;
Begin
DataToEncode := Trim(DataToEncode);
PrintableString := '';
WeightedTotal := 103;
PrintableString := Char(203);
StringLength := Length(DataToEncode);
CurrentValue := 0;
For i := 1 To StringLength do
   Begin
   CurrentCharNum := ord(DataToEncode[i]);
   If CurrentCharNum < 135 Then CurrentValue := CurrentCharNum - 32;
   If CurrentCharNum > 134 Then CurrentValue := CurrentCharNum - 100;
   CurrentValue := CurrentValue * i;
   WeightedTotal := WeightedTotal + CurrentValue;
   If CurrentCharNum = 32 Then CurrentCharNum := 194;
   PrintableString := PrintableString + Chr(CurrentCharNum);
   End;
CheckDigitValue := (WeightedTotal Mod 103);
C128CheckDigit := #0;
If (CheckDigitValue < 95) And (CheckDigitValue > 0) Then C128CheckDigit := Char(CheckDigitValue + 32);
If (CheckDigitValue > 94) Then C128CheckDigit := Char(CheckDigitValue + 100);
If CheckDigitValue = 0 Then C128CheckDigit := Char(194);
PrintableString := PrintableString + C128CheckDigit + Char(206);
Result := PrintableString;
End;

end.

Es más me arriesgo a proponer al foro completar la unidad con otros "generadores" de códigos de barras, hasta ahora siempre he usado solo el 128a pero hay otros formatos que se podrían definir fácilmente en la unidad.

Gracias

Ñuño Martínez 13-10-2010 09:46:40

¿Y para qué quieres "calcular" el código de barras en el servidor de bases de datos? Ahí sólo guardas la cadena o el número.

Es más, cuando hace años trabajé con códigos de barras no necesité "calcular" nada. Al imprimir la cadena con la fuente tipográfica salía el código perfectamente.

sitrico 15-10-2010 15:40:34

El code 128 necesita un dígito de autoverificación, por eso el calculo, ya solucioné el caso, pero no deja de parecerme interesante poder incorporar UDFs a firebird o SQL server que permitan generar un select como este:

Código SQL [-]
Select CodArt, DescArt, CODE128(CodArt), CODE39(CodArt) Form Articulos ...

Devolviendo en los casos correspondientes la cadena codificada correspondiente.

Para poder imprimir un reporte, etiqueta o lo que sea, lo único que debe hacerse es seleccionar la fuente correspondiente y listo.

Mas que una duda lo que quiero es aportar una idea.

Ñuño Martínez 19-10-2010 10:07:26

Ah, vale. El programa que hice yo no necesitaba verificar, sino que usaba los códigos que leía tal cual únicamente para identificar productos (no asignaba nuevos códigos), por lo que trabajaba "de buena fe".

De todas formas, creo que la operación de verificación debería hacerla la aplicación, no el DBM. "Al César lo que es del César". Pero bueno, aquí ya nos metemos en debates.


La franja horaria es GMT +2. Ahora son las 09:41:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi