Neuigkeiten:

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

Mobiles Hauptmenü

Nummerierung des Wareneingangs

Begonnen von Jakobus, März 05, 2011, 07:43:32

⏪ vorheriges - nächstes ⏩

Jakobus

 ???

Hallo,

wieder eine Nacht schlaflos über Büchern und Internet-Beiträgen verbracht, ohne meinem gewünschten Ergebnis näher gekommen zu sein:

ich möchte in meiner Lagerhaltung die Wareneingänge pro Jahr durchgehend nummerieren, also für das Jahr 2011 beginnend mit 2011-0001, 2011-0002 usw. Zum Jahreswechsel sollte der Zähler dann wieder auf 0001 zurückgestellt werden und im nächsten Jahr mit 2012-0001 beginnen.
Die im letzten Jahr nach Datum erfassten Wareneingänge möchte ich ebenfalls entsprechend durchnummerieren.

Habe das Problem versucht mit einer Auswahlabfrage zu lösen, in welcher ich versucht habe das Feld WE-Nummer mittels "Jahr(WEDatum)&"-"&SELECT COUNT(*) FROM tblWarenEingang AS TEMP WHERE TEMP. .... (und dann verließen sie ihn)" zu definieren.

Kann mir hier jemand weiterhelfen ?
vielen Dank vorab










DF6GL

#1
Hallo,



"Ich möchte in meiner Lagerhaltung die Wareneingänge pro Jahr durchgehend nummerieren"


Warum  und Wo?


In einem Bericht könntest Du nach Jahr gruppieren, nach Datum sortieren und ein Feld mit laufender Summe über die Gruppe erstellen.

Jakobus

Hallo Franz vom Bodensee,

das mit dem Bericht habe ich auch schon in Betracht gezogen, allerdings brauche ich diese "selbsterstellte" WE-Nummer für weitere Nummerierungen und möchte sie daher gern per Abfrage in eine Tabelle schreiben.
Zum besseren Verständnis: beim Wareneingang handelt es sich um  Probensendungen von Kunden zu einem bestimmten Problem. In einer Probensendung können sich mehrere unterschiedliche Proben befinden, die dann unterschiedlichen unterschiedlichen Untersuchungsmethoden unterzogen werden müssen.
Ich möchte daher die Probensendung des Kunden zunächst in der Form "Jahr-lfd.Nr" bezeichnen (also z.B. 2011-0012), die Proben in der Sendung entsprechend mit 20110012.1; 20110012.2 usw.  Da die Proben unterschiedlichen Untersuchungsmethoden zugeführt werden, sollen diese unveränderbar nur anhand der Probennummer identifiziert werden können. Aus den Untersuchungen der Proben ergeben sich zusätzliche Daten, die der Probennummer zugeordnet werden, zum Abschluss werden dann alle Daten eines Wareneingangs unter der WE-Nummer (die dann quasi zur Auftragsnummer wird) zusammengeführt.

Läßt sich dieser Ablauf in Access2003 mittels Ausdrucksgenerator, Makro etc. so ohne weiteres realisieren - oder muss ich mich mit VBA/SQL auseinandersetzen. Wie gesagt, bin Neuling und hab mit VBA und SQL keine Erfahrung.

Grüsse aus dem Schwarzwald
Jakobus


DF6GL

Hallo,


verzichte auf solche sprechenden Nummern, die irgendwie (mit VBA) zusammengebastelt werden müssen.  Baue besser mehrere voneinander abhängige  Tabellen auf, in denen jede Probe letztendlich durch den entspr. ID-Wert (Autowert) genau und eindeutig identifizierbar wird.



Weiterhin:  der Ausdrucksgenerator verkompliziert m. E. nur die Sache, und Makros sollte man grundsätzlich vermeiden (auch wenn ab A2007 die Makroprogrammierung deutlich besser geworden ist).

VBA brauchst Du nur in geringen Maße, wenn Du die Datenstrukturen in relationale Tabellen überführst (sieh u. st. Links #1 und #1a)
SQL solltest Du zumindest verstehen, weil SQL das eigentliche Interface zwischen dem Access-GUI (Fenster-Oberfläche mit Formularen/Berichten ) und dem Access-DB-System (Jet-Engine mit den Tabellen) darstellt.

database

#4
Hallo,

grundsätzlich gilt das von DF6GL Gesagte im Bezug auf die eindeutige Identifizierbarkeit eines Datensatzes per Primärschlüssel!

Es kann aber durchaus sein, dass in besonderen Fällen die Erzeugung einer (Artikel-, Angebots-, Auftrags-, ...) Kennzeichnung erwünscht bzw. notwenig ist.

Ich habe vor einiger Zeit mal sowas in einer Auftrags-DB gemacht, wo der Auftraggeber seine Angebote nach einem ganz speziellen Muster nummeriert haben wollte.
Die Nummern mussten forlaufend innerhalb eines Jahres generiert werden und bei Jahreswechsel wieder mit 1 beginnen, wobei eine 5-stellige Darstellung der fortlaufenden Nummer erwünscht war.
Diese 'Nummern' wurden dann in den verschiedensten Formularen und Berichten (Angebote in Reportform) verwendet und hatten im Geschäftsgebaren des Auftraggebers einen so gewollten Stellenwert.

Für das Erstellen dieser Angebotsnummern musste daher erst einmal die letzte Angebotsnummer ermittelt werden um diese dann um ein zu erhöhen.
Untenstehende Function erledigte die Selektion, das Erzeugen und Zusammensetzen der Nummer - vielleicht hilft dir das


Public Function GenerateAngebot(conn As ADODB.Connection) As String

   Dim rst As New ADODB.Recordset
   Dim strAnNr As String
   
       With rst
           .ActiveConnection = conn
           .LockType = adLockOptimistic
           .CursorType = adOpenKeyset
           .Open "SELECT TOP 1 Max(tblAngebote.AN_ID) AS MaxvonAN_ID, tblAngebote.AN_Nr, Right(Year([AN_Dat]),2) as x " & _
                   "FROM tblAngebote " & _
                   "GROUP BY tblAngebote.AN_Nr, tblAngebote.AN_ID, Right(Year([AN_Dat]),2) " & _
                   "HAVING Right(Year([AN_Dat]), 2) = Right(Year(Date()), 2) " & _
                   "ORDER BY tblAngebote.AN_ID DESC"
           
           If .RecordCount = 0 Then
               strAnNr = "AN" & CStr(Right(Year(Date), 2)) & "00001"
           Else
               Select Case Len(Right(rst!AN_Nr, Len(rst!AN_Nr) - 4) + 1)
                   Case 1
                       strAnNr = "AN" & CStr(Right(Year(Date), 2)) & "0000"
                   Case 2
                       strAnNr = "AN" & CStr(Right(Year(Date), 2)) & "000"
                   Case 3
                       strAnNr = "AN" & CStr(Right(Year(Date), 2)) & "00"
                   Case 4
                       strAnNr = "AN" & CStr(Right(Year(Date), 2)) & "0"
                   Case 5
                       strAnNr = "AN" & CStr(Right(Year(Date), 2))
               End Select
               strAnNr = strAnNr & Right(rst!AN_Nr, Len(rst!AN_Nr) - 4) + 1
           End If   
       End With
   
   Set rst = Nothing
       
   GenerateAngebot = strAnNr

End Function

Jakobus

Hallo Peter,

zunächst mal vielen Dank für die Codezeilen. Bin am Probieren, bislang allerdings noch erfolglos. Habe eine Tabelle tblAngebote mit den Feldern AN_ID (Autowert, Primärschlüssel), AN_Nr (Text) und An_Dat (Datum) entsprechend Deinem Beispiel aufgemacht. Danach ein Formular mit einem ungebundenen Textfeld als AnNr.
Wohin schreibe ich jetzt den Code, den ich in die Zwischenablage kopiert habe ?

Tut mir leid, dass ich so blöd fragen muss, meine A2003 Kenntnisse basieren grad mal auf einigen Nächten Selbststudium des E-Books Access 2003 Entwicklerbuch von A.Minhorst.

Gruss


database

Hallo,

ich habe das Beispiel ein wenig vereinfacht, in der Annahme, dass du KEINE Frontend / Backend - Lösung verwendest (Tabellen und Formulare befinden sich bei dir in einer einzigen Datei).

Im Anhang findest du eine kleine Datei mit einer Tabelle, einem Modul und einem Formular, aus dem du die Arbeitsweise auslesen kannst.
Setze dazu einfach auf die Click-Ereignisse der Buttons einen Haltepunkt und arbeite dann die Codes mit F8 schrittweise ab.

HTH

[Anhang gelöscht durch Administrator]