Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Lagerbestände (wahrscheinlich "schoon wiieder")

Begonnen von Beaker s.a., Dezember 29, 2011, 01:41:46

⏪ vorheriges - nächstes ⏩

Beaker s.a.

Hallo,

Auf Basis von Franz' Lösungsvorschlag in diesem Thread
http://www.access-o-mania.de/forum/index.php?topic=14444.0
habe ich folgendes zusammengestrickt. Wen's interessiert, bitte auch meinen Post in dem Thread lesen, da dort schon einiges erklärt wird.

Im Bild "Beziehungen.jpg" sind die beteiligten Tabellen abgebildet.
Die Tabelle "Lagerbewegungen" ist dabei die Zentrale.
Das markierte Feld "Bestandsart" in der Tabelle "Lagerbewegungsarten" ist das Kennzeichen für die verschiedenen Bestände (siehe o.a. Post). Dafür habe ich keine extra Tabelle angelegt, da das ja Werte sind, die der Anwender nie zu Gesicht bekommt, also auch nicht auswählen muss und damit auch keinen Klartext benötigt. Im Code wollte ich die in einer Public Enumeration festhalten, um einfach darauf zugreifen zu können.
Die Felder "BestandMindest" und "BestandInventur" in der Tabelle "ArtikelLagerbestaende" sind IMO Werte, die nicht berechnet werden (können).
Auf dieser Basis habe ich jetzt zwei Abfragen gebastelt, die auch genau das anzeigen, was gewünscht ist.

Abfrage "LagerBestaende" (damit wird dann das Form gefüllt)
SELECT LBS.ArtikelNr,
       LBS.[1],
       LBS.[2],
       LBS.[3],
       LBS.[4],
       LBA.Abgaenge,
       LBA.LetzterAbgang,
       LBZ.Zugaenge,
       LBZ.LetzterZugang,
       LBI.Mindest, LBI.Inventur
FROM (
      (
       LagerBewSummiert AS LBS
INNER JOIN (
            SELECT LB.ArtikelNr,
                   Sum(LB.RechenWert) AS Abgaenge,
                   Max(LB.BuchDatum) AS LetzterAbgang
            FROM (
                  SELECT LB.ArtikelNr,
                         LBA.Bestandsart,
                         [Menge]*[Multiplikator] AS RechenWert,
                         LO.LagerortNr,
                         LO.LagerNr,
                         LB.BuchDatum
                  FROM Lagerorte AS LO
                  INNER JOIN (
                              Lagerbewegungsarten AS LBA
                              INNER JOIN Lagerbewegungen AS LB
                              ON LBA.BewegungsartNr =

LB.BewegungsartNr
                             )
                  ON LO.edKey = LB.LagerortNr
                 ) AS LB
            WHERE LB.Bestandsart=1 AND LB.RechenWert<0
            GROUP BY LB.ArtikelNr
           ) AS LBA
ON LBS.ArtikelNr = LBA.ArtikelNr
      )
INNER JOIN (
            SELECT LB.ArtikelNr,
                   Sum(LB.RechenWert) AS Zugaenge,
                   Max(LB.BuchDatum) AS LetzterZugang
            FROM (
                  SELECT LB.ArtikelNr,
                         LBA.Bestandsart,
                         [Menge]*[Multiplikator] AS RechenWert,
                         LO.LagerortNr,
                         LO.LagerNr,
                         LB.BuchDatum
                  FROM Lagerorte AS LO
                  INNER JOIN (
                              Lagerbewegungsarten AS LBA
                              INNER JOIN Lagerbewegungen AS LB
                              ON LBA.BewegungsartNr =

LB.BewegungsartNr
                             )
                  ON LO.edKey = LB.LagerortNr
                 ) AS LB
            WHERE LB.Bestandsart=1 AND LB.RechenWert>0
            GROUP BY LB.ArtikelNr
           ) AS LBZ
ON LBS.ArtikelNr = LBZ.ArtikelNr
     )
INNER JOIN (
            SELECT ALB.ArtikelNr,
                   ALB.LagerortNr,
                   Sum(ALB.BestandMindest) AS Mindest,
                   Sum(ALB.BestandInventur) AS Inventur
            FROM ArtikelLagerbestaende AS ALB
            GROUP BY ALB.ArtikelNr, ALB.LagerortNr
            HAVING ALB.LagerortNr=1
           ) AS LBI
ON LBS.ArtikelNr = LBI.ArtikelNr


Abfrage "LagerBewSummiert" (summiert die Bestände)
TRANSFORM Sum(LBB.RechenWert) AS Bestand
SELECT LBB.ArtikelNr
FROM (
      SELECT LB.ArtikelNr,
             LBA.Bestandsart,
             [Menge]*[Multiplikator] AS RechenWert,
             LO.LagerortNr,
             LO.LagerNr,
             LB.BuchDatum
      FROM Lagerorte AS LO
      INNER JOIN (
                  Lagerbewegungsarten AS LBA
                  INNER JOIN Lagerbewegungen AS LB
                  ON LBA.BewegungsartNr = LB.BewegungsartNr
                 )
      ON LO.edKey = LB.LagerortNr
     ) AS LBB
GROUP BY LBB.ArtikelNr
PIVOT LBB.Bestandsart In (1,2,3,4)


Wobei 1, 2, 3, 4 die Bestandsarten sind.

Ich hoffe, dass das jetzt erstmal genug Informationen sind, um meine Fragen zu beantworten. Falls nicht, bei Interesse bitte nachfragen.
Meine Fragen sind:
1. Kann man die Abfrage auch einfacher formulieren? Die Subselects für Ab- und Zugänge sind ja eigentlich doppelt und unterscheiden sich nur in der WHERE-Klausel (WHERE LB.Bestandsart=1 AND LB.RechenWert<0 bzw. ... >0). Oder ist es besser die Subselects in einzelne Abfragen auszulagern? So hatte ich es zuerst, um dann diese Abfrage daraus zusammen zu stellen. Auch die Gruppierung ist da ja mehrfach drin. Ich haben es aber nicht hinbekommen, die (evtl.) unnötigen da heraus zu bekommen.
2. Wie kann ich später auf ein ganzes Lager (alle Lagerorte) gruppieren? Z.Zt. wird ja nach nur nach einem LagerORT gruppiert (da im Moment nur ein Lager/Lagerort vorhanden auch noch fest verdrahtet); - das wird später durch einen Formularbezug ersetzt.
Muss ich dazu in die Tabelle "Lagerbewegungen" noch einen FK auf die LagerNr einfügen?
Bin für alle Hinweise dankbar, und freue mich auf Eure Tipps.
gruss ekkehard
(jetzt ist aber Feierabend)
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Beaker s.a.

Hallo,
Nun hab' ich doch das Bild vergessen anzuhängen.
Hier ist es.
gruss ingrid


[Anhang gelöscht durch Administrator]
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Beaker s.a.

Hallo,
Hm, - was habe ich falsch gemacht?
Betreff zu unseriös, falsch gefragt, oder zu wenig Infos?
Oder fällt wirklich keinem was dazu ein?
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

Hallo,


mir hat der Gruß von "ingrid" so zu schaffen gemacht, dass ich auch gleich Feierabend gemacht habe...  ;D ;) 8)


Wobei ich zu 1) nicht viel wegen mangelndem Durchblick aktuell sagen kann (außer, dass ich das eher als Bericht darstellen würde) 

und zu 2): halt auch nach dem Lager selber zusätzlich gruppieren..
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

Beaker s.a.

Hallo Franz,

Zitatmir hat der Gruß von "ingrid" so zu schaffen gemacht,

Du kennst das aber schon, - oder?

ZitatWobei ich zu 1) nicht viel wegen mangelndem Durchblick aktuell sagen kann (außer, dass ich das eher als Bericht darstellen würde)

Was kann ich tun um das transparenter zu machen? Beruht ja auf einem Lösungsvorschalg von DIR.
Als Bericht brauche ich die Daten nicht, sondern als DS-Herkunft für ein UFo im Artikelstamm.

Zitathalt auch nach dem Lager selber zusätzlich gruppieren..

Ja, stimmt, habe das Lager ja schon drin im Subselect. Muss ich mal noch ein bisschen basteln.
Danke erstmal für Deine Rückmeldung.
gruss ekkehard
(der jetzt erstmal wieder noch ein bisschen arbeiten muss. Schaue später wiede vorbei)
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)