Skip to main content
Weil einfach - produktiver ist

Der Daten Spezialist

Konvertieren Sie die Daten mühelos zwischen verschiedenen Formaten ohne Programmierkenntnisse dank Visual Designer. Effizient und super einfach.
Flowheater Download

Addition Stempelzeiten

Mehr
3 Jahre 6 Monate her #4002 von Michael
Addition Stempelzeiten wurde erstellt von Michael
Hallo Herr Stark,

aus einer Zeiterfassung bekommen wir täglich eine Exportdatei (txt) mit den aktuellen Stempelzeiten. Diese werden mit dem Flowheater in eine Datenbank geschrieben (ERP). Wenn nun aber ein Mitarbeiter tagsüber ausstempelt oder längere Pause macht, dann haben wir in der Datei mehrere Kommen/gehen Stempelungen an einem Tag. Das wird im ERP schnell unübersichtlich. Ich habe nun mit einem Heater die Summen addiert. Das passt auch. Aber wie kann ich bei mehreren Einträgen nur die erste Kommen-Stempelung und die letze Geht-Stempelung filtern. Die Kommen/Gehen Einträge dazwischen sollen ignioriert werden, die Summe der Stunden wird addiert. So wäre im ERP nur noch eine Zeile zu sehen, die Differenz zwischen der addierten Summe und der Summe zwischen Kommen und Gehen wäre dann Pause (oder eben unbezahlte Zeit).

Gruß Michael

Bitte Anmelden um der Konversation beizutreten.

Mehr
3 Jahre 6 Monate her #4004 von FlowHeater-Team
FlowHeater-Team antwortete auf Addition Stempelzeiten
Hallo Michael,

das ist nicht ganz so einfach, geht aber. Das Problem ist, dass der FlowHeater Satzweise arbeitet und bei der Verarbeitung eines Satzes nicht weiß ob zu der Gruppierung noch was kommt.

Der Erste Datensatz einer Gruppierung kann über den AutoID Heater problemlos ermittelt werden, damit lässt sich was basteln. Das Vorgehen ist folgendes. Einlesen der Textdatei mit dem TextFile Adapter in eine ImMemory Adapter Tabelle. Hier wird die ursprüngliche Reihenfolge der Textdatei per AutoID Heater festgehalten. Diese ID (Reihenfolge) verwenden wir im zweiten Verarbeitungsschritt um die Datensätze zu aktualisieren. Per weiteren AutoID Heater mit aktivierter Option „Gleiche Eingangsparameter“ zu zählen wird ein Feld beschrieben das angibt ob es der Erste bzw. Letzte Datensatz einer Gruppe ist. Im ersten Verarbeitungsschritt markieren wir so die Erste Stempelzeit.

Im Zweiten Verarbeitungsschritt lesen wir nun die InMemory Tabelle und sortieren anhand der Reihenfolge „absteigend“. Hier markieren wir wieder den Ersten Datensatz, was in diesem Fall der Letzte der Gruppe ist. Den InMemory Adapter stellen wir hier auf nur Datensätze aktualisieren ein und filtern per Filter Heater zusätzlich alle anderen Datensätze heraus. So wird pro Gruppe nur der Letzte Datensatz aktualisiert.

Im Letzten Verarbeitungsschritt stellen wir die Sortierung wieder auf „aufsteigend“ um die Ursprüngliche Reihenfolge zu erhalten und filtern alle nicht markierten Datensätze (außer Erster bzw. Letzter) heraus, das war´s.

Im Anhang habe ich Ihnen ein kleines Beispiel erstellt.



Dateianhang:

Dateiname: stempelzeiten.zip
Dateigröße:17 KB

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Anhänge:

Bitte Anmelden um der Konversation beizutreten.

Mehr
3 Jahre 6 Monate her #4008 von Michael
Michael antwortete auf Addition Stempelzeiten
Hallo Herr Stark,

vielen Dank für die Info. Ich hänge noch an der Umsetzung. Wie kann ich daraus wieder ein Textfile generieren?
Im Anhang finden Sie noch eine Demo-Datei (Quell-Datei). Hier sind die K/G-Zeiten in verschiedenen Spalten abgelegt. Geht das so auch?

Vielen Dank für die Unterstützung.
Gruß Michael S.
Anhänge:

Bitte Anmelden um der Konversation beizutreten.

Mehr
3 Jahre 6 Monate her #4009 von Michael
Michael antwortete auf Addition Stempelzeiten
Hallo,

das Output-File habe ich gefunden - hatte ich übersehen.
Ich hänge noch am Punkt dass Kommen/gehen zwei Spalten sind.

Gruß Michael

Bitte Anmelden um der Konversation beizutreten.

Mehr
3 Jahre 6 Monate her #4010 von FlowHeater-Team
FlowHeater-Team antwortete auf Addition Stempelzeiten
Hallo Michael,

Das mit “kommen” und “gehen” in einem Datensatz geht natürlich auch wird aber etwas komplexer :-) Ich habe mal im Angang ein Beispiel dazu erstellt. Hier werden folgende Verarbeitungsschritte ausgeführt.
  1. Einlesen der Textdatei in die InMemory Adapter Tabelle „Stempelzeiten“ und markieren des ersten Datensatzes der Gruppierung über die Felder Mandant, Mitarbeiter und Datum.
  2. Die Arbeitsstunden über die Gruppierung berechnen, die Stunden werden zur Gruppierung nach den Feldern Mandant, Mitarbeiter und Datum in einer weiteren InMemory Adapter Tabelle „Summen“ abgelegt.
  3. Hier wird die letzte Stempelzeit markiert.
  4. Ausgabe in die Textdatei. Die Daten werden anhand der Felder Mandant, Mitarbeiter und Datum über den GroupBy Heater  gruppiert, sowie werden nur markierte (Erster/Letzter Datensatz) bei der Verarbeitung im InMemory Adapter berücksichtigt (= WHERE Klausel [FirstLast] = 'ja'). Über die weitere Bedingung wird gesteuert, dass das Feld „KOMMEN“ nur beim ersten Datensatz der Gruppierung gesetzt wird. Die Summen der Arbeitsstunden wird hier über den String Replace Heater  per Datenlookup aus der InMemory Adapter Tabelle „Summen“ realisiert.
Schauen Sie sich das bitte mal an, ich denke das sollte das sein, was Sie benötigen.

Dateianhang:

Dateiname: exportza.zip
Dateigröße:26 KB

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Anhänge:

Bitte Anmelden um der Konversation beizutreten.

Mehr
2 Jahre 3 Monate her #4430 von Michael
Michael antwortete auf Addition Stempelzeiten
Hallo Herr Stark,

ich habe versucht, die Zeiten in der Ausgabe noch auf viertel Stunden zu runden. Das ist mir nicht gelungen. Können Sie mich dabei unterstützen?

Vielen Dank

Gruß, Michael

Bitte Anmelden um der Konversation beizutreten.

Mehr
2 Jahre 3 Monate her #4431 von FlowHeater-Team
FlowHeater-Team antwortete auf Addition Stempelzeiten
Hallo Michael,

Ich habe das Beispiel mal angepasst, es wird hier mit Industrieminuten (= eine Stunde hat 100 Minuten) gerechnet wird. Aktuell wird immer abgerundet so dass wenn eine Viertelstunde noch nicht erreicht wird abgerundet wird. Andere Rundungen können gerne angepasst werden.

Um das zu erreichen wurde ein .NET Script Heater hinzugefügt der untenstehendes C# Skript für das Runden der Industrieminuten verwendet.

C# Skript um Industrieminuten zu Runden
Code:
public object DoWork() {   if (InValues.Length != 1)     throw new Exception("1 Eingangsparameter erwartet!");        object o = InValues[0].GetDecimal();   if (o == null)     throw new Exception("Eingangsparameter konnte nicht in eine Zahl umgewandelt werden!");   decimal d = Convert.ToDecimal(o);   // Vorkommastellen   decimal v = Math.Truncate(d);   // Nachkommastellen   decimal n = (d % 1) * 100;   // Industrieminuten runden   if (n < 25)     n = 0;   else if (n < 50)     n = 25;   else if (n < 75)     n = 50;   else     n = 75;   // Gerundeten Wert zurückgeben   return v + (n / 100); }


 

Dateianhang:

Dateiname: industriem...nden.zip
Dateigröße:27 KB

 

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.

Bitte Anmelden um der Konversation beizutreten.

Mehr
2 Jahre 1 Monat her #4495 von Michael
Michael antwortete auf Addition Stempelzeiten
Hallo Herr Stark,

wir haben das Skript getestet. Die Zeiten werden hier immer nach unten abgerundet. Kann man das theoretisch auch anpassen, so dass die Zeiten gerechter gerundet werden? Also die 15 Minuten dann bis 7,5 nach unten, ab 7,5 nach oben.

Gruß
Michael

Bitte Anmelden um der Konversation beizutreten.

Mehr
2 Jahre 1 Monat her #4496 von FlowHeater-Team
FlowHeater-Team antwortete auf Addition Stempelzeiten
Hallo Michael,

natürlich geht das, hier das angepasst Skript. Sie können die Werte im Skript einfach anpassen, siehe Kommentare im Skript.

C# Skript um Industrieminuten zu Runden
Code:
public object DoWork() {   if (InValues.Length != 1)     throw new Exception("1 Eingangsparameter erwartet!");        object o = InValues[0].GetDecimal();   if (o == null)     throw new Exception("Eingangsparameter konnte nicht in eine Zahl umgewandelt werden!");   decimal d = Convert.ToDecimal(o);   // Vorkommastellen   decimal v = Math.Truncate(d);   // Nachkommastellen   decimal n = (d % 1) * 100;   // Industrieminuten runden   if (n <= 12) // Hier anpassen   {     // Abrunden auf volle Stunde     n = 0;   }   else if (n <= 37) // Hier anpassen   {     n = 25;   }   else if (n <= 62) // Hier anpassen   {     n = 50;   }   else if (n <= 87) // Hier anpassen   {     n = 75;   }   else   {     // auf volle Stunde aufrunden         v++;     n = 0;   }   // Gerundeten Wert zurückgeben   return v + (n / 100); }
 

gruß
Robert Stark

Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.

Bitte Anmelden um der Konversation beizutreten.

Ladezeit der Seite: 0.388 Sekunden

FlowHeater - Der Daten Spezialist

Effiziente Datenintegration und Transformation mit FlowHeater - Ihre Lösung für nahtlosen Datentransfer.

Rechtliches

Support & Kontakt

Kontaktinformation

Telefon:
0951 / 99339792

E-Mail:
Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.


Copyright © 2009-2024 by FlowHeater GmbH. Alle Rechte vorbehalten.