Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: boehnli01 am August 14, 2011, 15:00:43

Titel: Nummerierung von Daten
Beitrag von: boehnli01 am August 14, 2011, 15:00:43
Hallo zusammen,

Mit dieser Prozedur mache ich eine Kalender Tabelle  (inkl.wkend). Nun möchte vor dem Feld_Datum eine Nummerierung mit dem Feld_Serial durchführen. Ich will die Nummerierung aber so machen das jeweils der Samstag & Sonntag die gleiche Seriennummer wie der  vorgehende Freitag haben.

Könnte mir da bitte jemand helfen wie ich die Prozedur ändern muss ?

With CurrentDb.OpenRecordset("tbl_calender_raw1")
        For lngCount = 0 To Nz(Me!Anzahl_Tage, 0)

.AddNew
!Feld_Datum = CDate(Me.Start_Datum) + lngCount
!Feld_Wochentag = WeekDay(!Feld_Datum, vbMonday)
!Feld_Woche = DatePart("ww", !Feld_Datum, 2, 2)
!Feld_Monat = Month(!Feld_Datum)
!Feld_Jahr = Year(!Feld_Datum)
.Update
       
        Next lngCount
    End With


Titel: Re: Nummerierung von Daten
Beitrag von: DF6GL am August 14, 2011, 17:28:17
Hallo,


lass einen weiteren Zähler ("lngSerial") mitlaufen und erhöhe den jeweils nur wenn es sich nicht um Weekday=6 oder Weekday=7 handelt.
Titel: Re: Nummerierung von Daten
Beitrag von: boehnli01 am August 14, 2011, 19:03:59
Hi, Das mit dem Ingserial habe ich noch hingekriegt, aber für den Rest fehlt es mir an VBA Wissen:

.AddNew
!Feld_Serial = Ingserial
!Feld_Datum = CDate(Me.Start_Datum) + lngCount
!Feld_Wochentag = WeekDay(!Feld_Datum, vbMonday)
!Feld_Woche = DatePart("ww", !Feld_Datum, 2, 2)
!Feld_Monat = Month(!Feld_Datum)
!Feld_Jahr = Year(!Feld_Datum)
.Update


Kannst du mir bitte mit dem Rest helfen ?

Vielen dank für dein HIlfe.

Titel: Re: Nummerierung von Daten
Beitrag von: database am August 14, 2011, 19:59:07
Hallo,

das heißt nicht Ingserial  sondern lngSerial ... der erste Buchstabe ist ein 'L'  und die ersten 3 Zeichen stehen für LongInteger.

Also zuerst deklarieren... und dann verwenden - in Etwa so (eine Möglichkeit):


Dim lngSerial as Long

With CurrentDb.OpenRecordset("tbl_calender_raw1")

'Startwert des Zählers bestimmen
If WeekDay(!Feld_Datum, vbMonday) <= 5
   lngSerial = WeekDay(!Feld_Datum, vbMonday)
Else
   lngSerial = 5
End if

For lngCount = 0 To Nz(Me!Anzahl_Tage, 0)

.AddNew
!Feld_Serial = lngSerial
!Feld_Datum = CDate(Me.Start_Datum) + lngCount
!Feld_Wochentag = WeekDay(!Feld_Datum, vbMonday)
!Feld_Woche = DatePart("ww", !Feld_Datum, 2, 2)
!Feld_Monat = Month(!Feld_Datum)
!Feld_Jahr = Year(!Feld_Datum)

'Zähler erhöhen wenn Bedingungen erfüllt sind
If WeekDay(!Feld_Datum, vbMonday) < 5 Then
    lngSerial = lngSerial + 1
ElseIf WeekDay(!Feld_Datum, vbMonday) >= 5 then
    lngSerial = 5
Else
    lngSerial = WeekDay(!Feld_Datum, vbMonday)
End If

.Update
     
Next lngCount
   
End With



Sollte eigentlich die richtigen Zählerstände liefern können

HTH
Titel: Re: Nummerierung von Daten
Beitrag von: boehnli01 am August 14, 2011, 21:16:44
Danke für die Hilfe.

Ich bekomme folgend Fehlermeldung beim letzten "Next lngSerial"
Compile Error:  Next without For

Wenn ich den "Next lngSerial"  entferne, kommt er mit:
Compile Error: End With without With

Titel: Re: Nummerierung von Daten
Beitrag von: database am August 14, 2011, 21:26:48
Hallo,

in meinem Code oberhalb gibt es KEIN   Next lngSerial  !!

Die Zählschleife iteriert über lngCount!
Titel: Re: Nummerierung von Daten
Beitrag von: boehnli01 am August 14, 2011, 22:39:34
Habe es fast geschafft.

Er zeigt mir nun aber bei jedem Wochentag 6, 7 & 1 die Serien Nummer 5, aber ich wollte es folgendermassen:

Serie        Datum               Wochentag
5   15.01.2011   6   
5   16.01.2011   7   
6   17.01.2011   1   
7   18.01.2011   2   
8   19.01.2011   3   
9   20.01.2011   4   
10   21.01.2011   5   
10   22.01.2011   6   
10   23.01.2011   7   
11   24.01.2011   1   
Titel: Re: Nummerierung von Daten
Beitrag von: daolix am August 15, 2011, 00:21:41
Dann evtl. so.

dim lAnzDays As Long, d as date

d = CDate(Me.Start_Datum)
lAnzDays = Nz(Me!Anzahl_Tage, 0)

With CurrentDb.OpenRecordset("tbl_calender_raw1")
lngSerial = IIf(Weekday(d, vbMonday) <= 5, Weekday(d, vbMonday) - 1, 5)

For lngCount = 0 To lAnzDays
 
   If Weekday(d + lngCount , vbMonday) <= 5 Then lngSerial = lngSerial + 1

   .AddNew
      !Feld_Serial = lngSerial
      !Feld_Datum = d + lngCount
      !Feld_Wochentag = WeekDay(d + lngCount, vbMonday)
      !Feld_Woche = DatePart("ww", d + lngCount, 2, 2)
      !Feld_Monat = Month(d + lngCount)
      !Feld_Jahr = Year(d + lngCount)
   .Update
   
next
End With
Titel: Re: Nummerierung von Daten
Beitrag von: database am August 15, 2011, 07:25:04
Guten Morgen,

oh, sorry, ich dachte die Nummerierung sollte immer nur innerhalb einer Woche erfolgen ...

hmmm...   "...bei jedem Wochentag 6, 7 & 1 die Serien Nummer 5...

Hab' da anscheinend was verwurschtelt ...



Dim lngSerial as Long

With CurrentDb.OpenRecordset("tbl_calender_raw1")

'Startwert des Zählers bestimmen
If WeekDay(Me.Start_Datum, vbMonday) <= 5 Then
    lngSerial = WeekDay(Me.Start_Datum, vbMonday)
Else
    lngSerial = 5
End if

For lngCount = 0 To Nz(Me!Anzahl_Tage, 0)

.AddNew
!Feld_Serial = lngSerial
!Feld_Datum = CDate(Me.Start_Datum) + lngCount
!Feld_Wochentag = WeekDay(!Feld_Datum, vbMonday)
!Feld_Woche = DatePart("ww", !Feld_Datum, 2, 2)
!Feld_Monat = Month(!Feld_Datum)
!Feld_Jahr = Year(!Feld_Datum)

'Zähler erhöhen wenn Bedingungen erfüllt sind
If CLng(!Feld_Wochentag) <= 5 Then
    lngSerial = lngSerial + 1
End If

.Update
       
Next lngCount
   
End With


oder die zeilenmäßig kürzere Variante von daolix
Titel: Re: Nummerierung von Daten
Beitrag von: boehnli01 am August 15, 2011, 10:14:18
Vielen vielen Dank an alle. Es hat wunderbar funktioniert.
Titel: Re: Nummerierung von Daten
Beitrag von: MzKlMu am August 15, 2011, 10:20:45
Hallo,
mich würde mal interressieren, zu was man einen solchen Zähler braucht. Möglicherweise gibt es ja eine ganz andere Lösung.
Titel: Re: Nummerierung von Daten
Beitrag von: boehnli01 am August 15, 2011, 17:01:59
Hi, für die Berechnung von Daten:

Siehe auch: http://www.access-o-mania.de/forum/index.php?topic=14604.msg83462#msg83462

Gruss Cédric
Titel: Re: Nummerierung von Daten
Beitrag von: MzKlMu am August 15, 2011, 17:58:11
Hallo,
und wozu der Zähler?
Titel: Re: Nummerierung von Daten
Beitrag von: boehnli01 am August 15, 2011, 20:52:13
Mmh wie soll ich das erklären....

Ich habe einen Produktionskalender beim nicht alles Tage aktiv sind. Nun will ich den Produktionsstart ermitteln in dem ich das Produktionsende minus die Produktionszeit rechne. In der 1sten Abfrage rechne ich nicht das Datum minus Produktionszeit, sondern die Seriennummer diese Datums minus die Produktionszeit. In der 2ten Abfrage linke ich den die 2 Seriennummer und ermittle so das Startdatum. Bisschen kompliziert. Sorry.
Titel: Re: Nummerierung von Daten
Beitrag von: DF6GL am August 15, 2011, 22:14:02
Hallo,

Wie ich im anderen Beitrag schon erzählt habe, ist für reine Produktionszeit-Berechnungen eine laufende Nummer für die aktiven (realen) Arbeitstage von Nöten.

Diese laufende Nummer muss lückenlos sein. Deine Schleife allerdings berücksichtigt nicht Feiertage , Brückentage oder andere arbeitsfreie Tage, die ausser Sa und So noch auftreten können.  Wenn diese arbeitsfreien Tage berücksichtigt werden sollen, braucht es zusätzlich eine Tabelle mit den Datumswerten der entspr. freien Tage und eine entspr. angepasste Programmierung bei der Ezeugung der laufenden Nr.





Titel: Re: Nummerierung von Daten
Beitrag von: boehnli01 am August 16, 2011, 17:13:00
Hallo,

Kalender wird über einen separaten Feiertag-Tabelle zuerst upgedated.

Gruss Cédric