Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: ReneK am Januar 16, 2020, 12:08:40

Titel: Temp-Tabellenerstellung EAN Codes Von-Bis als Druckdatei
Beitrag von: ReneK am Januar 16, 2020, 12:08:40
Hallo.

Ich bräuchte Hilfe bei einem Code Snipsel.

Ich habe ein Formluar mit zwei ungebundenen Feldern mit den Namen "Von" und "Bis".
In diese Felder möchte Zahlen für EAN Codes eingeben, und das Script soll eine Tabelle "QUELLTABELLE" mit zwei Spalten füllen. Spaltenamen in der Tabelle sind "EANCODE" und "A" für Anzahl.
Die Spalte "A" soll immer mit dem Wert "3" gefüllt werden.
"EANCODE" soll automatisch über die Felder Von-Bis hochgezählt werden, und jedesmal soll ein Datensatz mit den beiden Werten generiert werden.

Die Tabelle verknüpfe ich mit Steuerzeichen für eine Druckdateiausgabe.

Folgenden Part habe ich schon. Leider basiert mein zusammengebastelter / umgebauter Code darauf, dass die Tabelle schon gefüllt ist, bzw. manuell erstellt wird. Das würde ich gern automatisieren.


Private Sub Btn_Drucken_Click()
On Error GoTo Err_Btn_Drucken_Click


Dim Printer As String
Dim PrintDat As String
Dim Quelltabelle As String

Dim rs            As DAO.Recordset
Dim intFile       As Integer
Dim i             As Integer



'Variablen fuellen
PrintDat = "\\files\verzeichnis\Sond_Me2"
Printer = "\\Printserver\" & Me.Drucker
Quelltabelle = "Sond_Mehrfach"

'Verbindung zum Netzlaufwerk herstellen
Shell ("cmd.exe /c net use \\files\verzeichnis /u:domäne\drucker drucker")



'Bei fehlgeschlagenen Vorgang Ausgabedatei vorher schließen
  Close #intFile
 
'Neue / Leere Ausgabedatei erstellen und zur Bearbeitung oeffnen
  intFile = FreeFile
  Open PrintDat For Output As #intFile

'------------------------------
'??????'
'------------------------------

'Quelltabelle aus Access einlesen
  Set rs = DBEngine(0)(0).OpenRecordset( _
                                        Quelltabelle, _
                                        dbOpenForwardOnly, _
                                        dbReadOnly)
  With rs
    Do While Not .EOF
   
    '##Erste Steuerzeichen in die Steuerdatei schreiben die nicht in der Quelldatei vorhanden sind
      Print #intFile, "r"
      Print #intFile, "M l LBL;Sond"
     
     
   '##Lesen und verarbeiten der Datensaetze aus Quelldatei
   
   '----------------------------------------------------------------
     '##...1-Vorletzter Datenstring MIT "R " (Count -2)
     For i = 0 To .Fields.Count - 2
          Print #intFile, "R "; .Fields(i).Name & ";" & .Collect(i)
       Next
      ' i hat hier den Wert von .Count - 1 ; Letzter String ohne "R "
          Print #intFile, .Fields(i).Name & .Collect(i)
             
   '----------------------------------------------------------------
      .MoveNext
    Loop
   
    .Close
 
  End With
 
  Close #intFile
  Set rs = Nothing
 
   '##Ende der Schleife - Verarbeitung


'Verbindung zum Drucker herstellen
Shell ("cmd.exe /c net use \\printserver\ipc$ /u:domäne\drucker drucker")
'Ausgabedatei an Drucker senden
Shell ("cmd.exe /c copy" & " " & PrintDat & " " & Printer)


'Warte 10 Sekunden bis Ausgabedatei geloescht wird
Sleep 10000
Kill PrintDat


Exit_Btn_Drucken_Click:
    Exit Sub

Err_Btn_Drucken_Click:
    MsgBox Err.Description
    Resume Exit_Btn_Drucken_Click
   
End Sub


Die Druckdatei für einen CAB Etikettendrucker würde dann nachher so aussehen

r
M l LBL;Sond
R EANCODE;100000000001
A3
r
M l LBL;Sond
R EANCODE;100000000002
A3
r
M l LBL;Sond
R EANCODE;100000000003
A3



usw.

Wer könnte mir das zaubern?

Danke für die Hilfe.  ;)

Titel: Re: Temp-Tabellenerstellung EAN Codes Von-Bis als Druckdatei
Beitrag von: ReneK am Januar 17, 2020, 13:09:25
Das wäre so mein Ansatz...


Private Sub Btn_QUELLTABELLE_generieren_Click()

DoCmd.SetWarnings False

Dim i As Long
Dim sql As String

CurrentDb.Execute "DELETE FROM QUELLTABELLE", dbFailOnError

For i = Me.VonBarcode To Me.BisBarcode
sql = "insert into QUELLTABELLE (Barcode, A) values('" & i & "',3)"
DoCmd.RunSQL sql
Next

DoCmd.SetWarnings True

End Sub
Titel: Re: Temp-Tabellenerstellung EAN Codes Von-Bis als Druckdatei
Beitrag von: Beaker s.a. am Januar 17, 2020, 16:52:17
Hallo Rene,
Ohne mir Gedanken zu einer anderen Lösung gemacht zu haben, - eine Hilfstabelle ist hilfreich  ;)
Was mir aufgefallen ist, warum wechselst du von CurrentDb.Execute zu DoCmd.RunSQL?
.Execute wird bevorzugt.
gruss ekkehard
Titel: Re: Temp-Tabellenerstellung EAN Codes Von-Bis als Druckdatei
Beitrag von: ReneK am Januar 21, 2020, 11:31:29
Hallo Beaker,
weil ich es einfach nicht besser wusste.
Ich hatte Probleme mit der Syntax und den ' '. Irgendwann hat es so funktioniert, und dann hab ich es gelassen.

Es handelt sich auch nicht um eine hochtragende Datenbank sondern um einen "Konverter".
Insofern ist es nur wichtig, dass es funktioniert. Die Daten und Tabellen werden eh wieder alle auf 0 gesetzt.

Eine Hilfstabelle brauche ich nicht. Allerdings, als ich mit den richtigen Codes getestet habe, ist mir aufgefallen, dass die Feldlänge nicht passt  :o ;D ::). Ich hab dann aus den zwei Feldern drei Felder gemacht, und im ersten Feld gebe ich die ersten acht Stellen ein, und in den anderen Bereichen den Von-Bis Bereich. Mehr als 2500 Etiketten sind eh nicht auf der Rolle. Danach Füge ich die Felder alle in ein Textfeld zusammen. Hat auch den Vorteil, dass die Chance geringer ist sich zu vertippen. Dauert nur einen Moment länger  :P

Funzt also alles so wie ich es brauche.

mfg
Titel: Re: Temp-Tabellenerstellung EAN Codes Von-Bis als Druckdatei
Beitrag von: Beaker s.a. am Januar 21, 2020, 22:13:18
Hallo Rene,
ZitatIch hatte Probleme mit der Syntax und den ' '.
Den Umgang mit Strings sollte man aus dem FF beherrschen bevor man mit
dem Schreiben von Code beginnt.
Zitatdass die Feldlänge nicht passt
Hm, einen Barcode, zudem noch EAN, der länger als 255 Zeichen ist habe ich
noch nie gesehen. EANs kann nur mit dem Datentyp "Text" verwalten; - es gibt
da nämlich auch welche mit führender 0.
Zitathab dann aus den zwei Feldern drei Felder gemacht, und im ersten Feld gebe ich die ersten acht Stellen ein, 
Ist das eine eigene ILN? Dann könntest du die auch als Konstante DB-weit
hinterlegen.
Zitatund in den anderen Bereichen den Von-Bis Bereich.
Was ist mit der Prüfziffer? Wird die vom Drucker beim Drucken berechnet?

gruss ekkehard
Titel: Re: Temp-Tabellenerstellung EAN Codes Von-Bis als Druckdatei
Beitrag von: ReneK am Januar 22, 2020, 12:43:14
Hallo Beaker.

Wenn man das gelernt hat, regelmäßig macht und nicht nebenbei, dann gebe ich Dir recht.  :D
Wenn man das macht weil man eine schnelle kostenlose Lösung braucht, und der einzige ist der "sich ein bisschen auskennt" wird es halt fummelig. Da wird google und das Forum zum besten Freund  :P

Bei den Code-Feldern habe ich immer immer die Meldung "Überlauf" bekommen. Nachdem ich alle Formate durch hatte und es immer noch nicht lief (höchstwahrscheinlich hab ich etwas nicht richtig eingestellt) war es mir zu blöd den Fehler zu suchen, und hab mir den Workaround ausgedacht. Funktioniert. Hat sogar Vorteile. Alles gut. Abgehakt.

Wir bekommen von einer Spedition vorgefertigte Durchschläge mit Barcodes (ob EAN oder Code128 weiß ich noch gar nicht. Es sind 13 Stellen, hab jetzt erstmal geraten und den Code noch nicht geprüft. Das mach ich erst, wenn ich im Drucker das Layout hinterlege).
Bisher wurden die dazugehörigen Sticker mit den Barcodes immer mitgeliefert und an die Ware bzw. an die Versandpapiere für den Umschlagplatz aufgeklebt. Diese Sticker bekomme ich demnächst nicht mehr.
Ich muss also die Barcodes zu den Druchschlägen passend selbst generieren, oder mit Wartezeiten am Umschlagplatz rechnen. Wollen wir nicht...

Man hätte auch einen billigen Tischetikettendrucker kaufen, und nach Bedarf aus Office drucken können, aber die 300 Eur wollte man nicht investieren.
Also das nehmen was man hat und schauen was geht. Und da man es in Access so schön anwenderfreundlich machen kann...

Ja, die Prüfziffer wird vom Drucker generiert. Sehr stressfrei  ;D

Also wie gesagt alles Tutti.

Danke für Dein Interesse und Gruß
Titel: Re: Temp-Tabellenerstellung EAN Codes Von-Bis als Druckdatei
Beitrag von: Beaker s.a. am Januar 22, 2020, 18:00:53
Hallo Rene,
ZitatWenn man das gelernt hat, regelmäßig macht und nicht nebenbei, dann gebe ich Dir recht.
Ich habe auch so nebenbei angefangen, aber da war auch schnell klar,
dass man ohne das (Umgang mit Strings) ständig am "Frickeln" ist.
Die Fortschritte zeigen sich dann in der seltener werdenden Verwendung
von
Debug.Print
ZitatBei den Code-Feldern habe ich immer immer die Meldung "Überlauf" bekommen.
Na ja, ist klar, - es gibt in Access keinen ganzzahligen Datentyp, der 12
Stellen aufnehmen kann, daher ist "Text" vorzuziehen.
Zitatob EAN oder Code128 weiß ich noch gar nicht. Es sind 13 Stellen
Das ist höchstwahrscheinlich EAN13 (inkl. PZ), - der kann nur Ziffern.
Code128 hat keine feste Länge und kann auch Buchstaben und Sonderzeichen.

gruss ekkehard