Neuigkeiten:

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

Mobiles Hauptmenü

Lagerstand Berechnen

Begonnen von NUTTS90, April 29, 2021, 09:41:33

⏪ vorheriges - nächstes ⏩

NUTTS90

Hallo zusammen,

ich bin neu hier in dem Forum, aber interessiert viele neue Dinge zu lernen und auch Erfahrungen zu sammeln.

Ich bin aus gegebenen Anlass dabei, eine Datenbank zu erstellen, welche für einen Lieferanten gewisse Daten liefert.
Ich habe nun schon sehr viele Bereiche abgedeckt nur bei einem Bereich komme ich nicht mehr klar.
Ich bin defeinitv kein Pro bei Access, aber habe sehr gute IT Grundkenntnisse und hätte grundsätzlich auch einmal Programmieren gelernt. Sommit sind mir Datenbanken keine fremden Sachen.

Nun zu meinem Problem:
Fangen wir einmal ganz einfach an.

Ich habe eine Tabelle wo aus einem Externen System, Verkaufsdaten importiert werden.
In dieser Tabelle kommen Artikel mit der Verkauften Menge vor.

Dann habe ich noch eine zweite Tabelle, in der Direkt in Access unsere Bestellungen eingetragen werden.
Hier habe ich auch wieder die Artikel sowie Menge.

Die Artikel werden in beiden Tabellen als Fremdschlüssel von der Tabelle Artikel bereit gestellt.
Somit stelle ich sicher dass in beiden Tabellen die Artikel immer gleich heißen.

Jetzt möchte ich gerne anhand der Tabelle Verkäufe und der Tabelle Einkäufe in der Tabelle Artikel den Lagerbestand des jeweiligen Artikels aktualisiert bereitstellen.

Ist dies möglich?
Wie gehe ich am besten an dieses Vorhaben ran?

Ich freue mich auf eure Hilfe und wünsche gleich noch einen Schönen Tag.
LG euer NUTTS

Beaker s.a.

Hallo,
Hatte ich heute doch schon mal.
Ab- und Zugänge gehören in ein Feld einer Tabelle. Zugänge
mit positivem Vorzeichen (+) und Abgänge negativ (-). Dann
ist der Bestand einfach die Summe des Feldes
SELECT ArtikelID, Sum(Menge)
FROM DeineTabelle
GROUP BY ArtikelID
Wenn man keine negativen Zahlen haben möchte, kann man auch
mit einem Faktorfeld arbeiten.

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)

NUTTS90

Hallo ekkehard,

danke für deine Rückmeldung.
Du sprichst hier aber dann von einer Abfrage in der du dann die Brechnung also die Summenbildung machst?
oder kann ich dies auch direkt in einer Tabelle verarbeiten?

Mein Problem ist leider dass ich eben 2 Tabellen habe und das Ergebnis in in der Artikeltabelle aktualisiert werden muss.

Ich hoffe ich drücke mich soweit richtig aus und meine Fragen sind soweit verständlich.

LG NUTTS

emmoticon

Wofür?

Wenn du das über die Abfrage löst, veränderst du den Datensatz nicht und du kannst damit auch andere Berechnungen machen.

So hast du Artikelname und Artikelnummer aus der Artikeltabelle und die Differenz der Ein- und Ausgänge von den anderen beiden Tabellen in einer Abfrage und musst da nichts umschreiben.
Gruß, Smiley mit Rechtschreibfehler

Beaker s.a.

@NUTTS90
Zitatund das Ergebnis in in der Artikeltabelle aktualisiert werden muss.
Nein, muss es nicht. Du hast doch deine Bewegungstabellen. Da ist der Bestand,
mit einer Abfrage berechnet, immer aktuell
SELECT
    AE.ArtikelID,
    AE.Menge,
    AA.Menge,
    AE.Menge-AA.Menge AS Bestand
FROM ArtikelEingang AS AE
        INNER JOIN ArtikelAusgang As AA
        ON AA.ArtikelID = AE.ArtikelID

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)

MzKlMu

#5
Hallo,
@ekkehard
Du solltest Deinen Vorschlag mal testen.
Z.B. mit einer Bestellung für 100 Stück und 4-5 Entnahmen mit kleinen Mengen (10, 3, 4, 2)
Stimmt dann der Bestand?
Ich glaube nämlich nicht, dass das ohne Union funktioniert.

Beispiel mit Deiner Abfrage und der Union anbei.

Nachtrag:
es geht auch ohne Union.
In einem Feld auf dem Formular das die Artikel anzeigt folgender Ausdruck:
=DomSumme("Menge";"Artikeleingang";"ArtikelID =" & [ArtikelID])-DomSumme("Menge";"Artikelausgang";"ArtikelID =" & [ArtikelID])Zeigt den Bestand des angezeigten Artikels.
Gruß Klaus

Beaker s.a.

Hallo Klaus,
Muss ich dir leider mal wieder Recht geben. Ich hatte es nur mit
einem Abgang getestet.

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)

NUTTS90

Hallo zusammen,

danke bislang für eure Hilfe.

Ich habe es nun einmal mittels einer obe erwähnten UNION ALL, sowie anschließend in einer zweiten abfrage über Group und Summe den Lagerstand berechnet.
Sollte ja so über abfragen passen.

Union Abfrage um aus beiden Tabellen die Menge zu ermittel.
SELECT tblEinkauf.einkaartikHpProNrRef, einkaMenge AS Menge
FROM tblEinkauf
UNION ALL SELECT
tblVerkauf.verkaartikHpProNrRef, verkaMenge*-1 AS Menge
FROM tblVerkauf;

Summierungs Abfrage mit Anpassungen (Artikelnummern müssen angepasst werden)
SELECT IIf(InStr([tblArtikel]![artikHpProNr],"#")>1,Left([tblArtikel]![artikHpProNr],InStrRev([tblArtikel]![artikHpProNr],"#")-1),IIf(InStr([tblArtikel]![artikHpProNr]," ")>1,Left([tblArtikel]![artikHpProNr],InStrRev([tblArtikel]![artikHpProNr]," ")-1),IIf(InStr([tblArtikel]![artikHpProNr],"_")>1,Left([tblArtikel]![artikHpProNr],InStrRev([tblArtikel]![artikHpProNr],"_")-1),IIf(InStr([tblArtikel]![artikHpProNr],"#")=0,[tblArtikel]![artikHpProNr])))) AS [HP Produkt Nummer], Sum([99qryBestandT1UnionVkEk].Menge) AS Bestand
FROM 99qryBestandT1UnionVkEk LEFT JOIN tblArtikel ON [99qryBestandT1UnionVkEk].einkaartikHpProNrRef = tblArtikel.artikHpProNr
GROUP BY IIf(InStr([tblArtikel]![artikHpProNr],"#")>1,Left([tblArtikel]![artikHpProNr],InStrRev([tblArtikel]![artikHpProNr],"#")-1),IIf(InStr([tblArtikel]![artikHpProNr]," ")>1,Left([tblArtikel]![artikHpProNr],InStrRev([tblArtikel]![artikHpProNr]," ")-1),IIf(InStr([tblArtikel]![artikHpProNr],"_")>1,Left([tblArtikel]![artikHpProNr],InStrRev([tblArtikel]![artikHpProNr],"_")-1),IIf(InStr([tblArtikel]![artikHpProNr],"#")=0,[tblArtikel]![artikHpProNr])))), tblArtikel.artikHersteller
HAVING (((tblArtikel.artikHersteller)="HP"));

Soweit bin ich eben jetzt schon einmal.
Meiner Meinung nach sollte dies ja auch soweit passen.
Für Verbesserungen bin ich natürlich offen.

Somit ist dieses Kapitel einmal erledigt.
Jetzt habe ich allerdings noch ein weiteres Problem. Dafür mach ich allerdings noch ein neues Thema auf.

LG und Danke für eure Hilfe,
euer NUTTS

MzKlMu

Hallo,
wenn ich in einer Abfrage IIf und Textverarbeitung (Left...) sehe, so kommen erhebliche Zweifel am Datenmodell auf.

Kannst Du mal ein Bild des Beziehungsfensters hier zeigen ?
Gruß Klaus

NUTTS90

Hallo,

Wie gesagt ich bin offen für Vorschläge und etwas zu lernen.

Der Grund für die Bearbeitung ist, dass ich es 1. nicht anders weiß und 2. dies in diesem Fall am schnellsten ging.

Warum wird dies gemacht.

ich bekomme aus 2 verschiedenen Systemen die Artikelnummern, welche importiert werden.
damit ich allerdings das Endergäbnis heraus bringe, muss ich leider die Artikelnummern etwas bearbeiten.

Die Artikelnummern können wie folgt aussehen
artikel1
artikel1#ABC
artikel1_SCRP
artikel1 SCRP
artikel1#ABC_SCRP
...

Hierbei handelt es sich allerdings immer um den gleichen Artikel mit der Artikelnummer artikel1.
Somit habe ich mir gedacht, ich beschneide in der Abfrage die Artikelnummer, dass das Endergäbnis immer das gleiche ist. --> Also artikel1.

Sehr gerne zeige ich dir ein Bild meines Beziehungsfensters.
Meinst du hoffentlich e das von der Abfrage?

Sie dürfen in diesem Board keine Dateianhänge sehen.

MzKlMu

Hallo,
das ist kein Bild der Beziehungen, das ist das Bild des Abfrageentwurf mit den Tabellenverknüpfungen. In einer Abfrage gibt es kein Beziehungen. Beziehungen und Verknüpfungen können sich unterscheiden (müssen aber nicht).
Beziehungen werden im Beziehungsfenster eingestellt. Und dort stellt man auch die referentielle Integrität ein, die die Datenintegrität einer Datenbank sicher stellt. Ohne Beziehungen hast Du einen wirren Datenhaufen.
Zeige also bitte ein Bild der Beziehungen die Du hoffentlich eingerichtet hast.

Zitat von: undefinedich bekomme aus 2 verschiedenen Systemen die Artikelnummern, welche importiert werden.
Werden die Daten immer komplett importiert, oder werden die neuen Daten an bestehenede Tabellen angehängt ?
Gruß Klaus