Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-10-2010
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Poder: 21
sitrico Va por buen camino
Cool 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
__________________
Sitrico
Responder Con Cita
  #2  
Antiguo 13-10-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
¿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.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 15-10-2010
Avatar de sitrico
[sitrico] sitrico is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Caracas, Venezuela
Posts: 295
Poder: 21
sitrico Va por buen camino
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.
__________________
Sitrico
Responder Con Cita
  #4  
Antiguo 19-10-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
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.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Generar codigo de barras e imprimirlas rufo Varios 3 13-01-2010 21:04:21
generar codigo de barras jmlifi Impresión 7 18-06-2007 16:04:03
Generar Codigo de barras - sin componentes- voldemmor Varios 0 04-06-2007 17:32:54
generar codigo de barras pipe Varios 13 21-02-2007 19:54:58
Generar codigo de barras salvanano Conexión con bases de datos 1 02-10-2006 12:57:23


La franja horaria es GMT +2. Ahora son las 20:15:45.


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
Copyright 1996-2007 Club Delphi