Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Barcode nach Anzahl Packstücke generieren

Begonnen von Bernie110, September 21, 2012, 09:53:09

⏪ vorheriges - nächstes ⏩

Bernie110

Hallo,

ich habe ein Problem.

Ich möchte gerne für jedes einzelne Packstück eine Barcode Nr generieren.

Ich habe eine Tabelle in der Packstücke erfasst werden. Diese Tabelle dient als UFO für die Tabelle Sendung DT_Sendungen
Der Autowert in dieser Tabelle lt Sendungs_nr
Sieht so aus.

Autowert + PK =  PackstückNr
Zahlenfeld       =  Anzahl_Packstücke
Textfeld           =  Packstück_Art
Zahlenfeld       =  Sendungs_Nr         ( dient zur Verküpfung zur Tabelle DT_Sendungen)

Erfassung sieht so aus.

PackstückNr      Anzahl_Packstücke     Packstück_Art        Sendungs_Nr
1                       2                                Karton                       100
2                       1                                Palette                       100
3                       5                                Rohre                         100

Gesamt = 8 Packstücke.

So und nun möchte ich 8 BARCODELabel  drucken, die  jeweils eine andere BARCODE Nr enthalten Also jedes Packstück sollte eine eigene BARCODE NR haben.

( Nur zur Info, die Darstellung des Barcodes hab ich schon. )

Und eine Tabelle mit einer fortlaufenden Nummer für den Barcode habe ich auch.

Tbl Name =  STAMM_BARCODENr
Felder
LfdNr   = Autowert + PK
StartNr = Zahl
SendungsNr = Zahl    ( Hier sollte die SendungsNr aus der Tabelle  DT_Sendungen stehen )
PackstückNr = Zahl    ( Hier sollte die

Eine Abfrage habe ich auch schon.

AbfrageName : QYR_ABRCODE_GENERATOR   ( basiert auf STAMM_BARCODEnr )

Felder :

LfdNr   = Autowert + PK
StartNr = Zahl
BARCODENr = [LfdNr] + [StartNr]
SendungsNr = Zahl   
PackstückNr = Zahl 

So nun habe ich keine Ahnung wie ich das umsetzten soll... Jemand eine Idee ?

Vielleicht mit einer Anfügeabfrage ?
Zb. auf die Art :

           
If MsgBox("Möchten Sie für diese Packstücke einen Barcode anlegen?", vbYesNo) = vbYes Then
                Dim strSQLA As String
                strSQLA = "INSERT INTO STAMM_BARCODE (PackstückNr)" & _
"SELECT DISTINCT QYR_BARCODE_GENERATOR.PackstückNr;"
CurrentDb.Execute strSQLA, dbFailOnError
                 End If


Aber dann würde mich interessieren wie ich bestimmen kann, wieviele DS angefügt werden sollen..

Sorry bin planlos  ??? ???

Danke für eure Antworten
Lg Bernie

database

Hallo Bernie,

woher kommt denn der Wert im Feld 'StartNr' ?

Irgenwie scheint mir da etwas im Kreis zu laufen ...

ZitatINSERT INTO STAMM_BARCODE (PackstückNr)"

Heißt die Tabelle nun so wie oben oder so wie unten?

ZitatTbl Name =  STAMM_BARCODENr

Wenn es sich dabei um den gleichen Namen, also die gleiche Tabelle handelt kann deine SQL-Variante eigentlich nicht funktionieren.
Du fragst die Daten aus der Tabelle ab, in die du sie schreiben willst - das wird nicht gehen - die Abfrage kann dir keine Daten liefern, die es noch nicht gibt.

ZitatIch habe eine Tabelle in der Packstücke erfasst werden

Wie heißt denn diese Tabelle?

Zum Ablauf, den ich mir an Hand deiner Schilderung vorstellen kann:

Frage die Tabelle nach allen Datensätzen der betreffenden Sendungs_Nr ab.
Das Recordset wird von oben nach unten durchlaufen.
Für jeden Datensatz wird der Wert im Feld 'Anzahl_Packstücke' gelesen
Es wird in eine FOR ... NEXT Schleife eingesprugen, die so oft einen Datensatz mit den benötigten Daten in der Tabelle 'STAMM_BARCODENr'
erzeugt als es Anzahl von Packstücken gibt.

ZitatBARCODENr = [LfdNr] + [StartNr]
...wird ein wenig schwierig werden, da die benötigte 'lfdNr' zu DIESEM Zeitpunkt noch nicht existiert - außerdem gibts keinen Hinweis woher diese 'StartNr' kommt

Natürlich läßt sich der neu erzeugte PK des eben geschriebenen Datensatzes auslesen und für ein Update desselben verwenden.

DF6GL

Hallo,

Vorschlag:


Die StartNr aus der Tabelle entfernen und diesen Quasi-Statischen Wert in einer Parameter-Tabelle oder userdefinierten DB-Eigenschaft (Property) hinterlegen.

Im angesprochenen Recordset die BarcodeNr etwa so berechnen:


Dim StartNr as Long, rs as Dao.Recordet, lngLfNr as Long, db as Database
StartNr= <<Wie oben gesagt aus Property oder Parametertabelle auslesen (Dlookup)>>

.
.
set db=Currentdb

set rs =db.openrecordset(...)
.
.

rs.Edit
.
.
lngLfNr =rs!LfNr
..
rs.Update
.
rs.close
.
db.Execute "Insert into STAMM_BARCODENr (BarcodeNr) Values (" &  lngLfNr + StartNr & ")"
.
.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Bernie110

Hallo Ihr Beiden,

danke erst einmal für eure Anttworten.
Werde ersteinmal eure Fragen beantworten :

database
Zitat
Heißt die Tabelle nun so wie oben oder so wie unten?
Nein, der FeldName ist der Gleiche.
ZitatWie heißt denn diese Tabelle?
Die Tabelle in der die Packstücknummern stehen heisst STAMM_BARCODENr
Durch eine Abfrage die auf die Tabelle STAMM_BARCODENr heisst,  wird der BarCode berechnet..also die BarCodeNr erstellt. Diese Abfrage heissst QYR_BARCODE_GENERATOR
Die StartNr ist ein Nummernkreis der uns zugewiesen wurde. Fängt bei 702000000 an und hört bei 792000000 auf.
Jetzt wandle ich die Nummer in der Abfrage so um, dass sie etwa so aussieht. ( Bin aber noch nicht so weit, da mir unsere Spedition noch sagen muss, wie die

"*"003-4036339-702000000-1"*"

Stelle 1-3 :003
Stelle 4-10: ist die Speditionsnummer 4036339
Stelle 11-19: ist der Nummernkreis (fortlaufend)
Stelle 20: Prüfziffer nach Mudulo 10-Verfahren

Bei 8 Packstücken soll das Ganze dann etwa so aussehen.

In Tablle DT_Sendungen sind Kopfdaten also Adresse Empfänger nebst Gesamtsumme der Packstücke enthalten

DT_Sendungs_Nr : = die laufende Nr in DT_Sendungen + PK

In der Tabelle DT_Packstücke werden die Packstücke erfasst.
Diese Tabelle ist via DT_Sendungs_Nr : DT_SSendungs_Nr verknüpft.. der name ist in beiden Tbln gleich.

Sieht dann so aus :

Tabelle :   DT_Sendungen

DT_Sendungs_Nr = 100
------------------------
Empfänger
------------------------
Müller
Müllerstrasse 1
D-20011 Hamburg


Anzahl_Packstücke = 8
--------------------------------------------------------------------------------------
Tabelle : DT_Packstücke
PackstückNr      Anzahl_Packstücke     Packstück_Art        DT_Sendungs_Nr
1                       2                                Karton                       100
2                       1                                Palette                       100
3                       5                                Rohre                         100
---------------------------------------------------------------------------------------

So und ich brauch jetzt 8 Label, mit der Empfangsadresse und je einer neuen BarCode Nr.
Wenn meine Abfrage QYR_ABRCODE_GENERATOR dann so aussieh, bekomm ich das hin.
BarCodeNr:
"*"003-4036339-702000001-1"*"
"*"003-4036339-702000002-1"*"
"*"003-4036339-702000003-1"*"
"*"003-4036339-702000004-1"*"
"*"003-4036339-702000005-1"*"
"*"003-4036339-702000006-1"*"
"*"003-4036339-702000007-1"*"
"*"003-4036339-702000008-1"*"
.
DF6GL

Hallo Franz,
ok, das verstehe ich, nur ich möchte ja dies 8 mal in der Tabelle STAMM_BARCODENr
anlegen.

Geht das ? macht das Sinn ? bin ich auf dem Holzweg ? :-)

Lg Bernie




DF6GL

Hallo,

Zitat..nur ich möchte ja dies 8 mal in der Tabelle STAMM_BARCODENr
anlegen.

Was hindert Dich denn dadran?


Durchlaufe mit einem Recordset die Datensätze aus "DT_Packstücke" mit dem Kriterium   "DT_Sendungs_Nr =100".  Bei jedem Datensatz wird die "Anzahl_Packstücke" ausgelesen und entsprechend viele Datensätze mittels des vorher genannten Vorschlages  in  "STAMM_BARCODENr" geschrieben. Dabei kann ja gleich die "richtige" Barcode-Ziffernfolge berechnet werden ("BarcodeNr" in Datentyp Text ändern! und möglichst die Berechnung in eine eigene Funktion auslagern. Dann ist es einfacher , den noch unklaren Algorithmus an dieser zentralen Stelle anzupassen. ) .


Die Tabelle kann dann ohne weiteres Zutun für den Ausdruck der Barcode-Labels im Bericht herangezogen werden.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Bernie110

Hallo,

so jetzt hab ich es 2 Tage lang versucht...bin echt am verzweifeln.

ZitatDim StartNr as Long, rs as Dao.Recordset, lngLfNr as Long, db as Database
StartNr= 70000.
.
set db=Currentdb

set rs =db.openrecordset(???????????????????)

rs.Edit
.
.
lngLfNr =rs!LfNr
..
rs.Update
.
rs.close
.
db.Execute "Insert into STAMM_BARCODENr (BarcodeNr) Values (" &  lngLfNr + StartNr & ")"

set rs =db.openrecordset(???????????????????)


Was kommt hier rein ???

Sorry ich hab echt keinen Plan
Lg Bernie

DF6GL

#6
Hallo,


Luftcode,unchecked und ohne Errorhandler  (LfNr in Tabelle STAMM_BARCODENr  von Autowert nach Zahl,Long konvertieren!):




Public Function fktInsertBCNr(lngSendungsNr As Long)

Dim lngStartNr as Long, rs1 as Dao.Recordset, rs2 as Dao.Recordset, lngLfNr as Long,  db as Database

'lngSendungsNr = 100   'diese Var. als Argument ausführen

set db=Currentdb

set rs1 =db.Openrecordset("Select PackstückNr, Anzahl_Packstücke From DT_Packstücke where  DT_Sendungs_Nr = & lngSendungsNr , dbOpenSnapshot)  

set rs2 =db.Openrecordset("Select * from STAMM_BARCODENr ",dbOpendynaset)


Do Until rs1.Eof


For i = 1 to rs!Anzahl_Packstücke

rs2.Addnew
rs2!LfNr=Nz(Dmax("LfNr","STAMM_BARCODENr"),0) +1
rs2!SendungsNr = rs1!SendungsNr
rs2!PackstückNr = rs1!PackstückNr
rs2!BarcodeNr = fktGenBarcode (lngSpedNr,rs2!LfNr)
rs2.Update

Next

rs1.MoveNext
Loop


rs2.close:Set rs2 = Nothing
rs1.close:Set rs1 = Nothing
set db = Nothing
End Function




Public Function fktGenBarcode ( SpedNr as Long,  LfNr as Long) as String

Dim strBC as String, PZ as String,  lngStartNr as Long
lngStartNr= 702000000


strBC ="003" & Format(SpedNr ,"0000000") & Format( StartNr + LfNr ,"000000000")   'vermutlich sich die Gänsefüße und Minus-Zeichen nicht Bestandteil des BC
fktGenBarcode = "*" & strBC & fktPZ(strBC) & "*"
End Function





Public Function fktPZ (BC as String) as String
'  Hier die Modulo 10 Berechnung

fktPZ =  "1"   'als Test

End Function
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Bernie110

Hallo Franz,

super & vielen Dank für deine Hilfe.
hab ich jetzt hinbekommen.

Lg Bernie