1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. kyloe

Beiträge von kyloe

  • Exitloop wird nicht ausgeführt...

    • kyloe
    • 14. August 2019 um 19:18

    So, thx @ all - Mein 3. Rechner läuft als Arbeitsplatz zum Etikettendruck zumindest aus Bedienersicht einwandfrei. ;)

    Sorry nochmal an BugFix für meinen abartigen Code (sehe ich auch so) ... ich hoffe, ich darf wiederkommen. ^^

    @Musashi thx für die Anregung für den binär-Code aus dem Scanner. Da werde ich mich näher mit beschäftigen (müssen).

    lg

  • Exitloop wird nicht ausgeführt...

    • kyloe
    • 14. August 2019 um 17:20
    Zitat von Tuxedo

    Versuche doch mal nachzusehen wie $Charge aussieht, also nach der Zeile $Charge = GuiCtrlRead($Input2)

    einfach mal eine Mesagebox einfügen Msgbox(0, "Input2", $Charge,3)

    Wenn hier dein erwartetes Ergebnis rauskommt, aber evtl zweizeilig ist oder sonst irgendein Zeichen zuviel dranhängt,

    könntest du dir damit behelfen, nach der Zeile $Charge = GuiCtrlRead... folgende Zeile einzufügen

    $Charge = StringLeft($Charge,8), denn deinem Script nach zu urteilen sollte $Charge immer 8 Zeichen lang sein, dann sollte es

    auch mit dem schlechten Scanner funktionieren.

    Alles anzeigen

    Danke, hatte ich schon mal gemacht - alles gut. Es sind ja die Steuerzeichen, die vermutlich Probleme machen.

    Was ich immer noch nicht verstehe: Warum geht es mit dem exitloop nach dem else bei den Inputs "EAN" und "Menge", aber nicht bei Charge?

  • Exitloop wird nicht ausgeführt...

    • kyloe
    • 14. August 2019 um 17:01

    autoBert

    Hab ich gemacht, aber der Effekt ist der Gleiche: Der Loop wird nicht beendet. :(

    Was funktioniert, aber wirklich ganz, ganz schmutzig ist (ich trau mich kaum und will das nicht wirklich :| )

    (Da wird der Loop nach dem "else" beendet)

    Code
         While 3
            $nMsg = GUIGetMsg()
            Switch $nMsg
                Case $GUI_EVENT_CLOSE
                    Exit
                Case $Input2
                    Sleep(500)
                    $charge = GuiCtrlRead($Input2)
                    Local $aResult = StringRegExp($charge, '[0-9]{6,6}[a-zA-Z]{2}', $STR_REGEXPARRAYMATCH)
                    If @error Then
                        ;MsgBox(0, 'Input2', 'Eingabe fehlerhaft!')
                        ControlSetText("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]", "")
                        ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]")
                    Else
                        ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:3]")
                        ControlSetText("Eti-Scan", "","[CLASS:Edit; INSTANCE:3]", "")
                    EndIf
                        ExitLoop
            EndSwitch
            WEnd
    Alles anzeigen
    Zitat von autoBert

    Dann ändere einmal zu:

    Code
         While 3
            $nMsg = GUIGetMsg()
            Switch $nMsg
                Case $GUI_EVENT_CLOSE
                    Exit
                Case $Input2
                    MsgBox(0, 'Input2', 'Eingabe erfolgt!', 5)
                    $charge = GUICtrlRead($Input2)
                    ; Erste Bedingung
                    Local $aResult = StringRegExp($charge, '[0-9]{6,6}[a-zA-Z]{2}', $STR_REGEXPARRAYMATCH)
                    If @error Then
                        MsgBox(0, 'Input2', 'Eingabe fehlerhaft!')
                        ControlSetText("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]", "")
                        ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]")
                        ; Zweite Bedingung
                        ;If StringLen($charge)<>8 Then
                        ;ControlSetText("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]", "")
                        ;ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]")
                    Else
                        ExitLoop
                    EndIf
            EndSwitch
        WEnd 
        MsgBox(0, 'Input2', 'Eingabe richtig = EXITLOOP!!!', 5)
    ;    ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:3]")
    Alles anzeigen

    Außerdem noch die beiden aderen sleeps etfernen, da unnötig.

    Falls die MsgBox EXITLOOP erscheint sich aber trotzdem nichts tut einfach die letzte Zeile aktivieren. ContrrolClick verwendest du ja auch um in das Input für Charge zu wechseln.

    mfg (auto)Bert

  • Exitloop wird nicht ausgeführt...

    • kyloe
    • 14. August 2019 um 16:51

    @Musashi

    schon mal vorab das debug:

    @@ Debug : $ean = <4250615119604>

    @@ Debug : $ean Binary = <0x34323530363135313139363034>

    @@ Debug : $charge = <143291HU>

    @@ Debug : $charge Binary = <0x3134333239314855>

    @@ Debug : $menge = <1>

    @@ Debug : $menge Binary = <0x31>

  • Exitloop wird nicht ausgeführt...

    • kyloe
    • 14. August 2019 um 14:18

    autoBert

    Ich hab das mal so übernommen, aber auf den Problem-PCs stellt sich das wie im screen dar. Es erfolgt einfach kein exitloop.

    (NB: nehme ich als "Charge" ein falsches Format, greift der regex wie er soll.)

    Zwischenablage01.jpg

  • Exitloop wird nicht ausgeführt...

    • kyloe
    • 14. August 2019 um 14:01

    @Musashi

    Lasse ich das Testscript auf den 2 "guten" Rechnern laufen - tut ... auf den Problem-PC stoppt es immer bei "Charge".

    PCs sind alle Win7 64bit, aber die Lesegeräte (Scanner) sind unterschiedlich. Ich hab dann mal einen Scanner vom Gut-PC an einen Problem-PC gehangen und....

    ...es tut!

    Im Notepad++ hab ich gesehen, dass der eine "gute" Scanner mit "TAB" terminiert, der andere mit "CR LF". (meine Verwirrung wächst^^)

    Genau das "CR LF" machen auch meine anderen Scanner, aber mit denen funktioniert es nicht. Leider lassen die sich nicht zu einem Termination-String "single TAB" überreden.

    Die Tage bekomme ich 2 weitere Scanner, die ich dann hoffentlich zu einer brauchbaren Zusammenarbeit überreden kann.

  • Exitloop wird nicht ausgeführt...

    • kyloe
    • 14. August 2019 um 10:21

    BugFix

    Boa, da werde ich mich reichlich nachschulen müssen, um dein Script-Vorschlag zu verstehen, aber ich werde es versuchen. (darf ich ja in der Arbeitszeit)

    @Musashi

    ja ja, kloppt ruhig auf mich ein. 8o Ich bin halt noch echt am Anfang. Im Dez. 2016 hab ich ein Script "gepopelt", was bis heute in unserem Betrieb extrem wichtig ist.

    Die Aufgabe des kompletten Scriptes ist folgende:

    Von einem Sack mit z.B. Zucker werden folgende Strichcodes genommen:

    --> EAN (GTIN) für die Endverbraucherpackung

    --> Charge für die Rückverfolgbarkeit

    --> Menge der zu druckenden Etiketten

    (In meinem verkürzten Testscript habe ich nur mein akutes Problem eingekreist.)

    Die Werte werden an eine Warenwirtschaft übergeben und dann "on the fly" die Artikeletiketten gedruckt. Das machen wir seit Jahren und mein "Super-Script" arbeitet

    vllt. schmutzig, aber sehr effektiv. Ein Hoch auf AutoIt! :klatschen:

    Die Prüfung der Werte ist natürlich notwendig, dass keine falschen Eingaben möglich sind. Fehlermeldungen gibt es, auch bei den nicht funktionierenden Rechnern, nicht.

    Es bleibt einfach bei dem Feld Charge, liest ein, Cursor am Ende der Charge und das war es.

    Edit:

    Die Loops bei EAN und Menge werden ausgeführt.

  • Exitloop wird nicht ausgeführt...

    • kyloe
    • 13. August 2019 um 23:29

    Thx BugFix für deine Aufmerksamkeit. Mir ist schon bewust, dass mein Konstrukt nicht optimal ist. Dafür werkelt das schon seit 12/2016 zuverlässig jeden Werktag auf 2 Rechnern. Nun soll ein weiterer Rechner dazu und genau auf dem geht es nicht....warum auch immer.

    Mit der einen Schleife verstehe ich (logischerweise) nicht. Ich muß doch bei jedem Eingabefeld auf den input warten um dann zum nächsten Eingabefeld zu springen, oder? Wie kann ich das mit einer Schleife erledigen?

  • Exitloop wird nicht ausgeführt...

    • kyloe
    • 13. August 2019 um 21:14

    Moinsen

    Ich komme mit einem Script leider nicht weiter. Auf 2 Rechnern wird der loop ordnungsgemäß verlassen und auf einigen anderen nicht. :/

    Alle Rechner laufen mit Win7. Es geht um die 2. Bedingung. Die 1. und die 3. werden auf allen Rechnern ordnungsgemäß verlassen.

    (Sorry, bin noch Autoit-Anfänger, der nun etwas ratlos ist.^^)

    Hier der elementare Teil des Scriptes:

    C
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <StringConstants.au3>
    #include <MsgBoxConstants.au3>
    While 1
    ; Fenster definieren
    $Form1_1 = GUICreate("Eti-Scan", 320, 227, 399, 282)
    $Input1 = GUICtrlCreateInput("EAN / Artikelnummer", 80, 68, 217, 21)
    $Input2 = GUICtrlCreateInput("Charge", 80, 110, 153, 21)
    $Input3 = GUICtrlCreateInput("Menge", 80, 149, 97, 21)
    $Label0 = GUICtrlCreateLabel("Scan für Etiketten 0.90", 80, 16, 223, 28)
    GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
    $Label1 = GUICtrlCreateLabel("EAN", 8, 68, 40, 24)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    $Label2 = GUICtrlCreateLabel("Charge", 8, 109, 62, 24)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    $Label3 = GUICtrlCreateLabel("Menge", 8, 148, 58, 24)
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    ; Eingabe auf 13 Stellen prüfen
        While 2
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $Input1
                Sleep(500)
                $ean = GuiCtrlRead($Input1)
                If StringLen($ean)<>13 Then
                    ControlSetText("Eti-Scan", "","[CLASS:Edit; INSTANCE:1]", "")
                    ControlClick("Eti-Scan", "","[CLASS:Edit; INSTANCE:1]")
                Else
                    ExitLoop
                EndIf
        EndSwitch
        WEnd
    ; Charge Eingabe 8 Zeichen
    ControlClick ("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]")
    ControlSetText("Eti-Scan", "","[CLASS:Edit; INSTANCE:2]", "")
        While 3
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $Input2
                Sleep(500)
                $charge = GuiCtrlRead($Input2)
                ; Erste Bedingung
                Local $aResult = StringRegExp($charge, '[0-9]{6,6}[a-zA-Z]{2}', $STR_REGEXPARRAYMATCH)
                If @error Then
                    ControlSetText("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]", "")
                    ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]")
                ; Zweite Bedingung
                ;If StringLen($charge)<>8 Then
                    ;ControlSetText("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]", "")
                    ;ControlClick("Eti-Scan", "", "[CLASS:Edit; INSTANCE:2]")
                Else
                    ExitLoop
                EndIf
        EndSwitch
        WEnd
    ; Mengeneingabe 1-100
        While 4
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
            Case $Input3
                Sleep(500)
                $menge = GuiCtrlRead($Input3)
                    If ($menge) > 101 Then
                        ControlSetText("Eti-Scan", "","[CLASS:Edit; INSTANCE:3]", "")
                        ControlClick("Eti-Scan", "","[CLASS:Edit; INSTANCE:3]")
                    Else
                        ExitLoop
                    EndIf
        EndSwitch
        WEnd
    MsgBox($MB_SYSTEMMODAL, "Schleife", "Schleife Ende")
    GUIDelete("Eti-Scan")
    WEnd
    MsgBox($MB_SYSTEMMODAL, "Exit", "Exit")
    Exit
    Alles anzeigen

    Dateien

    test.au3 2,65 kB – 478 Downloads
  • Hilfe bei Scannereingabe in ein Textfeld

    • kyloe
    • 11. Dezember 2016 um 13:59

    So, nach ein bischen Feinschliff (soweit man das nennen kann) startet das Script pünktlich Montag zum Arbeitsbeginn.
    Leider immer noch sehr amateurhaft, aber soweit passend.

    Einen herzlcihen Dank an alle die mir ihre Aufmerksamkeit geschenkt haben und mit Tipps geholfen haben. :D

    Soweit der Code:

    AutoIt
    global $fenster = "[CLASS:xyz]"
    global $input_eti = "[CLASS:Edit; INSTANCE:5]"
    global $eti = "Einstellungen für den Etikettendruck"
    global $class_eti = "[TEXT:1; INSTANCE:1]"
    if Not WinExists ($fenster) Then Exit
    WinActivate ($fenster)
    MouseClick ("left" ,37, 77)
    While True
    ControlClick ($fenster, "", 2365)   ;input leeren auf x
    ControlClick ($fenster, "", 1384)
    While 1
     	$var = 0
         $var = ControlGetText ( $fenster, "", $input_eti )
         Sleep(Random(500,1000))
    	 If ControlGetText ( $fenster, "", "[CLASS:Static; INSTANCE:5]") = 1 Then
    		ControlSetText($fenster, "", $input_eti, "")
    		ExitLoop
    	 Else
    		ControlSetText($fenster, "", $input_eti, "")
    	 EndIf
    WEnd
    MouseClick ("left" ,1159, 194) ;Datensatz markieren
    ControlClick ($fenster, "", 1729)  ;eti Button
    WinWait ($eti)
    ControlClick($eti, "", $class_eti)
    ControlSetText($eti, "", $class_eti, "")
    Do
    	$var1 = 0
    	$var1 = ControlGetText ($eti, "", $class_eti)
    	Sleep(Random(500,1000))
    	If $var1 > 101 Then
    		ControlSetText($eti, "", $class_eti, "")
    	EndIf
    Until $var1 > 0 And $var1 < 101
    MouseClick ("left" ,772, 460)   ;button-ok eti
    WinActivate ($fenster)
    ControlClick ($fenster, "", 2365)   ;input leeren auf x
    WEnd
    Exit
    Alles anzeigen
  • Hilfe bei Scannereingabe in ein Textfeld

    • kyloe
    • 9. Dezember 2016 um 15:38

    Damit ihr fürs Wochenende noch was zu lachen habt (oder zu weinen)^^
    Das Script tut was es soll, aber auf Dauer wird es nicht gehen.

    Wenn jemand Lust hat das Script zu professionaliesieren; bitte Bescheid geben (PN). Je nach Einsatz wäre ein Pfund Cashew in Schoki oder mehr drin. ;)

    AutoIt
    Dim $fenster = "[CLASS:yy]"
    Dim $input = "xx"
    Dim $input_eti = "[CLASS:Edit; INSTANCE:5]"
    Sleep(100)
    WinActivate ($fenster)
    ControlSetText($fenster, "", $input_eti, "")
    MouseClick ("left" ,35, 76)
    
    
    While True
    MouseClick ("left" ,1759, 132)
    While 1
     	$var = 0
         $var = ControlGetText ( $fenster, "", $input_eti )
         Sleep(Random(500,1000))
    	 If ControlGetText ( $fenster, "", "[CLASS:Static; INSTANCE:5]") = 1 Then
    		ControlSetText($fenster, "", $input_eti, "")
    		ExitLoop
    	 Else
    		ControlSetText($fenster, "", $input_eti, "")
    	 EndIf
    WEnd
    MouseClick ("left" ,1783, 194)
    MouseClick ("left" ,1399, 658)
    MouseClick ("left" ,1444, 411)
    ControlSetText("Einstellungen für den Etikettendruck", "", "[CLASS:WindowsForms10.EDIT.app.0.3bb3978_r47_ad1; INSTANCE:1]", "")
    Do
    	$var1 = 0
    	$var1 = ControlGetText ("Einstellungen für den Etikettendruck", "", "[CLASS:WindowsForms10.EDIT.app.0.3bb3978_r47_ad1; INSTANCE:1]")
    	Sleep(Random(500,1000))
    	If $var1 > 101 Then
    		ControlSetText("Einstellungen für den Etikettendruck", "", "[CLASS:WindowsForms10.EDIT.app.0.3bb3978_r47_ad1; INSTANCE:1]", "")
    	EndIf
    Until $var1 > 0 And $var1 < 101
    
    
    MouseClick ("left" ,1343, 509)
    MouseClick ("left" ,1905, 131)
    WEnd
    Exit
    Alles anzeigen
  • Hilfe bei Scannereingabe in ein Textfeld

    • kyloe
    • 9. Dezember 2016 um 12:08

    Da bin ich wieder. ;)
    Den Code hab ich noch nicht eingebaut, aber zur Verdeutlichung hab ich mal ein Bild von der Problematik gemacht:

    Zwischenablage01.jpg

    Bei "1" wird der gescannte EAN-Code eingefügt
    Bei "2" muss der Artikel markiert werden
    Bei "3" der Button Etikett geklickt werden
    Bei "4" erfolgt wieder eine Scannereingabe mit der Menge der zu druckenden Etiketten
    Bei "5" der abschließende "OK"-Button

    Danach soll das Ganze wieder auf Anfangsstellung. Wichtig für mich ist, dass ein Fehlscann nicht zum Druck von 4250615113152 Stück Etiketten führen kann und
    auch das EAN-Feld nur einen Code innerhab eines Wertebereichs akzeptiert. So kann das narrensicher an einem Arbeitsplatz laufen. So die Theorie. ;)

    @Andy
    Verstehen kann ich das nicht ganz mit dem "binary". Hier hilft mir auch nicht die Hilfe weiter... :(
    Der Scanner ist auf EAN13 eingestellt und liefert auch den passenden Wert incl. abschließendem @LF.

    Edit: Sorry, es ist ein "@CR" vom Scanner, was aber auch kein Problem ist.

  • Hilfe bei Scannereingabe in ein Textfeld

    • kyloe
    • 8. Dezember 2016 um 18:23
    Zitat von autoiter

    Guter Gedanke @Zeitriss!Ja, das tun Scanner.

    Genau
    ich bin jetzt nicht mehr in der Firma, aber werde das morgen gleich testen .
    Ich melde mich dann .

  • Hilfe bei Scannereingabe in ein Textfeld

    • kyloe
    • 8. Dezember 2016 um 17:39

    @autoiter:
    erstmal thx für die Aufmerksamkeit. :)
    Leider funktioniert es auch ohne Klammern nicht. Sobald ich den Wert mit dem Scanner einlese wird das Feld wieder geleert (soll auch so), aber der Scriptablauf geht nicht weiter.
    Egal ob ich 1, 100 oder 4250515105553 scanne.
    Normalerweise sollte bei einem bestimmten Wertebereich die Schleife beendet werden.

  • Hilfe bei Scannereingabe in ein Textfeld

    • kyloe
    • 8. Dezember 2016 um 17:02

    Moinsen,
    vorab; sollte es eine Vorstellungsecke geben die ich nicht gefunden habe, bitte mich mit der Nase draufstoßen.^^

    Mein Problem (bin blutiger Anfänger mit autoit):
    Ich warte in einem Inputfeld auf eine Scannereingabe die einer Bedingung unterliegen soll: Nicht kleiner als x und nicht größer als y. (GTIN-Code)
    Leider wird dies bei meinem Script völlig ignoriert. :(
    Irgendwie hab ich da mind. ein Brett vor dem Kopf.

    AutoIt
    ...
    While 1
         $var = ControlGetText ( $fenster, "", $input_eti )
         Sleep(1000)
         If $var (($var < 4250000000000) Or ($var > 4350000000000)) Then
     	ControlSetText($fenster, "", $input_eti, "")
         Else
     	ExitLoop
         EndIf
    WEnd
    ...
    Alles anzeigen


    Über einen Denkanstoß würde ich mich sehr freuen.
    lg
    Tom

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™