August 03, 2021, 16:09:52

Neuigkeiten:

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


Berechnung Verbrauch

Begonnen von martenk, Juli 09, 2021, 07:41:39

⏪ vorheriges - nächstes ⏩

martenk

Hallo,

folgendes Problem

ich trage Reservierungsdaten in eine Tabelle

Anreise
Abreise
....

In dieser Tabelle habe ich auch Verbrauchsdaten wie Gas, Wasser, Strom

Ich habe eine Tabelle Verbrauch die so aussieht (Wert pro Tag)

id_Gas__Wasser___Strom_von________bis
1__1,5__1________1,5___01.01.2021_31.10.2021
1__3,5__1________1,5___01.11.2021_31.03.2022

ich trage die Daten in die Reservierungstabelle so ein -

      Set db = CurrentDb
    Set rsb = db.OpenRecordset("Reservierungen", dbOpenDynaset)
    rsb.FindFirst "'Reservierungs-Nr' = '" & Buchungsnummer & "'"
    If rsb.NoMatch Then
       GoTo anlegen1
    Else
       MsgBox ("Buchumgsnummer: " & Buchungsnummer & " schon vorhanden. Abbruch!")
       Exit Sub
    End If
anlegen1:
rsb.AddNew
    rsb!ReservierungsnummerHP = Buchungsnummer
    rsb![Kunden-Nr] = lngKundenId
    rsb!Anreisetag = datvon
    rsb!Abreisetag = datbis
    rsb!Erwachsene = AnzPersonen
    rsb!Haustiere = Haustier
    rsb!Miete = Preis
    rsb!Hochstühle = Kinderhochstuhl
    rsb!Kindreisebett = Kinderreisebett
    rsb!Bettwäsche = Bettwaesche
    rsb!Waeschepaket = Frottee
    rsb!FrüheAnreise = frueh
    rsb!SpäteAbreise = spaet
    rsb![Anzahlung 1] = Anzahlung
    rsb![Anzahlung 2] = Restzahlung
    rsb![Veranstalter] = "F.E."
    Haus = Mid(Haus, 14, 4)
    Haus = Replace(Haus, " ", "")
    rsb![Objekt-Nr] = Haus

    rsb.Update

könnt ihr mir dabei helfen, wie ich die berechneten Verbrauchswert mit in die Tabelle Reservierungen bekomme (Tabellenfelder: Gas, Wasser,Strom

DF6GL

Hallo,

wofür gibt es eine eigene Tabelle "Verbrauch" mit einem "Von"- und "Bis"-Datum?

Ich unterstelle, dass der Verbrauch sich nach dem Reservierungs-Zeitraum richtet.

Insofern können 3 Verbrauchsfelder ("GasVerbrauch", "WasserVerbrauch", "StromVerbrauch") gleich in der Tabelle "Reservierungen" mitgeführt werden.



Weiterhin:

rsb.FindFirst "'Reservierungs-Nr' = '" & Buchungsnummer & "'"

muss so lauten:

rsb.FindFirst "[Reservierungs-Nr] = '" & Buchungsnummer & "'"

Und (ohne die dahinterliegenden Datentypen zu kennen):

rsb!Miete = Str(Preis)



martenk

Hallo Franz,

genau wie du geschrieben hast es ist pro Reservierungszeitraum

aber wie soll ich es denn gleich mitgeben - du meinst im coding - ich habe aber im nächsten Jahr eine Saisons und andere Preise

deshalb die Tabelle

oder wie würdest du es machen

DF6GL

Hallo,

ich sehe keine Preise in der Verbrauchstabelle...  Woher kommen diese Preise?

Normalerweise werden Saisonen und (aktuelle gültige) Preise in einer Saison-Tabelle  ("SaisonID", "Von", Bis")  und Preise in einer Preistabelle geführt ( "SaisonId_f","Verbrauchsart","Preis", "Einheit")

Ich denke, Du löst Dich mal von den ungebundenen Formularen und baust die Tabellen entspr. den Normalisierungsregeln neu auf. Sprich, Du fängst nochmal von vorne an (Tabellenkonstruktion, Beziehungen, dann (Standard-) Formulare mit nur den aller nötigsten Code darin) und nutzt die Access-Möglichkeiten, anstatt Access mit beim Code neu zu erfinden.

martenk

Juli 09, 2021, 13:44:26 #4 Letzte Bearbeitung: Juli 09, 2021, 14:16:31 von martenk
Hi

id_Gas__Wasser___Strom_von________bis
1__1,5__1________1,5___01.01.2021_31.10.2021
1__3,5__1________1,5___01.11.2021_31.03.2022

doch im Zeitraum v 01.01. - 31.10. kostet Gas 1,5 Euro wasser 1 Euro und Strom 1,5 Euro pro tag

im Zeitraum v 01.11. - 31.03.2022. kostet Gas 3,5 Euro wasser 1 Euro und Strom 1,5 Euro pro tag

DF6GL

Hallo,

wenn die Zeiträume der Kosten sich mit dem Reservierungszeitraum überschneiden, müssen die Gültigkeitsbereiche in der Tabelle mitgeführt werden und durch passende Abfragen mit den Reservierungs-Datumsangaben zusammengerechnet werden.

martenk

Verstehe nicht wie ich das machen soll

DF6GL

Hallo,


wenn die Kosten tagesgenau aufgedröselt und insgesamt über den Buchungszeitraum addiert werden müssen, dann wäre eine SQL -Lösung entsprechend dieser Links einsetzbar:


https://www.ms-office-forum.net/forum/showthread.php?t=298414
https://www.ms-office-forum.net/forum/showthread.php?t=298670

und weitere aus dieser Reihe.


Alternativ ist eine VBA-Prozedur möglich, die eben die zugeordeneten Preise über den Buchungszeitraum
ermittelt und berechnet.

martenk

Juli 12, 2021, 08:19:36 #8 Letzte Bearbeitung: Juli 12, 2021, 08:35:17 von martenk
ich weiss nicht, wie ich denn dann an die Tagespreise der jeweiligen Verbrauchsform komme

DF6GL

Hallo,

Kalendertabelle ("tblTagespreise")  anlegen mit den Tagespreisen der Verbrauchsformen.

Pro Datum ein Datensatz mit den dazu gültigen Preisen der Verbrauchformen.

Abfrage über den Reservierung-Zeitraum mit Aufsummierung der einzelnen Preise mal Menge ergibt die Kosten für die Buchung.


 

martenk

lieben dank für die Hilfe - leider reicht es bei mir da nicht mehr für aus  :-[


martenk

okay - habe nun eine tabelle angelegt mit den einzelpreisen für den tag - kannst du mir vielleicht noch zeigen dann mit der zuweisung der einzelnen Beträge pro Tag

martenk

Juli 12, 2021, 17:52:15 #12 Letzte Bearbeitung: Juli 12, 2021, 18:08:23 von martenk
auch wenn´s zusammengewchustert ist - so geht´s

Public Sub GetOrders()
 
   Dim dbs As DAO.Database
   Dim qdf As DAO.QueryDef
   Dim strSQL, strSQL1 As String
   Dim Gas, Wasser, Strom, dat, Tage, Stromneu, Wasserneu, Gasneu, reminddate
   Dim datebis, datevon As Date
   
   
   datevon = "02.10.2021"
   datebis = "12.10.2021"
   
   
   Tage = DateDiff("d", datevon, datebis)
   Do Until datevon = datebis
 reminddate = Format(datebis, "dd/mm/yyyy")
   Set dbs = CurrentDb
  ' strSQL1 = "SELECT * FROM tbl_Verbrauch WHERE Datum =#10-20-2021#;"
    strSQL = "SELECT * FROM tbl_Verbrauch WHERE Datum =" & Format(reminddate, "\#mm\/dd\/yyyy\#")
  Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
       Do Until rs.BOF
        Gas = rs!Gas
        Wasser = rs!Wasser
        Strom = rs!Strom
        datevon = datevon + 1
        Gasneu = Gas + Gasneu
        Wasserneu = Wasser + Wasserneu
        Stromneu = Stromneu + Strom
        GoTo sprung
       
   
    Loop
sprung:
 Loop
 
 MsgBox (Wasserneu)
 MsgBox (Gasneu)
 MsgBox (Stromneu)
End Sub
   

Beaker s.a.

Hallo Marten,
Kurze Hinweise OT
Dim Gas, Wasser, Strom, dat, Tage, Stromneu, Wasserneu, Gasneu, reminddateDas sind alles Variablen vom Typ Variant. Es ist besser alle Variablen mit
ihrem eigenen Typ zu deklarieren.
Dim datebis, datevon As DateAuch datebis ist vom Typ Variant.

Set dbs = CurrentDbDiese Zeile gehört unbedingt vor die Schleife.

Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)Wozu oben eine Referenz erzeugen und diese dann hier nicht benutzen
Set rs = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
Do Until rs.BOFDa landet der Datensatzzeiger nur bei einem leeren RS.
Wenn du wirklich das RS von hinten nach vorne durchlaufen willst, musst
du vorher zum letzten DS gehen
rs.MoveLastUnd dein Loop funzt so auch nicht
'von hinten nach vorne
.
.
rs.MovePrevious
Loop
'nur so landet der Zeiger irgendwann bei rs.BOF
'von vorne nach hinten
Do Until rs.EOF
.
.
rs.MoveNext
Loop
Die Sprungmarke kannst du löschen, macht so eh keinen Sinn.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

martenk

hat alles prima geklappt - inkl. zusätzlichem Wissen :-) - lieben Dank euch beiden