Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Dodo2111 am April 28, 2021, 16:08:43

Titel: Bestandsliste
Beitrag von: Dodo2111 am April 28, 2021, 16:08:43
Hallo Zusammen.

Ich Arbeit ein meinem Unternehmen an einer Datenbank, bin allerdings kein Profi.

Ich versuche eine Bestandsliste von Ersatzteilen zu erstellen.

Die Ersatzteile werden bestellt und später verbaut. Also soll später Bestellt-Verbaut ausgegebn werden.

Die Ersatzteile sind in einer Tabelle eingetragen welches als Primärschlüssel ein Autowert feld hat.

Eine Bestellung ist ebenfals eine Tabelle mit einem Autowert als Primärschlüssel.

Durch eine n:m Beziehung weise ich nun einer Bestellung ein oder mehrere Ersatzteile zu.
In der n:m Tabelle habe ich ein feld mit Anzahl hinzugefügt um einzutragen wie oft das Ersatzteil bei dieser Bestellung, bestellt wurde.

Aufbau der n:m Beziehung: ID(Primärschlüssel) als Autowert
                          BestellungIDREF (ID der Bestellung)
                          ErsatzteilIDRef (ID des Ersatzteils)
                          Anzahl (als Zahl)

Ich habe eine weitere Tabelle names Tickets welche Störungen und die Reparatur erfasst. Auch diese hat als Primärschlüssel ein Autowertfeld.
Zu einem Ticket weise ich nun über eine weitere n:m Tabelle die verwendeten Ersatzteile zu.

Aufbau der n:m Beziehung: ID(Primärschlüssel) als Autowert
                          TicketIDREF (ID des Tickets)
                          ErsatzteilIDRef (ID des Ersatzteils)
                          Anzahl (als Zahl)

Soweit funktioniert das ganz gut.

Erstelle ich nun eine Abfrage welche die beiden n:m Tabellen enthält und verknüpfe die beiden ErsatzteilID Felder miteinander (Drag&Drop, dann erscheint die verbindung als Strich) bekomme ich nur Datensätze angezeigt welche in beiden n:m Beziehungs-Tabellen vorkommen. Über ein weiteres Feld welches ich selbst definiere Ergebniss: [Anzahl]-[Anzahl] kann ich mir nun anzeigen lassen was ich eigentlich sehen will.

Nur habe ich folgendes Problem.
Wenn ich ein Ersatzteil Bestelle ist es ja nun Automatisch im Bestand mit der bestellten Anzahl.
Die Erstellte Abfrage zeigt mir aber nur Datensätze an wo ein Ersatzteil Bestellt aber auch nur bei einem Ticket verwendet wurden an.

Habt ihr einen Lösungsansatz wie ich diese Problematik behebe ?
Titel: Re: Bestandsliste
Beitrag von: emmoticon am April 29, 2021, 01:27:54
Da du die beiden N:M Tabellen per Inner Join miteinander ueber die ErsatzteilID verbunden hast, siehst du eben nur das Ersatzteil, welches in beiden Tabellen vorkommt. Du hast es eigentlich schon richtig erkannt.

Was willst du damit erreichen?
Willst du sehen welche Ersatzteile wo gebraucht werden bzw wie der Lagerbestand der Ersatzteile sind, brauchst du meiner Meinung nach eine UNION Abfrage.
Titel: Re: Bestandsliste
Beitrag von: Dodo2111 am April 29, 2021, 07:18:46
Guten Morgen,

danke für die Rückmeldung.

Ich möchte eine Abfrage haben beziehungsweise eine Übersicht in der die Bestellten Ersatzteile mit der Menge angezeigt werden, quasi als Bestand. Von Übersicht sollen dann direkt die Verbauten Ersatzteile abgezogen werden.

In der Abfrage/Übersicht muss nicht stehen wann oder so es bestellt oder verbaut wurde. Nur eine Anzahl welche Bestellt-Verbaut entspricht.
Aber halt auch Bestellte Ersatzteile anzeigt wo noch nicht verbaut wurden.
Damit kann ich aussagen das ich im Lager 5x Ersatzteil X habe.

Titel: Re: Bestandsliste
Beitrag von: Dodo2111 am April 29, 2021, 07:24:57
Habe bisschen gegrübelt  ;D

Wenn ich nur eine n:m Tabelle nehme welche 2 Anzahl felder hat.
Einmal Anzahl bestellt und einmal Anzahl verbaut.

Bei der bestellung trage ich Anzahl bestellt ein, und beim Ticket Anzahl verbaut ein. Diese Subtrahiere ich dann in einem weiteren Feld.

Haltet ihr diesen Weg für Sinvoll ?
Titel: Re: Bestandsliste
Beitrag von: Beaker s.a. am April 29, 2021, 08:37:55
Am einfachsten zu rechnen ist doch mit einem Feld, wo die
Mengen mit Vorzeichen (+ = bestellt/geliefert, - = verbaut) erfasst
sind; - Abfrage
SELECT TeileID, Sum(Menge)
FROM DeineTabelle
GROUP By TeileID

gruss ekkehard
Titel: Re: Bestandsliste
Beitrag von: Dodo2111 am April 29, 2021, 11:33:51
Hallo zusammen.

Ich habe nun einen Lösungsansatz gefunden.

Und zwar habe ich eine Tabelle erstellt namens Bestandsliste mit folgenden Feldern:
ID(Autowert) als Primärschlüssel, BestellungIDREF(Primärschlüssel aus Bestellungen), Anzahlbestellt, TicketIDRef (Priämarschlüssel aus Tickets),
Anzahlverbaut, ErsatzteilIDRef (Primärschlüssel aus Ersatzteile).

Ich habe 3 Abfragen erstellt.
1) ErsatzteilzuBestellung. Hier gebe ich die Felder: BestellungIDRef,Anzahlbestellt,ErsatzteilIDRef wieder.
2) ErsatzteilzuTicket. Hier gebe ich die Felder: TicketIDRef, Anzahlverbaut,ErsatzteilIDref wieder.
3) ErsatzteileBestand. Diese ist wie die Tabelle "Bestandsliste" aufgebaut mit einem zusätzlichem Feld namens Bestand welches folgenden Inhalt hat (Anzahlbestellt-Anzahlverbaut).

Erstelle ich nun eine Bestellung, habe ich ein Unterformular welches als Datensatzqeulle die ErsatzteilezuBestellung hat.
Hier Trage ich das Ersatzteil ein und Die ID der Bestellung der Anzahl.

Erstelle ich ein Ticket, habe ich ein Unterformular welches  als Datensatzquelle die ErsatzteilezuTicket hat. Selber eintragen kann ich da allerdings nicht, sondern nur Datensätze über ein weiteres unterforumlar aus der Abfrage : Ersatzteilebestand auswählen, da hier nur Ersatzteile drin stehen welche auch mal bestellt wurden. Dort lasse ich mir auch den bestand anzeigen.
In das Unterformular ErsatzteilezuTicket trage ich nun die TicketID, Die ErsatzeilID und ein und die Anzahl über das feld; Anzahlverbaut.
Ich habe dem Feld Anzahlverbaut eine Ereignissprozedur: Nach aktualisierung hinzugefügt welche die eingebene Zahl mit der Zahl aus dem Bestand vergleicht und sollte die zahl höher sein, erscheint eine msgbox als hinweis und es wird me.Undo ausgeführt.

Joa ich hoffe das ist einigermaßen verständlich niedergeschrieben.

was sagt ihr zu dieser Lösung ?
Titel: Re: Bestandsliste
Beitrag von: MzKlMu am April 29, 2021, 12:06:37
Hallo,
es geht auch einfacher, ohne weitere Tabellen.
Mit der Tabelle Tickets und bestellungen erstellst Du eine Unionabfrage die nur das Feld ErsatzteilIDRef und die Anzahl enthält (Anzahl ist ein reserviertest Wort, bitte ändern in Menge).

Im 1.Teil der Union (Tickets) multiplizierst Du die Menge mit -1, dadurch wird die Menge negativ.
Jetzt eine über den Artikel gruppierte Abfrage (die die Union als Datenquelle hat) mit der summierten Menge liefert automatisch und stets aktuell den Bestand.
Ein Unterfomular mit dieser Abfrage zeigt dies dann im Hafo für den Artikel den Bestand direkt an.
Der Wert lässt sicch auch Artikelbezogen mit DomWert (DLookup) direkt aus der Abfrage holen, dann braucht es kein Ufo.

Die Unionabfrage:
SELECT Tickets.ArtikelID_F, MengeTick*-1 As Menge
FROM Tickets
UNION ALL SELECT
Bestellungen.ArtikelID_F, MengeBest As Menge
FROM Bestellungen
Für den Bestand:
SELECT ArtikelID_F, Sum(Menge) AS Bestand
FROM UnionAbfrage
GROUP BY ArtikelID_F
Titel: Re: Bestandsliste
Beitrag von: emmoticon am April 29, 2021, 15:49:10
Die Lösung vom MzKlMu kannst du schnell und ohne größere SQL-Kenntnisse auch mit der Access-Oberfläche erstellen.

Du hast ja 2 Abfragen: Bestellungen und Tickets.

Wenn du in den Abfrageneditor bei der Abfrage Bestellungen gehst, unten rechts auf SQL drückst, den ganzen Text kopierst und in die andere Abfrage Tickets im SQL Feld unten rein kopierst und dazwischen "Union" schreibst, kommst du fast auf das Ergebnis vom MzKlMu.

Sauberer ist das natürlich nicht, aber so kann man sich bisschen behelfen.
Titel: Re: Bestandsliste
Beitrag von: MzKlMu am April 29, 2021, 16:01:26
Hallo,
@emmoticon
bitte UNION ALL verwenden. Ohne ALL kann es sein, dass die Abfrage nicht alle Datensätze aus beiden Tabellen überträgt.
Und wenn man an den Ausgangstabellen nichts ändern will (oder kann) ist das durchaus eine saubere Lösung.
Warum soll das unsauber sein ?
Titel: Re: Bestandsliste
Beitrag von: Beaker s.a. am April 29, 2021, 18:28:42
Geht auch ohne UNION, siehe hier (https://www.access-o-mania.de/forum/index.php?topic=25562.new#new).
War da nämlich auch mein erster Gedanke  ;)
Titel: Re: Bestandsliste
Beitrag von: MzKlMu am April 30, 2021, 00:29:07
Hallo,
es geht nicht ohne Union.
Siehe das andere Thema.