Hallo Liebe Community
Ich bin derzeit an einer LKW Disposition. Alles funktioniert soweit ganz gut Fahrzeuge Planen, Übersichten, Faktura etc...
Nun möchte ich gerne die disponierten/geplanten LKW's auf einer Übersichtstafel/Form anzeigen. (So eine Art Übersicht ... welcher LKW ist frei/gebucht.)
Das ganze sollte in etwa so aussehen (siehe Bild im Anhang)
Hat hier jemand eine Idee wie ich das grafisch darstellen kann? Habe ein bissel mit DCOUNT rumgespielt aber ich denke für jedes Feld eine eigene DCOUNT Abfrage zu erstellen ist die "unschönste" Art. Ich habe leider keine Ahnung wie ich das bewerkstelligen soll?
Es existiert bereits eine Query in der ein VON und BIS Datum abgefragt werden.
Hat hier jemand eine Idee?
Vielen Dank im Voraus
Liebe Grüsse
Andy
Hallo,
eine Kreuztabellenabfrage mit fixierten Spaltenüberschriften könnte helfen.
Erstellen/Abfrageassistent/Kreuztabellen-Assistent
Du kannst auch eine nichtpropertionale Schriftart verwenden, die Rechtecke oder Quadrate im Idealfall lückenlos aneinanderreihen kann. Die Zeitabschnitte werden dann jeweils in einem Text mit maximal 48 Zeichen abgebildet.Mit einer einfachen Funktion kannst Du dann den Zeitstrahl erstellen.
Public Function TimeToBeam(StartsAt As Date, EndsAt As Date, Optional CombineWith As String)
Const Offset = 24 'Viertelstunden von 0:00 - 6:00
Dim Result As String * 48
Dim FirstQuarter As Long
Dim BeamLength As Long
FirstQuarter = CLng(StartsAt * 96) - Offset + 1 '1 für das erste Zeichen
BeamLength = ((EndsAt - StartsAt) * 96)
If Len(CombineWith) = 48 Then Result = CombineWith
Mid$(Result, FirstQuarter) = String$(BeamLength, "•")
TimeToBeam = Result
End Function
Sub Test()
Dim r As String
Debug.Print "|"; TimeToBeam(#7:00:00 AM#, #8:00:00 AM#); "|"
Debug.Print "|"; TimeToBeam(#7:30:00 AM#, #11:15:00 AM#); "|"
r = TimeToBeam(#7:30:00 AM#, #11:15:00 AM#)
Debug.Print "|"; TimeToBeam(#4:45:00 PM#, #6:00:00 PM#, r); "|"
End SubDie Test-Prozedur gibt dann folgendes im Direktbereich aus:| •••• |
| ••••••••••••••• |
| ••••••••••••••• •••••|
Vielen Dank für die schnellen Antworten
Ich habe bereits gestern etwas herumgespielt mit der OnPaint Event Funktion. Denke jedoch nicht das dies der richtige Lösungsansatz ist.
(Habe mein "gebastel" hier angehängt. Ich hoffe das ist hier erlaubt)
--->> Zeitachse geht nur von 06:00 bis 10:00
Ich werde eure Vorschläge später mal ausprobieren.
Hallo,
so etwas ähnliches hatte ich mal für ein Füllstandsanzeige gemacht.
Ich habe Dir das mal für LKW angepasst. Verwendet wie auch von Lachtaube vorschlagen eine nicht proportionale Schrift und kommt völlig ohne VBA aus.
Meine Zeitachse geht über 24 Stunden.
Wenn da wirklich von 06:00 bis 10:00 (vormittags, also nur 4 Stunden ?) ausreicht, lässt da die Auflösung auf 5 Minuten steigern.
Hallo MzKlMu
Das ist der Hammer! Exakt das was ich benötige gesucht habe. Danke!
Ist es auch möglich die Fahrzeuge auf eine Linie zu beschränken auch wenn das Fahrzeug am selben Tag mehrere Einträge hat? Sozusagen nur eine Line pro Fahrzeug?
Liebe Grüsse aus der Schweiz
Andy
Leider zeigt das Textfeld in meinem Access keinen Balken, wenn die Zeit nicht um 6 Uhr beginnt. Ich habe deshalb eine durchgezogene Linie gewählt. Zum anderen habe ich die Anzahl der Zeichen verdoppelt und Consolas 14 als Schriftgröße angegeben. Kleine Änderungen an der Skala wären aber trptzdem noch nötig, was ich mir allerdings erspare. Die Funktion ist in die Abfrage alsBeam: TimeToBeam([DispoVon];[DispoBis])integriert und schaut nach der Änderung nun so aus.Public Function TimeToBeam(StartsAt, EndsAt, Optional CombineWith)
'alle Werte mit Faktor 2 skaliert
Const Offset As Long = 24 * 2 'Viertelstunden von 0:00 - 6:00
Dim Result As String * 96 '(48 * 2)
Dim FirstQuarter As Long
Dim BeamLength As Long
On Error GoTo e
FirstQuarter = CLng(StartsAt * 96) * 2 - Offset + 1 '1 für das erste Zeichen
BeamLength = ((EndsAt - StartsAt) * 96) * 2
If Not IsMissing(CombineWith) Then
If Len(CombineWith & "") = 48 * 2 Then Result = CombineWith
Else
Result = String$(96, ChrW$(&H2500)) 'die Linie
End If
Mid$(Result, FirstQuarter) = String$(BeamLength, ChrW$(&H2588)) 'voller Block
TimeToBeam = Result
e:
End Function
Zitat von: Lachtaube am November 26, 2017, 13:16:13
Leider zeigt das Textfeld in meinem Access keinen Balken, wenn die Zeit nicht um 6 Uhr beginnt. Ich habe deshalb eine durchgezogene Linie gewählt. Zum anderen habe ich die Anzahl der Zeichen verdoppelt und Consolas 14 als Schriftgröße angegeben. Kleine Änderungen an der Skala wären aber trptzdem noch nötig, was ich mir allerdings erspare. Die Funktion ist in die Abfrage alsBeam: TimeToBeam([DispoVon];[DispoBis])integriert und schaut nach der Änderung nun so aus.Public Function TimeToBeam(StartsAt, EndsAt, Optional CombineWith)
'alle Werte mit Faktor 2 skaliert
Const Offset As Long = 24 * 2 'Viertelstunden von 0:00 - 6:00
Dim Result As String * 96 '(48 * 2)
Dim FirstQuarter As Long
Dim BeamLength As Long
On Error GoTo e
FirstQuarter = CLng(StartsAt * 96) * 2 - Offset + 1 '1 für das erste Zeichen
BeamLength = ((EndsAt - StartsAt) * 96) * 2
If Not IsMissing(CombineWith) Then
If Len(CombineWith & "") = 48 * 2 Then Result = CombineWith
Else
Result = String$(96, ChrW$(&H2500)) 'die Linie
End If
Mid$(Result, FirstQuarter) = String$(BeamLength, ChrW$(&H2588)) 'voller Block
TimeToBeam = Result
e:
End Function
Hallo Lachtaube
Kannst du mir dein Beispiel mal Anhängen? Ich bin VBA technisch nicht so auf der Höhe. Wäre super nett
Gruss
Andy
Kann ich machen Andy.
PS: Wenn Du Dich auf eine horizontale Linie, 36 kleine vertikale Linien (für die Viertelstunden) und 13 vertikale Linien (für die vollen Stunden) beschränkst, kann man die Zeitskala auch relativ einfach dynamisch im Formular-Ereignis Bei Größenänderung an die erforderliche Breite angleichen.
Moin Lachtaube
Danke nochmals für das Beispiel. Funktioniert Super!
Wenn jedoch meine [VON] [BIS] Felder ein Datum enthalten funktioniert es irgendwie nicht so Richtig. Habe das Feld in der Query angepasst auf "Short Time" bringt jedoch nichts.
Hast du eine Idee?
Danke und einen guten Wochenstart
Andy
Hallo,
Du musst das Datum abschneiden, die Formatierung schönt nur die Anzeige, ändert aber nichts am Feldinhalt.
In der Abfrage einfach so:
VonZeit: Von - Int(Von)
BisZeit: Bis - Int(Bis)
Im weiteren Verlauf dann VonZeit und BisZeit verwenden.
Erläuterung:
Ein Datumsfeld ist im Hintergrund sonst nix wie eine Kommazahl des Typs Double. Nach dem Komma ist der dezimale Teil eines Tages (1) als Zeit.
Heute 06:00 = 43066,25
Heute 12:00 = 43066,50
Du brauchst also nur den Teil nach dem Komma. Und der wird mit obigen Formeln errechnet.
ZeitAnteil: 43066,25 - Int(43066,25) = 0,25
Danke MzKlMu
Funktioniert Bestens!
Noch eine letzte Frage : Wie kann ich die Timeline auf 24h Anpassen? Also von 00:00 bis 24:00 ?
Ein Tag hat 96 Viertelstunden. Um mit Deiner Skala einigermaßen konform zu sein, habe ich jedoch für jede Viertelstunde 2 Zeichen gewählt (mit 2 multipliziert). D.h. 192 Zeichen ergeben eine volle Tagesbreite (Result entsprechnd setzen), wobei der Offset komplett entfällt.
Hallo Klaus und Lachtaube,
ich hätte zu euerem Beispiel eine Frage:
Ist es in dem Formular möglich in der Kopfzeile (da wo Ihr die Uhrzeit habt) die aktuelle Woche anzuzeigen (z.B. Montag bis Sonntag)
Ich habe mal vor, für meinen Milchbetrieb ein Programm zu schreiben. Da könnte ich jetzt euer Beispiel perfekt dafür verwenden, daß mir die Wartezeiten der Milchabgabe wegen einer Behandlung angezeigt wird.
Anstelle des LKW´s werden die behandelten Milchkühe angezeigt, und der Zeitraum wäre ja durch das Datum des behandelten Tages und der Wartezeit des Medikaments gegeben (z.B. 120 Stunden entspricht 5 Tagen).
Somit bräuchte ich in der Kopfzeile nur eine variable Wochenanzeige (oder eventuell 2-wöchig).
Ist sowas machbar?
Gruß Hubert
Das geht selbstverständlich auch. Im Prinzip kann man alle Zahlenwerte darstellen, solange die Skala linear ist und eine entsprechende nichtproportional Schriftart verwendet wird und ein ganzes Vielfaches von Zeichen in eine Zeile passen (120, 240, 360, ... in Deinem Fall). Hier muss man mit Schriftarten und Schriftgrößen halt etwas sielen, um gute Werte zu erzielen.
Theoretisch sollte es auch möglich sein, Texte im Richtext-Format (also HTM-Fragmente) in einem Memofeld zu verwenden, um verschiedene Farben in einzelnen Balken und/oder in einem Balken zu haben. Dafür muss man vermutlich nur einen guten Schluck Kreativgeist aus der Flasche zu sich nehmen und etwas Zeit haben. :)
Und weil die verwendete Schriftart nichtproportional ist, sollte sich sogar die Mausposition über Zeichen X leicht ermitteln lassen.
Ich finde es eine tolle Idee, eine Markise in den LKW zu installieren. Ich habe auch schon darüber nachgedacht. Ich habe einen mobilen Laden in einem LKW... Gerade bei Gebrauchtmaschinen( https://exportmaschinen.de ) auf einigen Webseiten habe ich LKWs gesehen, die das schon eingebaut hatten. Eine Markise hat eigentlich kein Problem mit dem Gewicht. Ebenso hast du kein Problem, wenn es viel regnet. Die Form hilft, das Wasser in die Ecken und nach unten zu leiten. Ich denke, es ist eine gute Investition. Und wenn man den LKW in ein paar Jahren verkauft, ist er auch mehr wert als ohne Markise.
Hallo,
mal sehen, ob der nach 6 Jahren noch Interesse hat.