CrystalReports: Barcode-Etikett für Artikel/Geräte: Unterschied zwischen den Versionen
(→Einfügen der Formel für den 2/5i-Barcode) |
|||
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 3: | Zeile 3: | ||
== Voraussetzungen: == | == Voraussetzungen: == | ||
Sie benötigen: | Sie benötigen: | ||
− | * Crystal-Reports: Mit diesem Programm wird das Formular bearbeitet. | + | * Crystal-Reports© 8.5: Mit diesem Programm wird das Formular bearbeitet. |
+ | ** Crystal-Reports 2008 kann nicht verwendet werden, weil die Crystal-Reports-Runtime einen Bug hat: Bei sehr kleinen Formaten wird immer eine Standard-Rand berechnet und das restliche Formular so verkleinert, dass es auf die Seite passt. Ergebnis: Das Etikett wird incl. Schriften, Barcode usw. viel kleiner dargestellt, als es eigentlich ist! | ||
+ | ** Wenn Sie "nur" über Crystal-Reports 2008 oder höher verfügen und eine Etiketten-Anpassung brauchen, müssen Sie sich Crystal-Reports 8.5 besorgen oder die Anpassung von GEVITAS machen lassen. | ||
* Einen Etikettendrucker: Im Normalfall handelt es sich dabei um einen speziellen Drucker, der (nur) Etiketten bedrucken kann, z.B. einen Thermotransfer-Drucker mit Kunststoffetiketten. | * Einen Etikettendrucker: Im Normalfall handelt es sich dabei um einen speziellen Drucker, der (nur) Etiketten bedrucken kann, z.B. einen Thermotransfer-Drucker mit Kunststoffetiketten. | ||
* Den Treiber für den Etikettendrucker: Auch wenn der Etikettendrucker nicht direkt an Ihrem PC angeschlossen ist, müssen Sie den Treiber für den Etikettendrucker auf Ihrem PC installieren. Nur dann können Sie in CrystalReports das Format des Etiketts auswählen/einstellen! | * Den Treiber für den Etikettendrucker: Auch wenn der Etikettendrucker nicht direkt an Ihrem PC angeschlossen ist, müssen Sie den Treiber für den Etikettendrucker auf Ihrem PC installieren. Nur dann können Sie in CrystalReports das Format des Etiketts auswählen/einstellen! | ||
− | * Eine Barcode-Schriftart für die Inventarnummer: Wenn Ihr Etikettendrucker eingebaute Barcodes hat, können Sie diese ggf. verwenden. Einzelheiten dazu entnehmen Sie der Beschreibung des Druckers. Alternativ dazu können Sie auch eine True-Type-Schriftart verwenden. Die Schriftart für den Barcode-Typ " | + | * Eine Barcode-Schriftart für die Inventarnummer: Wenn Ihr Etikettendrucker eingebaute Barcodes hat, können Sie diese ggf. verwenden. Einzelheiten dazu entnehmen Sie der Beschreibung des Druckers. Alternativ dazu können Sie auch eine True-Type-Schriftart verwenden. |
+ | ** Die Schriftart für den Barcode-Typ "i2of5Gevitas.ttf" können Sie von unserem Support erhalten. | ||
+ | ** In diesem Fall benötigen Sie auch noch eine CrystalReports-Formel, die die benötigten Zeichen für den 2of5i-Barcode und ggf. eine Prüfziffer errechnet. | ||
+ | ** Ein entsprechendes Muster-Formular können Sie auch von unserem Support erhalten. | ||
+ | ** Am Besten fordern Sie vom Support das [[GEVITAS Barcode-Package 2of5 Interleaved 2012]] an. | ||
− | == Vorgehensweise | + | == Vorgehensweise == |
An einem Beispiel sollen die einzelnen Schritte erläutert werden. So soll das Etikett aussehen: | An einem Beispiel sollen die einzelnen Schritte erläutert werden. So soll das Etikett aussehen: | ||
Zeile 16: | Zeile 22: | ||
Dies entspricht dem Standard-Etikett von GEVITAS. Sie können dieses als Basis für Ihr eigenes Etikett benutzen. | Dies entspricht dem Standard-Etikett von GEVITAS. Sie können dieses als Basis für Ihr eigenes Etikett benutzen. | ||
− | === Drucker einrichten in CrystalReports | + | === Drucker einrichten in CrystalReports === |
Öffnen Sie CrystalReports und das Musteretikett. Klicken Sie dann auf "Datei->Drucker einrichten". Wählen Sie Ihren Etikettendrucker und das Etikettenformat aus. Beispiel: | Öffnen Sie CrystalReports und das Musteretikett. Klicken Sie dann auf "Datei->Drucker einrichten". Wählen Sie Ihren Etikettendrucker und das Etikettenformat aus. Beispiel: | ||
Zeile 22: | Zeile 28: | ||
Erst danach können Sie im CrystalReports-Editor sehen, welche Dimensionen das Etikett hat. | Erst danach können Sie im CrystalReports-Editor sehen, welche Dimensionen das Etikett hat. | ||
− | |||
− | + | Es empfiehlt sich, mit '''"Datei->Seite einrichten"''' die Seitenränder auf 0 zu stellen: | |
− | Einfügen der Formel für den 2/5i-Barcode | + | [[File:CrystalReportsBarcodeEtikettSeitenRaender.jpg|Seitenränder]] |
− | Wenn Sie das GEVITAS-Standardformular benutzen, ist eine Formel für den Barcode | + | |
− | + | In der Entwurfsansicht sieht das ganze dann z.B. so aus: | |
− | + | ||
− | Die Formel lautet: // Formel für Berechnung der Inventarnummer für Schriftart " | + | [[File:CrystalReportsBarcodeEtikettEntwurf.jpg|Entwurf]] |
− | Einfügen der Formel für den Code39-Barcode | + | |
− | Diese Barcode verwendet als Start- und Stopp-Zeichen das Sternchen ( * ). Um einen korrekten Barcode zu erhalten, müssen Sie diese Formel | + | Wenn die Inventarnummer bei Ihnen nicht als Barcode erscheint sondern im Klartext, so haben Sie vergessen, die Schriftart [[GEVITAS Barcode-Package 2of5 Interleaved 2012|"i2of5Gevitas.ttf"]] zu installieren! |
− | + | ||
− | + | === Einfügen der Formel für den 2/5i-Barcode === | |
− | Formatieren des Detail-Bereichs | + | Wenn Sie das GEVITAS-Standardformular benutzen, ist eine Formel für den Barcode [[GEVITAS Barcode-Package 2of5 Interleaved 2012|'''i2of5Gevitas''']] schon vorhanden. Wenn nicht, müssen Sie diese selbst erstellen. Sie müssen keine Formel verwenden, wenn... |
+ | |||
+ | * ...Sie einen anderen Barcode verwenden | ||
+ | * ...Sie einen eingebauten Barcode des Etikettendruckers verwenden | ||
+ | |||
+ | Die Formel lautet: | ||
+ | |||
+ | {| class="wikitable" style="text-align: left;" | ||
+ | |- | ||
+ | |// Formel für Berechnung der Inventarnummer für Schriftart "I2OF5GEVITAS" | ||
+ | // ------------------------------------------------------------------ | ||
+ | // Diese Formel kann zusätzlich eine Prüfziffer generieren. | ||
+ | // Bei nicht korrekter Anzahl der Stellen wird eine "0" vorrangestellt | ||
+ | |||
+ | WhilePrintingRecords; | ||
+ | NumberVar iMitPruefZiff := 1; // Bei 1 wird die Prüfziffer mit generiert | ||
+ | |||
+ | StringVar sInv; // Inventarnummer | ||
+ | StringVar sBar; // Barcode- Nummer | ||
+ | NumberVar i; | ||
+ | NumberVar k; | ||
+ | NumberVar iq1; // Quersumme aus den ungeraden Positionen | ||
+ | NumberVar iq2; // Quersumme aus den geraden Positionen | ||
+ | NumberVar i_Pruefziffer; | ||
+ | NumberVar i_Das_Ergebnis_der_Berechnung; | ||
+ | |||
+ | StringVar s_BarcodeNummer_Helfer; | ||
+ | StringVar s_Paarweise_Darstellung; | ||
+ | //_________________________________ | ||
+ | // | ||
+ | // Schritt 1.) Die zu kodierende Inventarnummer holen: | ||
+ | sInv := {MARTEINZ.InventarNr}; // Inventarnummer aus Datenbank holen | ||
+ | |||
+ | //_________________________________ | ||
+ | // | ||
+ | // Schritt 2.) Die zu kodierende Inventarnummer holen: | ||
+ | // Überprüfen, ob überhaupt gültige werte in der Inventarnummer sind | ||
+ | // Eine zu kodierende Nummer (hier: Inventarnummer) darf nur Ziffern enthalten: | ||
+ | |||
+ | For i := 1 To Len(sInv) Do // Alle Zeichen einzeln überprüfen | ||
+ | ( | ||
+ | k := Asc(Mid(sInv, i, 1)); | ||
+ | If (k < Asc("0")) Or (k > Asc("9")) Then | ||
+ | sInv := ""; // Inventarnummer ungültig > löschen | ||
+ | ); | ||
+ | |||
+ | //_________________________________ | ||
+ | // | ||
+ | // Schritt 3.) Ausgabestring leeren: | ||
+ | sBar := ""; | ||
+ | |||
+ | //_________________________________ | ||
+ | // | ||
+ | // Schritt 4.) Falls erwünscht Prüfziffer anhängen:: | ||
+ | If (sInv <> "") Then // Inventarnummer ist ein gültiger String > Berechnung starten | ||
+ | ( | ||
+ | If (iMitPruefZiff = 1) Then | ||
+ | ( | ||
+ | iq1 := 0; // Quersummenzähler leeren | ||
+ | iq2 := 0; | ||
+ | |||
+ | i_Pruefziffer := 1; //PMB//120710// | ||
+ | i_Das_Ergebnis_der_Berechnung := 0; //PMB//120710// | ||
+ | |||
+ | s_BarcodeNummer_Helfer := ""; //PMB//120710// | ||
+ | |||
+ | |||
+ | // Bei Interleaved 2 aus 5 Code wird jede Ziffer die an einer ungerade STELLE steht(von RECHTS!!! nach LINKS!!! gesehen -> DOWNTO) | ||
+ | // zuerst miteinander addiert und dann die so entstandene Quersumme mal 3 multipliziert. | ||
+ | // Danach wird das Ergebnis durch 10 geteilt. Der Rest stellt die Prüfziffer dar | ||
+ | |||
+ | // Weil von RECHTS nach LINKS gesehen muss die Reihenfolge umgedreht werden! | ||
+ | |||
+ | // Beispiel: eine Barcodenummer '245138' hat an der 1 Position von Rechts nach Links gesehen eine 8. | ||
+ | // Zählt die erste ungearde Stelle (1) hat eine 8: | ||
+ | |||
+ | // Schaut man jedoch von Links nach Rechts ist die 8 an einer GERADEN Stelle (6). | ||
+ | // Also ein Konstrukt wie etwa: | ||
+ | // for i := i_String_Laenge downto 1 do | ||
+ | // if (i mod 2) = 1 then // Ungerade Stelle hat immer als REST eine 1 | ||
+ | // kann hier richtig NICHT funktionieren. | ||
+ | |||
+ | // Um Fehler zu vermeiden MUSS man der GESAMMTEN String zuerst UMDREHEN: | ||
+ | // String zuerst UMDREHEN: | ||
+ | For i := 1 To Len(sInv) Do | ||
+ | ( s_BarcodeNummer_Helfer := s_BarcodeNummer_Helfer + Mid(sInv, i, 1); //PMB//120710// | ||
+ | |||
+ | ); | ||
+ | |||
+ | // Zuerst werden zwei Quersummen der ungeraden (iq1) und geraden (iq2) Stellen gebildet: | ||
+ | For i := 1 To Len(s_BarcodeNummer_Helfer) Do // Quersumme errechnen | ||
+ | ( | ||
+ | If (i Mod 2) = 1 Then | ||
+ | // Quersumme aus den ungeraden Positionen | ||
+ | iq1 := iq1 + (Asc(Mid(s_BarcodeNummer_Helfer, i, 1)) - Asc("0")) | ||
+ | Else | ||
+ | // Quersumme aus den geraden Positionen | ||
+ | iq2 := iq2 + (Asc(Mid(s_BarcodeNummer_Helfer, i, 1)) - Asc("0")); | ||
+ | ); | ||
+ | |||
+ | // Die Quersumme der ungeraden (iq1) Stellen wird jetzt mal 3 multipliziert (3 * iq1) | ||
+ | // und dazu wird die Quersumme der geraden (iq2) addiert: | ||
+ | k := (3 * iq1) + iq2; // Summe errechnen | ||
+ | |||
+ | // Jetzt wird das Ergebnis durch 10 geteilt. | ||
+ | i_Das_Ergebnis_der_Berechnung := k mod 10; | ||
+ | |||
+ | // Das Ergebnis der Substruktion ist die Prüfzahll die an s_BarcodeNummer angehängt wird (Wenn Rest gleich 0 ist, so ist die Prüfziffer 0 *) | ||
+ | (if ((i_Das_Ergebnis_der_Berechnung > 0) and (i_Das_Ergebnis_der_Berechnung < 10)) then | ||
+ | i_Pruefziffer := 10 - i_Das_Ergebnis_der_Berechnung | ||
+ | else | ||
+ | i_Pruefziffer := 0; | ||
+ | ); | ||
+ | |||
+ | sInv := sInv + Chr(Asc("0") + i_Pruefziffer); // zu Inventarnummer die Prüfziffer anhängen | ||
+ | |||
+ | ); // für If (iMitPruefZiff = 1) Then | ||
+ | |||
+ | |||
+ | //_________________________________ | ||
+ | // | ||
+ | // Schritt 5.) Eine Barcodenummer muss eine gerade Anzahl von Stellen haben | ||
+ | |||
+ | // Im 2/5 interleaved System kann aufgrund der Codierungstechnik nur eine gerade | ||
+ | // Anzahl von Stellen verschlüsselt werden. Will man eine ungerade Anzahl von Zeichen darstellen, | ||
+ | // so muss man dem Code eine Null voranstellen (aus 123 wird 0123)oder eine selbsterstellte Prüfziffer anhängen. | ||
+ | // Da hier schon eventuel eine Prüfziffer angehängt wurde zählt nur ob die Anzahl der Ziffer gerade oder ungerade ist. | ||
+ | // Ist diese ungerade, dann wird eine Null '0' dazu addiert | ||
+ | If (Len(sInv) Mod 2) = 1 Then | ||
+ | sInv := "0" + sInv; // Eine Barcodenummer muss eine gerade Anzahl von Stellen haben | ||
+ | |||
+ | //_________________________________ | ||
+ | // | ||
+ | // Schritt 6.) Decodierung | ||
+ | |||
+ | // Zielsetzung ist es durch eine paarweise Darstellung der zu codierenden Ziffern eine Platzersparnis zu erzielen. | ||
+ | // Der Code ist aus 2 breiten und 3 schmalen Strichen, bzw. 2 breiten und 3 schmalen Lücken aufgebaut. | ||
+ | // Zwei Ziffern bilden immer ein Paar: Die erste Ziffer wird aus 5 Strichen dargestellt, | ||
+ | // die zweite Ziffer wird durch die unmittelbar folgenden Lücken der ersten Ziffer dargestellt. | ||
+ | // Fünf Striche und Lücken stellen also ein Ziffernpaar dar. | ||
+ | |||
+ | s_BarcodeNummer_Helfer := ""; | ||
+ | s_Paarweise_Darstellung := ""; | ||
+ | |||
+ | For i := 1 To Len(sInv) Do | ||
+ | ( | ||
+ | s_Paarweise_Darstellung := s_Paarweise_Darstellung + Mid(sInv, i, 1); | ||
+ | If (i Mod 2) = 0 Then | ||
+ | ( | ||
+ | // Hier sind 2 Ziffern im String s_Paarweise_Darstellung: | ||
+ | // Diese werden nun in das entsprechende ANSI-Zeichen umgewandelt. | ||
+ | IF ToNumber(s_Paarweise_Darstellung) < 50 then | ||
+ | s_BarcodeNummer_Helfer := s_BarcodeNummer_Helfer + Chr(ToNumber(s_Paarweise_Darstellung) + 48) | ||
+ | else | ||
+ | s_BarcodeNummer_Helfer := s_BarcodeNummer_Helfer + Chr(ToNumber(s_Paarweise_Darstellung) + 142); | ||
+ | |||
+ | s_Paarweise_Darstellung := ""; | ||
+ | |||
+ | ); | ||
+ | |||
+ | ); | ||
+ | |||
+ | |||
+ | //_________________________________ | ||
+ | // | ||
+ | // Schritt 7.) Start - Stop Zeichen | ||
+ | |||
+ | // Als Result bekommt man hier eine Barcode für die Schriftart 'I2OF5GEVITAS.TTF' | ||
+ | If s_BarcodeNummer_Helfer <> "" Then | ||
+ | sBar := "(" + s_BarcodeNummer_Helfer + ")"; // Inventarnummer mit Start und Stop- Zeichen versehen | ||
+ | ); | ||
+ | |||
+ | sBar; // Ausgeben der Zeichenfolge als Text für Schriftart "I2OF5GEVITAS" | ||
+ | |||
+ | |} | ||
+ | |||
+ | Beachten Sie, dass Kommentare in CrystalReports mit // beginnen! | ||
+ | |||
+ | Fügen Sie die Formel in Ihr Formular ein. Wenn Sie das Ergebnis der Formel lesen wollen, stellen Sie z.B. die Schriftart „Arial“ ein. Wenn der Barcode angezeigt werden soll, stellen Sie die Schriftart '''"I2OF5GEVITAS.TTF"''' ein! | ||
+ | |||
+ | === Einfügen der Formel für den Code39-Barcode === | ||
+ | Diese Barcode verwendet als Start- und Stopp-Zeichen das Sternchen ( * ). Um einen korrekten Barcode zu erhalten, müssen Sie diese Formel erstellen: | ||
+ | * "*" + {MARTEINZ.INVENTARNR} + "'*" | ||
+ | ...und in Ihr Formular ziehen. Hierfür benötigen Sie dann eine spezielle Schriftart, die man z.B. im Internet beziehen kann. | ||
+ | |||
+ | === Formatieren des Detail-Bereichs === | ||
Da ja jedes Etikett eine Seite (wenn auch eine kleine!) darstellt, müssen Sie den Detail-Bereich noch folgendrmaßen formatieren: | Da ja jedes Etikett eine Seite (wenn auch eine kleine!) darstellt, müssen Sie den Detail-Bereich noch folgendrmaßen formatieren: | ||
− | + | * Klicken Sie mit der rechten Maustaste auf den Detail-Bereich und wählen „Bereich formatieren“ aus. | |
− | + | * Stellen Sie folgendes ein: Danach fügen Sie die gewünschten weiteren Felder in das Formular ein, z.B. Artikelbezeichnung {MART.BEZEICHNUNG} Artikeltyp {MART.TYP} Einzelartikel-Ser.Nr. {MARTEINZ.IDENTNR} usw. | |
+ | |||
+ | == Wichtig! == | ||
+ | CrystalReports 12 hat einen Bug, der für den Etikettendruck elementar ist: Bei sehr kleinen Seiten versucht es, die Inhalte an das Formular anzupassen. Das Ergebnis ist ein mini-kleiner Druck, oft auch noch versetzt und gedreht! Bis heute (Ende 2012) gibt dafür noch keine Lösung. Deshalb müssen derzeit die Etiketten-Formulare (Reports) mit '''CrystalReports 8.5''' erstellt werden! Im '''Etiketten-Druck-Dialog''' muss diese Version angegeben werden! | ||
+ | |||
+ | == Links == | ||
+ | |||
+ | * [[Reflex Übersicht|REFLEX Übersicht]] | ||
+ | * [[GEVAS-Professional|GEVAS-Professional Übersicht]] | ||
+ | * [[Allgemeines Übersicht|Allgemeines]] | ||
+ | * [[CrystalReports, Formulare und Reports|CrystalReports, Formulare und Reports]] | ||
+ | * [[Listen allgemein|Listen allgemein]] | ||
+ | * [[Barcode und Etiketten allgemein|Barcode und Etiketten allgemein]] |
Aktuelle Version vom 15. November 2012, 22:24 Uhr
Hier beschrieben, wie man ein Formular für ein Artikel-Etikett erstellt oder ändert.
Inhaltsverzeichnis
1 Voraussetzungen:
Sie benötigen:
- Crystal-Reports© 8.5: Mit diesem Programm wird das Formular bearbeitet.
- Crystal-Reports 2008 kann nicht verwendet werden, weil die Crystal-Reports-Runtime einen Bug hat: Bei sehr kleinen Formaten wird immer eine Standard-Rand berechnet und das restliche Formular so verkleinert, dass es auf die Seite passt. Ergebnis: Das Etikett wird incl. Schriften, Barcode usw. viel kleiner dargestellt, als es eigentlich ist!
- Wenn Sie "nur" über Crystal-Reports 2008 oder höher verfügen und eine Etiketten-Anpassung brauchen, müssen Sie sich Crystal-Reports 8.5 besorgen oder die Anpassung von GEVITAS machen lassen.
- Einen Etikettendrucker: Im Normalfall handelt es sich dabei um einen speziellen Drucker, der (nur) Etiketten bedrucken kann, z.B. einen Thermotransfer-Drucker mit Kunststoffetiketten.
- Den Treiber für den Etikettendrucker: Auch wenn der Etikettendrucker nicht direkt an Ihrem PC angeschlossen ist, müssen Sie den Treiber für den Etikettendrucker auf Ihrem PC installieren. Nur dann können Sie in CrystalReports das Format des Etiketts auswählen/einstellen!
- Eine Barcode-Schriftart für die Inventarnummer: Wenn Ihr Etikettendrucker eingebaute Barcodes hat, können Sie diese ggf. verwenden. Einzelheiten dazu entnehmen Sie der Beschreibung des Druckers. Alternativ dazu können Sie auch eine True-Type-Schriftart verwenden.
- Die Schriftart für den Barcode-Typ "i2of5Gevitas.ttf" können Sie von unserem Support erhalten.
- In diesem Fall benötigen Sie auch noch eine CrystalReports-Formel, die die benötigten Zeichen für den 2of5i-Barcode und ggf. eine Prüfziffer errechnet.
- Ein entsprechendes Muster-Formular können Sie auch von unserem Support erhalten.
- Am Besten fordern Sie vom Support das GEVITAS Barcode-Package 2of5 Interleaved 2012 an.
2 Vorgehensweise
An einem Beispiel sollen die einzelnen Schritte erläutert werden. So soll das Etikett aussehen:
Dies entspricht dem Standard-Etikett von GEVITAS. Sie können dieses als Basis für Ihr eigenes Etikett benutzen.
2.1 Drucker einrichten in CrystalReports
Öffnen Sie CrystalReports und das Musteretikett. Klicken Sie dann auf "Datei->Drucker einrichten". Wählen Sie Ihren Etikettendrucker und das Etikettenformat aus. Beispiel:
Erst danach können Sie im CrystalReports-Editor sehen, welche Dimensionen das Etikett hat.
Es empfiehlt sich, mit "Datei->Seite einrichten" die Seitenränder auf 0 zu stellen:
In der Entwurfsansicht sieht das ganze dann z.B. so aus:
Wenn die Inventarnummer bei Ihnen nicht als Barcode erscheint sondern im Klartext, so haben Sie vergessen, die Schriftart "i2of5Gevitas.ttf" zu installieren!
2.2 Einfügen der Formel für den 2/5i-Barcode
Wenn Sie das GEVITAS-Standardformular benutzen, ist eine Formel für den Barcode i2of5Gevitas schon vorhanden. Wenn nicht, müssen Sie diese selbst erstellen. Sie müssen keine Formel verwenden, wenn...
- ...Sie einen anderen Barcode verwenden
- ...Sie einen eingebauten Barcode des Etikettendruckers verwenden
Die Formel lautet:
// Formel für Berechnung der Inventarnummer für Schriftart "I2OF5GEVITAS"
// ------------------------------------------------------------------ // Diese Formel kann zusätzlich eine Prüfziffer generieren. // Bei nicht korrekter Anzahl der Stellen wird eine "0" vorrangestellt WhilePrintingRecords; NumberVar iMitPruefZiff := 1; // Bei 1 wird die Prüfziffer mit generiert StringVar sInv; // Inventarnummer StringVar sBar; // Barcode- Nummer NumberVar i; NumberVar k; NumberVar iq1; // Quersumme aus den ungeraden Positionen NumberVar iq2; // Quersumme aus den geraden Positionen NumberVar i_Pruefziffer; NumberVar i_Das_Ergebnis_der_Berechnung; StringVar s_BarcodeNummer_Helfer; StringVar s_Paarweise_Darstellung; //_________________________________ // // Schritt 1.) Die zu kodierende Inventarnummer holen: sInv := {MARTEINZ.InventarNr}; // Inventarnummer aus Datenbank holen //_________________________________ // // Schritt 2.) Die zu kodierende Inventarnummer holen: // Überprüfen, ob überhaupt gültige werte in der Inventarnummer sind // Eine zu kodierende Nummer (hier: Inventarnummer) darf nur Ziffern enthalten: For i := 1 To Len(sInv) Do // Alle Zeichen einzeln überprüfen ( k := Asc(Mid(sInv, i, 1)); If (k < Asc("0")) Or (k > Asc("9")) Then sInv := ""; // Inventarnummer ungültig > löschen ); //_________________________________ // // Schritt 3.) Ausgabestring leeren: sBar := ""; //_________________________________ // // Schritt 4.) Falls erwünscht Prüfziffer anhängen:: If (sInv <> "") Then // Inventarnummer ist ein gültiger String > Berechnung starten ( If (iMitPruefZiff = 1) Then ( iq1 := 0; // Quersummenzähler leeren iq2 := 0; i_Pruefziffer := 1; //PMB//120710// i_Das_Ergebnis_der_Berechnung := 0; //PMB//120710// s_BarcodeNummer_Helfer := ""; //PMB//120710// // Bei Interleaved 2 aus 5 Code wird jede Ziffer die an einer ungerade STELLE steht(von RECHTS!!! nach LINKS!!! gesehen -> DOWNTO) // zuerst miteinander addiert und dann die so entstandene Quersumme mal 3 multipliziert. // Danach wird das Ergebnis durch 10 geteilt. Der Rest stellt die Prüfziffer dar // Weil von RECHTS nach LINKS gesehen muss die Reihenfolge umgedreht werden! // Beispiel: eine Barcodenummer '245138' hat an der 1 Position von Rechts nach Links gesehen eine 8. // Zählt die erste ungearde Stelle (1) hat eine 8: // Schaut man jedoch von Links nach Rechts ist die 8 an einer GERADEN Stelle (6). // Also ein Konstrukt wie etwa: // for i := i_String_Laenge downto 1 do // if (i mod 2) = 1 then // Ungerade Stelle hat immer als REST eine 1 // kann hier richtig NICHT funktionieren. // Um Fehler zu vermeiden MUSS man der GESAMMTEN String zuerst UMDREHEN: // String zuerst UMDREHEN: For i := 1 To Len(sInv) Do ( s_BarcodeNummer_Helfer := s_BarcodeNummer_Helfer + Mid(sInv, i, 1); //PMB//120710// ); // Zuerst werden zwei Quersummen der ungeraden (iq1) und geraden (iq2) Stellen gebildet: For i := 1 To Len(s_BarcodeNummer_Helfer) Do // Quersumme errechnen ( If (i Mod 2) = 1 Then // Quersumme aus den ungeraden Positionen iq1 := iq1 + (Asc(Mid(s_BarcodeNummer_Helfer, i, 1)) - Asc("0")) Else // Quersumme aus den geraden Positionen iq2 := iq2 + (Asc(Mid(s_BarcodeNummer_Helfer, i, 1)) - Asc("0")); ); // Die Quersumme der ungeraden (iq1) Stellen wird jetzt mal 3 multipliziert (3 * iq1) // und dazu wird die Quersumme der geraden (iq2) addiert: k := (3 * iq1) + iq2; // Summe errechnen // Jetzt wird das Ergebnis durch 10 geteilt. i_Das_Ergebnis_der_Berechnung := k mod 10; // Das Ergebnis der Substruktion ist die Prüfzahll die an s_BarcodeNummer angehängt wird (Wenn Rest gleich 0 ist, so ist die Prüfziffer 0 *) (if ((i_Das_Ergebnis_der_Berechnung > 0) and (i_Das_Ergebnis_der_Berechnung < 10)) then i_Pruefziffer := 10 - i_Das_Ergebnis_der_Berechnung else i_Pruefziffer := 0; ); sInv := sInv + Chr(Asc("0") + i_Pruefziffer); // zu Inventarnummer die Prüfziffer anhängen ); // für If (iMitPruefZiff = 1) Then //_________________________________ // // Schritt 5.) Eine Barcodenummer muss eine gerade Anzahl von Stellen haben // Im 2/5 interleaved System kann aufgrund der Codierungstechnik nur eine gerade // Anzahl von Stellen verschlüsselt werden. Will man eine ungerade Anzahl von Zeichen darstellen, // so muss man dem Code eine Null voranstellen (aus 123 wird 0123)oder eine selbsterstellte Prüfziffer anhängen. // Da hier schon eventuel eine Prüfziffer angehängt wurde zählt nur ob die Anzahl der Ziffer gerade oder ungerade ist. // Ist diese ungerade, dann wird eine Null '0' dazu addiert If (Len(sInv) Mod 2) = 1 Then sInv := "0" + sInv; // Eine Barcodenummer muss eine gerade Anzahl von Stellen haben //_________________________________ // // Schritt 6.) Decodierung // Zielsetzung ist es durch eine paarweise Darstellung der zu codierenden Ziffern eine Platzersparnis zu erzielen. // Der Code ist aus 2 breiten und 3 schmalen Strichen, bzw. 2 breiten und 3 schmalen Lücken aufgebaut. // Zwei Ziffern bilden immer ein Paar: Die erste Ziffer wird aus 5 Strichen dargestellt, // die zweite Ziffer wird durch die unmittelbar folgenden Lücken der ersten Ziffer dargestellt. // Fünf Striche und Lücken stellen also ein Ziffernpaar dar. s_BarcodeNummer_Helfer := ""; s_Paarweise_Darstellung := ""; For i := 1 To Len(sInv) Do ( s_Paarweise_Darstellung := s_Paarweise_Darstellung + Mid(sInv, i, 1); If (i Mod 2) = 0 Then ( // Hier sind 2 Ziffern im String s_Paarweise_Darstellung: // Diese werden nun in das entsprechende ANSI-Zeichen umgewandelt. IF ToNumber(s_Paarweise_Darstellung) < 50 then s_BarcodeNummer_Helfer := s_BarcodeNummer_Helfer + Chr(ToNumber(s_Paarweise_Darstellung) + 48) else s_BarcodeNummer_Helfer := s_BarcodeNummer_Helfer + Chr(ToNumber(s_Paarweise_Darstellung) + 142); s_Paarweise_Darstellung := ""; ); ); //_________________________________ // // Schritt 7.) Start - Stop Zeichen // Als Result bekommt man hier eine Barcode für die Schriftart 'I2OF5GEVITAS.TTF' If s_BarcodeNummer_Helfer <> "" Then sBar := "(" + s_BarcodeNummer_Helfer + ")"; // Inventarnummer mit Start und Stop- Zeichen versehen ); sBar; // Ausgeben der Zeichenfolge als Text für Schriftart "I2OF5GEVITAS" |
Beachten Sie, dass Kommentare in CrystalReports mit // beginnen!
Fügen Sie die Formel in Ihr Formular ein. Wenn Sie das Ergebnis der Formel lesen wollen, stellen Sie z.B. die Schriftart „Arial“ ein. Wenn der Barcode angezeigt werden soll, stellen Sie die Schriftart "I2OF5GEVITAS.TTF" ein!
2.3 Einfügen der Formel für den Code39-Barcode
Diese Barcode verwendet als Start- und Stopp-Zeichen das Sternchen ( * ). Um einen korrekten Barcode zu erhalten, müssen Sie diese Formel erstellen:
- "*" + {MARTEINZ.INVENTARNR} + "'*"
...und in Ihr Formular ziehen. Hierfür benötigen Sie dann eine spezielle Schriftart, die man z.B. im Internet beziehen kann.
2.4 Formatieren des Detail-Bereichs
Da ja jedes Etikett eine Seite (wenn auch eine kleine!) darstellt, müssen Sie den Detail-Bereich noch folgendrmaßen formatieren:
- Klicken Sie mit der rechten Maustaste auf den Detail-Bereich und wählen „Bereich formatieren“ aus.
- Stellen Sie folgendes ein: Danach fügen Sie die gewünschten weiteren Felder in das Formular ein, z.B. Artikelbezeichnung {MART.BEZEICHNUNG} Artikeltyp {MART.TYP} Einzelartikel-Ser.Nr. {MARTEINZ.IDENTNR} usw.
3 Wichtig!
CrystalReports 12 hat einen Bug, der für den Etikettendruck elementar ist: Bei sehr kleinen Seiten versucht es, die Inhalte an das Formular anzupassen. Das Ergebnis ist ein mini-kleiner Druck, oft auch noch versetzt und gedreht! Bis heute (Ende 2012) gibt dafür noch keine Lösung. Deshalb müssen derzeit die Etiketten-Formulare (Reports) mit CrystalReports 8.5 erstellt werden! Im Etiketten-Druck-Dialog muss diese Version angegeben werden!