Autor |
Beitrag |
freak4fun
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Di 01.07.14 19:58
Hallo Leute,
ich bin dabei C# zu lernen und habe mich für ein Programm zur Arbeitszeiterfassung entschieden.
Meine Bitte an euch ist, mir ein paar Ideen zu geben, was für Funktionen enthalten sein sollten.
Ich freue mich auf rege Beteiligung.
Freundliche Grüße
freak4fun
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
Blawen
      
Beiträge: 616
Erhaltene Danke: 33
Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
|
Verfasst: Di 01.07.14 22:31
freak4fun hat folgendes geschrieben : | Meine Bitte an euch ist, mir ein paar Ideen zu geben, was für Funktionen enthalten sein sollten. |
Es wäre sicherlich hilfreich, wenn Du ein wenig mehr über die Hintergründe erzählen würdest.
Mir stellen sich z.B. gleich mal folgende Fragen:
Soll nur eine "normale" Stempeluhr nachgebildet werden oder sollen z.B. verrechenbare Zeiten (z.B. Reparaturzeiten/Auftrag) einzeln erfasst werden, oder..oder.
Soll neben der Zeiterfassung am PC, z.B. auch eine mobile Zeiterfassung möglich sein (manuell oder z.B. wenn sich das Mobile-Phone im Arbeitsbereich befindet),...
Ich denke, die Grenze dürfte vermutlich die Fantasie und das Budget sein 
_________________ Es kompilert, wir können ausliefern.
Und es kompiliert wieder - das Update ist fertig - bitte 100 Euro
|
|
baumina
      
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: Mi 02.07.14 09:36
Ich habe vor Jahren eine Zeiterfassung als Zusatzmodul zu Büroware mit dem schönen Namen TIM (Abkürzung für TimeIsMoney) geschrieben. Diese enthielt kurz umrissen folgendes:
1. Personalanmeldung (Wer bin ich)
2. Art der Erfassung
2a. von ... bis (Eingabe Datum / Uhrzeit für Beginn und Ende)
2b. Dauer (Eingabe Anzahl Stunden / Minuten)
2c. Beginn / Ende (Eingabe Datum / Uhrzeit für Beginn oder Ende) ... liegt eine Beginnmeldung in der DB, dann Ende vorschlagen, sonst Beginn vorschlagen
3. Bei neuer Meldung -> Projekt / Auftrag / Fertigungsschritt wählen
4. je nach Bedarf weitere Werte erfassen lassen (z.B. eine Bemerkung)
5. Button Pause buchen (in Pause gehen / Pause beenden / Pause von ... bis oder Dauer der Pausen)
6. Button Buchung durchführen
Für diesen Beitrag haben gedankt: freak4fun
|
|
avoid
      
Beiträge: 230
Erhaltene Danke: 4
MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
|
Verfasst: Fr 04.07.14 20:14
Frage: Soll dein Programm standalone oder Client/Server basiert sein?
Eine Funktion sollte auf jeden fall sein, Mitarbeiter an legen zu können (Name, Abteilung, Kürzel, ...).
Falls nötig incl. Adresse und anderer Personaldaten, wenn es auch um die Buchhaltung und Rechnungsstellung geht.
Dann würde ich mich fragen ob die Zeiten Manuell oder Automatisch erfasst werden sollen.
Manuell braucht es auf jeden fall eine Intuitive Eingabemaske.
Dann solltest du dir die frage stellen ob du Start und Ende erfassen willst wie bei einer Stempeluhr
oder ob du einfach nur erfassen willst z. b. "8 Std. Arbeitszeit an diesem Tag".
Dabei musst du noch mit einplanen Möglichkeiten für Zuschläge, z. b. bei Überstunden
oder an Wochenende und Feiertagen, zu schaffen.
Als nächstes würde ich noch eine Auswahlmöglichkeit einbauen, die es ermöglicht
auszuwählen was man in der gebuchten zeit gemacht hat.
War man im Innen- oder Außendienst oder im Urlaub evtl. war es eine Service oder Garantie Arbeit?
Das unterscheidet sich von Beruf zu beruf so stark das du da einfach selbst was aussuchen und vorgeben musst.
Aber zur besseren Flexibilität sollte noch die Möglichkeit eines Kommentarfeldes bestehen.
Da kann man dann nochmal genauer rein Tippeln was man wirklich gemacht hat oder Infos vermerken.
Als letztes solltest du dich noch fragen ob damit auch direkt Rechnungen erstellt werden sollen.
Dann musst du auch Kunden anlegen können und bei der Buchung der Arbeitszeit eine Möglichkeit haben den Richtigen Kunden aus zu wählen.
Dann ist es auch schon nicht mehr weit zum einfachen Wahrenwirtschafts System.
Bau noch eine Datenbank mit Lieferanten und von denen Erhaltene Wahren mit ein.
Dann kannst du zur Arbeitszeit auch gleich verbrauchtes Material mit buchen und Abrechnen.
und dann, und dann, und dann kannst du dir auch gerne mal meine RFID-Zeiterfassung ansehen.
www.entwickler-ecke....ewtopic.php?t=110639
soweit meine Ideen dazu.
Gruß
_________________ Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
|
|
freak4fun 
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Fr 04.07.14 21:08
Ich danke euch dreien für die ausführlichen Antworten.
Meine Frage geht eher ins Kleine. Ich möchte die Arbeitszeit, also Beginn und Ende erfassen und daraus die dauer berechnen.
Gedacht ist es erstmal für einen Minijob, der unregelmäßig gemacht wird, um die reelle Arbeitszeit zu haben.
Eure Ideen fließen mit ein. 
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
avoid
      
Beiträge: 230
Erhaltene Danke: 4
MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
|
Verfasst: Sa 05.07.14 17:31
Um einfach nur Beginn und Ende zu erfassen und daraus die Zeitspanne zu errechnen, hast du zwei Möglichkeiten.
1. einen Button "Beginn/Ende" der eine bool variable tooglet und beim klick wird der aktuelle Zeitstempel gespeichert.
beim Ende-Klick wird zusätzlich die Zeitspanne berechnet und gespeichert.
2. zwei Eingabefelder in die man Beginn- und Endzeit eintragen kann
und beim blick auf einen "Hinzufügen" Button werden die Eingaben und die errechnete Zeitspanne gespeichert.
dabei musst du aber aufpassen das du die Eingabe auf Gültigkeit prüfst oder falsch eingaben irgendwie abfängst.
Ich tendiere zu Variante 1.
Die macht aber nur sinn wenn du wirklich zu Beginn und Ende auch die Möglichkeit zum klicken hast.
Variante 2 ist die richtige Wahl wenn du die Zeiten nicht sofort sondern erst später Erfassen kannst.
evtl. könntest du dann sogar noch ein drittes Eingabefeld für XYZ Minuten Pause zwischen Beginn und Ende einfügen.
hier ein par Codefragmente die dir dabei evtl. helfen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84:
| string formatdatum = "dd.MM.yyyy"; string formatzeit = "HH:mm:ss"; string filePath2 = Application.StartupPath + "\\zeiten.xml"; if (File.Exists(filePath2)) { dataTable_zeiten.ReadXml(filePath2); } dataTable_zeiten.WriteXml(filePath2); public void add_anfang_zeit(string empf, string besch) { DateTime dtstamp = DateTime.Now; try { DataRow myRow; myRow = dataTable_zeiten.NewRow(); myRow["Tag-ID"] = empf; myRow["Beschreibung"] = besch; myRow["Datum"] = dtstamp.ToString(formatdatum); myRow["Start"] = dtstamp.ToString(formatzeit); myRow["Ende"] = ""; myRow["Dauer"] = ""; dataTable_zeiten.Rows.Add(myRow); } catch { MessageBox.Show("Fehler beim hinzufügen in Tag-ID Start Zeiten."); } dataGridView_zeiten.ClearSelection(); dataGridView_zeiten.CurrentCell = null; if (dataGridView_zeiten.Rows.Count >= 1) { dataGridView_zeiten.FirstDisplayedScrollingRowIndex = dataGridView_zeiten.Rows.Count - 1; } dataTable_zeiten.WriteXml(filePath2); }
public void add_ende_zeit(string empf) { DateTime dtstamp = DateTime.Now;
DataRow[] foundRow = dataTable_zeiten.Select("[Tag-ID] = '" + empf + "'"); int rowIndex = dataTable_zeiten.Rows.IndexOf(foundRow[foundRow.Length - 1]); DateTime szeit = Convert.ToDateTime(dataTable_zeiten.Rows[rowIndex]["Start"]); string besch = dataTable_zeiten.Rows[rowIndex]["Beschreibung"].ToString(); TimeSpan dauer = dtstamp - szeit;
try { DataRow myRow; myRow = dataTable_zeiten.NewRow(); myRow["Tag-ID"] = empf; myRow["Beschreibung"] = besch; myRow["Datum"] = dtstamp.ToString(formatdatum); myRow["Start"] = szeit.ToString(formatzeit); myRow["Ende"] = dtstamp.ToString(formatzeit); myRow["Dauer"] = dauer.ToString("hh\\:mm\\:ss"); dataTable_zeiten.Rows.Add(myRow); } catch { MessageBox.Show("Fehler beim hinzufügen in Tag-ID Ende Zeiten."); } dataGridView_zeiten.ClearSelection(); dataGridView_zeiten.CurrentCell = null; if (dataGridView_zeiten.Rows.Count >= 1) { dataGridView_zeiten.FirstDisplayedScrollingRowIndex = dataGridView_zeiten.Rows.Count - 1; } dataTable_zeiten.WriteXml(filePath2); } String beginnzeit="11:32", endzeit="23:59", dauer=""; TimeSpan timeSpan_b = TimeSpan.Parse(beginnzeit); TimeSpan timeSpan_e = TimeSpan.Parse(endzeit); TimeSpan dauer_eb = timeSpan_e - timeSpan_b; dauer = Convert.ToString(dauer_eb); |
da ist zwar einiges am Müll dabei den du so nicht brauchst aber falls dir noch was fehlt sag bescheid.
Gruß
_________________ Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
|
|
freak4fun 
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Sa 05.07.14 18:59
Danke avoid,
ich schau mir deinen Code gerne an. Allerdings ist meine Frage eher an die Anforderungen gestellt, als an die Umsetzung.
Ich fange klein an. Und dann erde ich eventuell weiter machen.
Wenn du noch Funktionen hast, die sinnvoll sind, dann immer her damit. 
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
avoid
      
Beiträge: 230
Erhaltene Danke: 4
MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
|
Verfasst: Mo 07.07.14 01:29
Ich hab dir mal ein kleines Beispiel gebaut.
Einfach Datum, Startzeit und Endzeit einstellen
und bei bedarf noch was ins Bemerkungsfeld eintragen.
Versuch doch mal das mit den Pausenzeiten mit rein zu bringen
oder ein Dropdown_Control mit einer Auswahl von möglichen Tätigkeiten
um damit das Bemerkungsfeld schneller ausfüllen zu könnte.
Evtl. währe auch die Möglichkeit, Einträge per Rechtsklick zu Bearbeiten
oder zu Löschen eine Benutzerfreundliche Sache.
man könnte auch noch einen Anzeigefilter bauen der z. b.
nur bestimmte Tätigkeiten oder einen bestimmten Zeitraum anzeigt.
und natürlich darf eine Druckfunktion nicht fehlen.
Ich werde wohl noch weiter daran rumschrauben.
Das Thema gefällt mir.
Gruß
Einloggen, um Attachments anzusehen!
_________________ Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
|
|
freak4fun 
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Mo 07.07.14 17:15
Moin avoid,
freut mich das dir das Thema gefällt.
So ähnlich sieht mein Programm auch aus. Pausenzeiten sind nicht vorgesehen, aber die Arbeitszeit ist auch über Nacht, also ein Tagwechsel.
Bearbeiten und Löschen habe ich auch drin. Statt XML benutze ich SQLite.
Das man die View als XML speichern kann ist mir neu, gut zu Wissen. Und ich sollte mehr Convert benutzen.
Würde mich freuen, wenn du weiter machst und ich mir das auch ansehen kann. Noch schöner wäre wenn wir zusammen an einem kleinen Programm arbeiten könnten, dann wäre der Aufwand halbiert. 
Einloggen, um Attachments anzusehen!
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
avoid
      
Beiträge: 230
Erhaltene Danke: 4
MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
|
Verfasst: Mo 07.07.14 18:40
XML verwende ich, damit meine kleinen Tools Standalone laufen.
so sind keine Installation und keine Admin-Rechte nötig.
ich speichere aber nicht das datagridview sondern die dataTable des dataset, die über ein bindingsource einfach mit dem datagridview verknüpft ist.
Arbeitszeiten von einem bis zum anderen Tag waren mir auf die schnelle zu aufwändig.
ich müsste dafür erst mal sehen wie ich beim "dateTimePicker" Datum und zeit eintragen kann.
Deine Oberfläche ist auf jeden fall gut übersichtlich.
Klar könnten wir das zusammen machen, nur ist deine Anwendung doch schon so gut wie fertig.
den Filter und die Auswertung würde ich evtl. in ein extra Form stecken das man mit einem Button "Auswertung" öffnen kann.
dann trägt man die Filter ein und kann die gefundenen Einträge dann drucken.
das würde mir fehlen, sonst hast du ja alles drin.
sofern du nicht doch noch Pausenzeiten als Option einbauen willst.
Gruß
_________________ Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
|
|
freak4fun 
      
Beiträge: 604
Erhaltene Danke: 4
Win 7 Pro
VS 2013 Express, Delphi, C#, PHP, Java
|
Verfasst: Mo 07.07.14 20:06
_________________ "Ich werde auf GAR KEINEN Fall…!" - "Keks?" - "Okay, ich tu's."
i++; // zaehler i um 1 erhoehen
|
|
avoid
      
Beiträge: 230
Erhaltene Danke: 4
MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
|
Verfasst: Mo 07.07.14 21:03
hm das mit den Admin-Rechten vom Ordner hab ich noch nicht versucht.
da wird Windows 8 und 8.1 sicher rum Zicken.
aber ich gehe davon aus das jemand der die rechte hat die exe zu speichern auch die rechte hat, das diese exe eine XML anlegen darf.
wenn nicht hat der Admin Paranoia und sollte behandelt werden.
die Datenbankelemente die ich verwende sind wie folgt verbunden:
-> Datasource (beinhaltet eine Datatable)
---> Bindingsource (greift auf die Datasource bzw. deren Datatable zu)
-----> DataGridView (greift auf das Bindingsource zu)
alles weitere mache ich direkt mit der Datatable (hinzufügen, bearbeiten, löschen).
so habe ich im DataGridView immer die aktuelle Ansicht ohne Refrash oder Update machen zu müssen.
so kann ich z.b. schon im bindingsource den das hinzufügen neuer einträge sperren.
damit geht das im DataGridView schon garnicht mehr und man verhindert falscheingaben durch Tab-Taste und ähnliches.
_________________ Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 07.07.14 21:06
Hallo,
Erklärungen zur Programmierung würde ich dann doch gerne in den entsprechenden Programmiersparten sehen, das ist im Off Topic nicht gut aufgehoben
Danke Euch,
Christian
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
|