PDA

Vollständige Version anzeigen : Liefertermine


Paul1965
09.05.2004, 07:28
Hallo,
Mein Problem wurde schon einmall in Gespräch am 24.11.2002:


ich habe 2 Tabellen die eine heißt "Lieferausgang" und die andere "Liefertermin". In der Tab."Lieferausgang" werden Artikelausgänge verbucht(Lieferschein). In der Tab."Liefertermin" sind die vom Kunden georderten
Liefertermine zu den Artikeln.
Beispiel:
Tabelle "Lieferausgang"
ArtikelNr /Bezeichnung/Stück/
23-001 / xyzxyzxyz / 2400 /
23-145 / xyzxyzxyz / 3200 /
23-071 / xyzxyzxyz / 1200 /

Tabelle "Liefertermin"
ArtikelNr / Stück / Termin /
23-001 / 2400 / 22.11.02/
23-001 / 3200 / 23.11.02/
23-001 / 1600 / 24.11.02/
23-145 / 3200 / 22.11.02/
23-145 / 1600 / 01.12.02/
23-071 / 1400 / 22.11.02/
u.s.w
Das heißt, wenn ich einen Lieferschein geschrieben habe, soll er mir die Artikel aus der Tab."Liefertermin"
mit dem aktuellsten Liefertermin austragen.
Wenn ich z.b. 2400 Stück von Artikel 23-001 liefere, soll er den Termin vom 22.11 ganz löschen. Liefere ich weniger z.b. 1600 Stück soll er den Termin vom 22.11. stehen lassen und den Wert auf 800 Stück setzen. Liefere ich mehr z.b. 3200 Stück, soll er den Termin vom 22.11. löschen und den Wert vom 23.11. auf 2400 setzen.
Ich hänge hier schon seit einigen Tagen fest und komme nicht weiter. Wenn ich das in einer Abfrage mache kommt nur Unsinn oder gar nichts heraus.
Welche Möglichkeit gibt es, um Das zu Realisieren, geht das überhaupt mit einer oder mehreren Abfragen???



Ich habe versucht:


Dim rstLiefertermin As Recordset
Dim strSQL As String
Dim lngStueckzahl As Long

'hier muss die Stückzahl zugewiesen werden,
'die Du auf dem Lieferschein eingetragen hast
lngStueckzahl = x
strSQL = "SELECT * FROM Liefertermin WHERE ArtikelNr='" & _
ArtikelNrVomLieferschein & "' ORDER BY Termin"
Set rstLiefertermin = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
With rstLiefertermin
Do While Not .EOF And lngStueckzahl > 0
If ![Stück] > lngStueckzahl Then
.Edit 'Debbug Fehler Methode oder Datenobjekt nicht gefunden!?!?
![Stück] = ![Stück] - lngStueckzahl
.Update
lngStueckzahl = 0
Else
lngStueckzahl = lngStueckzahl - ![Stück]
.Delete
End If
.MoveNext
Loop
.Close
End With
Set rstLiefertermin = Nothing


Für jede Hilfestellung wäre ich äußerst dankbar.
Grüße Paul

stpimi
09.05.2004, 07:44
Ich habe Deinen Ansatz (die grundlegende Anforderung) noch nicht ganz durchblickt. Für mich wäre aber Dein Datenmodell interessant - ich denke, das es hier schon hakt. Die Tabellen müssen in Beziehung stehen udn zwar über einen eindeutigen Schlüssel.

Ein Lösungsansatz:
Es gibt IMHO eine Kundenbestellung (Rahmenbestellung über zb. 10000 Stück) und dazu dann 1 oder mehr (Teil-Liefertermine). In der Bestellung verwaltest Du eine offene Menge, in der Teillieferungen die zu einem bestimmten Datum gelieferten Mengen, Lieferscheinnummer,etc. Der Liefertermin hat als Fremdschlüssel die BestellID und ist somit immer verknüpfbar.

Du kannst zu jeder Bestellung dadurch den LIeferstatus und offene Mengen abfragen. Und das dürfte ja der Sinn der Sache sein.

Mehr zu liefern als bestellt wurde, macht ja wirtschaftlich auch wenig Sinn, der Kunde wird es wohl nicht bezaholen und auf Deine Kosten zurückschicken.

Mfg, Michael

Paul1965
09.05.2004, 08:03
Danke für dein Antwort,
also Access ist für mich Neuland.
Ich kämpfe mich durch zeit ein paar Monate.
Es ist mir gelungen aus verschieden Beispiele und eigene Ideen ein kleines Lagerprogramm zu basteln.
Die einzige Sache die noch offen steht sind die Liefertermine.
Um besser zu verstehen um was es geht:
Kunde X = Rahmenauftrag 2000000 Stück in Jahr

Teillieferung y Termine mit verschiedenen Stückzahlen.
Um einen Überblick zu haben wo bin ich mit meine Aufträge muss man immer Rechnen wie viel hab ich geliefert und wann.
Der Kunde ändert laufend sein Bedarf durch ein Lieferplaneinteilung.
Diese Lieferplan bekomme ich wöchentlich.

Nouba
09.05.2004, 08:22
Versuchs mal mit dieser Prozedur, der Du die ArtikelNr und die Liefermenge als Argument mitgibst.
Sub VerrechneLieferung(ArtikelNr As String, Liefermenge As Long)

Dim rs As DAO.Recordset
Dim sSql As String
Dim lNeuerWert As Long

sSql = sSql & "SELECT "
sSql = sSql & " Stück "
sSql = sSql & "FROM Liefertermin "
sSql = sSql & "WHERE ArtikelNrNr = '" & ArtikelNr & "' "
sSql = sSql & "ORDER BY Termin"

Set rs = CurrentDb().OpenRecordset(sSql, dbOpenDynaset)

Do While Not rs.EOF
lNeuerWert = rs![Stück] - Liefermenge
Select Case lNeuerWert
Case Is > 0
rs.Edit
rs![Stück] = lNeuerWert
rs.Update
Exit Do
Case Is = 0
rs.Delete
Exit Do
Case Is < 0
Liefermenge = Abs(lNeuerWert)
rs.Delete
rs.MoveFirst
End Select
Loop

rs.Close
Set rs = Nothing
End Sub

Zum Datenmodell habe ich wie Michael die gleichen Bedenken. Im Allgemeinen sollte sich mittels Abfragen ein Bestand ermitteln lassen.

Paul1965
09.05.2004, 08:39
Ich habe Bedenken bei jeder schritt der ich mache aber ich will nicht aufgeben.
Es geht nicht um einen Lagerbestand zu ermitteln sonder nur um Liefertermin Übersicht.
Da darf man nicht vergessen das wahrscheinlich ein paar Sachen fehlen = wissen + Erfahrung.
Eine stärke: will nicht aufgeben
:)

Paul1965
09.05.2004, 10:23
Leider ich krigs nicht hin ohne eure Hilfe
Also habe neu angefangen

Tabelle 1

Lieferausgang
Id | ArtikelNr | Bezeichnung | Stück

Tabelle 2

Liefertermin
Id | ArtikelNr | Stück | Termin

Ich möchte mit eine Schaltfläche in Formular Lieferausgang ein Stückzahl eingeben ( inputbox?)=2400 Stück von Artikel 23-001 liefere, soll er den Termin vom 22.11 ganz löschen. Liefere ich weniger z.b. 1600 Stück soll er den Termin vom 22.11. stehen lassen und den Wert auf 800 Stück setzen. Liefere ich mehr z.b. 3200 Stück, soll er den Termin vom 22.11. löschen und den Wert vom 23.11. auf 2400 setzen

http://www.kanya.dnsalias.com/termine.rar

:confused:

Nouba
09.05.2004, 10:42
Füge beim Klick Ereignis für die Schaltfläche folgenden Aufruf der oben geposteten Prozedur ein.
Private Sub Befehl6_Click()
VerrechneLieferung Me!ArtikelNr, Me!Stück
End Sub
Wobei Du meinen Tippfehler ArtikelNr<b>Nr</b> natürlich ausmerzen mußt.

Paul1965
09.05.2004, 10:54
Prozedur als Argument mitgeben ? Wie?
Wahrscheinlich da hängt die ganze Geschichte.
Danke für deine mühe!!!

Paul1965
09.05.2004, 11:07
bekomme Debbug Fehler Benutzdefinierte typ nicht definiert..

http://www.kanya.dnsalias.com/termine.rar

Nouba
09.05.2004, 12:00
Die DAO-Objekt-Biblithek muß in VBA unter Extras/Verweise eingebunden werden.

Paul1965
09.05.2004, 12:27
rs.Edit Methode oder Datenobjekt nicht gefunden ?

Paul1965
09.05.2004, 12:35
Danke euch !!!
Es klappt. Mein Sonntag ist gerettet..
also Verweis auf DAO war nicht da+ Tipp Fehler Dim RS As DAO.Recordset

:angel: