>>> Dienstplanprogramm fertig für jeder man nutzbar <<<

  • Hallo Liebe Leute!

    Ich habe die die vorläufige Endversion fertiggestellt für jeder man nutzbar!

    Einige Infos vorab: Ihr können 4 Schicht Bezeichnung freie werte zuteilen, ihr werden aufgefordert Feiertage auszuwählen was den Zweck hat das in jedem Bundesland verschieden gefeiert wird und für die richtige Rechnung erforderlich ist! Darüber hinaus werden ihr gefragt ob eine Desktop verlinken anleget werden soll. Auf der linken Seite können ihr in dem ersten Eingabe Feld den Namen eintragen darunter die Position des Mitarbeiters! Rechts daneben sind drei Eingabe Felder untereinander das erste ist für Plus-Minus stunden vom vor Monat darunter die die Stunden in der Woche z.B 40 st. das letzte ist für Urlaub. Daneben haben ihr jetzt 31 * 2 Felder die erste Reihe ist für die schichten und die untere für Urlaub zu besseren Übersicht! Standard für schichten in diesem Programm sind F-S-FF-SS-K u. U die sind abhängig von den Stunden in der Woche z.b ein Mitarbeiter hat eine 40 st.woche, setzt sich die Rechnung wie folgt zusammen 40/5 = 8 die 8 wird jetzt für F-S-K-U genutzt weiter 8/2 = 4 die 4 wird für FF-SS, ihr habt wie schon erwähnt die Möglichkeit 4 schichten nach euren Wünschen anzupassen! Des Weiteren lassen sich die Namen Position und die gerechneten werte speichern und auch wieder aufrufen!
    F=Frühsicht S=Spätschicht (FF=Frühes Früh SS=Spätes Spät kurze Zwischenschichten) K=Krank U=Urlaub und die Möglichkeit F2-S2-Z-Na zu freien Verwendung!

    Feiertagsberechnung von: BugFix
    Druck Option von: Nuts wenn ich richtigliege


    Update: 21.11.2009
    Neu jeder gespeicherter Monat lässt sich komplett wieder einlesen! (Jeder Name-Position , vergebene Schicht u. Rechnung)
    Ubdate: 23.11.2009 Bug behoben und Optimiert!
    Update:25.11.2009 4 Bugs behoben und Optimiert!
    Neu: Ansicht leeren , jedes Jahr wird einzelnt gespeichert sowie die dazugehörigen Monate und auch wieder einlesbar!

    So der Code:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Icon=Pic\ICON_541.ICO
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Array.au3>
    #include <Date.au3>
    #include<File.au3>
    #include <GuiButton.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GUIScrollBars.au3>
    #include <ListviewConstants.au3>
    #include <ScrollBarConstants.au3>
    #include <WindowsConstants.au3>
    Opt('MustDeclareVars', 1)
    Opt('GUIOnEventMode', 1)
    Global $likpro = @DesktopDir & '\Dienstplan.lnk', $sDBFile = @ScriptDir & '\Druckerbank.html', $schichtsetz = @ScriptDir & '\data\Schichten.ini', $GUI, $GUI2, $GUI3, $GUI4, $GUI5, $as_array
    If Not FileExists($likpro) Then _desklink()
    If Not FileExists($sDBFile) Then _FileCreate($sDBFile)
    If Not FileExists($schichtsetz) Then
    For $i = 0 To 3
    IniWrite($schichtsetz, 'Schichten', 'Gesetzt' & $i + 1, '0')
    Next
    EndIf
    $GUI = GUICreate('Dienstplan', 1010, 600, -1, -1)
    GUISetBkColor(0xFFFACD, $GUI)
    GUISetOnEvent(-3, '_Exit')
    Local $OptionsMenu = GUICtrlCreateMenu(' M&enü ')
    Local $aMenue[6][2] = [['A&nsicht Speichern', '_save_lesen'],['M&onat Einlesen', '_save_lesen'],['Ansicht Leeren', '_save_lesen'],['S&peicherabfrage', '_Fgui'],['S&chichtsetzen', '_gui5'],['B&eenden', '_Exit']]
    Local $aMErst[5]
    For $i = 0 To 4
    $aMErst[$i] = GUICtrlCreateMenuItem($aMenue[$i][0], $OptionsMenu)
    GUICtrlSetOnEvent(-1, $aMenue[$i][1])
    Next
    GUICtrlCreateLabel('Monat :', 12, 15, 40, 20)
    GUICtrlSetFont(-1, 9, 400, 2)
    GUICtrlCreateLabel('Soll', 868, 68, 20, 15)
    GUICtrlSetTip(-1, 'Gesamter Monats Zeitraum ')
    GUICtrlCreateLabel('Ist', 920, 68, 20, 15)
    GUICtrlSetTip(-1, 'Wieviel im Monat geleistet')
    GUICtrlCreateLabel('Übertrag', 950, 68, 42, 15)
    GUICtrlSetTip(-1, 'Plus Minus Stunden Übertragen')
    GUICtrlCreateLabel('Jahr :', 17, 44, 40, 20)
    GUICtrlSetFont(-1, 9, 400, 2)
    Local $monataus = GUICtrlCreateLabel('-------------------', 60, 15, 75)
    Local $mweahl = GUICtrlCreateCombo('', 60, 15, 110, 20)
    GUICtrlSetState($mweahl, $GUI_HIDE + $GUI_DISABLE)
    GUICtrlSetOnEvent(-1, 'PlusMinus')
    GUICtrlSetData($mweahl, 'Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember')
    Local $monatzahl = GUICtrlCreateLabel('0', -100, 0, 0, 0)
    Local $miusB = GUICtrlCreateButton('Wählen', 125, 14, 49, 20)
    GUICtrlSetOnEvent(-1, 'PlusMinus')
    Local $jahr = GUICtrlCreateLabel(@YEAR, 60, 44, 40, 19)
    Local $minus = GUICtrlCreateButton('-', 135, 44, 15, 15)
    GUICtrlSetOnEvent(-1, 'PlusMinus')
    Local $plus = GUICtrlCreateButton('+', 150, 44, 15, 15)
    GUICtrlSetOnEvent(-1, 'PlusMinus')
    Local $Schalt = GUICtrlCreateLabel('', 860, 44, 60, 25)
    GUICtrlSetColor(-1, 0x0000FF)
    Local $option = GUICtrlCreateButton('Option', 925, 22, 60, 30)
    GUICtrlSetOnEvent(-1, '_Fgui3')
    Local $feita = GUICtrlCreateLabel('Feitertage:', 190, 17, 80, 20)
    GUICtrlSetColor(-1, 0x0000FF)
    Local $afeilabel[7]
    Local $l = 267
    For $i = 0 To 6
    $afeilabel[$i] = GUICtrlCreateLabel('', $l, 17, 60, 18)
    GUICtrlSetOnEvent(-1, '_ftausl')
    GUICtrlSetColor(-1, 0x0000FF)
    $l += 65
    Next
    Local $abutt[12]
    Local $x = 120
    For $i = 0 To 11
    $abutt[$i] = GUICtrlCreateButton('Berechnen M-' & $i + 1, 9, $x, 98, 20)
    GUICtrlSetOnEvent(-1, '_buton')
    $x += 70
    Next
    Local $agrupre[12], $arzei[12], $arzeire[12], $aname[12][2]
    Local $x = 116, $x1 = 111, $x2 = 124, $x3 = 120, $x4 = 79, $y4 = 101
    For $i = 0 To 11
    $agrupre[$i] = GUICtrlCreateGroup('', 858, $x1, 45, 25)
    $arzei[$i] = GUICtrlCreateLabel('R=', 112, $x2, 19, 12)
    $arzeire[$i] = GUICtrlCreateLabel('R=', 880, $x3, 20, 12)
    $aname[$i][0] = GUICtrlCreateInput('', 9, $x4, 120, 21)
    $aname[$i][1] = GUICtrlCreateInput('', 9, $y4, 120, 19)
    $x += 70
    $x1 += 70
    $x2 += 70
    $x3 += 70
    $x4 += 70
    $y4 += 70
    Next
    Local $arTage[31][2], $aschTage[31][2], $aschTage1[31][2], $aschTage2[31][2], $aschTage3[31][2]
    Local $aschTage4[31][2], $aschTage5[31][2], $aschTage6[31][2], $aschTage7[31][2], $aschTage8[31][2]
    Local $aschTage9[31][2], $aschTage10[31][2], $aschTage11[31][2]
    Local $x = 176
    For $i = 0 To 30
    $arTage[$i][0] = GUICtrlCreateLabel(StringRight('0' & $i + 1, 2), $x + 2, 46, 19, 18)
    $arTage[$i][1] = GUICtrlCreateLabel('', $x + 2, 69, 19, 18)
    $aschTage[$i][0] = GUICtrlCreateInput('', $x, 90, 21, 20)
    $aschTage[$i][1] = GUICtrlCreateInput('', $x, 111, 21, 20)
    $aschTage1[$i][0] = GUICtrlCreateInput('', $x, 160, 21, 20)
    $aschTage1[$i][1] = GUICtrlCreateInput('', $x, 181, 21, 20)
    $aschTage2[$i][0] = GUICtrlCreateInput('', $x, 230, 21, 20)
    $aschTage2[$i][1] = GUICtrlCreateInput('', $x, 251, 21, 20)
    $aschTage3[$i][0] = GUICtrlCreateInput('', $x, 300, 21, 20)
    $aschTage3[$i][1] = GUICtrlCreateInput('', $x, 321, 21, 20)
    $aschTage4[$i][0] = GUICtrlCreateInput('', $x, 370, 21, 20)
    $aschTage4[$i][1] = GUICtrlCreateInput('', $x, 391, 21, 20)
    $aschTage5[$i][0] = GUICtrlCreateInput('', $x, 440, 21, 20)
    $aschTage5[$i][1] = GUICtrlCreateInput('', $x, 461, 21, 20)
    $aschTage6[$i][0] = GUICtrlCreateInput('', $x, 510, 21, 20)
    $aschTage6[$i][1] = GUICtrlCreateInput('', $x, 531, 21, 20)
    $aschTage7[$i][0] = GUICtrlCreateInput('', $x, 580, 21, 20)
    $aschTage7[$i][1] = GUICtrlCreateInput('', $x, 601, 21, 20)
    $aschTage8[$i][0] = GUICtrlCreateInput('', $x, 650, 21, 20)
    $aschTage8[$i][1] = GUICtrlCreateInput('', $x, 671, 21, 20)
    $aschTage9[$i][0] = GUICtrlCreateInput('', $x, 720, 21, 20)
    $aschTage9[$i][1] = GUICtrlCreateInput('', $x, 741, 21, 20)
    $aschTage10[$i][0] = GUICtrlCreateInput('', $x, 790, 21, 20)
    $aschTage10[$i][1] = GUICtrlCreateInput('', $x, 811, 21, 20)
    $aschTage11[$i][0] = GUICtrlCreateInput('', $x, 860, 21, 20)
    $aschTage11[$i][1] = GUICtrlCreateInput('', $x, 881, 21, 20)
    $x += 22
    Next
    Local $asoll[12][2], $aist[12][2], $arurlaub[12][2], $asoler[12][2], $auebertr[12][2]
    Local $x = 101, $x1 = 84, $x2 = 121, $x3 = 115
    Local $y = 84, $y2 = 115, $y4 = 79
    For $i = 0 To 11
    $asoll[$i][0] = GUICtrlCreateInput('', 130, $x, 45, 19)
    $asoll[$i][1] = GUICtrlCreateInput('', 858, $y, 45, 21)
    $aist[$i][0] = GUICtrlCreateInput('', 904, $x1, 45, 21)
    $arurlaub[$i][0] = GUICtrlCreateInput('', 130, $x2, 45, 18)
    $arurlaub[$i][1] = GUICtrlCreateInput('', 904, $y2, 45, 21)
    $asoler[$i][0] = GUICtrlCreateInput('', 950, $x3, 45, 21)
    $auebertr[$i][0] = GUICtrlCreateInput('', 130, $y4, 45, 21)
    $auebertr[$i][1] = GUICtrlCreateInput('', 950, $x1, 45, 21)
    $x += 70
    $y += 70
    $x1 += 70
    $x2 += 70
    $y2 += 70
    $x3 += 70
    $y4 += 70
    Next
    _GUIScrollBars_Init($GUI)
    GUIRegisterMsg($WM_VSCROLL, "WM_VSCROLL")
    GUISetState()
    $GUI2 = GUICreate('Speicher Abfrage', 627, 585, -1, -1, $WS_SIZEBOX, $WS_EX_ACCEPTFILES)
    GUISetOnEvent(-3, '_Fguischl')
    Local $monaswa = GUICtrlCreateCombo('', 20, 520, 75, 22)
    GUICtrlCreateLabel('Bitte Monat auswählen !', 110, 525, 140, 22)
    Local $alinil = GUICtrlCreateButton('Daten Einlesen', 240, 520, 90, 20)
    GUICtrlSetOnEvent(-1, '_save_lesen')
    GUICtrlCreateButton('Print', 335, 520, 90, 20)
    GUICtrlSetOnEvent(-1, '_Druck')
    Local $hListview = GUICtrlCreateListView('Name|Position|Soll|Ist|Übertrag|R=Urlaub', 0, 0, 625, 500)
    _GUICtrlListView_SetExtendedListViewStyle($hListview, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
    Global $hLVHandle = GUICtrlGetHandle($hListview)
    Local $alistHa[6] = ['Name', 'Position', 'Soll', 'Ist', 'Übertrag', 'R=Urlaub']
    Local $alzeig[6]
    For $i = 0 To 5
    $alzeig[$i] = _GUICtrlListView_SetColumn($hLVHandle, $i, $alistHa[$i], 100, 0)
    Next
    GUICtrlSetData($monaswa, 'Januar|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember')
    GUISetState(@SW_HIDE, $GUI2)
    $GUI3 = GUICreate('Option', 250, 100, -1, -1)
    GUISetOnEvent(-3, '_Fguischl3')
    Local $aspeig = GUICtrlCreateButton('Daten Speichern', 20, 20, 100, 20)
    GUICtrlSetOnEvent(-1, '_save_lesen')
    GUICtrlCreateButton('Speicher Abfragen', 125, 20, 100, 20)
    GUICtrlSetOnEvent(-1, '_Fgui')
    GUICtrlCreateLabel('Feiertage', 38, 60, 60, 20)
    GUICtrlSetColor(-1, 0x0000FF)
    Local $speiloe1 = GUICtrlCreateButton('Zurücksetzen', 125, 57, 100, 20)
    GUICtrlSetOnEvent(-1, '_speleoein')
    GUISetState(@SW_HIDE, $GUI3)
    $GUI4 = GUICreate('Feiertage', 370, 420, -1, -1)
    GUISetOnEvent(-3, '_Fguischl4')
    GUICtrlCreateLabel('Die zutreffenden Feiertage des jeweiligen Bundeslands auswählen.', 25, 10, 390, 20)
    GUICtrlSetColor(-1, 0x0000FF)
    Local $afei = _Feiertage(GUICtrlRead($jahr))
    Local $feiersp[32]
    Local $x = 20, $y = 50
    For $i = 0 To 31
    If $i = 16 Then
    $x = 200
    $y = 50
    EndIf
    $feiersp[$i] = GUICtrlCreateButton($afei[$i][1], $x, $y, 150, 20)
    GUICtrlSetOnEvent(-1, '_wrii')
    $y += 22
    Next
    GUISetState(@SW_HIDE, $GUI4)
    $GUI5 = GUICreate('Schichten vergeben', 370, 330, -1, -1)
    GUISetOnEvent(-3, '_gui5exit')
    GUICtrlCreateLabel('Sie haben die Möglichkeit 4 schichten mit verschiedene Zeiten auszustatten. Das Programm merkt sich die eingegeben Zeiten und arbeitet mit ihnen!', 20, 20, 320, 50)
    Local $schiInput[4]
    Local $t = 80
    For $i = 0 To 3
    $schiInput[$i] = GUICtrlCreateInput('', 160, $t, 30, 20)
    $t += 50
    Next
    Local $schibut[4]
    Local $t = 80
    For $i = 0 To 3
    $schibut[$i] = GUICtrlCreateButton('Speichern', 220, $t, 80, 20)
    GUICtrlSetOnEvent(-1, '_schisetz')
    $t += 50
    Next
    Local $schizurue = GUICtrlCreateButton('Werte Zurücksetzen', 190, 270, 110, 20)
    GUICtrlSetOnEvent(-1, '_speleoein')
    Local $sichtiniaus = IniReadSection($schichtsetz, ' Schichten ')
    If @error Then
    Else
    For $i = 1 To $sichtiniaus[0][0]
    GUICtrlSetData($schiInput[$i - 1], $sichtiniaus[$i][1])
    Next
    EndIf
    GUICtrlCreateLabel('Schichtbezeichnung: F2 ', 25, 83, 120, 20)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateLabel('Schichtbezeichnung: S2 ', 25, 133, 120, 20)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateLabel('Schichtbezeichnung: Z ', 25, 183, 120, 20)
    GUICtrlSetColor(-1, 0x0000FF)
    GUICtrlCreateLabel('Schichtbezeichnung: Na ', 25, 233, 120, 20)
    GUICtrlSetColor(-1, 0x0000FF)
    GUISetState(@SW_HIDE, $GUI5)
    Func _desklink()
    If FileExists(@ScriptDir & '\data\Ndekv') Then Return
    Local $bLoop = 1
    Local $spei = MsgBox(4, '', 'Wollen sie eine Verknüpfung auf dem Dektop anlegen?')
    If $spei = 7 Then
    _FileCreate(@ScriptDir & '\data\Ndekv')
    $bLoop = 0
    EndIf
    If $bLoop = 1 Then FileCreateShortcut(@ScriptDir & "\Dienstplan.exe", @DesktopDir & "\Dienstplan.lnk", @DesktopDir & "\Pic\ICON_541.ICO", @SW_MINIMIZE)
    EndFunc ;==>_desklink
    Func _speleoein()
    Switch @GUI_CtrlId
    Case $speiloe1
    FileDelete(@ScriptDir & '\data\Feiertage' & GUICtrlRead($jahr) & '.ini')
    Sleep(150)
    _Wochentag()
    Case $schizurue
    FileDelete(@ScriptDir & '\data\Schichten.ini')
    Local $s = IniReadSection($schichtsetz, 'Schichten')
    For $i = 0 To 3
    IniWrite($schichtsetz, 'Schichten', 'Gesetzt' & $i + 1, '0')
    GUICtrlSetData($schiInput[$i], '0')
    Next
    EndSwitch
    EndFunc ;==>_speleoein
    Func PlusMinus()
    Dim $am[12][2] = [['Januar', 1],['Februar', 2],['März', 3],['April', 4],['Mai', 5],['Juni', 6],['Juli', 7],['August', 8],['September', 9],['Oktober', 10],['November', 11],['Dezember', 12]]
    Switch @GUI_CtrlId
    Case $miusB
    GUICtrlSetState($miusB, $GUI_HIDE)
    GUICtrlSetState($mweahl, $GUI_SHOW + $GUI_ENABLE)
    Case $mweahl
    GUICtrlSetState($mweahl, $GUI_HIDE + $GUI_DISABLE)
    GUICtrlSetState($miusB, $GUI_SHOW)
    For $i = 0 To UBound($am) - 1
    If $am[$i][0] = GUICtrlRead($mweahl) Then GUICtrlSetData($monatzahl, $am[$i][1])
    Next
    GUICtrlSetData($monataus, GUICtrlRead($mweahl))
    _Wochentag()
    Case $minus
    If GUICtrlSetData($jahr, GUICtrlRead($jahr) - 1) Then _Wochentag()
    Case $plus
    If GUICtrlSetData($jahr, GUICtrlRead($jahr) + 1) Then _Wochentag()
    EndSwitch
    EndFunc ;==>PlusMinus
    Func _Wochentag()
    Dim $aei1[12] = [$aschTage, $aschTage1, $aschTage2, $aschTage3, $aschTage4, $aschTage5, $aschTage6, $aschTage7, $aschTage8, $aschTage9, $aschTage10, $aschTage11]
    Dim $z, $zah = 0, $anzSaSo = 0, $iniaus, $feierINI = @ScriptDir & '\data\Feiertage' & GUICtrlRead($jahr) & '.ini'
    GUICtrlSetData($Schalt, '')
    If Not FileExists($feierINI) Then Return MsgBox(0, 'Info', 'Es ist kein Feiertag speicher vorhanden!') & _Fgui4()
    For $i = 0 To 6
    GUICtrlSetData($afeilabel[$i], '')
    Next
    For $i = 0 To 30
    GUICtrlSetState($arTage[$i][0], $GUI_HIDE)
    GUICtrlSetState($arTage[$i][1], $GUI_HIDE)
    Next
    For $i = 0 To UBound($aei1) - 1
    $z = $aei1[$i]
    For $e = 0 To UBound($z) - 1
    If $e < _DateDaysInMonth(GUICtrlRead($jahr), GUICtrlRead($monatzahl)) Then
    GUICtrlSetData($arTage[$e][1], _getwochwntag(_DateToDayOfWeek(GUICtrlRead($jahr), GUICtrlRead($monatzahl), GUICtrlRead($arTage[$e][0]))))
    GUICtrlSetState($z[$e][0], $GUI_ENABLE)
    GUICtrlSetState($z[$e][1], $GUI_ENABLE)
    Else
    GUICtrlSetData($arTage[$e][1], "")
    GUICtrlSetState($z[$e][0], $GUI_DISABLE)
    GUICtrlSetState($z[$e][1], $GUI_DISABLE)
    EndIf
    Next
    Next
    For $i = 0 To UBound($aei1) - 1
    $z = $aei1[$i]
    For $e = 0 To UBound($z) - 1
    If GUICtrlRead($arTage[$e][1]) = 'Sa' Or GUICtrlRead($arTage[$e][1]) = 'So' Then
    GUICtrlSetBkColor($z[$e][0], 0xDADBE5)
    GUICtrlSetBkColor($z[$e][1], 0xDADBE5)
    GUICtrlSetColor($arTage[$e][1], 0xff0000)
    GUICtrlSetColor($arTage[$e][0], 0xff0000)
    Else
    GUICtrlSetBkColor($z[$e][0], 0xFFFFFF)
    GUICtrlSetBkColor($z[$e][1], 0xFFFFFF)
    GUICtrlSetColor($arTage[$e][1], 0x000000)
    GUICtrlSetColor($arTage[$e][0], 0x000000)
    EndIf
    Next
    Next
    $iniaus = IniReadSection($feierINI, GUICtrlRead($monataus))
    _ArraySort($iniaus, 0, 0, 0, 1)
    For $i = 1 To UBound($iniaus) - 1
    Local $as_arrayr = _StringSplitCount(StringReplace($iniaus[$i][1], '.', ''), 2)
    If _DateToDayOfWeekISO($as_arrayr[2] & $as_arrayr[3], $as_arrayr[1], $as_arrayr[0]) = 5 Or _DateToDayOfWeekISO($as_arrayr[2] & $as_arrayr[3], $as_arrayr[1], $as_arrayr[0]) = 6 Then
    Else
    $zah += 1
    EndIf
    GUICtrlSetData($afeilabel[$i - 1], $iniaus[$i][1])
    Next
    For $i = 0 To 30
    GUICtrlSetState($arTage[$i][0], $GUI_SHOW)
    GUICtrlSetState($arTage[$i][1], $GUI_SHOW)
    If _DateToDayOfWeek(GUICtrlRead($jahr), GUICtrlRead($monatzahl), GUICtrlRead($arTage[$i][0])) = 1 Or _DateToDayOfWeek(GUICtrlRead($jahr), GUICtrlRead($monatzahl), GUICtrlRead($arTage[$i][0])) = 7 Then $anzSaSo += 1
    Next
    $x = _DateDaysInMonth(GUICtrlRead($jahr), GUICtrlRead($monatzahl)) - $anzSaSo - $zah
    If _DateIsLeapYear(GUICtrlRead($jahr)) Then GUICtrlSetData($Schalt, 'Schaltjahr')
    EndFunc ;==>_Wochentag
    Func _getwochwntag($wtag)
    Local $aWT[8] = ['', 'So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa']
    Return $aWT[$wtag]
    EndFunc ;==>_getwochwntag
    Func _buton()
    If GUICtrlRead($monataus) = '-------------------' Then Return MsgBox(0, 'Info', 'Keine Monat ausgewählt!')
    Local $b = (@GUI_CtrlId - 31)
    Local $mr
    If $b = 0 Then $mr = $aschTage
    If $b = 1 Then $mr = $aschTage1
    If $b = 2 Then $mr = $aschTage2
    If $b = 3 Then $mr = $aschTage3
    If $b = 4 Then $mr = $aschTage4
    If $b = 5 Then $mr = $aschTage5
    If $b = 6 Then $mr = $aschTage6
    If $b = 7 Then $mr = $aschTage7
    If $b = 8 Then $mr = $aschTage8
    If $b = 9 Then $mr = $aschTage9
    If $b = 10 Then $mr = $aschTage10
    If $b = 11 Then $mr = $aschTage11
    GUICtrlSetData($aist[$b][0], (_aUtage($mr) * _weiter(GUICtrlRead($asoll[$b][0]))) + _renunga2($mr, $b))
    GUICtrlSetData($arurlaub[$b][1], StringReplace(GUICtrlRead($arurlaub[$b][0]), ',', '.') - _aUtage($mr))
    GUICtrlSetData($asoll[$b][1], _weiter(GUICtrlRead($asoll[$b][0])) * $x)
    GUICtrlSetData($asoler[$b][0], Round(GUICtrlRead($aist[$b][0]) - GUICtrlRead($asoll[$b][1]), 2))
    GUICtrlSetData($auebertr[$b][1], Round(GUICtrlRead($asoler[$b][0]) + StringReplace(GUICtrlRead($auebertr[$b][0]), ',', '.'), 2))
    EndFunc ;==>_buton
    Func _renunga2($rech, $c)
    Local $zaehlen = 0
    Local $s = IniReadSection($schichtsetz, 'Schichten')
    Local $ssch = StringReplace($s[1][1], ',', '.')
    Local $ssch1 = StringReplace($s[2][1], ',', '.')
    Local $ssch2 = StringReplace($s[3][1], ',', '.')
    Local $ssch3 = StringReplace($s[4][1], ',', '.')
    Local $a = _weiter(GUICtrlRead($asoll[$c][0]))
    Local $b = $a / 2
    For $i = 0 To UBound($rech) - 1
    If GUICtrlRead($rech[$i][0]) = 'F' Then $zaehlen += $a
    If GUICtrlRead($rech[$i][0]) = 'S' Then $zaehlen += $a
    If GUICtrlRead($rech[$i][0]) = 'FF' Then $zaehlen += $b
    If GUICtrlRead($rech[$i][0]) = 'SS' Then $zaehlen += $b
    If GUICtrlRead($rech[$i][0]) = 'Z' Then $zaehlen += $ssch2
    If GUICtrlRead($rech[$i][0]) = 'F2' Then $zaehlen += $ssch
    If GUICtrlRead($rech[$i][0]) = 'S2' Then $zaehlen += $ssch1
    If GUICtrlRead($rech[$i][0]) = 'Na' Then $zaehlen += $ssch3
    If GUICtrlRead($rech[$i][0]) = 'K' Then $zaehlen += $a
    Next
    Return $zaehlen
    EndFunc ;==>_renunga2
    Func _aUtage($urech)
    Local $anzSicht = 0
    For $i = 0 To UBound($urech) - 1
    If GUICtrlRead($urech[$i][1]) = 'U' Then $anzSicht += 1
    Next
    Return $anzSicht
    EndFunc ;==>_aUtage
    Func _weiter($wochstu)
    Local $waus = StringReplace($wochstu, ',', '.')
    Return $waus / 5
    EndFunc ;==>_weiter
    Func _save_lesen()
    Dim $z, $wahl = GUICtrlRead($jahr), $zz = 0, $N = 0, $h = 0, $sch = @ScriptDir & '\data\' & $wahl & '\SichtenSpeicher\Schicht' & GUICtrlRead($mweahl) & '.ini', $alesenschreibINI = @ScriptDir & '\data\' & $wahl & '\Dienstplan_settings_Ueberblick' & $wahl & '.ini', $aData
    Dim $spei, $loop = 1
    Dim $aei1[34][2] = [['Name', $aname],['Position', $aname],['Soll', $asoll],['WS', $asoll],['Ist', $aist],['Übertrag', $auebertr],['PM', $auebertr],['Urlaub', $arurlaub],['NU', $arurlaub],['Soller', $asoler],['M1-', $aschTage],['UT1-', $aschTage],['M2-', $aschTage1],['UT2-', $aschTage1],['M3-', $aschTage2],['UT3-', $aschTage2],['M4-', $aschTage3],['UT4-', $aschTage3],['M5-', $aschTage4],['UT5-', $aschTage4],['M6-', $aschTage5],['UT6-', $aschTage5],['M7-', $aschTage6],['UT7-', $aschTage6],['M8-', $aschTage7],['UT8-', $aschTage7],['M9-', $aschTage8],['UT9-', $aschTage8],['M10-', $aschTage9],['UT10-', $aschTage9],['M11-', $aschTage10],['UT11-', $aschTage10],['M12-', $aschTage11],['UT12-', $aschTage11]]
    DirCreate(@ScriptDir & '\data\' & GUICtrlRead($jahr) & '\Sichtenspeicher')
    Switch @GUI_CtrlId
    Case $aMErst[0], $aspeig
    If GUICtrlRead($monataus) = '-------------------' Then Return MsgBox(0, 'Info', 'Kein Monat ausgewählt!')
    GUISetState(@SW_HIDE, $GUI)
    ProgressOn('', 'Daten werden gespeichert ...')
    $h += 10
    ProgressSet($h, $h & '%')
    For $i = 0 To 11
    IniWrite($alesenschreibINI, GUICtrlRead($monataus), 'Name' & $i + 1, GUICtrlRead($aname[$i][0]) & '|' & GUICtrlRead($aname[$i][1]) & '|' & GUICtrlRead($asoll[$i][1]) & '|' & GUICtrlRead($aist[$i][0]) & '|' & GUICtrlRead($auebertr[$i][1]) & '|' & GUICtrlRead($arurlaub[$i][1]))
    $h += 2
    ProgressSet($h, $h & '%')
    Next
    For $i = 0 To UBound($aei1) - 1
    $N = 0
    If $aei1[$i][0] = 'Position' Or $aei1[$i][0] = 'Soll' Or $aei1[$i][0] = 'Übertrag' Or $aei1[$i][0] = 'Urlaub' Or StringLeft($aei1[$i][0], 2) = 'UT' Then $N = 1
    $z = $aei1[$i][1]
    For $e = 0 To UBound($z) - 1
    If GUICtrlRead($z[$e][$N]) <> IniRead($sch, GUICtrlRead($mweahl), $aei1[$i][0] & $e + 1, '') Then IniWrite($sch, GUICtrlRead($monataus), $aei1[$i][0] & $e + 1, GUICtrlRead($z[$e][$N]))
    Next
    $h += 2
    ProgressSet($h, $h & '%')
    Next
    ProgressOff()
    GUISetState(@SW_SHOW, $GUI)
    MsgBox(64, 'Speicher Bericht', 'Speicher der Daten Komplett!')
    Case $aMErst[1]
    For $i = 0 To UBound($aei1) - 1
    $N = 0
    If $aei1[$i][0] = 'Position' Or $aei1[$i][0] = 'Soll' Or $aei1[$i][0] = 'Übertrag' Or $aei1[$i][0] = 'Urlaub' Or StringLeft($aei1[$i][0], 2) = 'UT' Then $N = 1
    $z = $aei1[$i][1]
    For $e = 0 To UBound($z) - 1
    If Not GUICtrlRead($z[$e][$N]) = '' Then Return MsgBox(0, 'Info', 'Bevor eingelesen werden kann, Speichern oder leren sie die Ansicht!')
    Next
    Next
    If IniReadSection($sch, GUICtrlRead($mweahl)) Then Return MsgBox(0, 'Info', 'Speicher nicht vorhanden!')
    GUISetState(@SW_HIDE, $GUI)
    ProgressOn('', 'Daten werden geladen ...')
    $h += 1
    ProgressSet($h, $h & '%')
    For $i = 0 To UBound($aei1) - 1
    $N = 0
    If $aei1[$i][0] = 'Position' Or $aei1[$i][0] = 'Soll' Or $aei1[$i][0] = 'Übertrag' Or $aei1[$i][0] = 'Urlaub' Or StringLeft($aei1[$i][0], 2) = 'UT' Then $N = 1
    $z = $aei1[$i][1]
    For $e = 0 To UBound($z) - 1
    If GUICtrlRead($z[$e][$N]) = '' Then GUICtrlSetData($z[$e][$N], IniRead($sch, GUICtrlRead($mweahl), $aei1[$i][0] & $e + 1, ''))
    Next
    $h += 3
    ProgressSet($h, Round($h) & '%')
    Next
    ProgressOff()
    GUISetState(@SW_SHOW, $GUI)
    MsgBox(64, 'Einlese Bericht', 'Einlesen vom Speicher Komplett!')
    Case $alinil
    If Not FileExists($alesenschreibINI) Or IniReadSection($alesenschreibINI, GUICtrlRead($monaswa)) Then Return MsgBox(0, 'Info', 'Speicher nicht vorhanden!')
    $aData = IniReadSection($alesenschreibINI, GUICtrlRead($monaswa))
    GUICtrlCreateListViewItem('----------|----------|---------|' & GUICtrlRead($monaswa) & GUICtrlRead($jahr) & '|----------|----------', $hListview)
    For $i = 1 To $aData[0][0]
    GUICtrlCreateListViewItem($aData[$i][1], $hListview)
    Next
    MsgBox(0, 'Daten einelese', 'Daten von ' & GUICtrlRead($monaswa) & ' wurde erfolgreich eingelsen!')
    Case $aMErst[2]
    For $i = 0 To UBound($aei1) - 1
    $N = 0
    If $aei1[$i][0] = 'Position' Or $aei1[$i][0] = 'Soll' Or $aei1[$i][0] = 'Übertrag' Or $aei1[$i][0] = 'Urlaub' Or StringLeft($aei1[$i][0], 2) = 'UT' Then $N = 1
    $z = $aei1[$i][1]
    For $e = 0 To UBound($z) - 1
    GUICtrlSetData($z[$e][$N], '')
    Next
    Next
    EndSwitch
    EndFunc ;==>_save_lesen
    Func _ftausl()
    Local $c = (@GUI_CtrlId - 24)
    Local $d = GUICtrlRead($afeilabel[$c])
    Local $inifeiaus = IniReadSection(@ScriptDir & '\data\Feiertage' & GUICtrlRead($jahr) & '.ini', GUICtrlRead($monataus))
    If @error Then
    Else
    For $i = 1 To $inifeiaus[0][0]
    If $inifeiaus[$i][1] = $d Then MsgBox(0, '', $inifeiaus[$i][0])
    Next
    EndIf
    EndFunc ;==>_ftausl
    Func _wrii()
    Local $a = (@GUI_CtrlId - 1015)
    Local $afeius = _Feiertage(GUICtrlRead($jahr))
    Local $as_array = _StringSplitCount(StringReplace($afeius[$a][0], '.', ''), 2)
    Local $as_aweit = _getmonatwahl($as_array[1])
    IniWrite(@ScriptDir & '\data\Feiertage' & GUICtrlRead($jahr) & '.ini', $as_aweit, $afeius[$a][1], $afeius[$a][0])
    _GUICtrlButton_Enable($feiersp[$a], False)
    EndFunc ;==>_wrii
    Func _StringSplitCount(Const $S_TEXT, Const $I_COUNT)
    Return StringRegExp($S_TEXT, '.{1,' & $I_COUNT & '}', 3)
    EndFunc ;==>_StringSplitCount
    Func _getmonatwahl($monatw)
    Local $aMonat[13] = ['', 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']
    Return $aMonat[$monatw]
    EndFunc ;==>_getmonatwahl
    Func _schisetz()
    Local $a = (@GUI_CtrlId - 1052)
    Local $c
    If $a = 0 Then $c = 1
    If $a = 1 Then $c = 2
    If $a = 2 Then $c = 3
    If $a = 3 Then $c = 4
    IniWrite($schichtsetz, 'Schichten', 'Gesetzt' & $c, GUICtrlRead($schiInput[$a]))
    EndFunc ;==>_schisetz
    Func _Druck()
    Local $array = _Listviewtoarray($hLVHandle)
    _test($array)
    EndFunc ;==>_Druck
    Func _test($array)
    Local $open = FileOpen($sDBFile, 2)
    Local $html = _ArrayToHTMLTable2($array, True)
    FileWrite($open, $html)
    FileClose($open)
    ShellExecute($sDBFile)
    EndFunc ;==>_test
    Func _Listviewtoarray($hwnd)
    Local $col, $getcol, $lcount, $atext, $counter = 1
    $col = _GUICtrlListView_GetColumnCount($hwnd)
    $lcount = _GUICtrlListView_GetItemCount($hwnd)
    Local $alistview[$lcount + 1][$col]
    For $y = 0 To $col - 1
    $getcol = _GUICtrlListView_GetColumn($hwnd, $y)
    $alistview[0][$y] = $getcol[5]
    Next
    For $i = 0 To $lcount - 1
    $atext = _GUICtrlListView_GetItemTextArray($hwnd, $i)
    For $x = 0 To $atext[0] - 1
    $alistview[$counter][$x] = $atext[$x + 1]
    Next
    $counter += 1
    Next
    Return $alistview
    $counter = 1
    EndFunc ;==>_Listviewtoarray
    Func _ArrayToHTMLTable2(ByRef $aArray, $bHeader = True, $break = 37)
    Local $int, $theader, $hcounter = 0, $del = $break + 1
    Local $iD1 = UBound($aArray, 1)
    If @error Then
    SetError(1)
    Return ''
    EndIf
    Local $iD2 = UBound($aArray, 2)
    If @error Then
    SetError(1)
    Return ''
    EndIf
    Local $sTable = ""
    $sTable &= '<style type="text/css">' & @CRLF
    $sTable &= '</style>' & @CRLF
    $sTable &= '<table border="1" style="width:100%">' & @CRLF
    Local $iStart = 0
    If $bHeader Then
    $iStart = 1
    $sTable &= '<tr>' & @CRLF
    For $i = 0 To $iD2 - 1
    $theader &= @TAB & '<th align="left">' & $aArray[0][$i] & '</th>' & @CRLF
    Next
    $sTable &= $theader
    $sTable &= '</tr>' & @CRLF
    EndIf
    For $i = $iStart To $iD1 - 1
    $hcounter += 1
    If $hcounter = $del Then
    $sTable &= '</table>' & @CRLF
    $sTable &= '<h5>Übertrag</h5>' & @CRLF
    $sTable &= '<h5 style="page-break-before:always">Übertrag</h5>' & @CRLF
    $sTable &= '<table border="1" style="width:100%">' & @CRLF
    $sTable &= '<tr>' & @CRLF
    $sTable &= $theader
    $sTable &= '</tr>' & @CRLF
    $hcounter = 0
    $del = $break
    EndIf
    $sTable &= '<tr>' & @CRLF
    For $j = 0 To $iD2 - 1
    $sTable &= @TAB & '<td>' & $aArray[$i][$j] & '</td>' & @CRLF
    Next
    $sTable &= '</tr>' & @CRLF
    Next
    $sTable &= '</table>' & @CRLF
    $theader = ""
    Return $sTable
    EndFunc ;==>_ArrayToHTMLTable2
    Func _Feiertage($year, $DateTyp = 1)
    Local $4AdvDat, $3AdvDat, $2AdvDat, $1AdvDat, $TotSoDat, $BuBDat, $MutterDat, $ErnteDat, $tmp
    Local $HDays[32][2], $a, $b, $c, $d, $e, $H1, $H2, $N, $M
    $HDays[0][0] = $year & "/01/01\Neujahr"
    $HDays[1][0] = $year & "/01/06\Heilige Drei Könige"
    $HDays[2][0] = $year & "/02/14\Valentinstag"
    $HDays[3][0] = $year & "/05/01\Maifeiertag"
    $HDays[4][0] = $year & "/10/03\Tag der Deutschen Einheit"
    $HDays[5][0] = $year & "/10/31\Reformationstag"
    $HDays[6][0] = $year & "/11/01\Allerheiligen"
    $HDays[7][0] = $year & "/12/24\Heiligabend"
    $HDays[8][0] = $year & "/12/25\1. Weihnachtsfeiertag"
    $HDays[9][0] = $year & "/12/26\2. Weihnachtsfeiertag"
    $HDays[10][0] = $year & "/12/31\Silvester"
    $a = Mod($year, 19)
    $b = Mod($year, 4)
    $c = Mod($year, 7)
    $H1 = Int($year / 100)
    $H2 = Int($year / 400)
    $N = 4 + $H1 - $H2
    $M = 15 + $H1 - $H2 - Floor(Int((8 * $H1 + 13) / 25))
    $d = Mod((19 * $a + $M), 30)
    $e = Mod((2 * $b + 4 * $c + 6 * $d + $N), 7)
    If $d + $e = 35 Then
    Dim $Easter = 50
    Else
    If $d = 28 And $e = 6 And $a > 10 Then
    $Easter = 49
    Else
    Local $Easter = 22 + $d + $e
    EndIf
    EndIf
    If $Easter < 32 Then
    Local $EasterDay = $Easter
    Local $EasterMonth = "03"
    Else
    Dim $EasterDay = $Easter - 31
    Local $EasterMonth = "04"
    EndIf
    If $EasterDay < 10 Then
    $EasterDay = "0" & $EasterDay
    EndIf
    If $year < 1900 Then
    Local $RestJahr = Mod($year, 100)
    If _DateIsLeapYear($year) Then
    If $RestJahr < 10 Then
    Local $RestJahr = "0" & $RestJahr
    EndIf
    Local $Tempyear = 20 & $RestJahr
    Else
    If $RestJahr < 10 Then
    Local $RestJahr = "0" & $RestJahr
    EndIf
    $Tempyear = 19 & $RestJahr
    EndIf
    Local $EasterDate = $Tempyear & "/" & $EasterMonth & "/" & $EasterDay
    Else
    Dim $EasterDate = $year & "/" & $EasterMonth & "/" & $EasterDay
    EndIf
    Local $WFastDate = _DateAdd('d', -52, $EasterDate)
    Local $RosDat = _DateAdd('d', -48, $EasterDate)
    Local $FastDat = _DateAdd('d', -47, $EasterDate)
    Local $AschDat = _DateAdd('d', -46, $EasterDate)
    Local $GrDoDat = _DateAdd('d', -3, $EasterDate)
    Local $KarDat = _DateAdd('d', -2, $EasterDate)
    Local $OSaDat = _DateAdd('d', -1, $EasterDate)
    Local $OSoDat = $EasterDate
    Local $OMoDat = _DateAdd('d', 1, $EasterDate)
    Local $HiFaDat = _DateAdd('d', 39, $EasterDate)
    Local $PfSoDat = _DateAdd('d', 49, $EasterDate)
    Local $PfMoDat = _DateAdd('d', 50, $EasterDate)
    Local $FroDat = _DateAdd('d', 60, $EasterDate)
    For $maitag = 8 To 14
    If _DateToDayOfWeek($year, 5, $maitag) = 1 Then
    If $maitag < 10 Then
    $maitag = "0" & $maitag
    EndIf
    $MutterDat = $year & "/05/" & $maitag
    If $MutterDat = $PfSoDat Then
    $MutterDat = _DateAdd('d', -7, $year & "/05/" & $maitag)
    EndIf
    ExitLoop
    EndIf
    Next
    For $oktobertag = 1 To 7
    If _DateToDayOfWeek($year, 10, $oktobertag) = 1 Then
    $oktobertag = "0" & $oktobertag
    $ErnteDat = $year & "/10/" & $oktobertag
    ExitLoop
    EndIf
    Next
    For $deztag = 18 To 24
    If _DateToDayOfWeek($year, 12, $deztag) = 1 Then
    $4AdvDat = $year & "/12/" & $deztag
    $3AdvDat = _DateAdd('d', -7, $4AdvDat)
    $2AdvDat = _DateAdd('d', -14, $4AdvDat)
    $1AdvDat = _DateAdd('d', -21, $4AdvDat)
    $TotSoDat = _DateAdd('d', -28, $4AdvDat)
    $BuBDat = _DateAdd('d', -32, $4AdvDat)
    ExitLoop
    EndIf
    Next
    $HDays[11][0] = $WFastDate & "\Weiberfastnacht"
    $HDays[12][0] = $RosDat & "\Rosenmontag"
    $HDays[13][0] = $FastDat & "\Fastnacht"
    $HDays[14][0] = $AschDat & "\Aschermittwoch"
    $HDays[15][0] = $GrDoDat & "\Gründonnerstag"
    $HDays[16][0] = $KarDat & "\Karfreitag"
    $HDays[17][0] = $OSaDat & "\Ostersamstag"
    $HDays[18][0] = $OSoDat & "\Ostersonntag"
    $HDays[19][0] = $OMoDat & "\Ostermontag"
    $HDays[20][0] = $HiFaDat & "\Christi Himmelfahrt"
    $HDays[21][0] = $PfSoDat & "\Pfingstsonntag"
    $HDays[22][0] = $PfMoDat & "\Pfingstmontag"
    $HDays[23][0] = $MutterDat & "\Muttertag"
    $HDays[24][0] = $FroDat & "\Fronleichnam"
    $HDays[25][0] = $ErnteDat & "\Erntedankfest"
    $HDays[26][0] = $BuBDat & "\Buß- und Bettag"
    $HDays[27][0] = $TotSoDat & "\Totensonntag"
    $HDays[28][0] = $1AdvDat & "\1. Advent"
    $HDays[29][0] = $2AdvDat & "\2. Advent"
    $HDays[30][0] = $3AdvDat & "\3. Advent"
    $HDays[31][0] = $4AdvDat & "\4. Advent"
    _ArraySort($HDays, 0, 0, 10)
    _ArraySort($HDays, 0, 11)
    For $i = 0 To 31
    If $DateTyp Then
    $tmp = StringSplit($HDays[$i][0], "\", 2)
    $HDays[$i][0] = StringMid($tmp[0], 9) & "." & StringMid($tmp[0], 6, 2) & "." & StringMid($tmp[0], 1, 4)
    $HDays[$i][1] = $tmp[1]
    Else
    $HDays[$i][1] = StringTrimLeft($HDays[$i][0], 11)
    $HDays[$i][0] = StringLeft($HDays[$i][0], 10)
    EndIf
    Next
    Return $HDays
    EndFunc ;==>_Feiertage
    Func WM_VSCROLL($hwnd, $Msg, $wParam, $lParam)
    Local $nScrollCode = BitAND($wParam, 0x0000FFFF)
    Local $index = -1, $yChar, $yPos
    Local $Min, $Max, $Page, $Pos, $TrackPos
    For $x = 0 To UBound($aSB_WindowInfo) - 1
    If $aSB_WindowInfo[$x][0] = $hwnd Then
    $index = $x
    $yChar = $aSB_WindowInfo[$index][2]
    ExitLoop
    EndIf
    Next
    If $index = -1 Then Return 0
    Local $tSCROLLINFO = _GUIScrollBars_GetScrollInfoEx($hwnd, $SB_VERT)
    $Min = DllStructGetData($tSCROLLINFO, "nMin")
    $Max = DllStructGetData($tSCROLLINFO, "nMax")
    $Page = DllStructGetData($tSCROLLINFO, "nPage")
    $yPos = DllStructGetData($tSCROLLINFO, "nPos")
    $TrackPos = DllStructGetData($tSCROLLINFO, "nTrackPos")
    $Pos = $yPos
    Switch $nScrollCode
    Case $SB_TOP
    DllStructSetData($tSCROLLINFO, "nPos", $Min)
    Case $SB_BOTTOM
    DllStructSetData($tSCROLLINFO, "nPos", $Max)
    Case $SB_LINEUP
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - 1)
    Case $SB_LINEDOWN
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + 1)
    Case $SB_PAGEUP
    DllStructSetData($tSCROLLINFO, "nPos", $Pos - $Page)
    Case $SB_PAGEDOWN
    DllStructSetData($tSCROLLINFO, "nPos", $Pos + $Page)
    Case $SB_THUMBTRACK
    DllStructSetData($tSCROLLINFO, "nPos", $TrackPos)
    EndSwitch
    DllStructSetData($tSCROLLINFO, "fMask", $SIF_POS)
    _GUIScrollBars_SetScrollInfo($hwnd, $SB_VERT, $tSCROLLINFO)
    _GUIScrollBars_GetScrollInfo($hwnd, $SB_VERT, $tSCROLLINFO)
    $Pos = DllStructGetData($tSCROLLINFO, "nPos")
    If ($Pos <> $yPos) Then
    _GUIScrollBars_ScrollWindow($hwnd, 0, $yChar * ($yPos - $Pos))
    $yPos = $Pos
    EndIf
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_VSCROLL
    Func _Exit()
    Exit
    EndFunc ;==>_Exit
    Func _Fgui()
    GUISetState(@SW_HIDE, $GUI3)
    GUISetState(@SW_SHOW, $GUI2)
    EndFunc ;==>_Fgui
    Func _Fgui3()
    GUISetState(@SW_SHOW, $GUI3)
    EndFunc ;==>_Fgui3
    Func _Fgui4()
    GUISetState(@SW_SHOW, $GUI4)
    EndFunc ;==>_Fgui4
    Func _Fguischl()
    GUISetState(@SW_HIDE, $GUI2)
    EndFunc ;==>_Fguischl
    Func _Fguischl3()
    GUISetState(@SW_HIDE, $GUI3)
    EndFunc ;==>_Fguischl3
    Func _Fguischl4()
    GUISetState(@SW_HIDE, $GUI4)
    If FileExists(@ScriptDir & '\data\Feiertage' & GUICtrlRead($jahr) & '.ini') Then _Wochentag()
    For $i = 0 To 31
    _GUICtrlButton_Enable($feiersp[$i], True)
    Next
    EndFunc ;==>_Fguischl4
    Func _gui5()
    GUISetState(@SW_SHOW, $GUI5)
    EndFunc ;==>_gui5
    Func _gui5exit()
    GUISetState(@SW_HIDE, $GUI5)
    EndFunc ;==>_gui5exit
    While 1 * Sleep(10)
    WEnd

    [/autoit]

    Und immer noch unter 1000 zeilen!

    Freu mich auf Feedback!

    LG Kleiner

  • Eine genauere Beschreibung was das Tool kann wäre gut. dann könnte man mehr ausprobieren. so weiß ich iwie nich wo ich anfangen soll...

    achja beim wild rumklicken hatte ich schon einen fehler.
    wenn man auf november is, und dreimal auf + klickt kommt n array-fehler.

  • Hallo Schnitzel!

    Freu mich das du mein tool testest!

    Also der code erlaubt 12 Mitarbeiter (Personen) in ein Dienstplan zu verarbeiten, also wenn du für 12 Mitarbeiter den dienst für nächsten monat vergeben willst oder den jetzigene kannst du schichen vergeben F=Früh S=Spät FF=Frü-Frü kurze frühsicht F2-S2 habe in dem code bestimmte werte wie die anderen auch am ende sollen sie frei einstellbar sein sowie Na u. Z ausser F-S-FF-SS
    Jeder mitarbieter kann seperat verarbeitet werden also wenn du nur einen berabeitest und ihn berechnest die werte lasen sich auch in einer ini speichern und wieder abrufen wobei nur der Name Position Soll Ist Übertrag und R=Urlaub gespeichert werden das was nicht möglich ist das wenn ein gespeicherter monat neu gespeichert wird das nur bei dem berarbeiteten mitarbeiter die werte geendert werden sonder der gesamte monat wirt neu gespeichert!
    Die obige zeile ist für die schichten F-S-FF usw die darunter für Urlaub also U.
    Achja ganz vergessen K = Krank kann man auch vergeben!
    Was noch kommt feiertagsberechnung, speichern der werte da wo sie geendert wurden oder neu, vieleicht eine Mitarbeiter auswertung wieviel im jahr oder die letzten monate gearbeitet und krank macher! ;)
    Wie soch geagt die gespeicherten werte lassen sich aufrufen durch wählen des monats!

    Nachtrag: Druckbar solles am ende auch werden = zu verteilen an die mitarbeiter o. zu aushängen am büro!! :D

    LG Kleiner

    • Offizieller Beitrag

    Nachtrag: Druckbar solles am ende auch werden = zu verteilen an die mitarbeiter o. zu aushängen am büro!!

    Wenn du es öffentlich aushängst, dürfen keine Auswertungen enthalten sein. Datenschutz! Würde sowieso vorher den DS-Beauftragten das absegnen lassen.

    Hallo leute kein Feedback von eich?


    Dein Projekt ist eine ganz spezifische Lösung zu einem spezifischen Problem. Da liegt es in der Natur der Dinge, dass nicht allzu viel Leute damit etwas anfangen können. :S

  • Hey,

    du solltest auf jeden Fall ein besseres @error-handling einbauen.
    z.B. wenn man nach dem Start auf en Button "'Berechnen M-" drückt bricht das Skript ab.
    Immer wenn man den Input nicht vorhersehen (User-Eingabe) kann, sollte ein Abfrage folgen.
    Das ist ggf. aufwendiger als das eigentliche Skript, trotzdem sehr wichtig :)

    Zeile 245 bis 385 könnte man vermutlich extrem kürzen.

  • Ich dacht schon keiner möchte dazu was sagen! :rolleyes:

    BugFix: Stimmt hast du recht aber ihr geht es ja nicht darum ob einer damit was anfangen kann oder habe ich da jetzt eine falsche auffassung von dem teil des forum?????


    Nuts: Wie meinst du das,das der code abbricht ich habe bei mir gerade alle mal getestet und das eizigste was fasch ist das wenn kein monat ausgewählt wurde er schon mit was rechnet ist mir nicht ganz kla mit was aber er rechnet.
    Wie meinst du das mit der abfrage z.B ob schon welche vorhanden sind???
    Und gib mir bitte ein kleinen denkanstoß wegen : Zitat ( Zeile 245 bis 385 könnte man vermutlich extrem kürzen. ) wehr ganz lieb von dir???

    LG Kleiner ( freu mich ) :)

  • Das Skript bricht ab sobald man den angesprochenen Button drückt und noch gar keine Wert eingegeben hat.

    Die Zeilen könnte man auch for ... next Schleifen verkürzen.
    Würde ich mal behaupten, habs nur überflogen.

  • Nuts: Zitat (Das Skript bricht ab sobald man den angesprochenen Button drückt und noch gar keine Wert eingegeben hat. )

    Bei den button müßte eigentlich "'Berechnen M-1" "'Berechnen M-2" "'Berechnen M-3" usw. stehen bei mir habe ich keine fehler??????????
    Versteh ich jetzt nich welches OS hast du???

    Ich glaube ich weiß was du meinst bei der .EXE kommt der fehler oder??????


    LG Kleiner

  • Ja habe nur schnell auf die .exe geklickt und den Source im Forum überflogen.

    edit \ Bei "Berechnen M-1" tritt der Fehler auf.
    Ist auch ein kleiner optischer Fehler, da 1,2 usw. auf diesen Buttons nicht ganz dargestellt werden.

  • Danke nuts für dein test ich habe soweit von dir gemeldete fehler behoben!
    Post#1

    Mich würde da noch intresieren wie ich denn die Zeile 245 bis 385 kleiner bekomme denn sie laufen ja schon in einer for schleife wo die farbe auf dem ganzen code (31)*24 zeilen verteilt werden!????

    Edit: wa schon wieder ein fehler! wenn ich im code was ändere dann ändert sich auch ( @GUI_CtrlId ) so wie ich das im code habe: arbeite ich auch zum ersten mal mit!

    LG Kleiner

    Einmal editiert, zuletzt von kleiner27 (30. Oktober 2009 um 13:53)

  • Habe herausgefunden woran es gelegen hatte ich hatte euch das bild die .gif datei nicht mitgegeben und ich beim testen an anderer stelle des pc´s auch nicht daran gedacht nun habe ich das bild rausgenommen nun klapt es!

    Post#1


    LGKleiner

  • was mit aufgefallen ist:
    - es fehlt noch eine "drucken" - funktion
    - ich versteh noch nicht ganz ob das programm auch dazu benutzt werden kann schichten zu planen bzw die dienstpläne zu erstellen, oder ob es
    sich auf die reine erfassung beschränkt was sich ja auf die vergangenheit bezieht?

  • Freut mich das der code interessen geweckt hat!

    WhiteLion

    Es ist eine druck Option mit bei aber nur für Name>Position>Ist>Soll>Übertrag>Urlaub!
    Zu deinen fragen du kannst für die vergangeheit gegenwart zukunft den code benutzen planen für letzten diesen und kommenden was möglich wehr das der letzte geplante monat wieder einlesbar wehr also was man an schichten welchen tag fergeben hat leider reicht meine erfahrung noch nicht so weit das die ganze ansicht gedruckt werden kann aber das wird in zukunft noch geschehen und dann kommt die finale version.
    ????Wenn ich dich rechtig verstanden habe????

    LG Kleiner

    Einmal editiert, zuletzt von kleiner27 (2. November 2009 um 08:31)

  • Hey funkey !

    Also zu den feiertagen in österrei, tja da könne wir uns ja zusammen setzen und das grenzübergreifend erstellen :D !
    Und mit der Combobox da hast du wohl recht für das schnelle aussuchen der Monate, ich fande es so schöner als da jetzt eine C-Box zu haben! ;)


    LG Kleiner

  • Hallo WhiteLion !


    Danke dann las bitte deine kleine den code testen und berichte mir was sie vieleicht an verbesserungsvorschläge oder mängel hat um den code weiter entwickel !


    LG Kleiner