vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 09.11.18 19:53

moin zusammen

ich habe ein kleines Problemchen "Berechnung von meiner Restzeit"

ich habe eine Tabelle mit den Spalten Datum |Dauer |Restzeit

Dauer = Zeit in Minuten für eine Aufgabe
Restzeit = Verfügbare Zeit für nächste Aufgabe

also pro Tag habe ich 480 Minuten Arbeitszeit Verfügbar

ich schreibe eine Aufgabe in meine Tabelle

08.11.2018 Aufgabe-A Dauer 20 Minuten Restzeit 460 M
08.11.2018 Aufgabe-B Dauer 60 Minuten Restzeit 400 M
09.11.2018 Aufgabe-A Dauer 30 Minuten Restzeit 450 M, ist ja ein neuer Tag andem ich wieder 480 Minuten habe
09.11.2018 Aufgabe-B Dauer 70 Minuten Restzeit 380
usw. derzeit trage ich es manuell ein

wie kann ich das automatisch rechnen lassen in einer DGV
unter Berücksichtigung das ggf. die Dauer angpasst werden muss die Aufgabe schneller bzw. mehr Zeit in Anspruch genommen hat als beim Eintrag geschätzt wurde?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: Kuno60
Datum: 09.11.18 21:23

So kannst du automatisch die Restzeit berechnen:
    Dim Restzeit As Integer = 480
    Dim Datum As Date
 
    For Each satz In Tabelle
      If satz.Datum > Datum Then
        Restzeit = 480
        Datum = satz.Datum
      End If
      Restzeit -= satz.Dauer
      satz.Restzeit = Restzeit
    Next
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 09.11.18 22:00

Danke Kuno,

ich glaube hast mich verstanden aber es passt noch nicht wie wir uns das denken.

https://picload.org/view/dcoaorpr/09-11-_2018_21-54-04.png.html

meinen Basiswert (480) habe ich in einer TB stehen evtl. falsch?

ich habe es mal auf einen Button gelegt zum testen
könnte man eine Funktion machen?

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
   Button1.Click
        Dim Restzeit As Integer = 480
        Dim Datum As Date
 
        For Each satz In AblageDB.Notizen
            If satz.ToDoEintrag > Datum Then
                Restzeit = 480
                Datum = satz.ToDoEintrag
            End If
            Restzeit -= satz.ToDoRestzeit
            satz.ToDoRestzeit = Restzeit
        Next
 
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: Franki
Datum: 10.11.18 03:49

Hallo,
die Rechnerei mit Zeiten ist bzw. sollte immer von Anfangsdatum bis Enddatum gehen (jeweils mit Uhrzeit) Dann kannst du auch einen Tageswechsel usw. automatisch anhand des Datum berücksichtigen.

In deiner Tabelle sollte stehen: Anfangszeit / Endzeit jeweils mit Datum. Die Dauer braucht da nicht extra gespeichert zu werden, die ergibt sich rechnerich aus der Differenz der beiden Einträge.
Die Restzeit ebenfalls. Du solltest ds Design der Datenerfassung überdenken, denn so wie du das machst ist das unnötig kompliziert und fehleranfällig.

Schau dir mal die Berechnung von Zeiten an, da wirst du sehen wie das gemacht werden kann...

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 10.11.18 17:13

Hallo Franki,

habe nun 2 DTPstart DTPende hinzugefügt und die entsprechenden Felder Beginn Ende der Tabelle hinzugefügt

https://picload.org/view/dcoacoca/10-11-_2018_16-27-30.png.html

Berechnen tue ich es so:

  Private Sub calc_Dauer()
        Dim Dauer_TotalMinuten = (dtp_Ende.Value - dtp_Start.Value).TotalMinutes
 
        If Dauer_TotalMinuten > nud_Dauer.Maximum Then nud_Dauer.Maximum = _
          CDec(Dauer_TotalMinuten) 'Control-Maximimum-Eigenschaft
        If Dauer_TotalMinuten < nud_Dauer.Minimum Then nud_Dauer.Minimum = CDec( _
        Dauer_TotalMinuten) 'Control-Maximimum-Eigenschaft
        nud_Dauer.Value = CDec(Dauer_TotalMinuten)
    End Sub
nun meine Frage: wenn ich mir eine Neue Aufgabe setze wie gehe ich mit den dtp um?
binde ich die an meine DS oder?
wie die korrekte Restzeit berechnen, alles was > meine Arbeitszeit ist möchte ich auf ein "Plus Konto" schreiben als Gleitzeit Konto

leider kann ich nicht so gut erklären
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 10.11.18 17:54

konnte den Beitrag nicht mehr editieren.

ich muss das hinzufügen eines Datensatzes (Aufgabe) bis z.Bsp. 16:00 zulassen ansonsten sperren

das Rechnen mit der Restzeit will bei mir noch nicht in den Kopf

https://picload.org/view/dcoaclwa/10-11-_2018_17-47-10.png.html
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: effeff
Datum: 10.11.18 19:58

Warum hast Du bei den Basisdaten die Möglichkeit, Daten einzugeben, aber bekommst diese bei der Dateneingabe nur angezeigt? Das ist doch unlogisch, da die Möglichkeit, Daten einzugeben, doch gerade bei der Dateneingabe Sinn macht...

Wozu benötigst Du die Möglichkeit der Eingabe der Dauer, wenn sich diese doch aus Beginn und Ende ergibt?

Und wo hast Du nun ein Problem mit der Berechnung? Du hast irgendwo ein Basisguthaben. Deine DataTable-Spalten machst Du eben teilweise so, dass sie Daten berechnen.

Siehe: https://docs.microsoft.com/de-de/dotnet/api/system.data.datacolumn.expression?view=netframework-4.7.2

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 10.11.18 20:07

Warum hast Du bei den Basisdaten die Möglichkeit, Daten einzugeben, aber bekommst diese bei der Dateneingabe nur angezeigt? Das ist doch unlogisch, da die Möglichkeit, Daten einzugeben, doch gerade bei der Dateneingabe Sinn macht...
da fiel mir nichts anderes ein

Du hast irgendwo ein Basisguthaben. Deine DataTable-Spalten machst Du eben teilweise so, dass sie Daten berechnen.

und da ist nun mein Problem

ich sehe du hast im Prinzip verstanden was die DGV anzeigen soll?

wenn du da eine andere Idee Beispiel hast, Danke!

muss doch irgendwie gehen

Basis = 07:00 bis 15:00 oder 480 Minuten
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: effeff
Datum: 11.11.18 12:18

Als Denkanstoß...

Du hast doch immer nur die Daten eines Tages, oder? D. h., Du wirst bei Deinen Berechnungen nie eine Tagesgrenze überschreiten.

Gehen wir vom folgenden aus: Du hast ein DateTimePicker namens "dtpBeginn" und einen namens "dtpEnde". Du hast einen Button namens "btnUebernehmen", eine ComboBox namens "cmbArt" und eine namens "cmbPrioritaet" mit entsprechenden Labels. Zudem noch ein DataGridView namens "DataGridView1".

Fangen wir an:

Public Class Form1
 
    Dim dt As New DataTable
    Dim iBasiszeit As Integer = 480
    Dim iRestzeit As Integer = 0
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        dtErstellen()
        dgvEinstellen()
        cmbArtFuellen()
        cmbPrioritaetFuellen()
    End Sub
 
    Private Sub dgvEinstellen()
        With DataGridView1
            .DataSource = dt
            .RowsDefaultCellStyle.BackColor = Color.White
            .AlternatingRowsDefaultCellStyle.BackColor = Color.Azure
            .AllowUserToAddRows = False 'Die Zeilen werden per Code hinzugefügt
        End With
    End Sub
 
    Private Sub DTPsEinstellen()
        With dtpBeginn
            .Format = DateTimePickerFormat.Custom
            .CustomFormat = "HH:mm"
            .ShowUpDown = True
        End With
        With dtpEnde
            .Format = DateTimePickerFormat.Custom
            .CustomFormat = "HH:mm"
            .ShowUpDown = True
        End With
    End Sub
 
    Private Sub dtErstellen()
        dt.TableName = "Irgendwas"
 
        Dim cID As New DataColumn
        cID.DataType = System.Type.GetType("System.Int32")
        cID.AutoIncrement = True
        cID.ColumnName = "ID"
        dt.Columns.Add(cID)
        Dim pKey(1) As DataColumn
        pKey(1) = dt.Columns("ID")
        dt.PrimaryKey = pKey
 
        Dim cBeginn As New DataColumn
        cBeginn.DataType = System.Type.GetType("System.DateTime")
        cBeginn.ColumnName = "Beginn"
        dt.Columns.Add(cBeginn)
 
        Dim cEnde As New DataColumn
        cEnde.DataType = System.Type.GetType("System.DateTime")
        cEnde.ColumnName = "Ende"
        dt.Columns.Add(cEnde)
 
        Dim cArt As New DataColumn
        cArt.DataType = System.Type.GetType("System.String")
        cArt.ColumnName = "Art"
        dt.Columns.Add("Art")
 
        Dim cPrioritaet As New DataColumn
        cPrioritaet.DataType = System.Type.GetType("System.String")
        cPrioritaet.ColumnName = "Prioritaet"
        dt.Columns.Add("Prioritaet")
 
        Dim cDauer As New DataColumn
        cDauer.DataType = System.Type.GetType("System.Int32")
        cDauer.ColumnName = "Dauer"
        dt.Columns.Add(cDauer)
 
        Dim cRestzeit As New DataColumn
        cRestzeit.DataType = System.Type.GetType("System.Int32")
        cRestzeit.ColumnName = "Restzeit"
        dt.Columns.Add(cRestzeit)
 
    End Sub
 
    Private Sub cmbArtFuellen()
        With cmbArt
            .Items.Add("Aufgabe")
            .Items.Add("Irgendwas")
            .Items.Add("Nochwas")
        End With
    End Sub
    Private Sub cmbPrioritaetFuellen()
        With cmbPrioritaet
            .Items.Add("A")
            .Items.Add("B")
            .Items.Add("C")
        End With
    End Sub
 
    Private Sub btnUebernehmen_Click(sender As Object, e As EventArgs) Handles _
      btnUebernehmen.Click
 
        If cmbArt.Text = "" Then
            MessageBox.Show("Sie müssen erst noch eine Art auswählen!", _
              "Hinweis:")
            Exit Sub
        End If
        If cmbPrioritaet.Text = "" Then
            MessageBox.Show("Sie müssen erst noch die Priorität auswählen!", _
              "Hinweis:")
            Exit Sub
        End If
        If dtpBeginn.Value = dtpEnde.Value Or dtpBeginn.Value > _
          dtpEnde.Value Then
            MessageBox.Show("Kontrollieren Sie bitte Ihre Zeiten!", "Hinweis:")
            Exit Sub
        End If
 
        Dim NewRow As DataRow = dt.NewRow
        NewRow("Beginn") = dtpBeginn.Value
        NewRow("Ende") = dtpEnde.Value
        NewRow("Art") = cmbArt.Text
        NewRow("Prioritaet") = cmbPrioritaet.Text
        dt.Rows.Add(NewRow)
        Berechnen()
 
    End Sub
 
    Private Sub Berechnen()
 
        iRestzeit = iBasiszeit
 
        Dim dtBeginn As DateTime = Nothing
        Dim dtEnde As DateTime = Nothing
        Dim iDauer As Integer = 0
 
        For Each r As DataRow In dt.Rows
            dtBeginn = r("Beginn")
            dtEnde = r("Ende")
            iDauer = DateDiff(DateInterval.Minute, dtBeginn, dtEnde)
            r("Dauer") = iDauer
            iRestzeit = iRestzeit - iDauer
            r("Restzeit") = iRestzeit
        Next
 
    End Sub
 
    Private Sub DataGridView1_UserDeletedRow(sender As Object, e As _
      DataGridViewRowEventArgs) Handles DataGridView1.UserDeletedRow
        Berechnen()
    End Sub
End Class

EALA FREYA FRESENA

Beitrag wurde zuletzt am 11.11.18 um 12:19:18 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 11.11.18 13:15

Hallo effeff,
Super! Danke
da hast du wieder den Nagel auf den Kopf getroffen, so habe ich es gedanklich gewünscht.
konnte es nachbauen, jetzt soll es auch auswertbar sein.

https://picload.org/view/dcoogrrd/11-11-_2018_12-55-22.png.html

wenn ich also über meine Verfügbare Zeit komme soll eine Meldung kommen "für die Aufgabe haste keine Verfügbare Zeit mehr" wenn ich die Aufgabe nun doch so abgearbeitet habe möchte ich mir mit der Zeit ein Guthaben Konto erstellen lassen.

also Beispielsweise: die -45 Minuten (Guthaben) in eine neue Tabelle "Gleitzeitkonto oder so" mit Datum

11.11.2018 45 Minuten (Gleitzeit) diese Zeiten ergeben dann mal Tage die ich mir aus dem Konto entnehmen kann, bis vollständig entnommen. Macht Sinn das man sich das mit schreibt.

Verstehst was ich meine?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 11.11.18 20:14

Hallo effeff,

habe dein Beispiel in meine Anwendung übernommen, bei mir mache ich die Berechnung im CurrentChange Ereignis meiner Bindingsouce so kann ich auch eine Aufgabedauer korrigieren. Stimmst du dem zu?

https://picload.org/view/dcoolgoa/11-11-_2018_19-48-43.png.html

das ganze habe ich bei mir etwas chick gemacht. So sieht es bei mir nun aus mit Eingabemaske.

https://picload.org/view/dcoolgol/11-11-_2018_19-56-27.png.html

nun möchte ich ja noch folgendes erreichen

unter den Aufgaben sollen dann die "Gut Minuten " stehen
in dem Beispiel (Bild) sind keine Gut Minuten angefallen Dauer der Aufgabe 455 Minuten
Gut Minuten alles was > 480 beträgt, soll in eine Tabelle gespeichert werden. Geht das?

wenn ich eine oder mehr Aufgaben zu Ende bringe oder eben mehr Zeit zum erledigen benötige enstehen ja
irgendwie Ü-Stunden in meinem Fall Gleitzeit. Die möchte ich so nachweisen können.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: effeff
Datum: 11.11.18 21:20

In meinem Beispiel habe ich Dir die Basiszeit von 480 Minuten angegeben und eine Restzeit berechnet. Du brauchst doch nur eine Tabelle mitzuführen, die folgenden Inhalt hat:

ID, Datum, Restzeit

Du weißt ja, dass jeder Tag eine Basiszeit von 480 Minuten hat. Die ist fix. Du schreibst also einen Datensatz für jeden Tag hinein, der bereits berechnet ist bzw. der gerade berechnet wird und dieser hat ja am Ende eine Restzeit bzw. eine negative Restzeit, also ein Guthaben. In meinem Beispiel habe ich für die Restzeit eine Variable angegeben, hier schreibst Du den Wert also in eine Tabelle, bzw., falls bereits vorhanden, updatest Du die Tabelle. Sobald Du die Berechnung für einen neuen Tag startest, musst Du eben nicht nur die Basiszeit nehmen, sondern die Basiszeit plus die Restzeit bzw. plus die negative Restzeit (also das Guthaben).

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 11.11.18 21:33

das klingt für mich sehr kompliziert das kriege ich nicht so hoplahop hin
habe ja schon 8h gebraucht dein Beispiel in meine DB einzubauen habe ja andere Tabellen und Conection zu den Tabellen.
eine Tabelle "Gleitzeitminuten" in meinem Dataset schon. Deine Idee umzusetzen habe ich sicher ein Problem, kann das nicht so nachvollziehen.
da brauche ich dich noch einmal bitte!
Danke Danke
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: effeff
Datum: 11.11.18 22:35

Das wird Dir nicht helfen, da ich NIE datengebunden arbeite. Ich finde es toll, dass Du was von meinen Ideen umsetzen konntest. Ich glaube, Du solltest eine Verbindung aus beiden Welten finden...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: Franki
Datum: 12.11.18 02:35

Hallo,

ich war einige Zeit unterwegs, deswegen habe ich die Beiträge jetzt erst lesen können.
Aber mit Zeiterfassung/Zeitberechnung beschäftige ich mich schon seit 1995, das Prinzip ist bis heute gleich geblieben. Ich erkläre mal wie ich das mache:

Für eine Zeitberechnung ist eine Anfangszeit und eine Endzeit (jeweils mit Datum/Uhrzeit) notwendig mehr braucht man nicht für die Berechnung der Zeitdifferenz! Ein Zeitintervall kann notwendig sein, z.B. ist es nicht üblich auf Volljährigkeit in Minuten prüfen zu wollen...

Die Datenbank braucht für diese Berechnung nur diese zwei Felder in der entsprechenden Tabelle.
Wenn die Berechnete Zeit jetzt ausgewertet bzw. weiter verarbeitet werden soll, dann braucht es in der DB weitere Angaben, z.B. MitarbeiterID, AuftragsID, usw.

Wenn du die Zeiten optisch darstellen möchtest in einem Grid, dann reicht es die ausgewerteten Werte odrt darzustellen (Z.B. das Ergebnis der Zeitberechnung in einer Spalte obwohl die nicht in der DB steht) Auch bei +- Stunden, Gleitzeit usw. kannst du die Ergebnisse dort anzeigen, die bauchen uach nicht in der Tabelle selbst zu stehen.

Wenn du Daten korrigieren möchtest brauchst du ein Eingabeformular. Dessen Werte werden dann in die DB geschrieben und das Grid neu eingelesen aus den veränderten Daten der DB, mehr ist nicht notwendig.

Auf diese Weise kannst du verschiedene Aufträge, Mitarbeiter, Gleitzeitregelungen, Überstundenregelung, Schichtzuschäge für Nachtschichten/Wochenenden/Feiertage usw. einfach realisieren. Und das sogar anhand der Basisdaten des Mitarbeiters und oder Auftrags.

Die Solldaten müßssen halt irgendwo vermerkt sein und bei der Berechnung des Zeitergebnisses heran gezogen werden, aber die Ergebnisse selbst brauchen nicht in der Zeittabelle gespeichert zu werden, da sie sich ja ändern können.

Das Ergebnis einer Berechnung in der gleichen DB Tabelle zu speichern aus deren Daten die Berechnung erfolgt ist, ist nicht nötig bzw. sinnvoll. Früher war das bei Online Anwendung sinnvoll weil die Internetverbindung langsam war, die PCs wenig Rechenleistung hatten. Damals galt dabei noch write once, read many. Für deinen Anwendungsfall sehe ich diese Problematik aber nicht.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 12.11.18 06:10

dann habe ich es auch nicht Richtig verstanden, denn heute habe ich auch 480 Minuten und in der Tabelle steht
nun ein falsches Ergebnis.

nun was tun? damit es so läuft wie angedacht.
anknüpfen an dein Beispiel?

https://picload.org/view/dcolrcpc/12-11-_2018_05-58-31.png.html

evtl. kriege ich das mit dir hin PN ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: Franki
Datum: 13.11.18 03:34

Hallo,
du berechnest nicht für jede Zeile/Aufgabe sondern addierst die Ergebnisse.

In der ersten Zeile hast du 455 Minuten Dauer, macht Restzeit von 25 Minuten.
In der zweiten Zeile hast du schon einen Rechenfehler, denn da müssten 120 Minuten stehen und nicht 119. (Aber gut, kann sein, dass du mit Sekunden gerechnet hast und das gerundet wurde)

Aber dein Ergebnis errechnet sich so.

Sollzeit 480 Minuten:

Erste Zeile Dauer 455 Minuten Rest 25 Minuten
Zweite Zeile Dauer 120 Minuten müsste eigentlich Rest (480 - 120 = 360) Minuten anzeigen.

Du rechnest aber gesamt, also die 25 - 120 und das sind die - 95 Minuten die bei dir angezeigt werden.

Du musst Datensatz für Datensatz berechnen, Variablen müssen pro Datensatz/Zeile neu befüllt werden usw. Nur wenn du z.B. eine Wochen- Montatsstatistik usw. brauchst, dann kannst du eine Variable nehmen die summiert wird aber auch das ist in deinem Fall nicht nötig.

Mach doch mal ein Minimalprojekt welches sich mit Zeitberechnung einerseits, Schleifen über mehrere Datensätze andererseits beschäftigt, dann wird das etwas einfacher und du lernst Schritt für Schritt die Lösung zu deinem Problem.



Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 13.11.18 06:44

das ist nicht meine stćrkste Seite
effeff hat es so berechnet in seinem Beispiel.
In dem Beispiel wird aber nichts gespeichert wie bei mir, also hat man immer eine Anfangsbasis
und daher ist die Berechnung wohl dafür OK?

erzähl uns wie du es rechnen würdest.

  Private Sub Berechnen()
 
        iRestzeit = iBasiszeit
 
        Dim dtBeginn As DateTime = Nothing
        Dim dtEnde As DateTime = Nothing
        Dim iDauer As Integer = 0
 
        For Each r As DataRow In dt.Rows
            dtBeginn = r("Beginn")
            dtEnde = r("Ende")
            iDauer = DateDiff(DateInterval.Minute, dtBeginn, dtEnde)
            r("Dauer") = iDauer
            iRestzeit = iRestzeit - iDauer
            r("Restzeit") = iRestzeit
        Next
 
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 13.11.18 14:27

Hallo Franki,

ich kämpfe noch, derzeit habe ich es soweit mit einer Linq-Abfrage umgesetzt. Bin mir aber noch etwas unsicher.
sieht nicht so schlecht aus, ob es mein Problem löst?

nun geht es noch darum eine "Guthaben" Tabelle zu erhalten...., die soll automatisch erstellt werden.

https://picload.org/view/dcoligod/2018-11-13_01.png.html

im ListChange der BS

  Private Sub BS_Notizen_ListChanged(sender As Object, e As _
    System.ComponentModel.ListChangedEventArgs) _
        Handles BS_Notizen.ListChanged
        If BS_Notizen_Liste.Count = 0 Then Return
 
        Dim gesamtdauer As Integer = BS_Notizen_Liste.Sum(Function(f) _
          f.ToDoDauer)
        Dim ts As New TimeSpan(0, 0, gesamtdauer)
 
        lbl_Minuten.Text = String.Concat(gesamtdauer & " [Min]").ToString
        lbl_gesamt_Dauer.Text = String.Format("{1:00}.{2:00}:{3:00}", ts.Days, _
          ts.Hours, ts.Minutes, ts.Seconds)
        'noch Verfügbare Tagesrestzeit
        lbl_aktuelle_Restzeit.Text = iBasiszeit - gesamtdauer
 
        Anzahl_Ereignisse(StartDatum:=New Date(Today.Year, Today.Month, _
          Today.Day, 5, 59, 59, 999), _
                              EndDatum:=New Date(Today.Year, Today.Month, _
                              Today.Day, 23, 59, 59, 999))
    End Sub
und hier dann die Ereignisse, Anzahl der Aufgaben.

  Private Sub Anzahl_Ereignisse(ByVal StartDatum As Date, ByVal EndDatum As _
    Date)
        Dim von_Datum = Today.AddDays(0)
 
        If Me.AblageDB.Notizen.Rows.Count = 0 Then Return
        ' Abfrage
        Dim AbfrageG As System.Data.EnumerableRowCollection(Of NotizenRow)
        AbfrageG = From Reihe In Me.AblageDB.Notizen
                   Where Reihe.RowState <> DataRowState.Deleted AndAlso _
                     Reihe.IsToDoBeginnNull = False AndAlso _
                   Reihe.ToDoBeginn >= von_Datum _
     Select Reihe
        Dim anzahlDatensaetze As Integer = AbfrageG.Count
        If anzahlDatensaetze <> 1 Then
            lbl_aktuelle_Ereignissanzahl.Text = String.Concat( _
              anzahlDatensaetze.ToString & " Aktuelle Aufgaben")
 
        Else
            lbl_aktuelle_Ereignissanzahl.Text = String.Concat( _
              anzahlDatensaetze.ToString & " Aktuelle Aufgabe")
 
        End If
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 13.11.18 19:55

Hallo Franki,

so habe etwas experementiert, Ergbnis fraglich da ich denke das es mit Datumswechsel nicht mehr passt.
da fiel mir noch nichts gescheites ein.

und unten drunter fhlt noch die Gleitzeit in Minuten differenz 497 = 17 Minuten, Morgen dann evtl. 30
usw.

https://picload.org/view/dcolipla/13-11-_2018_17-49-13.png.html

so habe ich mal die untere DGV gefüllt. Für jede andere Lösung die es korrekter darstellt bin ich sehr Dankbar

https://picload.org/view/dcolipcd/13-11-_2018_19-40-02.png.html

Private Sub btn_Gut_Minuten_Buchen_Click(sender As Object, e As EventArgs) _
  Handles btn_Gut_Minuten_Buchen.Click
        Dim von_Datum = Today.AddDays(0)
        Dim cal As Globalization.Calendar = _
        Globalization.CultureInfo.CurrentCulture.Calendar
        Me.Cursor = Cursors.WaitCursor
 
        Dim q = From row As DataRow In AblageDB.Notizen
         Let Minuten = row.Field(Of Integer)("ToDoDauer")
         Let ToDo = row.Field(Of Date)("ToDoBeginn").ToShortDateString
         Where von_Datum = row.Field(Of Date)("ToDoBeginn").ToShortDateString
         Group By art = ToDo Into Sum(Minuten), Count()
 
        Dim df As New DataTable
        With df.Columns
            .Add("ToDo", GetType(String))
            .Add("Count", GetType(Integer))
            .Add("Minuten", GetType(Integer))
        End With
        For Each el In q
            df.Rows.Add(el.art, el.Count, el.Sum)
        Next el
 
        Dim bs As New BindingSource With {.DataSource = df}
        bs.Sort = "Count DESC"
 
        Dim _Sum As Integer
        _Sum = df.AsEnumerable().Sum(Function(row) row.Field(Of Integer)( _
          "Minuten"))
 
        'Daten in der DGV anzeigen
        DGV3.DataSource = bs
 
        With DGV3
            .Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnsMode.Fill
            .Columns(1).Width = 60
            .Columns(1).DefaultCellStyle.Alignment = _
              DataGridViewContentAlignment.MiddleRight
            .Columns(2).Width = 60
            .Columns(2).DefaultCellStyle.Alignment = _
              DataGridViewContentAlignment.MiddleRight
        End With
 
        With DGV3
            .EnableHeadersVisualStyles = False
            .ColumnHeadersDefaultCellStyle.Alignment = _
              DataGridViewContentAlignment.MiddleCenter
            .ColumnHeadersDefaultCellStyle.BackColor = Color.DimGray
            .ColumnHeadersDefaultCellStyle.ForeColor = Color.FloralWhite
            .BackgroundColor = Color.LightGray
            .Font = New Font("Consolas;", 9.5, FontStyle.Regular)
            .ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single
            .ColumnHeadersHeight = 28
            .ColumnHeadersHeightSizeMode = _
              DataGridViewColumnHeadersHeightSizeMode.DisableResizing
            .RowHeadersVisible = False
            .GridColor = System.Drawing.Color.DarkGray
            .SelectionMode = DataGridViewSelectionMode.FullRowSelect
            .DefaultCellStyle.WrapMode = DataGridViewTriState.True
            .AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells
        End With
        With DGV3.DefaultCellStyle
            .SelectionForeColor = Color.OldLace
            .SelectionBackColor = Color.Olive
            .BackColor = Color.LightGray
            .ForeColor = Color.Black
            .Font = New Font("Consolas;", 8.0, FontStyle.Regular)
        End With
        With DGV3.AlternatingRowsDefaultCellStyle
            .SelectionForeColor = Color.OldLace
            .SelectionBackColor = Color.Olive
            .BackColor = Color.WhiteSmoke
            .ForeColor = Color.Black
            .Font = New Font("Consolas;", 8.0, FontStyle.Regular)
        End With
 
        Me.Cursor = Cursors.Default
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: effeff
Datum: 13.11.18 23:33

Du hast von mir ein Beispiel für einen zu berechnenden Tag bekommen, berechnest aber tagübergreifend...

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: Franki
Datum: 14.11.18 04:36

Hallo,

du hast einen Gedankenfehler in deiner Schleife über die Rows deiner Tabelle.

For Each r As DataRow In dt.Rows
            dtBeginn = r("Beginn")
            dtEnde = r("Ende")
            iDauer = DateDiff(DateInterval.Minute, dtBeginn, dtEnde)
Das ist richtig so, bei jeder Zeile liest du Anfangszeit und Endzeit aus und berechnest die Dauer in Minuten. Also jeweils eine eigene Berechnung je Datensatz.

Aber:
r("Dauer") = iDauer
            iRestzeit = iRestzeit - iDauer
            r("Restzeit") = iRestzeit
Hier berechnest du die Restzeit nicht neu pro Zeile sondern über die ganze Schleife deiner Tabelle.
So was kann man natürlich machen wenn erwünscht, aber dann brauchst du noch andere Kriterien mit denen du z.B einen Auftrag innerhalb der Zeilen eindeutig identifizieren kannst.

Bau dir doch mal ein Minimalbeispiel und setzte die Zeitvorgabe z.B. auf 60 Minuten und gib als Beispieldaten mal Zeiträume von ein paar Minuten ein. Dann hast du mehrere Zeilen pro Tag, der Datumswechsel spielt keine Rolle usw. So kannst du das Problem eingrenzen.

Gruß
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 14.11.18 17:26

ich denke ich schnall das nicht ganz.

habe nun das Beispiel von effeff um einen Save Dialog erweitert
die Dateien lade ich mir in eine Listbox, so kann ich mir die erneut einlesen ansonsten nichts weiter geändert.
die Berechnung "Problem" habe ich noch nicht angefasst, nur die Basiszeit auf 60 gesetzt
und im Minuten Takt Daten eingegeben. Wenn ich effeff Richtig verstanden habe ist die Berechnung auch nicht auf einen Tageswechsel ausgelegt?

was muss ich tun?

https://picload.org/view/dcocgrlo/14-11-_2018_17-12-06.png.html

habe weitere Daten hinzugefügt, mir fällt nichts ungewöhnlches auf

https://picload.org/view/dcocgail/14-11-_2018_17-53-07.png.html

Beitrag wurde zuletzt am 14.11.18 um 17:58:14 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: Franki
Datum: 15.11.18 04:05

Hallo,
schön, dass du meinen Vorschlag zur Problemlösung umgesetzt hast.
So kann man einerseits das Problem selbst eingrenzen und andererseits auch Missverständnisse klären.
Denn um en solches scheint es sich hier zu handeln.

Also der Reihe nach: Probiere mal einen Tageswechsel indem du z.B. 23:55 bis 00:05 ein gibst ohne Änderungen an deinem Code. In deiner Tabelle sollte dann die Anfangszeit mit Datum und die Endzeit mit einem Tag später. Was passiert dann? Da sollten dann 10 Minuten abgezogen werden.

Aber jetzt zum Missverständnis: Du schreibst jetzt, dass dein Beispiel ok ist und du keine Auffälligkeiten feststellen kannst. Soweit so gut, aber ich bin davon ausgegangen, dass du die Zeitdifferenzen je Auftrag/Aufgabe usw. berechnen möchtest. Du hast da als Eigenschft verschiedenen Sachen stehen, also geht es dir ja nur um die Zeit an sich. Richtig?

Also nur Zeitvorgabe und verbrauchte Zeit pro Tag egal wofür?
Dann funktioniert dein Code und du musst nur noch den Tageswechsel einbauen.

Die Frage ist jetzt wie du den grundsätzlich berücksichtigen möchtest. Ich nenne man ein Beispiel aus einer Zeiterfassung wo im Schichtdienst gearbeitet wird. Die Nachtschicht beginnt um 22:00 Uhr und endet am nächsten Tag um 06:00 Uhr.

Also zwei Stunden altes Datum, 6 Stunden neues Datum bei 8 Stunden Arbeitszeit.
Wie möchtest du die 8 Stunden verteilen? 8 auf das alte Datum oder nur 2 und die 6 auf das neue Datum? Üblich bei Lohnabrechnungen usw. ist es die ganze Zeit (also 8 Stunden) auf das Anfangsdatum zu schreiben, das ist grade bei Monatswechsel entscheidend.

Beschreibe doch mal was genau du möchtest, erst dann kann es ja an den Code gehen...

Gruß
Frnk
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 15.11.18 10:59

https://picload.org/view/dcocdgrc/gleitzeit_konto.png.html

Beschreibe doch mal was genau du möchtest, erst dann kann es ja an den Code gehen...

also meine tägliche AZ beträgt 408 Minuten, die für mein Tagesgeschäft und anderen Aufgaben zur Verfügung stehen.
die benötigte Zeit (Dokumentiere ich mir in der Anwendung) Tag für Tag also Datumswechsel in der Liste möglich

wenn ich so überlege stell ich mir die Frage was da mehr Sinn macht?

einfach schreiben Aufgabe A 14.11.2018 20 Minuten Verfügbar: 408 Restzeit: 388
Aufgabe B 14.11.2018 35 Minuten Verfügbar: 388 Restzeit: 353
Aufgabe A 15.11.2018 65 Minuten Verfügbar: 408 Restzeit: 343 (Datumswechsel)

oder Denke ich zu kompliziert? und wie auch immer wie soll das berechnet werden?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 16.11.18 19:23

Hallo Franki,

da bin ich schon wieder!

Also nur Zeitvorgabe und verbrauchte Zeit pro Tag egal wofür? Ja
Dann funktioniert dein Code und du musst nur noch den Tageswechsel einbauen.
und das will mir nicht gelingen

Die Frage ist jetzt wie du den grundsätzlich berücksichtigen möchtest. Ich nenne man ein Beispiel aus einer Zeiterfassung wo im Schichtdienst gearbeitet wird. Die Nachtschicht beginnt um 22:00 Uhr und endet am nächsten Tag um 06:00 Uhr.

mein Regelarbeitstag beginnt um 07:00 bis 16:00 Gleitzeit

was macht nun mehr Sinn den Start der Aufgabe zu setzen und die benötigte Zeit eingeben Ende und Restzeit rechnen? evtl. Korrektur der benötigten Zeit so möglich ?
nächste Aufgabe, blabla eintragen.
nächster Tag gleiches Spiel mit korrekter Berechnung?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: Franki
Datum: 17.11.18 00:43

Hallo,
Zitat:



Also nur Zeitvorgabe und verbrauchte Zeit pro Tag egal wofür!

mein Regelarbeitstag beginnt um 07:00 bis 16:00 Gleitzeit

was macht nun mehr Sinn den Start der Aufgabe zu setzen und
die benötigte Zeit eingeben Ende und Restzeit rechnen? evtl.
Korrektur der benötigten Zeit so möglich?


Das sind jetzt aber zwei Baustellen:
Wenn du nur die Arbeitszeit pro Tag brauchst, dann sind die Aufgaben uninteressant, es geht ja nur um deine Arbeitszeit egal wofür. Da würde wie bei einer Stempeluhr kommt/geht,kommt/geht... usw. reichen. Alles was an einem Tag zwischen geht und kommt ist sind Pausen. (Frühstückspause, Mittagspause, Raucherpause oder was auch immer)

Mit Tageswechsel meinte ich eigentlich, dass die Arbeitszeit über 00:00 Uhr hinaus geht wie bei einer Nachtschicht z.B. Aber das scheint bei dir nicht der Fall zu sein.

Wenn du zusätzlich die Zeit pro Aufgabe erfassen möchtest sieht das anders aus, denn es kann ja Aufgaben geben die über mehrere Tage verteilt sind und nicht zusammenhängend abgearbeitet werden können.

Zitat:


nächster Tag gleiches Spiel mit korrekter
Berechnung?


Wenn es nur um die Arbeitszeit geht dann ja.
Probiere doch mal einfach eine Stempeluhr nachzubauen kommt/geht bzw. Anfang/Ende der Arbeitszeit für einen Tag. (Du hast ja nur Tagesarbeitszeit wie es aussieht)

Also jeden Tag einzeln behandeln zum Test mal nur mit Zeiten bzw. 1 Aufgabe. Für jeden Tag die Zeiten neu eingeben (mit Datum) und sehen was passiert.

Wenn du dieses System verstanden hast und es bei dir funktioiert, dann kannst du an die Aufgaben gehen. Nähere dich minimalistisch Schritt für Schritt an die Lösung deines Problems an. Dann wird es für dich einfacher und für uns Mitleser hier im Forum auch.

Gruß und viel Erfolg,
Frank
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 18.11.18 11:47

Hallo Franki,

habe jetzt mal in einer Testumgebung das Thema "Arbeitszeit" umgesetzt.

Ergebnisse scheinen zunächst plausibel habe auch gleich eine Col Gleitzeit hinzugefügt

ist mein Code denn auch plausibel und korrekt? oder wie kann der optimiert werden?

zunächst setze ich meine Standards wie Anfang ende auf tägliche Anwesenheit also

07:00 - 16:00 bei jedem dtp.value change

 Private dStart As Date
    Private dEnde As Date
    Private Sub dtpDatum_ValueChanged(sender As Object, e As EventArgs) Handles _
      dtpDatum.ValueChanged
        'Tagesschicht setzen
        dStart = New Date(dtpBeginn.Value.Year, dtpBeginn.Value.Month, _
          dtpBeginn.Value.Day, 7, 0, 0)
        dEnde = New Date(dtpEnde.Value.Year, dtpEnde.Value.Month, _
        dtpEnde.Value.Day, 16, 0, 0)
        setze_Start_Ende(dStart, dEnde)
    End Sub
 
    Private Sub setze_Start_Ende(ByVal d1 As Date, ByVal d2 As Date)
        dtpBeginn.Value = d1
        dtpEnde.Value = d2
    End Sub
und so berechne ich das und füge eine neue Row hinzu

  Private Sub btnUebernehmen_Click(sender As Object, e As EventArgs) Handles _
      btnUebernehmen.Click
 
        If dtpBeginn.Value = dtpEnde.Value Or dtpBeginn.Value > _
          dtpEnde.Value Then
            MessageBox.Show("Kontrollieren Sie bitte Ihre Zeiten!", "Hinweis:")
            Exit Sub
        End If
        _Arbeitszeit_berechnen()
 
    End Sub
 
    Private Sub _Arbeitszeit_berechnen()
        Dim anfang As DateTime = (dtpBeginn.Value) ' Datum ist 20.6.2014 
        ' Uhrzeit ist 8:00:00
        Dim ende As DateTime = (dtpEnde.Value)     ' Datum ist 20.6.2014 
        ' Uhrzeit ist 16:30:00
        Dim dauer As TimeSpan = ende - anfang
        Dim pause As TimeSpan = New TimeSpan(0, CInt(nud_Dauer.Value), 0)
        Dim soll As TimeSpan = New TimeSpan(0, 408, 0)
 
        Dim NewRow As DataRow = dt.NewRow
        NewRow("Tag") = dtpDatum.Value.ToShortDateString
        NewRow("Beginn") = dtpBeginn.Value.ToShortTimeString
        NewRow("Ende") = dtpEnde.Value.ToShortTimeString
        NewRow("Pause") = pause
        NewRow("Anwesend") = dauer
        NewRow("Soll-AZ") = soll
        NewRow("Ist-AZ") = dauer - pause
        NewRow("Gleitzeit") = (dauer - soll) - pause
        dt.Rows.Add(NewRow)
    End Sub
so sieht es dann aus über eine Antwort auf meinen Post würde ich mich freuen.
jede Verbesserung an dem Code ist mir angenehm soll ja Richtig funktionieren.

die Darstellung 01:27:00 kann man das auch als ganzzahl hinbekommen?
sind ja 87 Minuten

https://picload.org/view/dcocwwii/18-11-_2018_11-22-59.png.html

und dann das Thema Aufgaben ?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 20.11.18 20:13

ist ziemlich Ruhig geworden nach meinem letzten Post

https://picload.org/view/dcopapra/20-11-_2018_19-53-02.png.html

habe seitdem hin und her probiert, funktioniert auch bis hier her soweit
über eine Funktion pruefe ich ob Datum ein AT oder WE ist

  Private Sub setze_Start_Ende(ByVal d1 As Date, ByVal d2 As Date)
        dtpBeginn.Value = d1
        dtpEnde.Value = d2
 
        If ISWeekend(CDate(dtpDatum.Value.ToShortDateString)) Then
            lbl_Info.Text = "Der " & CStr(CDate( _
              dtpDatum.Value.ToShortDateString)) & _
              " - Wochenende - Sie haben frei!"
            lbl_Info.BackColor = Color.Azure
            lbl_Info.ForeColor = Color.Black
        Else
            lbl_Info.Text = "Der " & CStr(CDate( _
              dtpDatum.Value.ToShortDateString)) & _
              " ist ein Wochentag - Sie müssen arbeiten!"
            lbl_Info.BackColor = Color.DarkSlateBlue
            lbl_Info.ForeColor = Color.WhiteSmoke
        End If
 
    End Sub
 
    'Funktion, mit der ermittelt wird ob Wochenende oder Werktag
    Function ISWeekend(Datum As Date) As Boolean
        ISWeekend = (Weekday(Datum) Mod 6 = 1)
    End Function
und berücksichtige das in der AZ Berechnung
das müsste man auch für die Feiertage machen ? wie ?
aber zunächst mal ist das plausibel oder würdest du bzw. ihr es anders machen?
  Private Sub _Arbeitszeit_berechnen()
        Dim anfang As DateTime = (dtpBeginn.Value)
        Dim ende As DateTime = (dtpEnde.Value)
        Dim dauer As TimeSpan = ende - anfang
        Dim pause As TimeSpan = New TimeSpan(0, CInt(nud_Dauer.Value), 0)
        Dim soll As TimeSpan = New TimeSpan(0, CInt(nud_AZSOLL.Value), 0)
 
        If ISWeekend(CDate(dtpDatum.Value)) Then
            Dim NewRow As DataRow = dt.NewRow
            NewRow("Tag") = dtpDatum.Value.ToShortDateString
            NewRow("Beginn") = "00:00"    'dtpBeginn.Value.ToShortTimeString
            NewRow("Ende") = "00:00"      'dtpEnde.Value.ToShortTimeString
            NewRow("Pause") = "00:00"     'pause
            NewRow("Anwesend") = "00:00"  'dauer
            NewRow("Soll-AZ") = "00:00"   'soll
            NewRow("Ist-AZ") = "00:00"    'dauer - pause
            NewRow("Gleitzeit") = "00:00" '(dauer - soll) - pause
            dt.Rows.Add(NewRow)
        Else
            Dim NewRow As DataRow = dt.NewRow
            NewRow("Tag") = dtpDatum.Value.ToShortDateString
            NewRow("Beginn") = dtpBeginn.Value.ToShortTimeString
            NewRow("Ende") = dtpEnde.Value.ToShortTimeString
            NewRow("Pause") = pause
            NewRow("Anwesend") = dauer
            NewRow("Soll-AZ") = soll
            NewRow("Ist-AZ") = dauer - pause
            NewRow("Gleitzeit") = (dauer - soll) - pause
            dt.Rows.Add(NewRow)
        End If
 
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Summe zum Datum automatisieren 
Autor: ERBRU
Datum: 21.11.18 11:00

Hallo brauche da noch mal Hilfe,

möchte von meinem Gleitzeitkonto ja mal den einen oder anderen Tag freinehmen "Entnahme GLZ"

https://picload.org/view/dcopowpl/21-11-_2018_09-22-52.png.html

wie wäre die korrekte Berechnung in der Anwenheitsliste ? wäre ja jetzt mit Eintrag "Entnahme GLZ"
nicht 06:48:00 anwesend die müssten aus dem Konto entnommen werden
da habe ich keinen Plan

mein Eingabe Code für meine Anwesenheit:
Bitte um Hilfestellung.

  Private Sub _Arbeitszeit_berechnen()
        Dim anfang As DateTime = (dtpBeginn.Value)
        Dim ende As DateTime = (dtpEnde.Value)
        Dim dauer As TimeSpan = ende - anfang
        Dim pause As TimeSpan = New TimeSpan(0, CInt(nud_Dauer.Value), 0)
        Dim soll As TimeSpan = New TimeSpan(0, CInt(nud_AZSOLL.Value), 0)
 
        If ISWeekend(CDate(dtpDatum.Value)) Then
            Dim NewRow As DataRow = dt.NewRow
            NewRow("Tag") = dtpDatum.Value.ToShortDateString
            NewRow("Beginn") = "00:00"    'dtpBeginn.Value.ToShortTimeString
            NewRow("Ende") = "00:00"      'dtpEnde.Value.ToShortTimeString
            NewRow("Pause") = "00:00"     'pause
            NewRow("Anwesend") = "00:00"  'dauer
            NewRow("Soll-AZ") = "00:00"   'soll
            NewRow("Ist-AZ") = "00:00"    'dauer - pause
            NewRow("Gleitzeit") = "00:00" '(dauer - soll) - pause
            NewRow("Bemerkung") = "WE"
            dt.Rows.Add(NewRow)
        ElseIf cmbBemerkung.Text = "Entnahme GLZ" Then
            Dim NewRow As DataRow = dt.NewRow
            NewRow("Tag") = dtpDatum.Value.ToShortDateString
            NewRow("Beginn") = "00:00"    'dtpBeginn.Value.ToShortTimeString
            NewRow("Ende") = "00:00"      'dtpEnde.Value.ToShortTimeString
            NewRow("Pause") = "00:00"     'pause
            NewRow("Anwesend") = "00:00"  'dauer
            NewRow("Soll-AZ") = "00:00"   'soll
            NewRow("Ist-AZ") = "00:00"    'dauer - pause
            NewRow("Gleitzeit") = "00:00" '(dauer - soll) - pause
            NewRow("Bemerkung") = cmbBemerkung.Text.ToString
            dt.Rows.Add(NewRow)
        ElseIf cmbBemerkung.Text = "Frei" Then
            Dim NewRow As DataRow = dt.NewRow
            NewRow("Tag") = dtpDatum.Value.ToShortDateString
            NewRow("Beginn") = "00:00"    'dtpBeginn.Value.ToShortTimeString
            NewRow("Ende") = "00:00"      'dtpEnde.Value.ToShortTimeString
            NewRow("Pause") = "00:00"     'pause
            NewRow("Anwesend") = "00:00"  'dauer
            NewRow("Soll-AZ") = "00:00"   'soll
            NewRow("Ist-AZ") = "00:00"    'dauer - pause
            NewRow("Gleitzeit") = "00:00" '(dauer - soll) - pause
            NewRow("Bemerkung") = cmbBemerkung.Text.ToString
            dt.Rows.Add(NewRow)
        Else
            Dim NewRow As DataRow = dt.NewRow
            NewRow("Tag") = dtpDatum.Value.ToShortDateString
            NewRow("Beginn") = dtpBeginn.Value.ToShortTimeString
            NewRow("Ende") = dtpEnde.Value.ToShortTimeString
            NewRow("Pause") = pause
            NewRow("Anwesend") = dauer
            NewRow("Soll-AZ") = soll
            NewRow("Ist-AZ") = dauer - pause
            NewRow("Gleitzeit") = (dauer - soll) - pause
            NewRow("Bemerkung") = cmbBemerkung.Text.ToString
            dt.Rows.Add(NewRow)
        End If
 
    End Sub
Gleitzeit berechnen:

 Private Sub Glz_Minuten_Rechner()
        Dim gesamtdauer As Integer = 0
        tbx_Glz_Summe.Text = Added(dt, 8).ToString
        gesamtdauer = CInt(tbx_Glz_Summe.Text)
        Dim ts As New TimeSpan(0, 0, gesamtdauer)
        lbl_gesamt_Dauer.Text = String.Format("{1:00}.{2:00}:{3:00}", ts.Days, _
          ts.Hours, ts.Minutes, ts.Seconds)
    End Sub
und ich habe da auch noch eine Spalte "kummuliert":

 Private Sub Glz_Minuten_kummulieren()
        Dim result As Integer = 0
        For Each r As DataRow In dt.Rows
            result += (CInt(r("Gleitzeit").ToString.Substring(0, 2)) * 60) _
                   + (CInt(r("Gleitzeit").ToString.Substring(3, 2)))
            r(9) = result
        Next
    End Sub


Beitrag wurde zuletzt am 21.11.18 um 11:03:54 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel