MSACESS 2003 DSUM Funktion
Hallo Freunde,
ich habe wieder mal ein "kleines" VBA Access 2003 Problem.
Habe einen Onlineshop gebastelt und nun möchte ich die ausgeliefertern wie auch die noch zu liefernden Artikel als Info per Email versenden.
Hierfür habe ich eine Access Tabelle im Hintergrund laufen welche wie folgt aussieht.
Tabelle:
"fakt"
Felder:
Aufrtagsnummer
Menge Original
Gelieferte Menge
Die Tabelle sieht zB wie folg aus:
Auftragsummer 10000-001
Menge Original: 100
Gelieferte Menge 30
Auftragsnummer 10000-002 (da 1. Teillieferung)
Menge Original: 100
Gelieferte Menge: 20
Auftragsnummer 10000-003 (da 2. Teillieferung)
Menge Original: 100
Gelieferte Menge: 50
In der Tabelle steht daa dann so:
Auftragsnummer Menge Original Menge Gelieferte Menge ZU LIEFERN
10000-001 100 100 30
10000-002 100 100 20
10000-003 100 100 50
Wie kann ich nun per VBA Script ermitteln welche Menge bei der jeweiligen Zeile noch zu liefern ist.
Habe es mit DSUM versucht zusammenzuzählen und dann die Differenz wieder zu ermittlen, aber komme leider nicht klar.
Hoffe ihr wisst was mein Problem ist. Ich denke ich muss hier eine Funktion schreiben, weis jedoch nicht, wie ich das angehen soll.
DANKE für eure Hilfe. - Bin leider Access "Banause"
Lg
ich habe wieder mal ein "kleines" VBA Access 2003 Problem.
Habe einen Onlineshop gebastelt und nun möchte ich die ausgeliefertern wie auch die noch zu liefernden Artikel als Info per Email versenden.
Hierfür habe ich eine Access Tabelle im Hintergrund laufen welche wie folgt aussieht.
Tabelle:
"fakt"
Felder:
Aufrtagsnummer
Menge Original
Gelieferte Menge
Die Tabelle sieht zB wie folg aus:
Auftragsummer 10000-001
Menge Original: 100
Gelieferte Menge 30
Auftragsnummer 10000-002 (da 1. Teillieferung)
Menge Original: 100
Gelieferte Menge: 20
Auftragsnummer 10000-003 (da 2. Teillieferung)
Menge Original: 100
Gelieferte Menge: 50
In der Tabelle steht daa dann so:
Auftragsnummer Menge Original Menge Gelieferte Menge ZU LIEFERN
10000-001 100 100 30
10000-002 100 100 20
10000-003 100 100 50
Wie kann ich nun per VBA Script ermitteln welche Menge bei der jeweiligen Zeile noch zu liefern ist.
Habe es mit DSUM versucht zusammenzuzählen und dann die Differenz wieder zu ermittlen, aber komme leider nicht klar.
Hoffe ihr wisst was mein Problem ist. Ich denke ich muss hier eine Funktion schreiben, weis jedoch nicht, wie ich das angehen soll.
DANKE für eure Hilfe. - Bin leider Access "Banause"
Lg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 182764
Url: https://administrator.de/forum/msacess-2003-dsum-funktion-182764.html
Ausgedruckt am: 22.12.2024 um 20:12 Uhr
13 Kommentare
Neuester Kommentar
Moin Moin,
alsoooo wenn ich das richtig sehe, willst du pro Lieferung einfach berechnen, was noch zu liefern ist.
1. Lieferung
Bestellmenge = 100
Rest = 100
jetzt geliefert = 20
noch zu liefern = 80
2. Lieferung
Bestellmenge = 100
Rest = 80
jetzt geliefert = 30
noch zu liefern = 50
usw.
Wie du sehen kannst, benötigst du 4 Felder (eigentlich nur 3 Felder) um das Gewünschte zu realisieren.
Direkt bei der Eingabe werden durch einfache mathematische Berechnung die Werte ermittelt.
Wichtig ist dabei das Feld REST, dass als Basis für deine Berechnung dient.
Grüße aus Rostock
Wolfgang
(Netwolf)
alsoooo wenn ich das richtig sehe, willst du pro Lieferung einfach berechnen, was noch zu liefern ist.
1. Lieferung
Bestellmenge = 100
Rest = 100
jetzt geliefert = 20
noch zu liefern = 80
2. Lieferung
Bestellmenge = 100
Rest = 80
jetzt geliefert = 30
noch zu liefern = 50
usw.
Wie du sehen kannst, benötigst du 4 Felder (eigentlich nur 3 Felder) um das Gewünschte zu realisieren.
Direkt bei der Eingabe werden durch einfache mathematische Berechnung die Werte ermittelt.
Wichtig ist dabei das Feld REST, dass als Basis für deine Berechnung dient.
Grüße aus Rostock
Wolfgang
(Netwolf)
Hallo,
es ist eigentlich ganz banal.
Zum Ersten würde ich die Tabelle wie folgt aufbauen. Nenne wir sie z.B. Lieferlos
Auftragsnummer / Bestellmenge / Liefermenge / Lieferdatum
Dann brauchst Du nur noch ein SQL-Statment like
select Auftragsnummer, Bestellmenge, sum(Liefermenge) GelieferteMenge, Bestellmenge-sum(Liferemenge) OffeneMenge
from Lieferlos
group by Auftragsnummer, Bestellmenge
Dannn erhälst Du als Ergebnis:
10000 / 100 / 100 / 0
Gruß Jörg
es ist eigentlich ganz banal.
Zum Ersten würde ich die Tabelle wie folgt aufbauen. Nenne wir sie z.B. Lieferlos
Auftragsnummer / Bestellmenge / Liefermenge / Lieferdatum
Dann brauchst Du nur noch ein SQL-Statment like
select Auftragsnummer, Bestellmenge, sum(Liefermenge) GelieferteMenge, Bestellmenge-sum(Liferemenge) OffeneMenge
from Lieferlos
group by Auftragsnummer, Bestellmenge
Dannn erhälst Du als Ergebnis:
10000 / 100 / 100 / 0
Gruß Jörg
... auch kein Problem. Davon ausgehend, dass die Auftragsnummer immer 5 stellig ist ...
select substr(Auftragsnummer,1,5) Auftrag, max(to_number(substr(Auftragsnummer,7,3))) Anzahl_Teillieferungen, max(Bestellmenge) Bestellmenge, sum(Liefermenge) Gelieferte_Menge, max(Bestellmenge)-sum(Liferemenge) Offene_Menge
from Lieferlos
group by substr(Auftragsnummer,1,5)
Ergebniss wenn für Auftrag 10000 die 2. Teillieferung erfolgt ist:
10000 / 2 / 100 / 50 / 50
Gruß Jörg
select substr(Auftragsnummer,1,5) Auftrag, max(to_number(substr(Auftragsnummer,7,3))) Anzahl_Teillieferungen, max(Bestellmenge) Bestellmenge, sum(Liefermenge) Gelieferte_Menge, max(Bestellmenge)-sum(Liferemenge) Offene_Menge
from Lieferlos
group by substr(Auftragsnummer,1,5)
Ergebniss wenn für Auftrag 10000 die 2. Teillieferung erfolgt ist:
10000 / 2 / 100 / 50 / 50
Gruß Jörg
Hallo,
wie kommt ihr nur mit Access klar. Das ist ja eine Katastrophe wenn man von Oracle kommt.
Ich habe das Ganze jetzt mal in Access nachgestellt und komme auf folgende Lösung
Als Ergebnis erhältst Du für jeden Auftrag eine Zeile mit der Auftragsnummer, der Anzahl von Teillieferungen, der original Menge, der schon gelieferten Menge sowie die offene Menge.
Gruß Jörg
[Edit Biber] Codetags. [/Edit]
wie kommt ihr nur mit Access klar. Das ist ja eine Katastrophe wenn man von Oracle kommt.
Ich habe das Ganze jetzt mal in Access nachgestellt und komme auf folgende Lösung
SELECT Left([Auftragsnummer],5) AS Auftrag,
Cint(Max(Mid([Auftragsnummer],7,3))) AS Anzahl_Lieferungen,
Max([Original Menge]) AS Original_Menge,
Sum([Gelieferte Menge]) AS Gelieferte_Menge,
Max([Original Menge])-Sum([Gelieferte Menge]) AS Offene_Menge
FROM Fakt
GROUP BY Left([Auftragsnummer],5);
Gruß Jörg
[Edit Biber] Codetags. [/Edit]
Hallo Mario,
willst Du denn immer den Stand aller Teillieferungen Mailen oder doch nur die letzte mit der noch offenen Menge?
Im 2. Fall wäre das Ergebnis mein letzter Post.
1.Fall wäre:
Schönes Restwochenende
Gruß Jörg
[Edit Biber] Codetags. [/Edit]
willst Du denn immer den Stand aller Teillieferungen Mailen oder doch nur die letzte mit der noch offenen Menge?
Im 2. Fall wäre das Ergebnis mein letzter Post.
1.Fall wäre:
SELECT Left(a.[Auftragsnummer],5) AS Auftrag,
CInt(Mid(a.[Auftragsnummer],7,3)) AS Lieferung,
Max(a.[Original Menge]) AS Original_Menge,
Max(a.[Gelieferte Menge]) AS Gelieferte_Menge,
Max(a.[Original Menge]) - sum(b.[Menge]) As Offene_Menge
FROM fakt AS a
LEFT JOIN (select left([Auftragsnummer],5) As Auftrag,
CInt(Mid([Auftragsnummer],7,3)) as Teil,
[Gelieferte Menge] As Menge
from Fakt) as b ON left(a.[Auftragsnummer],5) = left(b.[Auftrag],5) and b.[Teil] <= CInt(Mid(a.[Auftragsnummer],7,3))
GROUP BY Left(a.[Auftragsnummer],5), CInt(Mid(a.[Auftragsnummer],7,3));
Gruß Jörg
[Edit Biber] Codetags. [/Edit]
Hallo Mario,
freut mich,dass ich Dir helfen konnet.
Verstehst Du denn auch das Select-Statement?
Oder ist das unerheblich? Nicht, dass jemand die Lösung erklärt haben will.
Du hättest das ganze ja auch in VB machen können, indem Du auch die Auftragsnummer in 2 Teile trennst (Auftragsnummer und Lieferung) und dann die Summe von Gelieferte Menge für die Teillieferungen aufsummierst. Das Select-Statement macht praktisch nichts anderes.
Gruß Jörg
freut mich,dass ich Dir helfen konnet.
Verstehst Du denn auch das Select-Statement?
Oder ist das unerheblich? Nicht, dass jemand die Lösung erklärt haben will.
Du hättest das ganze ja auch in VB machen können, indem Du auch die Auftragsnummer in 2 Teile trennst (Auftragsnummer und Lieferung) und dann die Summe von Gelieferte Menge für die Teillieferungen aufsummierst. Das Select-Statement macht praktisch nichts anderes.
Gruß Jörg
Hallo Mario,
mit VB kenne ich mich garnicht aus sollte aber vom Prinzip nicht schwer sein.
Wenn ich mir die DSUM-Funktion ansehe könnte das ein Ansatz sein.
Vorher musst Du für jede Rückgabezeile von "select * from Fakt" die Auftragsnummer splitten und in die Variablen Auftrag und Lieferung speichern.
Gruß Jörg
mit VB kenne ich mich garnicht aus sollte aber vom Prinzip nicht schwer sein.
Wenn ich mir die DSUM-Funktion ansehe könnte das ein Ansatz sein.
Dim sumMenge As Integer
sumMenge = DSum("[Gelieferte Menge]", "Fakt", "Left([Auftragsnummer],5) = Auftrag and Mid([Auftragsnummer],7,3) <= Lieferung")
Vorher musst Du für jede Rückgabezeile von "select * from Fakt" die Auftragsnummer splitten und in die Variablen Auftrag und Lieferung speichern.
Gruß Jörg