Skip to main content
Skip table of contents

Mettre des codes-barres dans un Crystal report


Il est possible d’ajouter des codes-barres dans un rapport Crystal. Il y a 2 types de codes-barres possibles.

Code 39 ou Code 3 de 9

Le code 39 est un des codes les plus simples d’utilisation.

Police de Code-barres

Pour pouvoir générer des codes-barres avec Crystal Reports, il faut tout d’abord disposer de la police de code-barres correspondant au code que l’on veut utiliser.

La police doit être placée dans le serveur d’édition Crystal Reports, à l’intérieur du fichier de polices Windows (chemin: C:\WINDOWS\Fonts).

Création du Code-barres

Créer un rapport Crystal Reports. Ensuite, sélectionner le champ code barre (qui aura été mis en forme dans diapason en ajoutant, en début et en fin de la chaîne de caractères, le caractère *). Faire ‘clic droit’ sur le champ et choisir dans la liste ‘Mettre en forme le texte’.

image-20260428-082528.png

Dans la nouvelle fenêtre, choisir l’onglet ‘police’ puis prendre la police code-barres ‘Code 3 de 9’, puis valider.

image-20260428-082536.png

Code barre EAN128

La création de champ code barre de type EAN128 est la même que pour le code 39. La seule différence se situe dans le fait qu’il faut que le texte soit codifié spécifiquement.

 

L’algorithme ci-dessous permet de faire cette traduction :

Champ ‘entreecode’ est le champ à traduire en code EAN128

Champ ‘Code128’ est la sortie de cette formule.

 

Dim i, checksum, mini, dummy, tableB As Boolean

Dim Code128 as string

  If Len({@entreecode}) > 0 Then

  'Vérifier si caractères valides

  'Check for valid characters

    For i  = 1 To Len({@entreecode})

      Select Case Asc(Mid ({@entreecode}, i , 1))

      Case 32 To 126, 203

      Case Else

        i  = 0

        Exit For

      End Select

    Next

    'Calculer la chaine de code en optimisant l'usage des tables B et C

    'Calculation of the code string with optimized use of tables B and C

    Code128 = ""

    tableB = True

    If i  > 0 Then

      i  = 1 'i  devient l'index sur la chaine / i  become the string index

      Do While i  <= Len({@entreecode})

        If tableB Then

          'Voir si intéressant de passer en table C / See if interesting to switch to table C

          'Oui pour 4 chiffres au début ou à la fin, sinon pour 6 chiffres / yes for 4 digits at start or end, else if 6 digits

          mini  = IIf(i  = 1 Or i  + 3 = Len({@entreecode}), 4, 6)

          mini  = mini  - 1

          If i  + mini  <= Len({@entreecode}) Then

             Do While mini  >= 0

             If Asc(Mid ({@entreecode}, i  + mini , 1)) < 48 Or Asc(Mid ({@entreecode}, i  + mini , 1)) > 57 Then Exit Do

             mini  = mini  - 1

             Loop

          End If

          If mini  < 0 Then 'Choix table C / Choice of table C

            If i  = 1 Then 'Débuter sur table C / Starting with table C

              Code128 = Chr (210)

            Else 'Commuter sur table C / Switch to table C

              Code128 = Code128 & Chr (204)

            End If

            tableB = False

          Else

            If i  = 1 Then Code128 = Chr (209) 'Débuter sur table B / Starting with table B

          End If

        End If

        If Not tableB Then

          'On est sur la table C, essayer de traiter 2 chiffres / We are on table C, try to process 2 digits

          mini  = 2

          mini  = mini  - 1

          If i  + mini  <= Len({@entreecode}) Then

             Do While mini  >= 0

             If Asc(Mid ({@entreecode}, i  + mini , 1)) < 48 Or Asc(Mid ({@entreecode}, i  + mini , 1)) > 57 Then Exit Do

             mini  = mini  - 1

             Loop

          End If

          If mini  < 0 Then 'OK pour 2 chiffres, les traiter / OK for 2 digits, process it

            dummy  = Val(Mid ({@entreecode}, i , 2))

            dummy  = IIf(dummy  < 95, dummy  + 32, dummy  + 105)

            Code128 = Code128 & Chr (dummy )

            i  = i  + 2

          Else 'On n'a pas 2 chiffres, repasser en table B / We haven't 2 digits, switch to table B

            Code128 = Code128 & Chr (205)

            tableB = True

          End If

        End If

        If tableB Then

          'Traiter 1 caractère en table B / Process 1 digit with table B

          Code128 = Code128 & Mid ({@entreecode}, i , 1)

          i  = i  + 1

        End If

      Loop

      'Calcul de la clé de contrôle / Calculation of the 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

      'Calcul du code ASCII de la clé / Calculation of the checksum ASCII code

      checksum  = IIf(checksum  < 95, checksum  + 32, checksum  + 105)

      'Ajout de la clé et du STOP / Add the checksum and the STOP

      Code128 = Code128 & Chr (checksum ) & Chr (211)

    End If

  End If

Formula = Code128

Cet algorithme est à placer dans un champ de formule (en syntaxe ‘BASIC’). Il ne restera plus qu’à appliquer la police EAN128.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.