Hallo,
Ich komme bei den folgenden Problemen nicht weiter.
Ich habe eine Lagerungs-Access-Tabelle, welche Lagerungen (Lagerungsnummer, Lieferschein, Erzeuger(des Produkts),...) beinhaltet. Nun ist es wichtig, dass man verschiedene Lagergebühren dem jeweiligen Erzeuger einer Partie zurechnen kann.
Wenn eine Lagerung vor dem 31.12.2011 wieder ausgelagert wurde, dann müssen Bsp. Kurzfristige Lagerung=3€ pro Partie dem Erzeuger berechnet werden. Nach dem 31.12.-01.04 müssen Mittelfristige Lagerung=4€ berechnet werden und nach dem 01.04. werden Langfristige Lagerung=5€ fällig.
Ich brauche nun eine Abfrage/Bericht, der mir die einzelnen Partien und deren Lagergebühren und die Endsumme in € ausgibt, der für jeden Erzeuger bis zum jetzigen Zeitpunkt abzurechnen ist.
Desweiteren möchte ich nicht jedes Jahr das Datum aktualisieren, da nächstes Jahr ebenso die Daten 31.12.xxxx bzw. 01.04.xxxx stimmen, jedoch nicht das Jahr, ist hier mein zweites Problem.
Des weiteren möchte ich den Lagerbetrag manuell eingeben können. (Es kann ja sein, dass sich die Lagergebühr von 3€ auf die Kurzfristige Lagerung um 1€ also auf insgesamt 4€ erhöht. Access soll bei einer Veränderung sofort mit den neuen Werten rechnen.
-> Eine Änderung in der Access Tabelle wird maximal 1x pro Jahr vorgenommen, reicht da ein einfaches Formular?
Um gewisse Veränderungen vorzunehmen stelle ich meine jetzige Datenbank mal online. Bin für jede Hilfe offen. Bei Fragen immer zu erreichen!
[Anhang gelöscht durch Administrator]
Hallo,
wenn so einen "Lagerung" immer komplett (als Einheit) zu betrachten ist, dann könntest Du anhand des Feldes "Datum" ("eingelagert" ??) und des Feldes "ausgelagert" mittels einer kleinen Funktion Deinen Berechnungs-Algorithmus (über den man auch nochmal dringend nachdenken sollte---> Ablegen der Gebührensätze in einer Tabelle und bezogen auf einen Zeitraum und nicht auf fixe Termine) nachbilden und in einem weiteren Feld ("Gebühr") in der Tabelle Lagerung hinterlegen. Dadurch kann die Gebühr zum Einen berechnet , zum Anderen manuell korrigiert werden. Die Einbindung des akt. Jahres ist an sich gar kein Problem.
Die Summen dieser Gebühren kann eine entspr. Auswahlabfrage berechnen.
Des weiteren sollte beachtet werden, KEINE SONDER- und LEERZEICHEN in Namen zu verwenden...
Das Problem ist nur, dass der Zeitraum variabel ist. Es muss das Datum 31.12.xxxx bzw 01.04.xxxx sein. Somit habe ich schon keinen Standartwert mehr.
Wie kann man das denn anhand meiner DB hinbekommen?
Hallo,
wie gesagt, solche Datumswerte sind einfach zu berechnen:
Dim Datum1 as Date, Datum2 as Date
Datum1 = Dateserial(Year(Date()),31,12)
Datum2 = Dateserial(Year(Date()),4,1)
bzw. wenn das Einlagerdatum für die Jahreszahl herangezogen werden soll/muss (---> "Berechnungs-Algorithmus" )
Datum1 = Dateserial(Year(Einlagerdatum),31,12)
Datum2 = Dateserial(Year(Einlagerdatum),4,1)
Das Ganze muss halt passend in einer globalen Funktion mit Übergabeargument des Datum-Tabellenfeld-Wertes eingebaut und z. B. in einer Aktualisierungsabfrage aufgerufen werden.
Könntest du mir behilflich sein und mal deine vorstellung in der db verwirklichen damit ich mir das nochmal genau anschauen kann?
Hallo,
erst musst Du den genauen Algorithmus aufzeigen, wie die Berechnung anhand es Einlager- und Auslager-Datums erfolgen soll.
Wird ein angefangener Monat voll gerechnet (z. B: ist Einlagerdatum 30.11.2011 als voller Monat November zu rechnen, bei Auslagerdatum 1.2.2012 der komplette Februar einzubeziehen) ?
Geschieht die Berechnung pro Kalenderquartal oder ist eine 3-Monats-Dauer (der Lagerung) die Grundlage?
Ist bei evtl. Betragsänderungen das Einlager- oder das Auslagerdatum maßgeblich?
ZitatWird ein angefangener Monat voll gerechnet (z. B: ist Einlagerdatum 30.11.2011 als voller Monat November zu rechnen, bei Auslagerdatum 1.2.2012 der komplette Februar einzubeziehen) ?
Wird als voller Monat angesehen, jedoch ist dies ziemlich egal, da ich nur von den Fix-Werten ausgehe. Jemand der am 01.03.2011 einlagert und vor dem 31.12.2011 auslagert bezahlt genauso viel wie einer, der am 02.12.2011 einlagert und am 31.12.2011 auslagert.
ZitatGeschieht die Berechnung pro Kalenderquartal oder ist eine 3-Monats-Dauer (der Lagerung) die Grundlage?
Die Berchnung erfolg am Ende, wenn alle Einlagerungen und Auslagerungen vollzogen sind. (Einmalig / Jahr)
ZitatIst bei evtl. Betragsänderungen das Einlager- oder das Auslagerdatum maßgeblich?
Nein, der Betrag wird nur geändert, das Einlager- bzw. Auslagerdatum hat nichts damit zu tun.
Hallo,
sorry, ich verstehe Deine Berechnungsgrundlage nicht....
Habe mich jetzt doch für eine Berechnung von Tagen entschieden. Funktioniert soweit auch relativ gut :)
Hallo,
naja, jetzt hab ich auch das Beispiel entspr. der PN fertig..
[Anhang gelöscht durch Administrator]
Super, genauso habe ich mir das vorgestellt. dann kann ich das ja doch noch so machen.
Danke vielmals :)
Dann melde auch die Lösung dieser Frage in den anderen Crosspostings.. >:(
Habe nun die Lösung von DF6GL erhalten. Danke nochmal dafür!
Er hat ein Modul erstellt, welches im Bezug zu der Ausgangstabelle steht.
Option Compare Database
Option Explicit
Public Function fktCalCLager(datEL, datAL)
Dim aktjahr As Long, Kat As Long
On Error GoTo fktCalCLager_Error
aktjahr = Year(Nz(datEL, Date))
If IsNull(datAL) Then Exit Function
Select Case datAL
Case Is <= DateSerial(aktjahr, 12, 31): Kat = 1
Case DateSerial(aktjahr + 1, 1, 1) To DateSerial(aktjahr + 1, 5, 31): Kat = 2
Case Is >= DateSerial(aktjahr + 1, 6, 1): Kat = 3
Case Else
End Select
fktCalCLager = CurrentDb.OpenRecordset("select Betrag from tblGebuehren where Kategorie = " & Kat & " and Gueltigkeitsjahr=" & aktjahr, dbopensnapshot)(0)
On Error GoTo 0
Exit Function
fktCalCLager_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in Prozedur fktCalCLager / Modul Modul1"
End Function
Dieser Code greift auf die Tabelle "Gebuehren" zu, in der die Kategorien 1-3 und der Betrag der jeweiligen Kategorien eingetragen ist. Jeder Betrag hat ebenfalls ein Gültigkeitsjahr zugeschrieben.
Dadurch wird in der Tabelle Lager die Lagerkosten errechnet!
Bei weiteren Fragen stehe ich gerne zur Verfügung :)
Noch einen schönen Abend wünsche ich!