Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: gassek am Juli 06, 2016, 18:27:58

Titel: Laufender Lagerbestand
Beitrag von: gassek am Juli 06, 2016, 18:27:58
Gute Tag,
ich bin neu hier, und weiß noch nicht einmal, wie man eine Mitteilung schreibt, die Alle lesen können.
Ich habe folgendes Problem mit einer Abfrage aus der Tabelle "Artikel":
Die Tabelle hat folgenden Aufbau:

ArtID    ArtName       Datum           Bestandsänderung

   1       Artikel5        02.05.2016                +5
   2       Artikel8        05.05.2016                +12
   3       Artikel5        12.05.2016                 - 2
   4       Artikel8        18.05.2016                 +3

Ich möchte folgende Abfrage kreieren:

ArtID    ArtName       Datum           Bestandsänderung      LfdSaldo

   1       Artikel5        02.05.2016                +5                       5
   2       Artikel8        05.05.2016                +12                    12
   3       Artikel5        12.05.2016                 - 2                       3
   4       Artikel8        18.05.2016                 +3                     15

Ich bin für jede Hilfe dankbar bezüglich der Spalte "LfdSaldo" dankbar.
Bin Access 2010 Anfänger und verstehe nichts von VBA.

MfG
Jürgen
Titel: Re: Laufender Lagerbestand
Beitrag von: MzKlMu am Juli 06, 2016, 18:37:08
Hallo,
willst Du wirklich einen laufenden Saldo ?
Oder eher den aktuellen Bestand ?
Ein laufender Saldo macht für mich bei einem Bestand eher keinen Sinn.
Titel: Re: Laufender Lagerbestand
Beitrag von: gassek am Juli 06, 2016, 18:41:47

Hallo,

ja, ich möchte definitiv den laufenden Saldo, weil in diesem Fall die Lagerkosten pro Tag auf die jeweiligen Artikelmengen berechnet werden sollen.

Gruß
Jürgen
Titel: Re: Laufender Lagerbestand
Beitrag von: MaggieMay am Juli 06, 2016, 20:28:09
Hallo Jürgen,
Zitat von: gassek am Juli 06, 2016, 18:27:58ich bin neu hier, und weiß noch nicht einmal, wie man eine Mitteilung schreibt, die Alle lesen können.
das hast du schon ganz richtig gemacht, indem du ein neues Thema eröffnet hast.

Den lfd. Saldo (bzw. die lfd. Summe) kannst du in einer Abfrage analog zur Access-FAQ 3.11 (http://www.donkarl.com/faq/FAQ3Tabfragen.htm#3.11) ermitteln.
Titel: Re: Laufender Lagerbestand
Beitrag von: Beaker s.a. am Juli 06, 2016, 20:31:51
Hallo,
Nein Maggie, - lfd.Saldo pro Artikel.
Ich denke http://www.donkarl.com?FAQ3.11 (http://www.donkarl.com?FAQ3.11) könnte weiterhelfen.
gruss ekkehard

zu spät  :D
Titel: Re: Laufender Lagerbestand
Beitrag von: MaggieMay am Juli 06, 2016, 20:33:00
Hallo Ekkehard,

ich hatte meinen Irrtum schon selbst bemerkt und den Beitrag entsprechend korrigiert.
Titel: Re: Laufender Lagerbestand
Beitrag von: MzKlMu am Juli 06, 2016, 20:52:06
Hallo,
das Problem ist ja der Saldo pro Artikel und nicht über alle Datensätze. Und das müsste man noch in die FAQ 3.11 einarbeiten und da ist mir nichts eingefallen.
Titel: Re: Laufender Lagerbestand
Beitrag von: gassek am Juli 06, 2016, 21:19:56
Hallo an Alle,

den Gesamtsaldo kriege ich.
Das Problem ist wirklich der Saldo pro Artikel...
Titel: Re: Laufender Lagerbestand
Beitrag von: MaggieMay am Juli 06, 2016, 21:25:01
Naja, da muss einfach nur das Kriterium entsprechend erweitert werden.

Beispiel:
Select ArtID,  ArtName,  Datum,  Bestandsänderung,
DSUM("Bestandsänderung","Artikel","artName='" & artName & "' AND Datum <=" & Datum ) AS LfdSaldo
From Artikel


bzw. mit Datumsformatierung:
Select ArtID,  ArtName,  Datum,  Bestandsänderung,
DSUM("Bestandsänderung","Artikel","artName='" & artName & "' AND Datum <=" & Format(Datum, "\#yyyy\/mm\/dd\#")) AS LfdSaldo
From Artikel
Titel: Re: Laufender Lagerbestand
Beitrag von: gassek am Juli 07, 2016, 11:48:05
Hallo MaggieMay,

nachdem ich die Abfrage erstellt hatte, erhielt ich folg. Fehlermeldung für die erste Abfragenzeile und folgende Abfrage.            

-       Synatxfehler in Zahl in Abfrageausdruck 'artName'='Artikel1' AND Datum <=02.05.201'          
            
      
ArtID   ArtName   Datum       Bestandsänderung       LfdSaldo
1   Artikel1   02.05.2016   2                            #Fehler
2   Artikel2   04.05.2016   4                            #Fehler
3   Artikel3   09.05.2016   4                            #Fehler
4   Artikel1   06.06.2016   5                            #Fehler
5   Artikel1   13.06.2016   -2                            #Fehler
6   Artikel2   06.06.2016   -1                            #Fehler
7   Artikel2   13.06.2016   5                            #Fehler
8   Artikel3   20.06.2016   10                          #Fehler
9   Artikel3   16.06.2016   2                            #Fehler
            
Im nächten Bsp. Habe ich das Datum in einfache Hochkommas gesetzt.   & '[Datum]'). Dann sah die Abfrage wie folgt aus.            
Also mit Gesamtsummen pro Artikel.            

ArtID   ArtName   Datum   Bestandsänderung   LfdSaldo
1   Artikel1   02.05.2016   2                      5
2   Artikel2   04.05.2016   4                      8
3   Artikel3   09.05.2016   4                     16
4   Artikel1   06.06.2016   5                       5
5   Artikel1   13.06.2016   -2                       5
6   Artikel2   06.06.2016   -1                       8
7   Artikel2   13.06.2016   5                       8
8   Artikel3   20.06.2016   10                     16
9   Artikel3   16.06.2016   2                     16
            
So müsste die Abfrage jedoch aussehen, denn ich benötige den Bestand pro Artikel historisch.            
            
ArtID   ArtName   Datum   Bestandsänderung   LfdSaldo
1   Artikel1   02.05.2016   2                      2
2   Artikel2   04.05.2016   4                      4
3   Artikel3   09.05.2016   4                      4
4   Artikel1   06.06.2016   5                      7
5   Artikel1   13.06.2016   -2                      5
6   Artikel2   06.06.2016   -1                      3
7   Artikel2   13.06.2016   5                      8
8   Artikel3   20.06.2016   10                    14
9   Artikel3   16.06.2016   2                    16

Würde mich freuen, wenn Du mir nochmal behilflich bist.
Titel: Re: Laufender Lagerbestand
Beitrag von: MaggieMay am Juli 07, 2016, 15:09:07
Einen Wert vom Typ Datum darfst du nicht in Hochkommata setzen.
Die korrekte Datumsformatierung siehst du in meinem zweiten Vorschlag.

...funktioniert übrigens hervorragend! :-)
Titel: Re: Laufender Lagerbestand
Beitrag von: Beaker s.a. am Juli 07, 2016, 15:12:48
Hallo,
So funzt es:
Select
      ArtID, 
      ArtName, 
      [Datum],
      [Bestandsänderung],
      (SELECT SUM([Bestandsänderung])
      FROM Tabelle1 AS B
      WHERE B.artname=A.artname AND Format(B.ArtID, "\#yyyy\/mm\/dd\#") <= Format(A.ArtID, "\#yyyy\/mm\/dd\#")) AS LfdSaldo
FROM Tabelle1 AS A

[] sind nötig wegen reserviertem Wort (Datum) bzw. Umlaut.

gruss ekkhard
Titel: Re: Laufender Lagerbestand
Beitrag von: MaggieMay am Juli 07, 2016, 15:16:31
Zitat[] sind nötig
Nein, nicht wirklich.

Und wie kommst du auf die Idee, die ID als Datum zu formatieren?   ???
Titel: Re: Laufender Lagerbestand
Beitrag von: gassek am Juli 07, 2016, 15:24:10
Hallo MaggieMay,

Danke für deine Antwort.
Bei deinem 2. Vorschlag bekomme ich die gleiche Fehlermeldung.
Vielleicht liegt es an der Lage der jeweiligen Hochkommata.
Ich kriegs einfach nicht hin.
Muss das Datum formatiert sein?
Titel: Re: Laufender Lagerbestand
Beitrag von: MzKlMu am Juli 07, 2016, 15:25:49
Hallo,
Du solltest zeigen wie genau Du es umgesetzt hast. Wie genau soll man sonst eine Fehler erkennen ?
Titel: Re: Laufender Lagerbestand
Beitrag von: gassek am Juli 07, 2016, 15:41:38
Hallo zusammen,

So hatte ich es zuerst umgesetzt, aber ohne die Hochkommata beim Datum geht es auch nicht.

SELECT Artikel.ArtID, Artikel.ArtName, Artikel.Datum, Artikel.Bestandsänderung, DSum("Bestandsänderung","Artikel","ArtName='" & [ArtName] & "' AND Datum <=" & '[Datum]') AS LfdSaldo
FROM Artikel;
Titel: Re: Laufender Lagerbestand
Beitrag von: gassek am Juli 07, 2016, 15:43:14
Hallo Claus,
So hatte ich es umgesetzt:

SELECT Artikel.ArtID, Artikel.ArtName, Artikel.Datum, Artikel.Bestandsänderung, DSum("Bestandsänderung","Artikel","ArtName='" & [ArtName] & "' AND Datum <=" & '[Datum]') AS LfdSaldo
FROM Artikel;
Titel: Re: Laufender Lagerbestand
Beitrag von: Beaker s.a. am Juli 07, 2016, 15:43:27
Hallo,
Zitat
Und wie kommst du auf die Idee, die ID als Datum zu formatieren?
Grrrr  >:( - natürlich so:
SELECT
      ArtID, 
      ArtName, 
      [Datum],
      [Bestandsänderung],
      (SELECT SUM([Bestandsänderung])
      FROM Tabelle1 AS B
      WHERE B.artname=A.artname AND Format(B.[Datum], "\#yyyy\/mm\/dd\#") <= Format(A.[Datum], "\#yyyy\/mm\/dd\#")) AS LfdSaldo
FROM Tabelle1 AS A

gruss

Ach ja, und der Tabellen- und die Feldnamen stammt auch von meinem Test, - also ANPASSEN!
Titel: Re: Laufender Lagerbestand
Beitrag von: gassek am Juli 07, 2016, 15:48:08
Hallo Ekkehard,

Danke für deine Unterstützung,
Habe ich genauso umgesetzt, und es funktioniert, nur bei den beiden letzten Positionen Artikel3 rechnet er falsch dort steht statt 14 die 16 und statt 16 die 6
Titel: Re: Laufender Lagerbestand
Beitrag von: DF6GL am Juli 07, 2016, 15:49:57
Hallo,,

;D

bei einer Subquery ist keine Datums-Formatierung erforderlich:


ZitatSELECT
      ArtID, 
      ArtName, 
      [Datum],
      [Bestandsänderung],
      (SELECT SUM([Bestandsänderung])
      FROM Tabelle1 AS B
      WHERE B.artname=A.artname AND B.[Datum] <= A.[Datum]) AS LfdSaldo
FROM Tabelle1 AS A


bei einer Aggregat-Funktion schon, Siehe Beitrag von MaggieMay

PS:

Zitatstatt 14 die 16 und statt 16 die 14(??)

Dann sortiere die Abfrage nach Datum aufsteigend
Titel: Re: Laufender Lagerbestand
Beitrag von: gassek am Juli 07, 2016, 15:58:59
Hallo Franz,

ich habe dein Bsp. ebenfalls genauso übernommen und habe den gleichen Fehler bei den beiden letzten Datensätzen der Abfrage.
Warum ausgerechnet ein Fehler bei den letzten beiden?
Titel: Re: Laufender Lagerbestand
Beitrag von: Beaker s.a. am Juli 07, 2016, 15:59:51
Hallo Franz,
Zitatbei einer Subquery ist keine Datums-Formatierung erforderlich:
Stimmt, ich dachte ich hätte das probiert weil ich es auch schon
vermutet hatte, und es hätte nicht geklappt, wer weiss ...
ZitatDann sortiere die Abfrage nach Datum aufsteigend
Wollte ich ihm auch gerade schreiben,da warst du schneller.

gruss ekkehard
Titel: Re: Laufender Lagerbestand
Beitrag von: Beaker s.a. am Juli 07, 2016, 16:05:08
Hallo,
Zitatich habe dein Bsp. ebenfalls genauso übernommen
Da ist aber die Sortierung noch nicht drin:
SELECT
      ArtID, 
      ArtName, 
      [Datum],
      [Bestandsänderung],
      (SELECT SUM([Bestandsänderung])
      FROM Artikel AS B
      WHERE B.artname=A.artname AND B.[Datum] <= A.[Datum])
AS LfdSaldo
FROM Artikel AS A
ORDER BY A.[Datum])


Oder muss B sortiert werden, Franz?
Neee, natürlich nicht.

gruss ekkehard
Titel: Re: Laufender Lagerbestand
Beitrag von: gassek am Juli 07, 2016, 16:07:22
Hallo zusammen,

ich danke euch allen ganz recht herzlich.
Ich habe viel in diesen 2 Tagen im Forum gelernt.

Wenn ich darf, komme ich mit meinem nächsten Problem bald wieder.

Nochmals vielen Dank an Alle!!!
Titel: Re: Laufender Lagerbestand
Beitrag von: gassek am Juli 07, 2016, 16:09:32
Ich habe in der Entwurfsansicht nach Artikel und nach Datum sortiert.
Und es funktioniert!
Titel: Re: Laufender Lagerbestand
Beitrag von: Beaker s.a. am Juli 07, 2016, 16:38:29
Hallo,
Man (ich) weiss ja nicht, wo diese Artikelnr. herkommt, aber bei der
Berechnung eines laufenden Saldos würde ich mich nur auf's Datum
verlassen.
Wenn das (die ID) ein Autowert ist, würde die Reihenfolge nicht mehr
stimmen, wenn du Daten mit einem Datum kleiner als das neueste
eingibst.

gruss ekkehard
Titel: Re: Laufender Lagerbestand
Beitrag von: gassek am Juli 07, 2016, 16:57:24
Hallo Ekkehard,

Das Feld Artikel besteht aus frei wählbarem Text, hat nicht mit dem Autowert ID zu tun.
Ist das dann noch so i.O.?
Titel: Re: Laufender Lagerbestand
Beitrag von: Beaker s.a. am Juli 07, 2016, 17:12:20
Hallo,
Das ist ja noch schlimmer, also darauf würde ich mich gar nicht
verlassen. Wozu auch, Datum (schlechter Name übrigens) reicht
doch, und ist verlässlich. Mit Zeit sogar mehrmals am Tag aktuell.
gruss ekkehard
Titel: Re: Laufender Lagerbestand
Beitrag von: gassek am Juli 07, 2016, 17:38:35
Hallo,

ich habe mich Mal wieder verdrückt ausgekehrt  ;).
Mit den Feldnamen habe ich mich dem Forum angepasst.
Also die Felder heißen in meiner Tabelle wie folgt: Art_ID (AutoWert), Art_Name, Art_Datum, Art_Bestansänderung.
Jeder Artikel darf auch pro Tag nur einen (Neu)Bestand haben, weil dieser Tagesbestand in Rechnung gestellt werden soll.
Kann ich jetzt trotzdem nach Art_Name und anschließend nach Art_Datum sortieren?

Titel: Re: Laufender Lagerbestand
Beitrag von: MzKlMu am Juli 07, 2016, 17:40:31
Hallo,
ZitatDatum (schlechter Name übrigens)
nur nebenbei, Datum ist kein reserviertes Wort und kann problemlos verwendet werden. Ob mit oder ohne [] Klammerpaar.
Ich hatte mit Datum noch nie Probleme, die deutsche Funktion Datum() verwendet ja das Klammerpaar.
Titel: Re: Laufender Lagerbestand
Beitrag von: DF6GL am Juli 07, 2016, 19:52:59
Hallo,

ZitatDatum (schlechter Name übrigens)


unterschreibe ich   8)
Zitat
Datum ist kein reserviertes Wort

unterschreibe ich auch   8)

Trotzdem ist es schlechter/miserabler Stil, ein Feld so zu nennen. Man stelle sich vor, Datum ist als Geburts-Datum gedacht, und es wird als Sterbe-Datum interpretiert..   :P


ZitatJeder Artikel darf auch pro Tag nur einen (Neu)Bestand haben

??


Wenn es nur eine Bestandsänderung für einen bestimmten Artikel an einem bestimmten Tag geben darf, dann setz einen zusammengesetzten eindeutigen Index über die ArtikelID (Artikelname) und das Datumsfeld.
Titel: Re: Laufender Lagerbestand
Beitrag von: MzKlMu am Juli 07, 2016, 20:01:18
Hallo,
ZitatMan stelle sich vor, Datum ist als Geburts-Datum gedacht, und es wird als Sterbe-Datum interpretiert..   :P
unterschreibe ich nicht und schlechtes Beispiel.  ;D
In beiden Fällen macht ja Datum als Feldname keinen Sinn. Zumal beide Datumswerte in einer Tabelle stehen würden, was dann 2x Datum als Feldname ausschließt. Also würde man Geburtsdatum schreiben und Sterbedatum.
Titel: Re: Laufender Lagerbestand
Beitrag von: DF6GL am Juli 07, 2016, 20:04:06
Hi Klaus,

ZitatIn beiden Fällen macht ja Datum als Feldname keinen Sinn.

sagte ich doch .. ;)