Mitarbeiter-Zeitverwaltung

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von schnibli.

    Mitarbeiter-Zeitverwaltung

    Moin Moin zusammen,

    ich bin dabei die Planung für eine Mitarbeiter Zeitverwaltung zu machen...
    Das ganze soll mit RFID Leser funktionieren (Aufwand gering).

    Nun zur Frage,...
    Welche Datenbankarchitektur würdet Ihr dafür verwenden?
    MySQL, Programmintern, Dateien?

    Danke schon mal für Eure Anregungen und Grüße,

    samson
    Nein! Doch! OHH!
    Ein paar Fragen die du dir stellen kannst:
    1. Beherrsche ich die Datenbankmodellierung und weiß ich auf was ich alles achten muss?
    2. Wie lauten die genauen Anforderungen? Nicht drauf los modellieren, zuerst mal Anforderungen überdenken und vielleicht ER-und Relationenmodell aufstellen + Normalisieren
    3. Soll die Datenbank online oder offline zur Verfügung stehen?
    4. Ist es wert sich den Aufwand zu machen eine Datenbank zu modellieren und einzubinden? (Wie viele Mitglieder überhaupt)

    MfG Tim
    @Mokki Datenbank dacht ich mir auch... Die Frage die mir dann bei sowas aufstößt ist, welche Architektur?
    Mitarbeiter-Zeitverwaltung, ergo Stundenberichte sollten nicht unbedingt auf MySQL auflaufen...
    Nicht jede Firma hat die Möglichkeit einen MySQL Server innerhalb des LANs zu betreiben...
    Dennoch würde ich nur ungern auf die flexibilität der zentralen Datenbank verzichten...
    Bei einem kleinen Betrieb von ka. 20 Mann würde somit ein PC reichen (ggf. sogar ThinClient) der das ganze verwaltet.
    Wenn es aber eine Firma wird mit 200 Mitarbeitern und mehreren Gebäuden,... Muss die Netzwerkstruktur her...
    Hier kann man die Software dann als Client arbeiten lassen. Wäre halt die Frage...
    Nein! Doch! OHH!

    samson schrieb:

    MySQL Server innerhalb des LANs zu betreiben

    Seh ich auch so.

    samson schrieb:

    flexibilität der zentralen Datenbank verzichten

    Ja, vorallem bei Wartungen uso ist des einfacher.

    samson schrieb:

    welche Architektur

    Sry, da hab ich leider keine Ahnung.

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Moin Moin zusammen...

    hab es doch mal auf MySQL Basis gestartet,... Funktioniert auch soweit super.
    User kommt mit RFID, Chip wird gelesen, Daten werden ausgelesen und geschrieben.

    Jedoch stehe ich vor der nächsten Hürde und ich denke momentan warscheinlich zu kompliziert...
    So sieht die DB aus...


    id | rfid | kommen | gehen | in_out
    1 | 0004948021 | 2016-02-16 13:13:54 | 0000-00-00 00:00:00 | 1

    Davon gibt es für jeden Tag eine neue Zeile...
    Wie berechne ich am einfachsten die Gesamt Stunden hieraus?

    Als Beispiel
    gesamt = gehen - kommen = 8 Stunden, 4 Minuten
    gesamt = gehen - kommen = 6 Stunden, 15 Minuten
    gesamt = gehen - kommen = 7 Stunden, 21 Minuten
    gesamt = gehen - kommen = 5 Stunden, 36 Minuten

    gesamt = 27 Stunden, 16 Minuten

    Hat jemand von Euch eine Idee?

    Danke und Liebe Grüße, samson
    Nein! Doch! OHH!
    Nur mal aus Interesse:
    Wird dies lediglich ein seperates, für deine Umgebung, erstelltes Erfassungssystem?
    Ansonsten solltest du die Tabelle evtl. anders gestalten.

    Werden Schichten gefahren? -> F(rüh), M(ittag),S(pät) oder N(acht)
    Sind Abteilungen betroffen? -> Verschiedene Uhrzeiten
    Wie werden Urlaubstage festgehalten?
    Von wem werden die Daten erfasst? -> Terminal oder Rechner an dem das RFID Lesegerät angeschlossen ist?
    Personen ID oder auch Namen erfassen bzw. hinterlegen? So könne anhand der RFID das schon ausgewertet können.
    also noch eine Zusätzliche Tabelle für die Personen..?

    das wären dann noch ein paar Spalten mehr.. ;)

    Und je nach Kriterium werden die Daten wohl zusammengerechnet. Kann ja sein das in einer 40 Stunden Woche einer Urlaub hatte und somit über 32 Stunden haben sollte~
    Wie werden die Daten ausgewertet und wer wertet sie aus?

    Grüße,
    Drahuverar
    Option Strict On!
    Deswegen noch einmal :thumbsup:

    Je mehr Daten wir sammeln können, desto besser. :saint:
    Und unsere Datenbank sieht umso schöner aus, wenn wir wissen was wir benötigen. :rolleyes:
    Nachträglich Felder in eine Tabelle hinzufügen ist immer so eine unschöne Sache, wenn es anfangs minimalistisch gehalten (eine Tabelle) ...dann wird das schnell zum Chaos " <X "...
    Option Strict On!
    @ErfinderDesRades @Drahuverar
    Danke für die geistreichen Tipps ;)
    Selbstverständlich gibt es eine Tabelle Namens Mitarbeiter ;)
    Tabelle Mitarbeiter
    vb-paradise.de/index.php/Attac…ce40a7b6a68eba8a618e2a90d
    Tabelle Arbeitszeit


    Aufbau Zeiterfassung:


    Die Spalte "in_out" ist für die Abfrage relevant ob der Mitarbeiter schon angemeldet ist oder nicht.
    Damit wäre ggf. später eine "Feuerwehrliste" möglich, um Listen zu erstellen mit Personen die noch im Gebäude sind. Das wäre aber "Zukunftsmusik"
    Bilder
    • Tabelle_mitarbeiter.PNG

      41,5 kB, 610×557, 257 mal angesehen
    Nein! Doch! OHH!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „samson“ ()

    samson schrieb:

    Wie berechne ich am einfachsten die Gesamt Stunden hieraus?
    mal andere Frage: Kannst du die Stunden denn ühaupt schon anzeigen?
    Da gibts ja mehrere Möglichkeiten:
    alle Stunden aller MA eines Tages
    alle Stunden aller MA einer Woche
    alle Stunden aller MA eines Monats
    alle Stunden eines MA eines Tages
    alle Stunden eines MA einer Woche
    alle Stunden eines MA eines Monats

    Und von dem, was du da anzeigst hängt glaub auch ab, was mit "Gesamtstunden" überhaupt gemeint sein mag.
    @ErfinderDesRades

    Grundsätzlich bräuchte ich es für die "Benutzerausgabe" als täglich in Stunden...
    Im Admininterface (PHP und MySQL) wird es dann Tag/Monat/Jahr geben.
    Urlaub muss ja nicht eingetragen werden,... Das kann dann anhand der "freien Tage" ermittelt werden bzw. dies lässt sich dann im Adminbereich einfach eintragen.
    Da kann ich dann später ggf. noch eine Tabelle in der DB erstellen. Das ist jedoch erstmal ohne Priorität.

    Was den VB.Net Teil angeht, hab ich es bisher schlicht gehalten.


    Interessant wäre eine Ausgabe an "Soll/Ist" zeit für den Aktuellen Tag.

    Hier stoße ich jedoch auf folgendes Problem,...

    VB.NET-Quellcode

    1. If set_anwesend = 1 Then
    2. strSQL = "INSERT INTO arbeitszeit"
    3. End If
    4. If set_anwesend = 0 Then
    5. strSQL = "UPDATE arbeitszeit SET"
    6. End If


    mit jedem "3." Anmelden gibt es eine neue Zeile in die "arbeitszeit" Tabelle...
    ich denke, wenn ich für jedes "Stechen" eine Zeile anlege, wird es noch komplexer die Daten zusammen zu rechnen.
    oder täusche ich mich da?
    Nein! Doch! OHH!
    Ich habe das selbe mit einem Raspberry pi (als Terminal) gemacht
    - RFID Scanner
    20x4 Siebensegmentanzeige
    - Mittagspausen nachtragen (0.5/1/1.5h)
    - Status abfrage (Stunden, Ferien, Gleitzeit)
    - Dazu unterscheide ich 80% / 100% und Stunden-angestellte

    Zur Auswertung habe ich ein VB-Programm:
    - Monatliche Zeiterfassungsausgabe (Automatische übernahme der Gleitzeit, Ferien)
    - Nachtragen oder auch FerienbuchungDazu benötigte Tabellen in MySql:
    - tblMonteur (ID, Vorname, Nachname, PID, Arbeitspensum, Ferientage/Jahr)
    - tblFeiertage (habe ich alle Feiertage eingetragen die nicht als Arbeitstage gelten)
    - tblstunden (zusammenfassung, id, idmonteur,kommen,mittagspause,gehen)
    - tblmonatsabschluss(speichert jeden 20. im Monat die Aktuelle Gleitzeit und Ferien, da der 20 bei uns abgabetag ist.)
    aufbau: id, id_monteur, monat_gleitzeit, monat_ferien, datum (das datum = monat_ist & Jahr_ist)

    Für die Korrekte arbeitssollstunden:
    Alle Tage eines monats (bei mir von 21. - 20.) ohne Samstag und Sonntag zählen und x Arbeitssoll pro tag rechen davon die feiertage der feiertagetabelle und die Krankheits und Ferientage abziehen.
    Hier wird jeweils der übertrag in den neuen montag gespeichert.

    Dazu ein Report-Viewer:
    -Alle Arbeitstage aufgelistet
    - Arbeitsstunden soll- arbeitsstunden ist
    - Ferien Guthaben vormonat
    - Ferien Guthaben aktueller monat
    - Bezogene Ferien-Gleitzeitsaldo vormonat
    - Gleitzeitsaldo aktueller monat
    - Gleitzeit Total.
    - KrankheitDas Forumlar habe ich zur korrektur an die Arbeitsverwaltung/Steueramt gesendet.Alle aufgeliesteten angaben müssen auf einem Korrekten Formular angegeben werden.

    Falls du fragen hast schreib mich an, falls ihr verbesserugspotetional seht, lasst es mich wissen.
    @schnibli hört sich gigantisch an, was du da zusammen geschraubt hast! Würde mich freuen, mal die Demo-Version o.ä. zu sehen.
    @mox MySQL bietet heutzutage die einfachste Schnittstelle. War auch lange am überlegen, habe mich dann doch für MySQL entschieden.
    Bei mir war es eher der Hintergrund, das es dann auch "gehostet" werden kann. Viele wenn nicht sogar alle großen Firmen bauen ja mitlerweile auf Virtualisierungen auf. Alles kommt in die Cloud,... Mit MySQL und einer Router zu Server VPN Verbindung hast du jeden Standort der Welt "sicher" abgedeckt.

    Ich weiß von einer Firma, die haben die kompletten Firmendaten in einen Cloudserver gesteckt um so leicher mit insgesammt 27 Standorten zu arbeiten.
    Jeder Standort hat einen Router der mit 2048Bit eine VPN Verbindung zur Cloud aufbaut,... Als Endpunkte werden nur noch Thinclients verwendet die eine "etwas höhere" Austattung besitzen.
    Stromersparnis pro Standort zwischen 50-70% nur an der Computeranlage, Zugriff Weltweit auf die notwendigen Daten, PortableClients mit Software RSA2048 für den mobilen Zugriff (Notebooks)

    Und um die Backups muss sich keiner mehr kümmern.
    Wenn man mehrere Standorte hat, ist es egal ob man nicht an die Zentralen Server kommt wenn man entweder kein Internet hat oder wenn man kein Internet hat ;)
    Die Server stehen nur etwas zentraler ;)

    Daher auch meine Entscheidung für MySQL
    Nein! Doch! OHH!
    Ähm, direkte Verbindung mit MySQL? Also Zugangsdaten für den MySQL direkt im Programm hardcoded?

    Ich hoffe sehr sehr stark, dass der Rechner auf dem das läuft absolut abgeschottet ist, ansonsten kommen mein verhasster Kollege einfach plötzlich die letzten 4 Wochen zu spät und ist schwärze Ihn beim Chef an ;)

    Eine bessere Lösung wäre evtl. auf dem MySQL Server noch eine PHP API laufen zu lassen. So läufst du auch keine Gefahr, dass dir jemand SQL-Injection macht.
    @Manawyrm Ich hab die SQL Daten nicht hardcoded... ich hole die über einen Webrequest verschlüsselt ab, gleich die innerhalb von VB ab und entschlüssel diese...
    Verwendet hab ich für die Infos eine 1024 verschlüsselung, funktioniert auch ganz gut... die Daten bekommt man nur über eine Lokale IP Adresse (VPN in die Cloud oder Firmeninternes Netzwerk)
    Meine Überlegung war schon es so zu machen das ich es als Webclient laufen lasse...
    Sprich nach RFID Scan das ganze per URL weitergebe und komplett über PHP verarbeite...
    Nein! Doch! OHH!

    samson schrieb:

    ich hole die über einen Webrequest verschlüsselt ab, gleich die innerhalb von VB ab und entschlüssel diese...

    Das machts nicht wirklich besser.

    ​Meine Überlegung war schon es so zu machen das ich es als Webclient laufen lasse...
    Sprich nach RFID Scan das ganze per URL weitergebe und komplett über PHP verarbeite...

    Das hingegen klingt nach einer äußerst guten Idee. Würde ich dir sehr empfehlen :)

    Viele Grüße,
    Manawyrm

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Manawyrm“ ()