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
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.
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 & ")"
.
.
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_SendungenDT_Sendungs_Nr =
100------------------------
Empfänger------------------------
Müller
Müllerstrasse 1
D-20011 HamburgAnzahl_Packstücke =
8--------------------------------------------------------------------------------------
Tabelle : DT_PackstückePackstückNr Anzahl_Packstücke Packstück_Art DT_Sendungs_Nr1 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"*".
DF6GLHallo 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
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.
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
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
Hallo Franz,
super & vielen Dank für deine Hilfe.
hab ich jetzt hinbekommen.
Lg Bernie