Neuigkeiten:

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

Mobiles Hauptmenü

Verbrauch für bestimmten Zeitraum ermitteln

Begonnen von ellinho, Juli 03, 2017, 13:49:08

⏪ vorheriges - nächstes ⏩

ellinho

Hallo zusammen.
(Vorweg: Ich bin kein Access-Profi  :(- auch wenn das bei meinem Benutzerprofil steht - weiß nicht, wie man das ändert.  ::) )
Ich habe eine Access-DB, die u.a. aus den Tabellen Artikel, Lagerbewegungen sowie 2 Abfragen besteht, über die ich zum einen den Artikelverbrauch sowie den damit verbundenen Warenwert seit Beginn der Aufzeichnungen sowie andererseits den exakten Netto-EK jedes Artikels (gleitender Durchschnitt) berechnen lasse. Nun möchte ich gerne eine Formular erstellen, das aus einem Kombifeld besteht, über das der Artikel ausgewählt werden kann, 2 Textfelder (Zeitraumvon, Zeitraumbis) im Datumsformat und eine Schaltfläche "Verbrauch berechnen". Über die Auswahl des Artikels und die Eingabe der beiden Datumswerte soll nach Betätigen der Schaltfläche in einem weiteren Textfeld die verbrauchte Menge des Artikels und in einem anderen, weiteren Textfeld der entsprechende Warenwert angezeigt werden. Wie schon erkennbar, ist eigentlich alles an Berechnungen vorhanden (außer die Berechnung des Verbrauchs für einen gewissen, ausgewählten Zeitraum). Ich weiß nur aktuell nicht, wie ich eine Funktion aufbauen kann, die mir die Ergebnisse im Formular anzeigt.

DF6GL

Hallo,

einfachste Möglichkeit ist die Verwendung der DSUM()-Aggregatsfunktion (siehe VBA-Hilfe). Im Where-Condition-Teil können die einschränkenden Kriterien (aus den Textfeldern) mitgegeben werden.


Alternativ können in einer Public(!)-Funktion mit Hilfe eines Recordsets und einer passenden Abfrage die Werte berechnet und in den entspr. Textfeldern angezeigt werden. Der Aufruf der Funktion kann im Steuerelementinhalt mit Übergabe der Kriterien erfolgen, z. B:

=fktArtikelVerbrauch([Zeitraumvon];[ZeitrumBis];[ArtikelNr])
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ellinho

Hallo DF6GL.
Vielen Dank zunächst für Deine Hilfe.
Ich habe noch einen Syntaxfehler im Code, den ich als Ereignis bei Fokuserhalt für das Textfeld hinterlegt habe, in dem der zugehörige Verbrauch des Artikels angezeigt werden soll.
DSum("Bewegung";"Lagerbewegungen";[Datum] Between [txtvon] And [txtbis])

Kann man auf Anhieb sehen, was ich dort falsch mache?

Viele Grüße

DF6GL

#3
Hallo,


in SQL-Where-Conditions muss das Datum im USA- oder ISO-Format formatiert sein.   Alternativ könnte man auch Zahlen-Konvertierungen benutzen..


Außerdem ist "Datum" als Feldname wegen des reservierten Wortes zu vermeiden.


Zitat=DSum("Bewegung";"Lagerbewegungen";"[Datum] Between " & Format([txtvon];"\#jjjj-mm-tt\#") &   " And " & Format([txtbis];"\#jjjj-mm-tt\#") )
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ellinho

=DSum("Bewegung";"Lagerbewegungen";[Buchungsdatum] Between " & Format([txtvon];"\#jjjj-mm-tt\#") &   " And " & Format([txtbis];"\#jjjj-mm-tt\#") )

Das Feld "Datum" heißt nun "Buchungsdatum".
Allerdings wird noch ein Syntaxfehler "angemeckert".

DF6GL

Hi,

es fehlt ein  Gänsefuß:

=DSum("Bewegung";"Lagerbewegungen";"[Buchungsdatum] Between " & Format([txtvon];"\#jjjj-mm-tt\#") &   " And " & Format([txtbis];"\#jjjj-mm-tt\#") )
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ellinho

ZitatHi,

es fehlt ein  Gänsefuß:

=DSum("Bewegung";"Lagerbewegungen";"[Buchungsdatum] Between " & Format([txtvon];"\#jjjj-mm-tt\#") &   " And " & Format([txtbis];"\#jjjj-mm-tt\#") )

Vielen Dank.
Leider bleibt der Syntax-Fehler erhalten.  :-\

Lachtaube

Die Syntax ist für die deutsche Spracheinstellung so korrekt. Statt zu zitieren, was man 10 cm oberhalb Deines Beitrags nachlesen kann (wir sind noch nicht so senil), solltest Du besser Deinen verwendeten Ausdruck - vorzugsweise als Code formatiert (Knopf mit Raute (#) verwenden) - zeigen.
Grüße von der (⌒▽⌒)

DF6GL

#8
Hallo,

wobei es (mir) nicht so ganz klar ist, WO der Ausdruck nun steht:

Zitat..den ich als Ereignis bei Fokuserhalt für das Textfeld hinterlegt habe


In der Eigenschaft selber oder in der dazugehörenden Ereignisprozedur....


In der FokusErhalt-Eigenschaft selber hat das keinen Sinn und eine Ereignisprozedur verlangt englische Sprache.  Der Ausdruck muss in der Eigenschaft "Steuerelementinhalt"  des Anzeige-Textfeldes stehen.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ellinho

Der Ausdruck
=DSum("Bewegung";"Lagerbewegungen";"[Buchungsdatum] Between " & Format([txtvon];"\#jjjj-mm-tt\#") &   " And " & Format([txtbis];"\#jjjj-mm-tt\#") )

steht nun in der Eigenschaft "Steuerelementinhalt" des Anzeige-Textfeldes.
Allerdings bekomme ich noch die Anzeige #Fehler

Was mich verwirrt: Access macht aus DSUM automatisch DOMSUMME - also quasi die deutsche Übersetzung. Begriffe wie "BETWEEN" oder "AND" bleiben aber in englischer Sprache stehen.



DF6GL

Hallo,

ja, Access übersetzt das ins Deutsche....spielt aber keine Rolle.


Und besser wäre es, den Steuerelementinhalt mit C&P zu zeigen...

Aber noch ein Versuch:


=DSum("Bewegung";"Lagerbewegungen";"[Buchungsdatum] Between " & Format(nz([txtvon];0);"\#yyyy-mm-dd\#") &   " And " & Format(nz([txtbis];0);"\#yyyy-mm-dd\#") )


und weiterhin (nochmal) prüfen, ob die Namen stimmen....
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ellinho

Hallo. Funktioniert leider noch nicht. Trotzdem vielen Dank. Ich werde es weiter versuchen.   ;)

Lachtaube

Du könntest ja auch ein Minimalbeispiel im 2003er-Format mit wenigen Spieldaten in der Tabelle und dem besagten Formular hochladen.
Grüße von der (⌒▽⌒)

ellinho

#13
@Lachtaube

Da könnt ihr wahrscheinlich nichts mit anfangen, da es sich um ein Access-Projekt handelt. Daten liegen also auf dem SQL.

Habe bisher auch noch nicht die zündende Idee gehabt, wie ich die Berechnung hinbekomme. Ich vermute, dass ich eine Funktion aufbauen muss, denn ich möchte z.B. auch noch verhindern, dass im Datumsfeld (txtbis) ein älteres Datum eingegeben werden kann als im Datumsfeld (txtvon). Das bekomme ich sicherlich nicht in die Eigenschaft "Steuerelementinhalt" des Textfeldes hinein.
Viele Grüße
Karsten