- Offizieller Beitrag
Hi,
da ich mit meinem Warenwirtschaftsprogramm für unsere Außendienstler noch nicht fertig bin, mein Chef aber nach einer einheitlichen und regelmäßigen Inventur verlangt, habe ich mal schnell eine reine Artikelbestandsverwaltung zusammengezimmert.
Typische Datenbankfunktionalität fehlt natürlich.
Aber immerhin kann man hiermit:
- Artikel erfassen, getrennt nach Massen- und Seriennummer-Artikeln
- Massenartikel Bestand führen (absoluter Lagerwert)
- Seriennummer-Artikeln führen, bei Lagerausgang (z.B. kurzfristig wg. Leihgabe) wird per Checkbox (* s. Kommentar) Status "Out" gesetzt und für Inventurwert nicht berücksichtigt
- Lagerbestand ausdrucken oder
- Lagerbestand (Inventur) per Mail versenden (Konfiguration in INI-Datei)
Für kleine Anzahl von unterschiedlichen Artikeln ist das ganz praktikabel.
* - Kommentar zu Checkbox
Mir ist aufgefallen, dass die Checkboxen beim Sortieren ignoriert werden.
Darum mußte ich hier etwas umständlich erst für alle Einträge den Checkbox-Status prüfen. Falls markiert wird eine 1 in die Spalte geschrieben. Dann wird sortiert und anschließend der Checkbox-Status neu gesetzt und die 1 bzw. 0 aus der Spalte gelöscht.
Das dauert leider mit zunehmender Anzahl der Einträge.
Kennt hier vielleicht jemand einen Weg, die Checkboxen mit in die Sortierung einzubeziehen?
Und hier das Ergebnis meiner sonntäglichen "Erholung"
(zum Test braucht ihr die angehängten Dateien)
EDIT
Hab nun doch noch eine Suche eingebaut, war sonst zu spartanisch. Den Dateianhang habe ich aber NICHT geändert. Also wer mag, das Script per Copy & Paste holen.
Spoiler anzeigen
#include <GUIConstants.au3>
#Include <GuiListView.au3>
#include <GuiTab.au3>
#include <file.au3>
#include <GuiCombo.au3>
#Include <GuiStatusBar.au3>
Global $lvArtikel, $lvSerien
Global Const $WM_NOTIFY = 0x004E
Global Const $NM_FIRST = 0
Global Const $NM_LAST = (-99)
Global Const $NM_OUTOFMEMORY = ($NM_FIRST - 1)
Global Const $NM_CLICK = ($NM_FIRST - 2)
Global Const $NM_DBLCLK = ($NM_FIRST - 3)
Global $hWndGUI
Global $MsgID
Global $oMyRet[2]
Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc")
Dim $new = 0, $changed = 0, $inputA = 0, $inputS = 0, $CurrIndex = 0, $ArtUnit = "", $MengeNr = 0, $Comment, $iArtBez, $iArtNr, $mNotiz
Dim $Fehler = 0, $massArt, $serArt, $cbLoadedA = 0,$cbLoadedS = 0, $INIchangedA = 0, $INIchangedS = 0
Dim $text1_1 = " Artikelbezeichnung:", $text2_1 = " SN-Gerät:", $text1_2 = " Anzahl:", $text2_2 = " Seriennummer:"
Local $a_PartsRightEdge[4] = [186, 447, 648, -1]
Local $a_PartsText[4] = [$text1_1, "", $text1_2, ""]
Dim $Required_Files[3]
$Required_Files[0]= "VerwSmall.INI"
$Required_Files[1] = "ser_art.vwg"
$Required_Files[2] = "mass_art.vwg"
For $i = 0 To 2
If Not FileExists($Required_Files[$i]) Then
MsgBox(262160, 'Fehler',"Datei: " & $Required_Files[$i] & " nicht im Anwendungspfad!"& @LF & @LF & _
"Ohne diese Datei kann das Programm nicht ausgeführt werden!")
$Fehler = 1
EndIf
Next
If $Fehler = 1 Then Exit
$INImail = IniReadSection("VerwSmall.INI", "mail")
$INIgeraete = IniReadSection("VerwSmall.INI", "geraete")
$INIartikel = IniReadSection("VerwSmall.INI", "artikel")
Dim $smtpServer = $INImail[1][1], $AbsName = $INImail[2][1], $AbsAdress = $INImail[3][1], $ToAdress = $INImail[4][1]
Dim $Betreff = $INImail[5][1], $Body = "", $UserName = $INImail[6][1], $UserPW = $INImail[7][1], $Port = $INImail[8][1]
$ArtikelGUI = GUICreate("Artikel", 867, 551, -1, -1, BitOr($WS_CAPTION, $WS_POPUP, $WS_SYSMENU), $WS_EX_TOPMOST)
$StatusBar = _GUICtrlStatusBarCreate ($ArtikelGUI, $a_PartsRightEdge, $a_PartsText)
_GUICtrlStatusBarSetBKColor ($StatusBar, 0xEEE8AA)
$TabArtikel = GUICtrlCreateTab(0, 120, 866, 429)
$TabMassArt = GUICtrlCreateTabItem("Mengen - Artikel")
$lvArtikel = GUICtrlCreateListView("Artikel-Bez.|Menge", 8, 144, 849, 385)
GUICtrlSetTip(-1, "Sortieren mit Klick auf den Spaltenkopf")
GUICtrlSendMsg($lvArtikel, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
_GUICtrlListViewSetColumnWidth(-1,0,250)
_GUICtrlListViewSetColumnWidth(-1,1,80)
_GUICtrlListViewJustifyColumn (-1, 1, 1)
GUICtrlCreateTabItem("")
$TabSNArt = GUICtrlCreateTabItem("Serien-Nr - Artikel")
$lvSerien = GUICtrlCreateListView("Out|Gerätename|Herst.-SN|Info", 7, 144, 849, 385, -1,$LVS_EX_CHECKBOXES)
GUICtrlSetTip(-1, "Sortieren mit Klick auf den Spaltenkopf")
GUICtrlSendMsg($lvSerien, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($lvSerien, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
_GUICtrlListViewSetColumnWidth(-1,0,40)
_GUICtrlListViewSetColumnWidth(-1,1,150)
_GUICtrlListViewSetColumnWidth(-1,2,150)
_GUICtrlListViewSetColumnWidth(-1,3,500)
_GUICtrlListViewJustifyColumn (-1, 0, 2)
_GUICtrlListViewJustifyColumn (-1, 2, 1)
GUICtrlCreateTabItem("")
$Group1 = GUICtrlCreateGroup("", 0, 0, 866, 118)
$lArtBez = GUICtrlCreateLabel("Artikelbezeichnung", 8, 20, 90, 21)
$lArtNrAnz = GUICtrlCreateLabel("Anzahl", 8, 56, 90)
$iArtBez = GUICtrlCreateCombo("", 116, 17, 230, 21, BitOR($CBS_SORT, $CBS_DROPDOWN, $WS_TABSTOP))
$iArtNr = GUICtrlCreateInput("", 116, 53, 230, 21, BitOR($ES_RIGHT, $ES_AUTOHSCROLL, $ES_READONLY, $WS_TABSTOP), $WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("Mengenartikel:", 8, 89, 80)
$bPrintA = GUICtrlCreateButton("Drucken", 90, 86, 60, 21)
GUICtrlSetTip(-1, "Ausdruck Lager-Bestand Mengenartikel")
GUICtrlCreateLabel("SN-Artikel:", 185, 89, 60)
$bPrintS = GUICtrlCreateButton("Drucken", 245, 86, 60, 21)
GUICtrlSetTip(-1, "Ausdruck Lager-Bestand SN-Artikel")
$bMail = GUICtrlCreateButton("Mailen", 375, 86, 60, 21)
GUICtrlSetTip(-1, "Mailversand Lager-Bestand" & @LF & "Mengenartikel und SN-Artikel"& @LF & @LF _
& "Zuerst SMTP-Server einrichten" & @LF & "in 'VerwSmall.INI'")
$bFirstA = GUICtrlCreateButton("", 728, 16, 30, 29,$BS_BITMAP)
GUICtrlSetImage(-1,@ScriptDir&"\button\first30x29.bmp")
GUICtrlSetTip(-1,"Erster"& @LF &"Eintrag")
$bLastA = GUICtrlCreateButton("", 760, 16, 30, 29,$BS_BITMAP)
GUICtrlSetImage(-1,@ScriptDir&"\button\last30x29.bmp")
GUICtrlSetTip(-1,"Letzter"& @LF &"Eintrag")
$bPrevA = GUICtrlCreateButton("", 728, 48, 30, 29,$BS_BITMAP)
GUICtrlSetImage(-1,@ScriptDir&"\button\prev30x29.bmp")
GUICtrlSetTip(-1,"Voriger"& @LF &"Eintrag")
$bNextA = GUICtrlCreateButton("", 760, 48, 30, 29,$BS_BITMAP)
GUICtrlSetImage(-1,@ScriptDir&"\button\next30x29.bmp")
GUICtrlSetTip(-1,"Nächster"& @LF &"Eintrag")
$bNewA = GUICtrlCreateButton("", 728, 80, 30, 29,$BS_BITMAP)
GUICtrlSetImage(-1,@ScriptDir&"\button\new30x29.bmp")
GUICtrlSetTip(-1,"Neuer"& @LF &"Eintrag oder"& @LF & "Eintrag ändern")
$bDelA = GUICtrlCreateButton("", 760, 80, 30, 29,$BS_BITMAP)
GUICtrlSetImage(-1,@ScriptDir&"\button\del30x29.bmp")
GUICtrlSetTip(-1,"Eintrag"& @LF &"Löschen")
$bSaveA = GUICtrlCreateButton("&Speichern", 792, 16, 65, 45)
GUICtrlSetState(-1, $GUI_DISABLE)
$bEscapeA = GUICtrlCreateButton("&Abbrechen", 792, 64, 65, 45)
$bSuchAufruf = GUICtrlCreateButton("", 613, 86, 100, 21)
GUICtrlSetTip(-1, "Suche nach Artikel bzw. Seriennummer."& @LF & "Eingabe wird automatisch in Kleinbuchstaben gewandelt -" _
& @LF & "Schreiben von Großbuchstaben also nicht nötig.")
GUICtrlCreateLabel("Notiz", 440, 20)
$mNotiz = GUICtrlCreateEdit("", 478, 17, 235, 60, BitOR($ES_LEFT, $ES_AUTOHSCROLL, $ES_READONLY), $WS_EX_CLIENTEDGE)
GUICtrlCreateGroup("", -99, -99, 1, 1)
If Not _FileReadToArray("mass_art.vwg",$massArt) Then
MsgBox(262144,"Fehler", " Fehler beim Lesen der Datei Fehler-Nr" & @error)
Exit
EndIf
If Not _FileReadToArray("ser_art.vwg",$serArt) Then
MsgBox(262144,"Fehler", " Fehler beim Lesen der Datei Fehler-Nr" & @error)
Exit
EndIf
For $i = 1 To $massArt[0]-1
If StringLen($massArt[0]) > 1 Then _
GUICtrlCreateListViewItem($massArt[$i], $lvArtikel)
Next
For $i = 1 To $serArt[0]
$tmp = StringLeft($serArt[$i], 1)
$item = StringTrimLeft($serArt[$i],1)
If StringLeft($item, 1) = "|" Then _
GUICtrlCreateListViewItem($item, $lvSerien)
If $tmp = 1 Then GUICtrlSetState(-1, $GUI_CHECKED)
Next
;GUI Suche
$SucheGUI = GUICreate("Suche", 250, 92, -1, -1, BitOr($WS_CAPTION, $WS_POPUP), $WS_EX_TOPMOST)
$lSuche = GUICtrlCreateLabel("Suchbegriff:", 10, 18)
$iSuche = GUICtrlCreateInput("", 80, 15, 160, 21, $ES_LOWERCASE)
$bSuche = GUICtrlCreateButton("Suche", 10, 56, 80, 21, $BS_DEFPUSHBUTTON )
GUICtrlSetTip(-1, "Button kann auch mit <ENTER> betätigt werden.")
$bEscSuche = GUICtrlCreateButton("Abbrechen", 160, 56, 80, 21)
GUIRegisterMsg($WM_NOTIFY, "MY_WM_COMMAND")
GUICtrlSetState($bSuchAufruf, $GUI_FOCUS)
GUISetState(@SW_SHOW, $ArtikelGUI)
Dim $A_DESCENDING[_GUICtrlListViewGetSubItemsCount ($lvArtikel) ]
Dim $S_DESCENDING[_GUICtrlListViewGetSubItemsCount ($lvSerien) ]
$AnzItemA = _GUICtrlListViewGetItemCount($lvArtikel)
$AnzItemS = _GUICtrlListViewGetItemCount($lvSerien)
_GUICtrlListViewSetItemSelState($lvArtikel, 0, 1, 1)
_GUICtrlListViewSetItemSelState($lvSerien, 0, 1, 1)
_AktuellDS_Serien()
_AktuellDS_Artikel()
While 1
$msg = GUIGetMsg()
$statTab = _GUICtrlTabGetCurSel($TabArtikel)
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $statTab = 0 ; Mengen-Artikel
If $cbLoadedA = 0 Then ; Aktionen, die einmalig bei Tab-Aktivierung ausgeführt werden
_AktuellDS_Artikel()
_SetComboArtikel()
$cbLoadedA = 1
$cbLoadedS = 0
GUICtrlSetData($lArtBez, "Artikelbezeichnung")
GUICtrlSetData($lArtNrAnz, "Anzahl")
GUICtrlSetData($bSuchAufruf, "Suche Artikel")
EndIf
Select
Case $msg = $bPrintA
_PrintA()
Case $msg = $bPrintS
_PrintS()
Case $msg = $bMail
_PrintA(1)
_PrintS(1)
$Body = ""
Case $msg = $bSuchAufruf
GUISetState(@SW_SHOW, $SucheGUI)
ControlFocus($SucheGUI, "", $iSuche)
Case $msg = $lvArtikel
_GUICtrlListViewSort($lvArtikel, $A_DESCENDING, GUICtrlGetState($lvArtikel))
Case $msg = $bFirstA
$CurrIndex = _GUICtrlListViewGetCurSel($lvArtikel)
_GUICtrlListViewSetItemSelState($lvArtikel, 0, 1, 1)
If $CurrIndex > 12 Then _ScrollA(-1 * $CurrIndex)
_AktuellDS_Artikel()
Case $msg = $bLastA
_GUICtrlListViewSetItemSelState($lvArtikel, $AnzItemA-1, 1, 1)
If $AnzItemA > 12 Then _ScrollA($AnzItemA)
_AktuellDS_Artikel()
Case $msg = $bPrevA
$CurrIndex = _GUICtrlListViewGetCurSel($lvArtikel)
If $CurrIndex > 0 Then _GUICtrlListViewSetItemSelState($lvArtikel, $CurrIndex-1, 1, 1)
_AktuellDS_Artikel()
Case $msg = $bNextA
$CurrIndex = _GUICtrlListViewGetCurSel($lvArtikel)
If $CurrIndex < $AnzItemA -1 Then _GUICtrlListViewSetItemSelState($lvArtikel, $CurrIndex+1, 1, 1)
_AktuellDS_Artikel()
Case $msg = $bNewA
$tmp = MsgBox(262179, "Datensatz anlegen / ändern", 'JA - für "Neuen Datensatz"' _
& @LF & @LF & 'NEIN - für "Ändern"')
Switch $tmp
Case 6 ; JA - neuer DS
$new = 1
$inputA = 1
_ActivInput()
GUICtrlSetState($lvSerien, $GUI_DISABLE)
GUICtrlSetState($iArtBez, $GUI_FOCUS)
$changed = 1
Case 7 ; NEIN - DS ändern
$new = 0
$inputA = 1
_ActivInput()
GUICtrlSetState($lvSerien, $GUI_DISABLE)
ControlSetText("Artikel", "", $iArtBez, $ArtUnit)
GUICtrlSetData($iArtNr, $MengeNr)
GUICtrlSetState($iArtNr, $GUI_FOCUS)
$changed = 1
EndSwitch
Case $msg = $bDelA
If MsgBox(262164, "Achtung - Löschvorgang !", "Soll der markierte Datensatz" _
& @CR & "wirklich gelöscht werden?") = 6 Then
$CurrIndex = _GUICtrlListViewGetCurSel($lvArtikel)
_GUICtrlListViewDeleteItem($lvArtikel, $CurrIndex)
_GUICtrlListViewSetItemSelState($lvArtikel, $CurrIndex-1, 1, 1)
$AnzItemA -= 1
$changed = 1
EndIf
_AktuellDS_Artikel()
Case $msg = $bSaveA
$MengeNr = GUICtrlRead($iArtNr)
$ArtUnit = GUICtrlRead($iArtBez)
If $MengeNr = "" Or $ArtUnit = "" Then
MsgBox(262160, 'Fehler', "Angaben nicht komplett!")
Else
If _GUICtrlComboFindString($iArtBez, $ArtUnit, 1) = $CB_ERR Then ; neuer Artikel
$INIchangedA = 1
$INIartikel[0][0] += 1
$anz = $INIartikel[0][0]
ReDim $INIartikel[$anz+1][2]
$INIartikel[$anz][0] = "item" & $anz
$INIartikel[$anz][1] = $ArtUnit
EndIf
If $new = 1 Then
GUICtrlCreateListViewItem($ArtUnit&"|"&$MengeNr, $lvArtikel)
$AnzItemA += 1
$new = 0
_GUICtrlListViewSetItemSelState($lvArtikel, $AnzItemA-1, 1, 1)
Else
$CurrIndex = _GUICtrlListViewGetCurSel($lvArtikel)
_GUICtrlListViewSetItemText($lvArtikel, $CurrIndex, 0, $ArtUnit)
_GUICtrlListViewSetItemText($lvArtikel, $CurrIndex, 1, $MengeNr)
_GUICtrlListViewSetItemSelState($lvArtikel, $CurrIndex, 1, 1)
EndIf
_Back()
EndIf
_AktuellDS_Artikel()
Case $msg = $bEscapeA
If $inputA = 1 Then
GUICtrlSetState($lvSerien, $GUI_ENABLE)
$inputA = 0
_DeActivInput()
ControlSetText("Artikel", "", $iArtBez, "")
GUICtrlSetData($iArtNr, "")
Else
ExitLoop
EndIf
Case $msg = $bEscSuche
GUISetState(@SW_HIDE, $SucheGUI)
Case $msg = $bSuche
_GUICtrlListViewSetItemSelState($lvSerien, 0, 1, 1) ; geh erstmal zum 1.DS
If $CurrIndex > 12 Then _ScrollA(-1 * $CurrIndex)
$CurrIndex = 0
$index = _SucheA()
If $index < 0 Then
MsgBox(262144, "Achtung", "Keine Übereinstimmung mit Suchbegriff.")
Else
_GUICtrlListViewSetItemSelState($lvArtikel, $index, 1, 1)
If $index > 0 Then
If $index > 12 Then _ScrollA($index)
EndIf
_AktuellDS_Artikel()
GUISetState(@SW_HIDE, $SucheGUI)
GUICtrlSetData($iSuche, "")
EndIf
EndSelect
Case $statTab = 1 ; Serien-Artikel
If $cbLoadedS = 0 Then ; Aktionen, die einmalig bei Tab-Aktivierung ausgeführt werden
_AktuellDS_Serien()
_SetComboGeraete()
$cbLoadedS = 1
$cbLoadedA = 0
GUICtrlSetData($lArtBez, "Gerätename")
GUICtrlSetData($lArtNrAnz, "Hersteller SN")
GUICtrlSetData($bSuchAufruf, "Suche Serien-Nr")
EndIf
Select
Case $msg = $bPrintA
_PrintA()
Case $msg = $bPrintS
_PrintS()
Case $msg = $bMail
_PrintA(1)
_PrintS(1)
$Body = ""
Case $msg = $bSuchAufruf
GUISetState(@SW_SHOW, $SucheGUI)
ControlFocus($SucheGUI, "", $iSuche)
Case $msg = $lvSerien
For $i = 0 To $AnzItemS -1
If _GUICtrlListViewGetCheckedState($lvSerien, $i) Then
_GUICtrlListViewSetItemText($lvSerien, $i, 0, 1)
_GUICtrlListViewSetCheckState($lvSerien, $i, 0)
EndIf
Next
_GUICtrlListViewSort($lvSerien, $S_DESCENDING, GUICtrlGetState($lvSerien))
For $i = 0 To $AnzItemS -1
If _GUICtrlListViewGetItemText($lvSerien, $i, 0) = 1 Then
_GUICtrlListViewSetCheckState($lvSerien, $i, 1)
_GUICtrlListViewSetItemText($lvSerien, $i, 0, "")
EndIf
Next
Case $msg = $bFirstA
_GUICtrlListViewSetItemSelState($lvSerien, 0, 1, 1)
If $CurrIndex > 12 Then _ScrollS(-1 * $CurrIndex)
_AktuellDS_Serien()
Case $msg = $bLastA
_GUICtrlListViewSetItemSelState($lvSerien, $AnzItemS-1, 1, 1)
If $AnzItemS > 12 Then _ScrollS($AnzItemS)
_AktuellDS_Serien()
Case $msg = $bPrevA
$CurrIndex = _GUICtrlListViewGetCurSel($lvSerien)
If $CurrIndex > 0 Then _GUICtrlListViewSetItemSelState($lvSerien, $CurrIndex-1, 1, 1)
_AktuellDS_Serien()
Case $msg = $bNextA
$CurrIndex = _GUICtrlListViewGetCurSel($lvSerien)
If $CurrIndex < $AnzItemS -1 Then _GUICtrlListViewSetItemSelState($lvSerien, $CurrIndex+1, 1, 1)
_AktuellDS_Serien()
Case $msg = $bNewA
$tmp = MsgBox(262179, "Datensatz anlegen / ändern", 'JA - für "Neuen Datensatz"' _
& @LF & @LF & 'NEIN - für "Ändern"')
Switch $tmp
Case 6 ; JA - neuer DS
$new = 1
$inputS = 1
_ActivInput()
GUICtrlSetState($lvArtikel, $GUI_DISABLE)
GUICtrlSetData($mNotiz, "")
GUICtrlSetState($iArtBez, $GUI_FOCUS)
Case 7 ; NEIN - DS ändern
$new = 0
$inputS = 1
_ActivInput()
GUICtrlSetState($lvArtikel, $GUI_DISABLE)
ControlSetText("Artikel", "", $iArtBez, $ArtUnit)
GUICtrlSetData($iArtNr, $MengeNr)
GUICtrlSetState($iArtNr, $GUI_FOCUS)
EndSwitch
Case $msg = $bDelA
If MsgBox(262164, "Achtung - Löschvorgang !", "Soll der markierte Datensatz" _
& @CR & "wirklich gelöscht werden?") = 6 Then
$CurrIndex = _GUICtrlListViewGetCurSel($lvSerien)
_GUICtrlListViewDeleteItem($lvSerien, $CurrIndex)
_GUICtrlListViewSetItemSelState($lvSerien, $CurrIndex-1, 1, 1)
$AnzItemS -= 1
EndIf
_AktuellDS_Serien()
Case $msg = $bSaveA
$MengeNr = GUICtrlRead($iArtNr)
$ArtUnit = GUICtrlRead($iArtBez)
$Comment = GUICtrlRead($mNotiz)
If $MengeNr = "" Or $ArtUnit = "" Then
MsgBox(262160, 'Fehler', "Angaben nicht komplett!")
Else
If _GUICtrlComboFindString($iArtBez, $ArtUnit, 1) = $CB_ERR Then ; neuer Gerätetyp
$INIchangedS = 1
$INIgeraete[0][0] += 1
$anz = $INIgeraete[0][0]
ReDim $INIgeraete[$anz+1][2]
$INIgeraete[$anz][0] = "item" & $anz
$INIgeraete[$anz][1] = $ArtUnit
EndIf
If $new = 1 Then
GUICtrlCreateListViewItem("|"&$ArtUnit&"|"&$MengeNr&"|"&$Comment, $lvSerien)
$AnzItemS += 1
$new = 0
_GUICtrlListViewSetItemSelState($lvSerien, $AnzItemS-1, 1, 1)
Else
$CurrIndex = _GUICtrlListViewGetCurSel($lvSerien)
_GUICtrlListViewSetItemText($lvSerien, $CurrIndex, 1, $ArtUnit)
_GUICtrlListViewSetItemText($lvSerien, $CurrIndex, 2, $MengeNr)
_GUICtrlListViewSetItemText($lvSerien, $CurrIndex, 3, $Comment)
_GUICtrlListViewSetItemSelState($lvSerien, $CurrIndex, 1, 1)
EndIf
_Back()
EndIf
_AktuellDS_Serien()
Case $msg = $bEscapeA
If $inputS = 1 Then
GUICtrlSetState($lvArtikel, $GUI_ENABLE)
$inputS = 0
_DeActivInput()
ControlSetText("Artikel", "", $iArtBez, "")
GUICtrlSetData($iArtNr, "")
Else
ExitLoop
EndIf
Case $msg = $bEscSuche
GUISetState(@SW_HIDE, $SucheGUI)
Case $msg = $bSuche
_GUICtrlListViewSetItemSelState($lvSerien, 0, 1, 1) ; geh erstmal zum 1.DS
If $CurrIndex > 12 Then _ScrollS(-1 * $CurrIndex)
$CurrIndex = 0
$index = _SucheSN()
If $index < 0 Then
MsgBox(262144, "Achtung", "Keine Übereinstimmung mit Suchbegriff.")
Else
_GUICtrlListViewSetItemSelState($lvSerien, $index, 1, 1)
If $index > 12 Then _ScrollS($index)
_AktuellDS_Serien()
GUISetState(@SW_HIDE, $SucheGUI)
GUICtrlSetData($iSuche, "")
EndIf
EndSelect
EndSelect
WEnd
_WriteMassArt()
_WriteSerArt()
_INIWrite()
Exit
Func _SetComboGeraete()
_GUICtrlComboResetContent($iArtBez)
For $i = 1 To $INIgeraete[0][0]
_GUICtrlComboAddString($iArtBez,$INIgeraete[$i][1])
Next
EndFunc
Func _SetComboArtikel()
_GUICtrlComboResetContent($iArtBez)
For $i = 1 To $INIartikel[0][0]
_GUICtrlComboAddString($iArtBez,$INIartikel[$i][1])
Next
EndFunc
Func _ActivInput()
GUICtrlSetStyle($iArtNr, BitOR($ES_RIGHT, $ES_AUTOHSCROLL), $WS_EX_CLIENTEDGE)
If $statTab = 1 Then GUICtrlSetStyle($mNotiz, BitOR($ES_LEFT, $ES_AUTOHSCROLL), $WS_EX_CLIENTEDGE)
GUICtrlSetState($bFirstA, $GUI_DISABLE)
GUICtrlSetState($bLastA, $GUI_DISABLE)
GUICtrlSetState($bPrevA, $GUI_DISABLE)
GUICtrlSetState($bNextA, $GUI_DISABLE)
GUICtrlSetState($bNewA, $GUI_DISABLE)
GUICtrlSetState($bDelA, $GUI_DISABLE)
GUICtrlSetState($bSaveA, $GUI_ENABLE)
GUICtrlSetState($bSuchAufruf, $GUI_DISABLE)
EndFunc
Func _DeActivInput()
GUICtrlSetStyle($iArtNr, BitOR($ES_RIGHT, $ES_AUTOHSCROLL, $ES_READONLY), $WS_EX_CLIENTEDGE)
GUICtrlSetStyle($mNotiz, BitOR($ES_LEFT, $ES_AUTOHSCROLL, $ES_READONLY), $WS_EX_CLIENTEDGE)
GUICtrlSetState($bSaveA, $GUI_DISABLE)
GUICtrlSetState($bFirstA, $GUI_ENABLE)
GUICtrlSetState($bLastA, $GUI_ENABLE)
GUICtrlSetState($bPrevA, $GUI_ENABLE)
GUICtrlSetState($bNextA, $GUI_ENABLE)
GUICtrlSetState($bNewA, $GUI_ENABLE)
GUICtrlSetState($bDelA, $GUI_ENABLE)
GUICtrlSetState($bSaveA, $GUI_DISABLE)
GUICtrlSetState($bSuchAufruf, $GUI_ENABLE)
EndFunc
Func _Back()
If $inputS = 1 Then
GUICtrlSetState($lvArtikel, $GUI_ENABLE)
$inputS = 0
ElseIf $inputA = 1 Then
GUICtrlSetState($lvSerien, $GUI_ENABLE)
$inputA = 0
EndIf
_DeActivInput()
ControlSetText("Artikel", "", $iArtBez, "")
GUICtrlSetData($iArtNr, "")
EndFunc
Func _ScrollA($index)
$x = $index * 10
_GUICtrlListViewScroll($lvArtikel,0,$x)
EndFunc
Func _ScrollS($index)
$x = $index * 10
_GUICtrlListViewScroll($lvSerien,0,$x)
EndFunc
Func _SucheA()
For $i = 0 To $AnzItemA -1
$item = StringLower(_GUICtrlListViewGetItemText($lvArtikel, $i, 0))
$vergleich = StringLower(GUICtrlRead($iSuche))
If $item = $vergleich Then Return $i
Next
Return -1
EndFunc
Func _SucheSN()
For $i = 0 To $AnzItemS -1
$item = StringLower(_GUICtrlListViewGetItemText($lvSerien, $i, 2))
$vergleich = StringLower(GUICtrlRead($iSuche))
If $item = $vergleich Then Return $i
Next
Return -1
EndFunc
Func _AktuellDS_Serien()
$CurrIndex = _GUICtrlListViewGetCurSel($lvSerien)
$ArtUnit = _GUICtrlListViewGetItemText($lvSerien, $CurrIndex, 1)
$MengeNr = _GUICtrlListViewGetItemText($lvSerien, $CurrIndex, 2)
$Comment = _GUICtrlListViewGetItemText($lvSerien, $CurrIndex, 3)
_GUICtrlStatusBarSetText($StatusBar, $text2_1, 0)
_GUICtrlStatusBarSetText($StatusBar, " " & $ArtUnit, 1)
_GUICtrlStatusBarSetText($StatusBar, $text2_2, 2)
_GUICtrlStatusBarSetText($StatusBar, " " & $MengeNr, 3)
GUICtrlSetData($mNotiz, $Comment)
EndFunc
Func _AktuellDS_Artikel()
$CurrIndex = _GUICtrlListViewGetCurSel($lvArtikel)
$ArtUnit = _GUICtrlListViewGetItemText($lvArtikel, $CurrIndex, 0)
$MengeNr = _GUICtrlListViewGetItemText($lvArtikel, $CurrIndex, 1)
_GUICtrlStatusBarSetText($StatusBar, $text1_1, 0)
_GUICtrlStatusBarSetText($StatusBar, " " & $ArtUnit, 1)
_GUICtrlStatusBarSetText($StatusBar, $text1_2, 2)
_GUICtrlStatusBarSetText($StatusBar, " " & $MengeNr, 3)
EndFunc
Func _WriteMassArt()
If $changed = 1 Then
$file = FileOpen("mass_art.vwg",2)
For $i = 0 To $AnzItemA -1
FileWriteLine($file, _GUICtrlListViewGetItemText($lvArtikel, $i))
Next
FileClose($file)
EndIf
EndFunc
Func _WriteSerArt()
$file = FileOpen("ser_art.vwg",2)
For $i = 0 To $AnzItemS -1
If _GUICtrlListViewGetCheckedState($lvSerien, $i) Then
_GUICtrlListViewSetItemText($lvSerien, $i, 0, 1)
Else
_GUICtrlListViewSetItemText($lvSerien, $i, 0, 0)
EndIf
If _GUICtrlListViewGetItemText($lvSerien, $i, 1) <> "" Then _
FileWriteLine($file, _GUICtrlListViewGetItemText($lvSerien, $i))
Next
FileClose($file)
EndFunc
Func _PrintA($type = 0)
_WriteMassArt()
If Not _FileReadToArray("mass_art.vwg",$massArt) Then
MsgBox(262144,"Fehler", " Fehler beim Lesen der Datei Fehler-Nr" & @error)
Return 0
EndIf
$file = FileOpen("Massenartikel.txt", 2)
For $i = 1 To $massArt[0]
$var = StringSplit($massArt[$i], "|")
If $var[2] > 0 Then
$text = StringReplace($massArt[$i], "|", ": ")
FileWriteLine($file, $text)
EndIf
Next
FileClose($file)
If $type = 0 Then
_FilePrintCom("Massenartikel.txt")
Else
If Not _FileReadToArray("Massenartikel.txt",$massArt) Then
MsgBox(262144,"Fehler", " Fehler beim Lesen der Datei Fehler-Nr" & @error)
Return 0
EndIf
$Body = "Massenartikel" & @LF & @LF
For $i = 1 To $massArt[0]
$Body &= $massArt[$i] & @LF
Next
EndIf
EndFunc
Func _PrintS($type = 0)
$file = FileOpen("SN-Geräte.txt",2)
For $i = 0 To $AnzItemS -1
If Not _GUICtrlListViewGetCheckedState($lvSerien, $i) Then
If _GUICtrlListViewGetItemText($lvSerien, $i, 1) <> "" Then
$text = _GUICtrlListViewGetItemText($lvSerien, $i)
$text = StringReplace($text, "|", ": ", 1)
$text = StringTrimRight($text, 1)
FileWriteLine($file, $text)
EndIf
EndIf
Next
FileClose($file)
If $type = 0 Then
_FilePrintCom("SN-Geräte.txt")
Else
If Not _FileReadToArray("SN-Geräte.txt",$serArt) Then
MsgBox(262144,"Fehler", " Fehler beim Lesen der Datei Fehler-Nr" & @error)
Return 0
EndIf
$Body &= @LF & "SN-Geräte" & @LF & @LF
For $i = 1 To $serArt[0]
$Body &= $serArt[$i] & @LF
Next
_INetSmtpMailCom($smtpServer, $AbsName, $AbsAdress, $ToAdress, $Betreff, _
$Body,"","","", $UserName, $UserPW, $Port)
MsgBox(262144, "", "Mail versendet")
EndIf
EndFunc
Func _INIWrite()
If $INIchangedA = 1 Then
IniDelete("VerwSmall.INI", "artikel")
For $i = 1 To $INIartikel[0][0]
IniWrite("VerwSmall.INI", "artikel", "item" & $i, $INIartikel[$i][1])
Next
ElseIf $INIchangedS = 1 Then
IniDelete("VerwSmall.INI", "geraete")
For $i = 1 To $INIgeraete[0][0]
IniWrite("VerwSmall.INI", "geraete", "item" & $i, $INIgeraete[$i][1])
Next
EndIf
EndFunc
Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam) ; Funktion von SmOke_N
#forceref $hWndGUI, $MsgID
Local $tagNMHDR, $event
Switch $wParam
Case $lvArtikel
$tagNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
$event = DllStructGetData($tagNMHDR, 3)
Switch $event
Case $NM_CLICK
_AktuellDS_Artikel()
EndSwitch
Case $lvSerien
$tagNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
$event = DllStructGetData($tagNMHDR, 3)
Switch $event
Case $NM_CLICK
_AktuellDS_Serien()
EndSwitch
EndSwitch
$tagNMHDR = 0
EndFunc
Func _FilePrintCom($iFile) ; Funktion von Jos
If Not FileExists($iFile) Then Return SetError(1,0,0)
$objShellApp = ObjCreate("Shell.Application")
$objShellApp.ShellExecute($iFile,0,0,"PRINT",0)
EndFunc
; auch von Jos
Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", _
$s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "",$IPPort=25, $ssl=0)
$objEmail = ObjCreate("CDO.Message")
$objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
$objEmail.To = $s_ToAddress
Local $i_Error = 0
Local $i_Error_desciption = ""
If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
$objEmail.Subject = $s_Subject
If StringInStr($as_Body,"<") and StringInStr($as_Body,">") Then
$objEmail.HTMLBody = $as_Body
Else
$objEmail.Textbody = $as_Body & @CRLF
EndIf
If $s_AttachFiles <> "" Then
Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
For $x = 1 To $S_Files2Attach[0]
$S_Files2Attach[$x] = _PathFull ($S_Files2Attach[$x])
If FileExists($S_Files2Attach[$x]) Then
$objEmail.AddAttachment ($S_Files2Attach[$x])
Else
$i_Error_desciption = $i_Error_desciption & @lf & 'File not found to attach: ' & $S_Files2Attach[$x]
SetError(1)
return 0
EndIf
Next
EndIf
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
;Authenticated SMTP
If $s_Username <> "" Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
EndIf
If $Ssl Then
$objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
EndIf
;Update settings
$objEmail.Configuration.Fields.Update
; Sent the Message
$objEmail.Send
if @error then
SetError(2)
return $oMyRet[1]
EndIf
EndFunc ;==>_INetSmtpMailCom
; Com Error Handler
Func MyErrFunc()
$HexNumber = Hex($oMyError.number,
$oMyRet[0] = $HexNumber
$oMyRet[1] = StringStripWS($oMyError.description,3)
ConsoleWrite("### COM Error ! Number: " & $HexNumber & " ScriptLine: " & $oMyError.scriptline & " Description:" & $oMyRet[1] & @LF)
SetError(1); something to check for when this function returns
Return
EndFunc ;==>MyErrFunc