Hallo,
ich würde gerne wissen wie Ihr folgendes lösen würdet.
Bis jetzt hatte ich diese Aufgabe in Excel gelöst
Datum.........ObjektVon.........ObjektBis..........KM-gefahren
Da wir immer oder oft die selben Strecken fahren habe ich in Excel ein UDF erstellt die StartObjekt und EndObjekt als Parameter erhält und mit die KM zurück gibt.
Dazu musste ich immer Paarweise die Strecke in die UDF eintragen ..
Wie könnte man das denn mit einer Tabelle in Access lösen oder besser lösen.
Hat hierzu jemand einen Ansatz?
Danke für Hilfe.
Zitat von: silentwolf am Juni 17, 2019, 08:07:30
Da wir immer oder oft die selben Strecken fahren habe ich in Excel ein UDF erstellt die StartObjekt und EndObjekt als Parameter erhält und mit die KM zurück gibt.
Dazu musste ich immer Paarweise die Strecke in die UDF eintragen ..
Mir ist noch unklar, wie die Strecken
berechnung eigentlich funktioniert. Ist das nur ein reiner Lookup auf die bestehenden Datensätze? Wenn ja, ist das doch recht einfach analog in Access zu realisieren.
Skizziert:
DLookup("[KM-gefahren]","deineTabelle",ObjektVon = " & SuchObjectVon & " AND ObjektBis = " & SuchObjectBis)
Hallo Phil,
zuerst einmal Danke für Deine Antwort.
Also im Moment wird sie wie gesagt in Excel als Function berechnet.
function StreckenBerechnung(ByVal strStart as string, ByVal strZiel as string)as double
Select Case True
Case strStart="Home" And strZiel ="Huber"
Streckenberechnung =29.7
...
Ich würde das halt etwas eleganter oder besser lösen können in Access mit einer tblStrecken zum Beispiel.
Aber dann würde ja StreckeVon und StreckeBis ja auf die Tabelle Objekte verweisen..
tblObjID
verknüpft mit tblStrecke..StreckeVon_ObjIDRef und StreckeBis_ObjIDRef...
und das geht ja nicht..
Zitat von: silentwolf am Juni 17, 2019, 09:05:18
Also im Moment wird sie wie gesagt in Excel als Function berechnet.
function StreckenBerechnung(ByVal strStart as string, ByVal strZiel as string)as double
Select Case True
Case strStart="Home" And strZiel ="Huber"
Streckenberechnung =29.7
...
Verstehe ich das richtig, dass du in Excel im Programmcode die Entfernungen alle als Literale hardcodiert in deinem Code eingetragen hast? D.h. wenn eine neue Strecke hinzukommt, änderst du den Programmcode entsprechend?
Zitat von: silentwolf am Juni 17, 2019, 09:05:18Ich würde das halt etwas eleganter oder besser lösen können in Access mit einer tblStrecken zum Beispiel.
Aber dann würde ja StreckeVon und StreckeBis ja auf die Tabelle Objekte verweisen..
tblObjID
verknüpft mit tblStrecke..StreckeVon_ObjIDRef und StreckeBis_ObjIDRef...
und das geht ja nicht..
Ja, eine tblStrecken aus der die eingetragenen Entfernungen pro Strecke ausgelesen werden (wenn vorhanden) wäre schon deutlich besser!
Und was genau geht jetzt nicht?
Hallo Phil,
ja es ist Hardcoded ich habe ja nicht so viele..Wir haben nur Daueraufträge und deshalb geht es ja..
Das es bessere Lösungen dafür gibt denke ich mir ja eh aber ich komme halt nicht drauf wie es am besten gehen kann.
Na ich kann ja nicht tblObjekte mit einer tblStrecke zweimal verknüpfen.
Wie eben schon in meiner zweiten Antwort geschrieben.
Hallo,
ZitatNa ich kann ja nicht tblObjekte mit einer tblStrecke zweimal verknüpfen.
natürlich geht das. Du musst nur die Tabelle "tblObjekte" 2x in das Beziehungsfenster aufnehmen. Access ergänzt die 2. Tabelle automatisch mit _1 hinten. Dann kannst Du 2 unabhängige 1:n Beziehungen mit referentieller Integrität erstellen die sich auf die gleiche Tabelle (n-Seite) beziehen.
Aber, das brauchst Du doch gar nicht.
Wie Philip in #1 schon geschrieben hat kannst Du mit DLookup (DomWert) die Entfernung ermitteln. Die beiden ID's der Objekte werden in der Whereklausel übergeben.
Hallo Klaus,
Danke für Deine Nachricht.
Na ja aber wo hinterleg ich denn meine Strecken? Also wie Philip geschrieben hat weiß ich nicht wie das geht.
Hallo,
Du brauchst natürlich eine Tabelle für die Entfernung zwischen den Objekten mit 3 Feldern:
ObjektID_von, ObjektID_bis und Entfernung.
Beziehungen musst Du nicht unbedingt anlegen, kannst Du aber nach dem oben geschilderten Vorgehensweise.
Hallo Klaus,
nochmal danke für Deinen Tipp.
Ja ich hab jetzt mal die Tabelle nochmal eingefügt und verbunden und natürlich mit dem Feld Entfernung.
Auch hab ich diese Verknüpft damit ich neue Werte eintragen kann.
Jetzt brauche ich nur eine vernüftige Art damit ich bei Eintragung von Obj_Von und Obj_Bis wenn eine Strecke hinterlegt ist diese automatisch im Feld KM einträgt.
Da muss ich noch schaun ob ich das mit dem DLookUp so hinbekomme.
Aber schon mal vielen Dank!
Zitat von: silentwolf am Juni 18, 2019, 06:15:40
Jetzt brauche ich nur eine vernüftige Art damit ich bei Eintragung von Obj_Von und Obj_Bis wenn eine Strecke hinterlegt ist diese automatisch im Feld KM einträgt.
Eigentlich nicht. Wenn die Entfernung sowieso immer nur aus der Tabelle gelesen werden, würde es ausreichen, ein Fremdschlüssel-Feld mit Referenz auf eine
StreckeId zu speichern.
Hallo Phil,
Danke für Deinen Tipp aber irgendwie komme ich nicht weiter.
Im Anhang ist einmal wie ich nun die Tabellen verbunden habe und wie die Fahrten erfasst wurden mit den KM.
Momentan habe ich es nur in Excel mit einen SVerweis geschafft die KM aus zwei Objekten zu fischen.
Hallo,
und wo ist jetzt die Tabelle in der die verschiedenen Strecken hinterlegt sind ?
Die wäre unabhängig von der Tabelle "tblFahrten" anzulegen.
Das Feld für die gefahrenen Km ist überflüssig, die gefahrenen Km werden nicht gespeichert, sondern nur angezeigt.
Guten Morgen Klaus,
da ich ja die Fahrten mit KM schon mit Exel und Macro hatte ist diese im Moment die tblFahrten.
Kann ja eine neue unabhängige Tabelle erstellen aber wo sollen die KM dann hinterlegt werden?
Also in Excel hab ich es mit SVerweis geschafft aber da müssen ja auch die KM hinterlegt werden.
Könnte mir denn jemand ein kleines Beispieil in Access zeigen wie das gemacht werden könnte?
Wäre sehr dankbar.. )
Hallo zusammen,
ich denke Silentwolf hat das schon richtig so gemacht.
Ist meine Annahme korrekt:
Ladeort Abladeort km
1 2 15
2 3 20
1 3 45
also das von jedem Ladeort zu jedem Abladeort gefahren wird, wenn das so ist finde ich deine Tabelle komplett korrekt.
Jetzt musst du nur noch eine Abfrage basteln die nach den beiden ID sucht und die km zurückgibt.
SELECT Fahrt_von, Fahrt_nach, Fahrt_KM FROM Fahrt WHERE Fahrt_von = 148 and Fahrt_nach = 57
Diese Auswertung würde dir die Oberste Zeile deines Anhangs liefern.
Hallo,
es gäbe mal grundsätzlich 2 Möglichkeiten.
1.
Du lässt die Tabelle "tblFahrten" so wie sie jetzt ist.
Bei einer neuen Fahr wird nachgesehen (per DLookup) ob es diese Fahrt schon mal gibt. Wenn ja, wird die Entfernung ermittelt und in das Feld "Fahr_KM_gefahren" eingetragen. Wenn nichts gefunden wird, wird 0 eingetragen und muss dann manuell nachgetragen werden.
Die Tabelle lernt sozusagen selbst. Je mehr Fahrten eingetragen je mehr wird auch gefunden. Dann braucht es die extra Tabelle nicht.
2.
Extra Tabelle anlegen für die Strecken in der die Objekte mit den Strecken im Voraus erfasst werden.
Dann werden die gefahrenen KM wie gehabt mit DLookup ermmittelt und angezeigt. In diesem Falle braucht es das Feld "Fahr_KM_gefahren" nicht und kann gelöscht werden.
Für beide Versionen noch folgende Fragen:
- Gibt es auch Rückfahrten ?
- Wenn ja, mit der gleichen Strecke ?
Bitte äußere Dich mal zu den beiden Fragen und welche Version Du bevorzugen würdest.
Ich mach Dir dann ein kleines Beispiel.
Hallo an alle!
Vielen Dank für Euren Input!
@Klaus
Ich denke die erste Variante wäre die bessere für mein Vorhaben.
Und eine Art lernfähige Tabelle wäre schon was tolles :)
Im Prinzip ist es mit unserer Arbeit so das zu jeder Fahrt auch die selbe Fahrt als Rückfahrt zutreffen kann.
Ich habe jetzt eine Liste in Excel erstellt weil sie ja schon vorhanden war und es übersichtlich war noch fehlende Fahrten wie Rückfahrten einzutragen.
Also ein Mitarbeiter fährt von "Objekt A" nach "Objekt B" arbeitet dort "2 Stunden" und fährt weiter zu"Objekt C".. usw. Nun soll die DB in der Lage sein wenn diese Strecken eingetragen werden das automatisch die dazugehörigen KM eingetragen werden die Stunden die dort für das Objekt gearbeitet wurden werden erfasst und am Monatsende können dann die KM für ein Objekt oder die gesamt KM pro Monat ausgewertet werden und natürlich die dazugehörigen geleisteten Stunden.
Und ja es kann die selbe Strecke also genau umgekehrt auch gefahren werden. Jedes Objekt kann auch Theoretisch zu jeden andere Objekt gefahren werden.
Jetzt frage ich mich ob man die Fahrten gleich in der tblObjekte erfassen soll oder ob die DB Struktur die ich Momentan habe schon so richtig ist.
Hoffe es ist nun etwas besser beschrieben.
Vielen Dank
Hallo,
ZitatEin Mitarbeiter fährt von "Objekt A" zu "Objekt B" arbeitet dort "2 Stunden" und fährt weiter zu"Objekt C".. usw.
Sind das dann 2 Datensätze ?
Also so:
Von Nach Km
A B 12
B C 18
Und er kommt dann ja auch von Zu Hause und fährt wieder heim.
Was dann in der Tabelle so aussehen würde:
Von Nach Km
H A 11
A B 12
B C 18
C H 25
H=Zu Hause (Home)
Und dann muss ja auch berücksichtigt werden, dass von B nach C und dann nach H jemand anders bezahlt bzw. bezahlen muss.
Du musst das schon genau beschreiben.
Hallo,
ZitatSind das dann 2 Datensätze ?
Also so:
Code: [Auswählen]
Von Nach Km
A B 12
B C 18
Ja das wären dann zwei Datensätze..
Ja er fängt zum Beispiel von zu Hause an oder fährt von dort weg ..
ZitatH=Zu Hause (Home)
Und dann muss ja auch berücksichtigt werden, dass von B nach C und dann nach H jemand anders bezahlt bzw. bezahlen muss.
Na ja im Moment wird das so nicht berücksitigt das der Kunde für die Fahrt bezahlt. Meistens sind es Pauschalen pro Durchführung oder pro Monat oder dergleichen.
Normalerweise sollte es ja so beerechnet werden können.
Die Fahrt von zu Hause bis zur Firma gilt als Privatfahrt. Danach würde der Mitarbeiter von der Firma zum "Ersten Objekt" fahren und dort ein KM-Geld dafür bekommen.
Da der Mitarbeiter ja nicht zuerst zur Firma fahren muss oder auch nicht macht fährt er gleich zum ersten Objekt. Deshalb bezahle ich gleich von der "Ersten Fahrt" zum "Ersten Objekt".
Wenn dies Fahrt in Zukunft oder bei gewissen Kunden bzw. Objekten zusätzlich bzw. seperat verrechnet werden soll dann kann man das ja doch aus der Tabelle entnehmen. Oder liege ich hier falsch? Oder sollte das noch seperat besser inkludiert werden?
Hallo,
im Anhang das versprochene kleine Beispiel.
Ich habe im Moment keine Zeit für Erklärungen. Einfach mal im Formular probieren.
Der VBA Code ist etwas kommentiert.
Bei Fragen melden.
Hallo Klaus,
vielen Dank erstmal ich schau es mir genau an und melde mich dann bei Dir!
Schönen Abend!
Hallo nochmal,
das sieht ja schon super aus und funktioniert toll!
Wäre es schwer noch zusätzlich ein Feld zuzufügen?
Tut mir leid das ich das vorher vergessen habe .. bzw. nicht daran gedacht hab das es vielleicht auch hilfreich sein würde die geschätzte Zeit anzugeben.
Im Routenplaner sehe ich ja die Strecken an und dazu wird eine vorraussichtliche Zeit angezeigt.
Das wäre vielleicht für spätere Auswertungen und Planung des Tages vielleicht recht hilfreich.
Also zum Beispiel in tblFahten ein Feld Fahrt_Zeit das mit 00:55 also Stunden:Min angegeben wird.
Hoffe ich frage hier nicht zu viel!?
Vielen Dank
Hallo,
kein Problem.
Zeitfeld in die Tabelle einbauen und die bekannten Zeiten nachtragen.
Zeit wird analog zu dem Kilometern mit DLookup ermittelt.
Hallo,
also muss der DLookup Code gar nicht geändert werden?
Ich werde es dann probieren.. )
Hallo,
nein, der jetztige Code muss nicht geändert werden. Du brauchst nur neuen Code.
Du solltest aber noch eine If Bedingung (Wenn die ermittelten KM gößer 0 sind) und die Zeit nur ermitteln wenn KM gefunden wurden.
Hallo,
hmm na da glaub ich bin ich noch etwas zu schwach auf der Brust um den Code neu und vorallem richtig zu schreiben :(
..
Aber ich sehe es mir mal Morgen genauer an vielleicht geht ja was .
Danke auf alle Fälle nochmal
Hallo nochmal,
@Klaus leider bekomme ich es noch nicht hin das ich die Zeiten in der gleichen DLookup Code miteinbeziehen kann.
Wäre sehr dankbar wenn ich dazu doch noch eine Hilfe bekommen könnte.
Zudem habe ich nun folgendes probiert.
Fahrt_ID..... Fahrt_Datum....Fahrt_Von_ObjRef.......Fahrt_Bis_ObjRef.....Fahrt_KM...........Fahrt_Zeit.......Mit_IDRef
Wenn ich nun Fahrt_Von_ObjIDRef..und Fahrt_Bis_ObjID_Ref die selbe Obj_ID verwende und dann als Fahrt_KM den Wert 0 eintrage und bei Fahrt_Zeit die Zeit am Objekt eintrage dann wären ja die tblObjektStunden überflüssig und ich könnte doch alles in diese tblFahrten eintragen. Oder ist das eher schlecht?
Dann müsste halt die tblFahrten etwas besser benannt werden wie tblObjektZeiten oder dergleichen
Mann könnte dann einfach eine Abfrage erstellen und mit den Fahrt_KM die gleich 0 sind und die ObjID die bei Fahrt_Von_Obj_IDRef und Fahrt_Bis_Obj_IDRef die selbe ist wären dann ja die eigentlichen ObjektZeiten die aufgebracht wurden.
Für Euren Input und Eure Meinung bin ich natürlich wie immer sehr dankbar.
Gruß
Albert