Hallo Forum,
es gibt ein Lieferdatum z.B. 06.10.2025 zu einem Produkt.
Für dieses Produkt werden z.B. 6 Tage Fertigungszeit gebraucht.
Jetzt möchte errechnen wann mit der Fertigung begonnen muss um den Liefertermin einzuhalten.
Es sollen aber die Wochenenden nicht berücksichtigt werden genau so die Feiertage. Für die Feiertage ist eine Tabelle vorhanden.
Wie kann ich das lösen?
Für eure Mühe bedanke ich mich im voraus.
Gruß alfini
allo,
erstelle eine Kalendertabelle mit allen Tagen eines ausreichend großen Zeitraums. Das können auch 20 und mehr Jahre sein, es sind ja nur max. 366 Datensätze je Jahr.
In diese Kalendertabelle sollten auch die Feiertagen markiertsein.
Dann lässt sich Dein Vorhaben relativ einfach realisieren.
Hallo,
kann man nicht einfach mit einer Schleife 6 Tage zurückrechnen und je nach Wochentag in der Schleife den Tag überspringen? (also die Anzahl der abgezogenen Tage erhöhen)
Zitat von: Doming am September 22, 2025, 19:03:50kann man nicht einfach mit einer Schleife 6 Tage zurückrechnen und je nach Wochentag in der Schleife den Tag überspringen? (also die Anzahl der abgezogenen Tage erhöhen)
Das kann man. Wenn es nur um Werktag/Wochenende geht, wäre das bei einer überschaubaren Anzahl an Tagen auch meine Lösung.
Da hier aber auch Feiertage berücksichtigt werden sollen, die man irgendwo explizit definieren muss, würde ich dann einheitlich nur die Kalendertabelle verwenden.
Hallo,
in einer Schleife 6 Tage zurück rechnen, ist weniger gut, weil a) sich für einige Produkte die Fertigungszeit auch mal ändern könnte und b) die Feiertage sich durchaus je nach Bundesland unterscheiden können - man denke z.B. mal an verschiedene Fertigungsstätten oder verschiedene Standorte für die Anlieferung.
Das ist ein gutes Beispiel für den Einsatz eine entsprechenden Kalendertabelle.
Knobbi38
Hallo,
auf Dauer ist die Kalendertabelle die einfachste Lösung.
Im Anhang ein Beispiel das Du auf Dein Vorhaben anpassen kannst.
Da gibt es auch ein Formular zum automatischen Erstellen der Kalendertabelle mit den Wochentagszahlen )1-7) in einer extra Spalte.
DB als Zip anbei.
Man kann so eine Tabelle bei Bedarf dann z.B. auch noch mit einer Firmenspezifischen Tabelle joinen in der wichtige Termine stehen.
Hallo Forum,
habe eine Tab. tblKalender erstellt.Mit folgenden Feldern.
Tagesdatum, Feiertagsname, Wochentag kurz, istFeiertage als Checkbox.
Das Startdatum konnte ich herausfinden.
Jetzt geht es nur um das Enddatum.Vom Startdatum plus z.B. 6 Tage ohne die Wochenenden und Feiertage.
Vieleicht hat jemand einen Hinweis wie es gelöst werden kann.
Gruß alfini
Hallo Forum,
habe das Problem mit KI gelöst bekommen.
Gruß Alfini
Hallo Alfini,
wäre schön, wenn du die Lösung hier auch veröffentlichen könntest, so daß andere auch etwas davon haben.
Hallo,
hier sind die beiden Funktionen für die Berechnung der Tage mit Feiertagen.
Tab. mit Feiertagen anlegen.
Dann Lieferdatum bestimmen und Fertigungstage festlegen.
Erst Fertigungsbeginn berechnen. Dann die Fertigungstage dazurechnen.
Müsste soweit verständlich sein.
Gruß alfini
Function AddWerktageMitFeiertagen(StartDatum As Date, AnzahlTage As Integer) As Date
Dim ErgebnisDatum As Date
Dim TageHinzugefügt As Integer
Dim rs As DAO.Recordset
Dim db As DAO.Database
ErgebnisDatum = StartDatum
TageHinzugefügt = 0
Set db = CurrentDb
Do While TageHinzugefügt < AnzahlTage
' Feiertag prüfen
Set rs = db.OpenRecordset("SELECT istFeiertag FROM tblKalender WHERE Tagesdatum = #" & Format(ErgebnisDatum, "yyyy-mm-dd") & "#", dbOpenSnapshot)
If rs.RecordCount > 0 Then
rs.MoveFirst
If rs!istFeiertag = False Then
' Kein Feiertag ? Werktag prüfen
If Weekday(ErgebnisDatum, vbMonday) <= 5 Then
TageHinzugefügt = TageHinzugefügt + 1
End If
End If
Else
' Kein Eintrag im Kalender ? nur Wochenende prüfen
If Weekday(ErgebnisDatum, vbMonday) <= 5 Then
TageHinzugefügt = TageHinzugefügt + 1
End If
End If
rs.Close
Set rs = Nothing
If TageHinzugefügt < AnzahlTage Then
ErgebnisDatum = ErgebnisDatum + 1
End If
Loop
AddWerktageMitFeiertagen = ErgebnisDatum
End Function
Function BerechneFertigungsbeginnMitFeiertagen(Lieferdatum As Date, FertigungsTage As Integer) As Date
Dim Arbeitstage As Integer
Dim AktuellesDatum As Date
Dim FeiertagDatum As Variant
Dim Feiertage As DAO.Recordset
AktuellesDatum = Lieferdatum
Arbeitstage = 0
' Feiertage laden
Set Feiertage = CurrentDb.OpenRecordset("SELECT Ftg_Datum FROM tblFeiertage", dbOpenSnapshot)
Do While Arbeitstage < FertigungsTage
AktuellesDatum = AktuellesDatum - 1
' Wochenende prüfen
If Weekday(AktuellesDatum, vbMonday) <= 5 Then
' Feiertag prüfen
Feiertage.MoveFirst
FeiertagDatum = DLookup("Ftg_Datum", "tblFeiertage", "Ftg_Datum = #" & Format(AktuellesDatum, "yyyy-mm-dd") & "#")
If IsNull(FeiertagDatum) Then
Arbeitstage = Arbeitstage + 1
End If
End If
Loop
Feiertage.Close
Set Feiertage = Nothing
BerechneFertigungsbeginnMitFeiertagen = AktuellesDatum
End Function
Hallo Alfini,
so wird eine Feiertagstabelle aber nicht verwendet! :o
Für das was du da veranstaltest bräuchte man überhaupt keine Tabelle, Schleife über eine Tabelle und innerhalb der Schleife auch noch Prüfungen und ein Dlookup(). ::)
Du solltest das Thema mal etwas systematischer angehen. Klaus hatte in dem Modul doch schon etwas vorbereitet.
Du suchst den 6. Arbeitstag nach einem Startdatum?
Hier mal ein erster Ansatz für dich, die Feinarbeit und Anpassung überlasse ich jetzt mal dir:
SELECT Max(ATag) As Lieferdatum
FROM (
SELECT Top 7 tdatum as ATag
FROM alleArbeitstage
WHERE tdatum >= #09/29/2025#
)
Gruß Knobbi38
PS:
Zum Testen noch den 3.10. als Feiertag eintragen.
Hallo Alfini,
es geht natürlich auch noch etwas einfacher:
SELECT TOP 1 TDatum
FROM tblAlleTage
WHERE TDatum > #09/29/2025# +6 AND WT < 6 AND Feiertag = 0
Knobbi38