Hallo Zusammen,
Ich habe eine Datenbank für die Verwaltung von Europaletten erstellt. Es gibt die Tbl
Paletten, in der sind nur die Einträge von Fahrzeugen die momentan geladen werden.
Wenn nun ein Fahrzeug fertig geladen ist wird über die Datenbank ein Palettenschein
erstellt. Wenn der Palettenschein über den Button gebucht wird wird dieser Eintrag in die Tbl Palettenarchiv angefügt. Wenn der Button Palettenschein drucken betätigt wird soll nur dieser Eintrag in tbl Paletten gelöscht werden. Leider ist es momentan so, das alle Einträge die sich in der tbl Paletten befinden gelöscht werden.
Hat jemand eine Lösung für dieses Problem.
Gruß Peter
Hallo,
es sollte halt die ID des Palettenscheins (bzw. der Palette) beim Löschen mitgegeben werden.
Ansonsten ist Kopieren und Löschen eines DS eine fragwürdige Methode.
Besser wäre ein Datumsfeld "PaletteGedrucktAm" mitzuführen, das den Ausdruck des Palettenscheins registriert.
Hallo,
und was machst Du, wenn die Palette wieder kommt, aus dem Archiv wieder hervorholen ?
Ich halte das Vorhaben für den falschen Weg. Archivtabellen sind in einer Datenbank meist der falsche Weg. Im einfachsten Fall reicht dann einfach ein Hakenfeld "PaletteVerladen".
Hast Du einen Palettenpool und die Paletten kommen immer wieder ?
Hallo,
Danke für Eure Antworten und Tipps. Es geht bei dieser Datenbank nur um den Ausdruck des Palettenscheines. Eine Archivtabelle wurde nur eingerichtet um einen Palettenschein z.b. bei Verlust nachdrucken zu können. Die eigentliche Verbuchung von Europaletten wird über den Palettenschein in SAP durchgeführt. Bisher haben wir dafür Palettenbücher benutzt.
Gruß Peter
Hallo,
gerade in diesem Fall ist die Archiv-Tabelle Nonsens und ein "Druckdatum" besser geeignet.
Zum eigentlichen Thema: Hast Du die ID nun berücksichtigt?
Hallo,
ZitatEine Archivtabelle wurde nur eingerichtet um einen Palettenschein z.b. bei Verlust nachdrucken zu können.
dann ist die Archivtabelle erst recht überflüssig. Was verspricht man sich davon ?
Auch ohne Archivtabelle kann man doch jederzeit aus der normalen Tabelle nachdrucken. Wenn es unbedingt sein muss, kann man ja wenn gedruckt einen Haken setzen in der Tabelle.
Nachtrag:
Oder dem Vorschlag von Franz folgen und ein Datum eintragen.
Hallo DF6GL,
Ich habe einmal das Formular für Paletten Eingabe und die Löschabfrage
im Anhang. Was versteht man unter die ID in der Löschabfrage mitgeben.
Vielleicht kannst Du mir dies einmal erklären.
Gruß Peter
Hallo,
Du musst doch der Löschabfrage sagen welcher Datensatz zu löschen ist.
Die Löschabfrage braucht auch keine Felder. In der Where Bedingung (Kriterienzeile) musst Du Dich auf das Formularfeld beziehen das die ID anzeigt.
Die Hinweise, dass das ganze Vorhaben völlig sinnlos ist ignorierst Du hartnäckig.
Das macht nur Probleme, kann zu ikonsistententen führen und bietet keinen Vorteil, im Gegenteil, nur Nachteile.
Hallo,
Vielen Dank für den Tipp. Habe das mit der ID gemacht. Es funktioniert.
Ich möchte deine Bedenken nicht ignorieren, aber ich bin kein Access Experte und sitze jetzt schon seit einer Ewigkeit an dieser Datenbank.
Ich weiss nicht genau wie ich deine Vorschläge realisieren soll.
Gruß Peter
Hallo,
ZitatIch weiss nicht genau wie ich deine Vorschläge realisieren soll.
Hallt einfach ein Datumsfeld und ein Datum reinschreiben wenn gedruckt. Da muss man kein Experte sein. Alles andere ist unnötiger Aufwand.
Hallo,
wie gesagt, füge ein Feld "Druckdatum" (Datentyp Datum/Uhrzeit) in tblPaletten ein.
An der Codestelle , an der die Löschabfrage ausgeführt wird, schreibst Du anstelle:
Me!Druckdatum =Date
und fertig.
Die Archivtabelle kannst Du entfernen.
Um nur die "ungedruckten" (aktiven) Paletten zu erhalten, benutzt Du eine Abfrage, die die DS filtert, die kein Druckdatum enthalten (bei denen Druckdatum "leer" ist):
Select * from tblPaletten where Druckdatum is Null
entspr. die DS, für die ein Schein gedruckt wurde (archiviert sind)
Select * from tblPaletten where Druckdatum is not Null
Hallo,
Kannst Du mir bitte sagen an welche Stelle in der Löschabfrage ich diesn eingeben muss. Sorry, aber ich bin gestern nicht weiter gekommen.
Gruß Peter
Hallo,
was willst Du noch mit der Löschabfrage, wenn Du den Änderungsvorschlag übernimmst?
Weder ein Mitarbeiter, oder ein Fahrer noch ein Spediteur hat etwas in einer Paletten-Tabelle zu suchen. Diese Dinge gehören getrennt. Einem Ladevorgang wird man vermutlich eher mitteilen, ob es sich um Ent- oder Verladen eines Fahrzeugs handelt, wer der Fahrer ist, wer der Spediteur ist, welcher Bestimmungsort vorgesehen ist, usw. usf.. Ein jeder dieser Vorgänge wird dann mit keiner (Leerfahrt - eher unahrscheinlich), einer oder vielen speziellen Paletten in Beziehung gesetzt, wobei jede Palette mit Waren in einer bestimmten Anzahl bestückt sein kann. Ohne ein solches Datenmodell abzubilden, wird die Anwendung diletantisch und kaum zu pflegen sein.
Deshalb mein gut gemeinter Tipp: Belasse die Anwendung als Excel-Mappe, kaufe und studiere ein gutes Grundlagenbuch zu Access und entwerfe anschließend die Datenbank neu.
Hallo,
Es tut mir leid wenn ich euch nerve, aber ich muss in dieser Datenbank keine Paletten buchen oder nachverfolgen. Es geht lediglich um den Ausdruck eines Palettenscheines, der dem Speditionsfahrer mitgegeben wird. Ein Exemplar bleibt bei uns. Von einem anderen Mitarbeiter erfolgt die Verbuchung in SAP, wo auch die Palettenkonten der einzelnen Spediteure gepflegt werden.
Mir ist bei der Änderung nicht klar wo ich den Code Me!Druckdatum =Date unterbringen soll. Vielleicht kannst Du mir dies verständlich erklären?
Das Feld Druckdatum habe ich in tblPaletten hinzugefügt.
Gruß Peter
Hallo,
wie hast Du denn die Löschabfrage gestartet ?
Und zeige den vollständigen Code dazu.
Hallo,
Ich starteb die Löshabfrage über ein Makro.
Ich habe das Problem jetzt so gelöst:
DELETE tblPaletten.ID, tblPaletten.*
FROM tblPaletten
WHERE (((tblPaletten.ID)=[Geben Sie die PalettenscheinNr ein]));
Leider muss dann immer die ID eingegeben werden, die gelöscht werden soll.
PalettenscheinNr= ID+2000000
gruß Peter
Hallo,
setze im Makro vor der Löschabfrage eine Tempvars-Variable auf die aktuelle ID und benutze diese Variable in der Löschabfrage.
Oder nutze besser eine Ereignisprozedur, die das Ganze erledigt. Bei welchem Ereignis nun das Löschen erfolgen soll, hast Du nicht bekanntgegeben.
z. B. beim Klick auf einen Button:
Sub btnLöschen_Click()
Currentdb.Execute "Delete * from tblPaletten where ID= " & Me!ID, dbFailOnError
End Sub
Hallo,
nur zum Verständnis...
1. Ein LKW wird z.B. mit 12 Paletten geladen.
2. Der Palettenschein weist 12 Paletten auf/aus.
3. Der Fahrer soll nach Auslieferung der Waren 12 leere Tauschpaletten zurückbringen.
4. Die Paletten selbst haben keine Id, da sie Tauschobjekte sind (beladene Palette ausliefern, leere Palette zurücknehmen). Es ist nur bekannt, wie viele Paletten für einen Empfänger verladen wurden.
5. Die ursprünglich 12 geladenen Paletten werden dem Fahrer als Soll verbucht.
6. Nach Rückkehr ins Lager entlädt der Fahrer seine Tauschpaletten, deren Anzahl mit dem Soll verglichen bzw. seinem Palettenkonto gutgeschrieben werden.
7. Wenn ein Empfänger keine Tauschpalette mitgibt, wird dies auf dem Lieferschein oder Palettenschein vermerkt, so dass der Fahrer dies nachweisen kann (zur Verbuchung auf dem Fahrer-Konto).
8. Nicht mitgegebene Tauschpaletten werden dem Empfänger-Palettenkonto belastet.
Ist das soweit richtig?
lg
crystal
Hallo Crystal,
ZitatIst das soweit richtig?
Im Prinzip Ja, aber
ZitatEs geht lediglich um den Ausdruck eines Palettenscheines, der dem Speditionsfahrer mitgegeben wird. Ein Exemplar bleibt bei uns. Von einem anderen Mitarbeiter erfolgt die Verbuchung in SAP, wo auch die Palettenkonten der einzelnen Spediteure gepflegt werden.
gruss ekkehard
Hallo Df6gl,
Danke für deine Tipps. Leider habe ich mit Tempvar noch nicht gearbeitet.
Ich kann im Macro eine Tempvar festlegen, ich vergebe der Tempvar einen
Namen, aber was muss in das Ausdrucksfeld. Da komme ich leider nicht weiter.
Die Ereignisprozedur scheidet denke ich aus, da auf dem Button schon eine Prozedur
hinterlegt ist.
Private Sub Befehl7_Click()
On Error GoTo Err_Befehl7_Click
Dim stDocName As String
stDocName = "EndeSchlüselrückgabe"
DoCmd.RunMacro stDocName
Exit_Befehl7_Click:
Exit Sub
Err_Befehl7_Click:
MsgBox Err.Description
Resume Exit_Befehl7_Click
End Sub
Ich habe eine bestehende Datenbank um die Palettenscheinerstellung erweitert.
In dieser Datenbank werden ebenfalls Geräteschlüssel für die Hubstapler verwaltet.
Jeder Fahrer der bei uns lädt bekommt einen Geräteschlüssel für Hubstaplerbedienung. Der Name der Spedition, Name des Fahrers, Kennzeichen, Datum , Uhrzeit und die Shipment Nr. der Ladung werden dort erfasst.
Diese Daten habe ich für die Palettenscheinerstellung benutzt, damit der Mitarbeiter die Daten nicht doppelt eingegeben muß.
Wenn nun der Fahrer den Schlüssel wieder abgibt wird über das Formular Paletten der Palettenschein erzeugt. Beim betätigen des Buttons Palettenschein buchen wird der Eintrag in die Tabelle Paletten Archiv hinzugefügt. Dann wird der Palettenschein über einen Button gedruckt. Danach wird in das Formular Geräteschlüsselabgabe gewechselt und der Button Ende betätigt. Beim Drücken des Buttons Ende wird in der Tabelle tblPaletten der Eintrag des Palettenscheines gelöscht.
Ich glaube ich muss diesen Weg nehmen, da öfter bis zu 15 Fahrzeuge gleichzeitig oder zeitversetzt zur Verladung kommen und ich im Formular Paletten alle Fahrzeuge zur Verfügung haben muss, die ich dann über ein Kombifeld auswähle.
Ich hoffe ich habe mein Vorhaben jetzt besser erklärt und danke Euch für Eure Geduld.
MFG
Peter
Hallo,
nach der Deklaration/Definition eines Termpvars-Elementes (Variablen) kann dieses direkt in der Abfrage anstelle des Parameters verwendet werden.
irgendwo (Makro, Prozedur)Tempar-Variable deklarieren:
z. B. im Formular:
.
TempVars.Add "PalettenID", Me!ID
.
und Einsetzen in der Abfrage:
DELETE tblPaletten.ID, tblPaletten.*
FROM tblPaletten
WHERE ID = [TempVars]![PalettenID]
Ich frag' mich ja, warum man den angewählten Datensatz nicht gleich im Formular löschen will?