Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Etikett mit Barcode drucken

Begonnen von mad, Mai 29, 2021, 20:13:14

⏪ vorheriges - nächstes ⏩

mad

Hallo Zusammen,

hätte folgendes Thema bei dem ich nicht so richtig weis was der ideale Weg wäre und mir gerne erstmal einen Ratschlag aus dem Forum einholen möchte wie es den gehen könnte bevor ich richtig loslege.
Habe zwar schon einiges gelesen, und auch schon kleinigkeiten probiert aber so richtig bin ich mir noch nicht klar.

Wir würden gerne für unser Feuerwehr-Inventar von einem Formular raus per Button eine Etikette mit Barcode und einem Textfeld auf einem ,,Brother PT-P710BT" drucken.

Aktuell handhaben wir das so: In P-Touch Editor liegen zwei Etikettenvorlagen (12 u. 24mm) die auf eine Abfrage ,,abf_Barcode_Inventar" zugreifen. Die Abfrage wird im Editor gelistet und man wählt aus welchen DS man ausdrucken will. Dies ist bei hunderten von Datensätzen etwas mühsam.
Auf dem Etikett sind zwei Datenfelder ,,InventarNr" u. ,,Typ_Bez" drauf, wobei die 10-stellige ,,InventarNr" in den Barcode ,,Code128" gewandelt wird und entsprechend ausgedruckt wird.

Das würden wir gerne vereinfachen.
Als Anregung mal zwei Varianten die mir durch den Kopf gegangen sind:

Variante-1:
Wir erstellen einen kleinen Bericht mit dem Feld ,,InventarNr" und ,,Typ_Bez", wobei die 10-stellige ,,InventarNr" in einen Barcode128 (o.ä.) umgewandelt wird. Per Button senden wir den im Formular angezeigten DS zum Drucker ,,Brother PT-P710BT".
Einen kleinen Bericht ,,berEtikett" mit einen kleinen Code habe ich schon mal Testweise erstellt. Natürlich noch ohne Barcode, nur mit der ,,InventarNr", da ich noch nicht weis wie das mit dem Barcode in Access umgesetzt werden kann.

Hier der Test-Code:
Private Sub btnEtikettdruck_Click()
DoCmd.OpenReport "berEtikett", acViewNormal, , "InventarNr = " & Me.InventarNr
    Reports!berEtikett.Printer = Application.Printers("Brother PT-P710BT")
End Sub

Erste Info aus: https://www.access-o-mania.de/forum/index.php?topic=20461.0

Wobei der Code schon funktioniert hat und jetzt auf einmal auf den LZF 2501 (Die Aktion OpenReport wurde abgeprochen) läuft. Was wir allerdings erreichen möchten, wenn es denn funktionierten sollte, daß der Bericht gar nicht erst geöffnet wird, sondern gleich gedruckt wird.

Eine mögliche zweite Variante die wir uns vorstellen könnten, wenn das Etikett ,,Barcode_Inventar_24mm_Band" oder ,,Barcode_Inventar_12mm_Band" aus dem Ablageverzeichnis aufgerufen wird, die ,,InventarNr" und ,,Typ_Bez" an die beiden Felder übergeben wird und ausgedruckt wird. Welches Etikett aufgerufen werden soll könnte aus dem Feld (Optonsgruppe) ,,label" 1 od. 2 kommen. 1 stünde für das 12mm und 2 für das 24mm Band. Natürlich müsste vorher das entsprechende Band im Drucker eingelegt werden, bzw. wir stellen zukünftig auf ,,nur" eine Bandbreite um.
Bei dieser Variante könnte eventuell das umwandeln in einen Barcode der "InventarNr" in Access entfallen. Dann würde das wie bisher die "P-Touch Editor" von Brother übernehmen.
Was einfacher ist, weis ich nicht.

Eventuell könnten wir auch auf einen anderen Barcode umstellen, wenn das die Sache erleichtern würde!

Was wäre den euer Rat aus dem Forum zu dem Thema?

Gruss
Mad


Beaker s.a.

@mad
Anbei ein Bespiel wie man Barcodes ohne einen speziellen Font oder
ein spezielles Control auf einen Bericht bekommt.
Die Klasse ist schon etwas älter, und hat daher sicher noch Bedarf
an Verbesserung. Habe ihn seit ca. 12 Jahren nicht mehr angefasst.

Für deinen Fall habe ich dir ein paar Kommentare in den Code des
"frmTest" geschrieben.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

mad

Schau ich mir an.
Melde mich wieder.


Danke
mad

andyfau

Zitat von: Beaker s.a. am Mai 30, 2021, 17:08:41@mad
Anbei ein Bespiel wie man Barcodes ohne einen speziellen Font oder ....

Hallo Ekkehard,
ich hab mich immer über Fonts im Zusammenhang mit einfachen Barcodes geärgert.
Habe jetzt auch länger nichts mehr damit gemacht, aber dein Beispiel ist eine prima Hilfe.
Danke dafür!
Beste Grüße
Andreas

mad

Hallo Ekkehard,

hab mir das angesehen und dank Deiner hervorragenden Beschreibung Deinen Code auf meine Verhältnisse entsprechend geändert.

Private Sub btnEtikettdruck_Click()
    With Me
    'Code128 fest verdrahtet
        GetBarcodeHandler.BarcodeTyp = eBarcodeTypes.Code128
        GetBarcodeHandler.SetBarcodeTyp
    End With
   
    With Me
        GetBarcodeHandler.BarcodeString = .InventarNr
        GetBarcodeHandler.SetBarcodeTyp
    End With
   
    DoCmd.OpenReport "berEtikett_12mm", acViewPreview, , "InventarNr = " & Me.InventarNr
   
 End Sub

Funktioniert soweit hervorragend.

Nun möchte ich aber den Code um eine Berichtsauswahl erweitern.
Wir haben nämlich kleine und große Etiketten, je nach Platz auf dem entsprechenden Inventar.

Daher wollte ich die Code-Zeile
ZitatDoCmd.OpenReport "berEtikett_24mm", acViewPreview, , "InventarNr = " & Me.InventarNr

durch folgende Code-Zeilen ersetzen:

Dim stDocName As String
           If Me!Rahmen85 = 1 Then
           stDocName = "berEtikett_12mm"
           DoCmd.OpenReport stDocName, acViewNormal, , "InventarNr = " & Me.InventarNr
'           Reports!berEtikett_12mm.Printer = Application.Printers("Brother PT-P710BT")
       Else
           stDocName = "berEtikett_24mm"
'           Reports!berEtikett_24mm.Printer = Application.Printers("Brother PT-P710BT")
       End If
und damit auch gleich erreichen das der Bericht nicht mehr aufgerufen wird sondern gleich gedruckt wird.

Klappt leider nur für den ersten Code-Bereich:
ZitatIf Me!Rahmen85 = 1 Then
           stDocName = "berEtikett_12mm"
           DoCmd.OpenReport stDocName, acViewNormal, , "InventarNr = " & Me.InventarNr

Wenn im Formular aber unter der Optionsgruppe "Rahmen85" das Optionsfeld "Option88"=2 statt "Option86"=1 wird nichts gedruckt. Es kommt aber auch keine Fehlermeldung.

Wo leigt denn mein Fehler?


Gruss
mad

Beaker s.a.

Hallo,
Wenn du den Code128 fest verdrahtest brauchst du diese Zeile nicht
GetBarcodeHandler.SetBarcodeTypDiese Methode dient nur dazu den Typ des Barcodes zu ermitteln wenn
der Typ nicht bekannt ist bzw. zu prüfen ob der übergebene String dem
erwarteten Typ entspricht.
Den Code kannst du also ein bisschen eindampfen
Private Sub btnEtikettdruck_Click()
    Dim stDocName As String
    With Me
    'Code128 fest verdrahtet
        GetBarcodeHandler.BarcodeTyp = eBarcodeTypes.Code128
        GetBarcodeHandler.BarcodeString = .InventarNr

        If .Rahmen85 = 1 Then
            stDocName = "berEtikett_12mm"
            DoCmd.OpenReport "berEtikett_12mm", acViewPreview, , "InventarNr = " & .InventarNr
'usw.
        End If
    End With   

End Sub
Warum da im Else-Zweig nichts gedruckt wird kann ich mir im Moment auch
nicht erklären. Versuche mal die Zuordnung um zu drehen,  also bei Option = 1
den 24mm-Bericht zu drucken.
Vielleicht hast du nur vergessen im letzteren den Code für den Detailbereich
zu integrieren.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

mad

Hallo Ekkehard,

habe den Code jetzt wie folgt angepaßt:

Private Sub btnEtikettdruck_Click()
  Dim stDocName As String
    With Me
    'Code128 fest verdrahtet
        GetBarcodeHandler.BarcodeTyp = eBarcodeTypes.Code128
        GetBarcodeHandler.BarcodeString = .InventarNr

        If .Rahmen85 = 1 Then
            stDocName = "berEtikett_12mm"
            DoCmd.OpenReport "berEtikett_12mm", acViewNormal, , "InventarNr = " & .InventarNr
        Else
            stDocName = "berEtikett_24mm"
            DoCmd.OpenReport "berEtikett_24mm", acViewNormal, , "InventarNr = " & .InventarNr
        End If
   
    End With

End Sub

Habe nun auch unter
ZitatElse - DoCmd.OpenReport "berEtikett_24mm" .....
eingefügt, somit funktioniert es jetzt.


Nochmals allerherzlichsten Dank.
Gruss
mad

mad

Jetzt hätte unser Feuerwehr-Gerätewart doch noch ein Anliegen.

Wie könnte man zwischen

Zitat...
'Code128 fest verdrahtet
        GetBarcodeHandler.BarcodeTyp = eBarcodeTypes.Code128
        GetBarcodeHandler.BarcodeString = .InventarNr
und
ZitatIf .Rahmen85 = 1 Then
            stDocName = "berEtikett_12mm"
....

eine MsgBox einfügen mit dem Hinweis: "Ist das richtige Etikettenband (12mm oder 24mm) im Drucker Brother PT-P710BT eingelegt?"

Wenn "JA" soll der Code weiter ausgeführt werden, wenn "NEIN" sollte der Code abgebrochen werden.

Wie könnte ich sowas mit einbauen?


Gruss
mad

Xoar

Moin, könnte zB. so lauten
If msgbox(,,Richtiges Band eingelegt?", vbQuestion+vbyesno,"Frage") = vbno then : exit sub
Dadurch bricht er die Sub ab, wenn er auf Nein klickt.

Man könnte es auch mit Sprungmarken machen, aber so geht es auch 😉

Ist Luftcode, sollte aber ca. passen.

Grüße

Beaker s.a.

Hallo,
Bevor ich zu der Msgbox komme noch einer Verbesserung des bisherigen
Codes; - da habe ich nicht gut aufgepasst
Private Sub btnEtikettdruck_Click()
    Dim stDocName As String
    Dim MsgBoxResult As VbMsgBoxResult
    With Me
    'Code128 fest verdrahtet
        GetBarcodeHandler.BarcodeTyp = eBarcodeTypes.Code128
        GetBarcodeHandler.BarcodeString = .InventarNr
       
        If .Rahmen85 = 1 Then
            stDocName = "berEtikett_12mm"
        Else
            stDocName = "berEtikett_24mm"
        End If
        MsgBoxResult = _
                MsgBox(Prompt:="Ist die richtige Etikettenrolle ('" & Mid(stDocName, 4) & "' eingelegt?"), _
                Buttons:=vbYesNo
        If MsgBoxResult = vbYes Then
            DoCmd.OpenReport stDocName, acViewNormal, , "InventarNr = " & .InventarNr
            'dafür ist doch die Variable da
        End If
    End With

End Sub

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

mad

Ich werde das ausprobieren, aber ich vermute das es wie immer perfekt funktioniert.

Beim testen habe ich jetzt aber festgestellt, das daß Tape (Etikett) immer doppelt solange wie der eigentliche Barcode (txtBarcode) ist.
Kann mann die Tapelänge begrenzen?


Gruss
Manfred

Beaker s.a.

Hallo Manfred,
Ich denke nicht, ein Etikett ist ein Etikett.
Was stört dich daran?
Entweder kaufst du Etiketten die kürzer sind, oder spielst mal
ein bisschen mit den Parametern der Drucken-Methode herum, so
dass der Code auf dem Etikett mehr mittig sitzt.
Vielleicht reicht auch einfach dem Textfeld die Eigenschaft
"zentriert" zu verpassen.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ShenTo19

Hallo Manfred,

Zitat von: mad am Mai 31, 2021, 18:19:07Ich werde das ausprobieren, aber ich vermute das es wie immer perfekt funktioniert.

Beim testen habe ich jetzt aber festgestellt, das daß Tape (Etikett) immer doppelt solange wie der eigentliche Barcode (txtBarcode) ist.
Kann mann die Tapelänge begrenzen?


Gruss
Manfred

Ich drucke seit Jahren Barcodes aus einer Access-DB auf einem Brother P-Touch-Drucker. Du kannst doch in Access im Bericht, mit dem Du das Etikett erstellst, die Druckereinstellungen eingeben. Die merkt sich Access und eigentlich brauchst Du dann nichts mehr zu machen, wenn sich an den Formaten nichts ändert. Ich kenne Deinen Drucker-Typ nicht. Der von mir verwendete P-Touch druckt auf ein Endlosband und man kann die Breite des Etiketts Milimetergenau einstellen. Oder sind die Felder, in denen der Barcode erzeugt wird, bei Dir von variabler Breite?
Gruß, Thomas

mad

Hallo ShenTo19,

ich verwende einen P-Touch Cube ,,Brother PT-P710BT" auch mit Endlosband. Mein Problem ist das bei mir immer doppelt soviel Band pro Etikette verbraucht wird als eigentlich benötigt, siehe Bild im Anhang. Das sind immer so ca. 10cm, obwohl mein Detailbereich im Bericht nur 5cm lang ist. Die Druckereinstellung habe ich auch im Etikett eingegeben.
Bei mir basiert das Etikett auf einem Bericht. Ist das bei Dir auch so? Oder machst Du das anders?


Gruss
mad

ShenTo19

#14
Hallo Mad,
wenn der Drucker doppelt so viel ausspuckt liegt das oft daran, dass der Detailbereich etwas zu hoch ist. Bei mir darf der Detailbereich nur 21mm für ein 24mm-Band sein, sonst erhalte ich zwei Etiketten. Auf dem zweiten ist dann oft nichts gedruckt oder eben der unterste Rand des Berichtes. Wenn Du aber die doppelte Länge erhätst, liegt das mE an den Druckereinstellungen. Öffne den Bericht im Entwurfsmodus, gehe auf "Seite einrichten", dort auf dem Reiter "Seite" "Speziellen Drucker" auswählen, über "Drucker" die Druckerauswahl aufrufen, den P-Touch-Drucker auswählen, das Druckermenue über Eigenschaften aufrufen, dort auf dem Reiter "Page Setting" Label-Breite und Länge eingeben.

Gruß Thomas