EAN-13 Barcode

Bild Microsoft Dynamics 365 Business Central (ehem. Business-Edition)

EAN-13 Barcode

Beitragvon Jens1973 » 29. Juni 2022 08:58

Hallo zusammen,

ich habe ein Problem beim encodieren von EAN-13 Barcodes. Folgende Funktion habe ich dafĂĽr geschrieben:

local procedure EncodeEAN13(ValueToEncode: Text) EncodedText: Text
var
BarcodeSymbology: Enum "Barcode Symbology";
BarcodeFontProvider: Interface "Barcode Font Provider";
test: Interface "Barcode Font Encoder";
begin
if ValueToEncode <> '' then begin
BarcodeFontProvider := Enum::"Barcode Font Provider"::IDAutomation1D;
BarcodeSymbology := Enum::"Barcode Symbology"::"EAN-13";
BarcodeFontProvider.ValidateInput(ValueToEncode, BarcodeSymbology);
Exit(BarcodeFontProvider.EncodeFont(ValueToEncode, BarcodeSymbology));
end else
exit('');
end;

In einem Beispiel habe ich den Wert 4003214018089 encodieren wollen. Als Rückgabewert habe ich Y(0A32BE*KLSKST( bekommen und der Barcode passt so nicht (enthält Rechtecke).
Der richtige Wert wäre 4AKDCLE*abiaij+ . Damit funktioniert das ganze. Getestet habe ich das mit einer Excel-Datei aus einem youtube-Video 8-) https://youtu.be/5fIJftPqE7k

Vielen Dank schonmal fĂĽr eure Hilfe und sonnige GrĂĽĂźe

Jens
Jens1973
 
Beiträge: 9
Registriert: 29. Juni 2022 08:39
Realer Name: Jens Budde
Arbeitsort: Uetze

Re: EAN-13 Barcode

Beitragvon fiddi » 29. Juni 2022 09:27

Hallo,

benutzt du denn in deinem Report- Feld auch den ID-Automation- Font fĂĽr EAN13, fĂĽr den die Encoding- Routinen geschrieben wurden?
Das muss immer zusammenpassen.

Wenn du eine anderen Font verwenden willst, dann musst du dir die Routinen beschaffen, und einen eigenen FontProvider stricken, oder vielleicht einfacher, eine Funktion erstellen, der du den Barcodewert ĂĽbergibst und die den ĂĽbersetzten Wert als Text zurĂĽckgibt. (Dein Youtube- Video ist fĂĽr einen andern Font)

Wenn du OnPrem arbeitest wirst du dir wahrscheinlich die Funktion erstellen müssen. ( Die ID-Automation- Barcode- Fonts sind nicht gerade kostenlos). In SaaS kannst du den ID-Automation- Font ohne zusätzliche Kosten benutzen. Da wird dein eigener wohl nicht einsetzbar sein.

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: EAN-13 Barcode

Beitragvon Jens1973 » 29. Juni 2022 10:32

Hallo,

vielen Dank fĂĽr die Erleuchtung, Fiddi. Jetzt muss ich mich also entscheiden, ob wir eine Schriftart kaufen (795 $ fĂĽr 100 User) oder ob ich versuche, diese Excel-Formel in AL zu bekommen:

=TEIL(C4;1;1)&ZEICHEN(TEIL(C4;2;1)+65)&ZEICHEN(TEIL(C4;3;1)+WENN(ISTNV(VERGLEICH(WERT(TEIL(C4;1;1));{0;1;2;3};0));75;65))&ZEICHEN(TEIL(C4;4;1)+WENN(ISTNV(VERGLEICH(WERT(TEIL(C4;1;1));{0;4;7;8};0));75;65))&ZEICHEN(TEIL(C4;5;1)+WENN(ISTNV(VERGLEICH(WERT(TEIL(C4;1;1));{0;1;4;5;9};0));75;65))&ZEICHEN(TEIL(C4;6;1)+WENN(ISTNV(VERGLEICH(WERT(TEIL(C4;1;1));{0;2;5;6;7};0));75;65))&ZEICHEN(TEIL(C4;7;1)+WENN(ISTNV(VERGLEICH(WERT(TEIL(C4;1;1));{1;4;6;8;9};0));75;65))&"*"&ZEICHEN(TEIL(C4;8;1)+97)&ZEICHEN(TEIL(C4;9;1)+97)&ZEICHEN(TEIL(C4;10;1)+97)&ZEICHEN(TEIL(C4;11;1)+97)&ZEICHEN(TEIL(C4;12;1)+97)&ZEICHEN(TEIL(C4;13;1)+97)&"+"

Vielleicht hat sich hier schon einmal jemand daran ausgelassen und möchte sein Ergebnis preis geben :-P Ansonsten muss ich mich eventuell mal mit Excel befassen, um die Formel verstehen zu können.

Viele GrĂĽĂźe

Jens
Jens1973
 
Beiträge: 9
Registriert: 29. Juni 2022 08:39
Realer Name: Jens Budde
Arbeitsort: Uetze

Re: EAN-13 Barcode

Beitragvon fiddi » 29. Juni 2022 11:58

Hallo,

schau dir das(Mibuso) mal an.

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: EAN-13 Barcode

Beitragvon Jens1973 » 29. Juni 2022 13:58

Hallo Fiddi,

vielen Dank! Das war genau das, was ich gesucht habe. Falls noch jemand leidet und OnPrem unterwegs ist, hier die Lösung in AL (dran denken: ihr müsst euch bzw. auf dem Dienst-Server die Schriftart aus Fiddis Link installieren und im Report benutzen):

Code: Alles auswählen
    #region Barcode
    Procedure CreateValueEAN13(InString: text[13]) BarCodeString: Text
    var
        i: Integer;
        Workstring: Text;
        checksum: integer;
        first: Integer;
        Table: Integer;

    begin
        if InString = '' then
            exit('');

        FOR i := 1 TO 12 DO
            IF CharToInt(InString[i]) > -1 THEN BEGIN
                WorkString[i] := InString[i];
            END;
        FOR i := 2 TO 12 DO BEGIN
            checksum := checksum + (CharToInt(InString[i]));
            i := i + 1;
        END;
        checksum := checksum * 3;
        FOR i := 1 TO 11 DO BEGIN
            checksum := checksum + (CharToInt(InString[i]));
            i := i + 1;
        END;
        WorkString[13] := IntToChar((10 - checksum MOD 10) MOD 10);
        first := CharToInt(InString[1]);
        BarCodeString[1] := IntToChar(first);
        BarCodeString[2] := (65 + CharToInt(WorkString[2]));
        FOR i := 3 TO 7 DO BEGIN
            Table := 0;
            CASE i OF
                3:
                    BEGIN
                        IF (first < 4) AND (first > 1) THEN
                            Table := 1;
                    END;
                4:
                    BEGIN
                        IF (first = 0) OR (first = 4) OR (first = 7) OR (first = 8) THEN
                            Table := 1;
                    END;
                5:
                    BEGIN
                        IF (first = 0) OR (first = 1) OR (first = 4) OR (first = 5) OR (first = 9) THEN
                            Table := 1;
                    END;
                6:
                    BEGIN
                        IF (first = 0) OR (first = 2) OR (first = 5) OR (first = 6) OR (first = 7) THEN
                            Table := 1;
                    END;
                7:
                    BEGIN
                        IF (first = 0) OR (first = 3) OR (first = 6) OR (first = 8) OR (first = 9) THEN
                            Table := 1;
                    END;
            END;
            IF Table = 1 THEN
                BarCodeString[i] := (65 + CharToInt(WorkString[i]))
            ELSE
                BarCodeString[i] := (75 + CharToInt(WorkString[i]));
        END;
        BarCodeString[8] := '*';
        FOR i := 8 TO 13 DO
            BarCodeString[i + 1] := (97 + CharToInt(WorkString[i]));
        BarCodeString[15] := '+';
        exit(BarCodeString);
    end;

    local procedure CharToInt(c: Char) n: Integer
    begin
        CASE c OF
            '0':
                BEGIN
                    n := 0;
                    EXIT;
                END;
            '1':
                BEGIN
                    n := 1;
                    EXIT;
                END;

            '2':
                BEGIN
                    n := 2;
                    EXIT;
                END;

            '3':
                BEGIN
                    n := 3;
                    EXIT;
                END;

            '4':
                BEGIN
                    n := 4;
                    EXIT;
                END;

            '5':
                BEGIN
                    n := 5;
                    EXIT;
                END;

            '6':
                BEGIN
                    n := 6;
                    EXIT;
                END;

            '7':
                BEGIN
                    n := 7;
                    EXIT;
                END;
            '8':
                BEGIN
                    n := 8;
                    EXIT;
                END;

            '9':
                BEGIN
                    n := 9;
                    EXIT;
                END;
            ELSE BEGIN
                n := -1;
                EXIT;
            END;
        END;
    end;

    local procedure IntToChar(n: Integer) c: Char
    begin
        CASE n OF
            0:
                BEGIN
                    c := '0';
                    EXIT;
                END;
            1:
                BEGIN
                    c := '1';
                    EXIT;
                END;

            2:
                BEGIN
                    c := '2';
                    EXIT;
                END;

            3:
                BEGIN
                    c := '3';
                    EXIT;
                END;

            4:
                BEGIN
                    c := '4';
                    EXIT;
                END;

            5:
                BEGIN
                    c := '5';
                    EXIT;
                END;

            6:
                BEGIN
                    c := '6';
                    EXIT;
                END;

            7:
                BEGIN
                    c := '7';
                    EXIT;
                END;
            8:
                BEGIN
                    c := '8';
                    EXIT;
                END;

            9:
                BEGIN
                    c := '9';
                    EXIT;
                END;
            ELSE BEGIN
                c := 'X';
                EXIT;
            END;
        END;

    end;

    #endregion Barcode


Nochmals vielen Dank :wink:

Jens
Zuletzt geändert von Jens1973 am 29. Juni 2022 21:00, insgesamt 1-mal geändert.
Jens1973
 
Beiträge: 9
Registriert: 29. Juni 2022 08:39
Realer Name: Jens Budde
Arbeitsort: Uetze

Re: EAN-13 Barcode

Beitragvon fiddi » 29. Juni 2022 15:57

Hallo,


Wenn du jetzt deinen Code noch als Code formatieren wĂĽrdest:
Code: Alles auswählen
#region Barcode
Procedure CreateValueEAN13(InString: text[13]) BarCodeEncoded: Text
var
    i: Integer;
   checksum: integer;
   first: Integer;
   Table: Integer;

begin
  IF InString = '' THEN
      EXIT('');

  first := InString[1]-48;
  BarcodeEncoded[1] := InString[1];
  BarcodeEncoded[2] := (65 + Instring[2])-48; 
  FOR i := 3 TO 7 DO BEGIN
      Table := 0;
      CASE i OF
        3: IF (first < 4) AND (first > 1) THEN
                Table := 1;
        4: IF (first = 0) OR (first = 4) OR (first = 7) OR (first = 8) THEN
                Table := 1;
        5: IF (first = 0) OR (first = 1) OR (first = 4) OR (first = 5) OR (first = 9) THEN
                Table := 1;
        6: IF (first = 0) OR (first = 2) OR (first = 5) OR (first = 6) OR (first = 7) THEN
              Table := 1;
        7: IF (first = 0) OR (first = 3) OR (first = 6) OR (first = 8) OR (first = 9) THEN
              Table := 1;
      END;
      IF Table = 1 THEN
          BarcodeEncoded[i] := (65 + Instring[i]-48)
      ELSE
          BarcodeEncoded[i] := (75 + Instring[i]-48);
  END;
  BarcodeEncoded[8] := '*';
  FOR i := 8 TO 13 DO
      BarcodeEncoded[i + 1] := (97 + Instring[i]-48);
  BarcodeEncoded[15] := '+';
end;
#endregion Barcode

Dann sieht das etwas umfomatiert in C/AL so aus (kompletter EAN vorausgesetzt)

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: EAN-13 Barcode

Beitragvon Jens1973 » 29. Juni 2022 21:07

Hallo,
jetzt sieht´s schick aus :mrgreen:
GruĂź
Jens
Jens1973
 
Beiträge: 9
Registriert: 29. Juni 2022 08:39
Realer Name: Jens Budde
Arbeitsort: Uetze


ZurĂĽck zu 365 Business Central

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast