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. Dexter

Beiträge von Dexter

  • An und Verkauf Programm

    • Dexter
    • 3. Juli 2022 um 05:50
    Zitat von Racer

    Dexter: Ich bin zwar aus Österreich aber ich denke die gesätzlichen Vorgaben sind sehr ähnlich. Allerdings, solange Du keine Verrechnung machst ist es egal mit welchen Programm Du Deine Waren verwaltest. Nur die Rechnungsstellung muss mit einen Programm gemacht werden das (in Ö) beim Finanzamt gelistet ist. Auch ich habe das Kassenbuch (in Autoit geschrieben) von meiner Frau und die Registierungskassa (gekaufte Software) getrennt. Das ist kein Problem, außer in D sind die Gesätze strenger!

    Generell ähneln sich viele Bereiche der Gesetzgebung in Deutschland und Österreich, das ist richtig. Was die Kassengesetzgebung angeht, handelt es sich allerdings um eine recht neue Entwicklung, und die ging verschiedene Wege. Bei Dir gilt statt der KassenSichV die RKSV. Da passt im Prinzip die komplette Umsetzung mit in den Gesetzestext. Bei uns hat alleine die DSFinV-K 122 Seiten (Stand März 2022).

    Wie so oft war die Umsetzung in Österreich zielführend und pragmatisch. Das können wir nicht. Kassen an die RKSV anzupassen, war eine Sache von Monaten. Das hätte man in Deutschland übernehmen können. Ich bin mir sicher, dass Österreich das gerne in irgendeiner Form an uns lizensiert hätte, dazu hätten wir aber fragen müssen. Aber wir sind ja das größere Land, viel schlauer und können deswegen alles besser. Daher mussten wir das auch selbst machen und dabei das Rad wieder neu erfinden. Das Ergebnis sieht man an unseren Straßen und der Netzabdeckung bei Mobiltelefonen. Und an der Umsetzung der Kassensicherheit.

    Bei uns gibt es im ganzen Vorschriftenwesen kaum einen Bereich, der so abstrus und undurchschaubar ist wie die Kassengesetzgebung. Über Jahre und Jahrzehnte hinweg hat der Gesetzgeber einen Wust ineinander eingreifender Gesetze, Verordnungen, Richtlinien und Ausführungsbestimmungen mit so vielen Fristen, Ausnahmen und Übergangsregelungen erlassen, dass mittlerweile die meisten Steuerberater keinen Durchblick mehr haben. Nur eine generelle Kassenpflicht gibt es immer noch nicht. Man könnte wirklich ein Buch darüber schreiben.

    Als Schmankerl sollte nicht unerwähnt bleiben, dass die Inbetriebnahme oder Außerbetriebnahme von Kassensystemen bei uns per Gesetz seit dem 01.01.2020 innerhalb von vier Wochen dem zuständigen Finanzamt gemeldet werden muss. Dazu ist ein Online-Portal vorgesehen, das bis heute nicht existiert. 😶

    Aber zu Deinen persönlichen Umständen: Meinst Du mit „Verrechnung“ die Vereinnahmung von Barentgelten? Also ich kann mir gut vorstellen, dass auch in Österreich alles manipulationssicher gespeichert werden muss, was zur Buchhaltung gehört und letztlich im Erstellen von Rechnungen mündet, insbesondere Kassenbücher. Auch, wenn es nicht besonders zertifiziert oder gelistet sein muss. Eintragungen müssten dann wenigstens irgendwie serialisiert werden und Änderungen nur möglich sein, wenn sie im Nachgang einsehbar sind. Ich weiß zwar nicht, ob Ihr ein Analog zur GoBD habt, aber in westlichen Ländern ist das normalerweise Usus. Ob das mit AutoIT so umsetzbar ist?

    Zitat

    Aber ich gebe Dir schon recht, hier ein bisschen Geld zu investieren ist sicher der bessere Weg um nicht in Teufels(Finanzamt)-Küche zu kommen.

    Absolut; da gibt's gar keinen Grund, mit dem Feuer zu spielen.

  • An und Verkauf Programm

    • Dexter
    • 3. Juli 2022 um 05:03
    Zitat von Alina

    Ich kann nur sagen, das Du da, was das Strafmaß betrifft noch locker geblieben bist. Deine Info hast Du aus der veröffentlichten Gesetzgebung (Gesetzestexte / -bücher), oder? Real gehe ich mal davon aus, das die § 379 Abs. 1 Satz 6 AO (Steuergefährdung) und § 378 AO (Leichtfertige Steuerverkürzung) schon mal zusammen legen werden.

    Hallo Alina!

    Genau, das kann man momentan lediglich der veröffentlichten Gesetzgebung entnehmen, da noch keine Erfahrungen aus der Rechtsprechung vorliegen. Das ist auch ein großes Problem bei der Umsetzung der DSFinV-K, denn vieles ist schwammig definiert und damit Auslegungssache. Da muss dann der Hersteller der Software entscheiden, ob er konservativ vorgeht oder gewisse Risiken eingeht. Ob die Prüfer der Auslegung folgen, steht in den Sternen. Genau wissen wird man das erst, wenn sich Erfahrungen aus der Bewertung bei Prüfungen vor Ort ergeben. Aber wie Du richtig sagst, wird man da eher geneigt sein, bei erkannten Verstößen großzügig einzuschenken. Deswegen rate ich eher zu einem konservativen Ansatz.

  • An und Verkauf Programm

    • Dexter
    • 1. Juli 2022 um 17:25

    Hab das gerade eben zufällig gesehen und würde vorschlagen, das Thema vor Beginn der Umsetzung gut zu überdenken.

    Nicht nur, dass eine Wawi, selbst eine kleine, nicht innerhalb weniger Monate programmiert ist und eine Eigenentwicklung ergibt angesichts der bereits verfügbaren freien oder niedrigpreisigen Produkte am Markt auch keinerlei geschäftlichen Sinn ergibt, es handelt sich um eine Software, die im Rahmen einer Geschäftstätigkeit eingesetzt wird. Dadurch ergeben sich automatisch weitreichende Verpflichtungen, die erfüllt werden wollen, wenn bei der nächsten Betriebsprüfung oder Kassennachschau keine fünfstelligen Strafzahlungen an das Finanzamt anfallen sollen (hinzu kommen zwangsweise noch weitere hohe Beträge, die sich durch Schätzungen aufgrund Möglichkeit zum Verwurf der Buchhaltung und Sicherheitsbehalte ergeben oder noch ein nettes Steuerstrafverfahren als Sahnehäubchen).

    Falls das Programm in Deutschland eingesetzt werden soll, sind mindestens die GoBD zu beachten. Dient das Programm auch zur Vereinnahmung von Bargeldzahlungen, handelt es sich um eine Kassenfunktion, was gem. § 146a Abs. 1 Satz 1 AO i.V.m. § 1 Satz 1 der KassSichV die Implementation einer gem. der technischen Richtlinie TR-03153 des BSI zertifizierten technischen Sicherheitseinrichtung, sowie der DSFinV-K nach sich zieht. Die ändert sich auch immer mal, gerade zum 01.07.2022 gab es wieder eine Anpassung. Die Belegausgabepflicht nach § 146a Abs. 2 AO muss natürlich mit allen erforderlichen Angaben ebenso umgesetzt werden.

    Hast Du, aus welchem Grund auch immer, nicht alles beachtet, stehen für Dich als Inverkehrbringer der Software gem. § 379 Abs. 1 Satz 6 AO (Steuergefährdung) Geldbußen bis zu € 25.000 im Raum. Wird das Ganze nach § 378 AO (Leichtfertige Steuerverkürzung) abgehandelt, sind wir bei bis zu € 50.000.

    In allen anderen deutschsprachigen Ländern oder Ländern mit deutschsprachigem Bevölkerungsanteil existieren ähnliche Regelungen. Ich glaube, lediglich die Schweiz ist da noch relativ entspannt. Allerdings muss auch hier durch technische Maßnahmen eine Manipulation der Daten ausgeschlossen sein.

    Erfahrene Softwarehäuser, die ausschließlich solche Branchensoftware entwickeln, haben Jahre gebraucht, um das alles haarklein und annähernd fehlerfrei umzusetzen und dabei literweise Blut, Schweiß und Tränen vergossen. Wenn hier also momentan schon der grundsätzliche Zugriffsweg auf eine Datenbank im Raum steht, würde ich – nix für ungut – empfehlen, den Hammer nicht nur sofort fallen zu lassen, sondern in einer alten Mine zu vergraben und alles mit Beton volllaufen zu lassen, denn die technische Umsetzung der reinen Programmfunktionen ist noch ziemlich banal im Verhältnis zur Erfüllung aller rechtlichen Anforderungen.

    Ich hatte mit dem Kram während dem abenteuerlichen Werdegang von der Gesetzgebung bis zur Realisation zu tun und auch heute ist das Thema noch mein Tagesgeschäft. Glaub mir, allein die enormen Kosten für Kopfschmerztabletten und Antipsychotika machen eine Eigenentwicklung aus dem Stegreif 100 % sinnlos.

    Also ganz im Ernst, nimm einen Fuffi in die Hand und spende den an Lexware oder lade Dir doch einfach die JTL-Wawi für lau runter, wenn es unbedingt kostenlos sein muss.

    Als nettes Softwareprojekt zum Herumbasteln würde ich mir irgendwas anderes suchen.

  • Auf einmal Fehler im Array: "Subscript used on non-accessible variable"

    • Dexter
    • 31. Januar 2017 um 16:22

    Ganz tolle Hilfe zur Selbsthilfe, wirklich! :)

    Der folgende Code gibt mir alles schön in einer MsgBox aus:

    AutoIt: Markiertes ListViewItem auslesen
    Case $btnPrintCopy
    	$iIndex = _GUICtrlListView_GetSelectionMark( $hListview )
    	$text =   _GUICtrlListView_GetItemTextString( $hListview , $iIndex )
    	MsgBox( 0 , " " , $text )

    Und was in einer MsgBox lesbar ist, kann man ja auch prima zerpflücken und weiterverarbeiten. :thumbup:

    Euch beiden noch mal vielen herzlichen Dank; mir wäre alleine ein Bart gewachsen, bis ich das hinbekommen hätte. Ihr rockt! :rock:

  • Auf einmal Fehler im Array: "Subscript used on non-accessible variable"

    • Dexter
    • 31. Januar 2017 um 13:52

    Danke, ich werde das definitiv noch umstellen, sobald die sonstige Funktionalität steht. Allein schon, damit ich es künftig direkt weniger umständlich machen kann. :)

    Ich habe das mit dem _GUICtrlListView_GetSelectionMark mal ausprobiert. In der MsgBox steht dann aber letztendlich nur "Selected Mark: 1", wenn ich eine Zeile in der ListView markiere und dann auf den Button $btnPrintCopy klicke.

    AutoIt
    #Region GUI
    _ShowMainGUI()
    Func _ShowMainGUI()
        GUISetState( @SW_SHOW, $Belegdrucker_Main )
    	_Crypt_Startup() ; To optimize performance start the crypt library.
    	Local $sBelNr = IniRead( $sIniPath , "CurrentData" , "LfdNr" , "" )
    	GUICtrlSetData( $hBelNr , $sBelNr )
    	While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
    			Case $btnPrint
    				_Print()
    			Case $btnPrintCopy
    				_GUICtrlListView_SetSelectionMark($hListview, 1)
    				MsgBox($MB_SYSTEMMODAL, "Information", "Selected Mark: " & _GUICtrlListView_GetSelectionMark($hListview))
    			EndSwitch
    	WEnd
    EndFunc
    #EndRegion
    Alles anzeigen

    Muss ich da vielleicht noch was übergeben, damit ich den Inhalt der ganzen Zeile bekomme? (Es soll nach Möglichkeit auch nur eine Zeile auswählbar sein, falls das einen Unterschied macht.)

  • Auf einmal Fehler im Array: "Subscript used on non-accessible variable"

    • Dexter
    • 31. Januar 2017 um 12:08

    Lieber @autoiter, lieber @Bitnugger,

    es ist unglaublich. Man sieht manchmal echt den Wald vor lauter Bäumen nicht, wenn man vor dem eigenen Code sitzt. Ihr glaubt nicht, wie oft ich mir genau diese Stellen angeschaut habe... :Face:

    Zitat von autoiter

    Hallo @Dexter,

    Nach deinen letzten _StringBetween-OPs hast du einfach vergessen das Element anzugeben und hast das Array wie eine Variable angegeben.
    [...]
    Vom _ArrayAdd könnte man auch noch weg. Allerdings verstehe ich nicht, warum du die Werte überhaupt in unterschiedliche Arrays speicherst. Das ist wahrscheinlich gar nicht notwendig. Du kannst deine Gedanken ja nochmal erklären, wenn du magst.

    Vielen Dank für die schnelle Hilfe und natürlich auch für Eure Beispiele, die sind natürlich Gold wert und wesentlich eleganter gelöst als mein planloses Geschreibsel. :thumbup:
    Ich werde mal schauen, ob ich die so auch bei mir integrieren kann.

    Kurz zur Erklärung: Mein geposteter Teil bezieht sich auf das Auslesen der Daten für den ListView. Dargestellt werden die dann anschließend so:

    AutoIt: Bereitstellung 2D-Array für den ListView
    #Region Create 2D array
    $iCount = UBound( $aLfdNrRes )
    Local $a2DRes[$iCount][11]
    For $i = 1 To $iCount - 1 Step 1
    	$a2DRes[$i][0] = $aLfdNrRes[$i]
    	$a2DRes[$i][1] = $aDateRes[$i]
    	$a2DRes[$i][2] = $aKundenNrRes[$i]
    	$a2DRes[$i][3] = $aKundeRes[$i]
    	$a2DRes[$i][4] = $aKundeZusatzRes[$i]
    	$a2DRes[$i][5] = $aStraszeRes[$i]
    	$a2DRes[$i][6] = $aPLZRes[$i]
    	$a2DRes[$i][7] = $aOrtRes[$i]
    	$a2DRes[$i][8] = $aBetragRes[$i]
    	$a2DRes[$i][9] = $aGrundRes[$i]
    	$a2DRes[$i][10] = $aSHA256Res[$i]
    Next
    _ArrayDelete( $a2DRes , 0 )
    _GUICtrlListView_AddArray( $hListView , $a2DRes )
    #EndRegion
    Alles anzeigen

    Jetzt muss ich nur noch herausfinden, wie ich in dem ListView eine Zeile auswählen und per Klick auf einen Button eine Belegkopie drucken kann. Soll ich das vielleicht nochmal in einen anderen Thread packen?

    LG

    Dexter :)

  • Auf einmal Fehler im Array: "Subscript used on non-accessible variable"

    • Dexter
    • 31. Januar 2017 um 03:46

    Hallo zusammen,

    ich habe mir ein kleines Script zusammengestellt, um unterwegs Zahlungsbelege drucken zu können.

    Da ich ein völliger AU-Noob bin, wollte erst einmal die Kernfunktion sicherstellen und dann das Script langsam erweitern. Nachdem alles funktionierte, habe ich mich an die zusätzliche Speicherung eines Hash-Wertes gemacht, um den rechtlichen Vorschriften bez. Veränderungssicherheit zu entsprechen. Das klappte auch wunderbar.

    Dann fiel mir ein, dass der Hash-Wert sowie der Grund der Zahlung vielleicht auch in meinem ListView angezeigt werden sollten, der Vollständigkeit halber. Und schon ist es passiert: Seit ich die Variablen für Grund und Hash eingebaut habe, bricht das Script genau an der Stelle (Zeile 35 im nachstehenden Code) ab mit:

    AutoIt: Fehlermeldung
    Subscript used on non-accessible variable.:
    _ArrayAdd( $aGrundRes , $aGrund[0] )
    _ArrayAdd( $aGrundRes , $aGrund^ ERROR


    Hier das Script:

    AutoIt: Script
    #Region Declarations
    Global $sFile = @ScriptDir & "\Data\data.txt"
    Global $sIniPath = @ScriptDir & "\settings.ini"
    Global $aLfdNr, $aDate, $aKundenNr, $aKunde, $aKundeZusatz, $aStrasze, $aPLZ, $aOrt, $aBetrag, $aGrund, $aSHA256
    Global $aLfdNrRes[1], $aDateRes[1], $aKundenNrRes[1], $aKundeRes[1], $aKundeZusatzRes[1], $aStraszeRes[1], $aPLZRes[1], $aOrtRes[1], $aBetragRes[1], $aGrundRes[1], $aSHA256Res[1]
    Global Const $CALG_SHA_256 = 0x0000800c
    #EndRegion
    #Region Get archived data from data.txt and write to array
    _ReadArchive( $sFile )
    Func _ReadArchive( $sFile )
    	$hFile = FileOpen( $sFile , 0 )
    	For $i = 1 To _FileCountLines( $sFile ) Step 1
    		$sLine = FileReadLine( $hFile , $i )
    		;Add Lines to array
    		$aLfdNr = _StringBetween( $sLine , "" , ";" )
    		_ArrayAdd( $aLfdNrRes , $aLfdNr[0] )
    		$aDate = _StringBetween( $sLine , $aLfdNr[0] & ";" , ";" )
    		_ArrayAdd( $aDateRes , $aDate[0] )
    		$aKundenNr = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" , ";" )
    		_ArrayAdd( $aKundenNrRes , $aKundenNr[0] )
    		$aKunde = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" , ";" )
    		_ArrayAdd( $aKundeRes , $aKunde[0] )
    		$aKundeZusatz = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" & $aKunde[0] & ";" , ";" )
    		_ArrayAdd( $aKundeZusatzRes , $aKundeZusatz[0] )
    		$aStrasze = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" & $aKunde[0] & ";" & $aKundeZusatz[0] & ";" , ";" )
    		_ArrayAdd( $aStraszeRes , $aStrasze[0] )
    		$aPLZ = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" & $aKunde[0] & ";" & $aKundeZusatz[0] & ";" & $aStrasze[0] & ";" , ";" )
    		_ArrayAdd( $aPLZRes , $aPLZ[0] )
    		$aOrt = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" & $aKunde[0] & ";" & $aKundeZusatz[0] & ";" & $aStrasze[0] & ";" & $aPLZ[0] & ";" , ";" )
    		_ArrayAdd( $aOrtRes , $aOrt[0] )
    		$aBetrag = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" & $aKunde[0] & ";" & $aKundeZusatz[0] & ";" & $aStrasze[0] & ";" & $aPLZ[0] & ";" & $aOrt[0] & ";" , ";" )
    		_ArrayAdd( $aBetragRes , $aBetrag[0] )
    		$aGrund = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" & $aKunde[0] & ";" & $aKundeZusatz[0] & ";" & $aStrasze[0] & ";" & $aPLZ[0] & ";" & $aOrt[0] & ";" & $aBetrag & ";" , ";" )
    		_ArrayAdd( $aGrundRes , $aGrund[0] )
    		$aSHA256 = _StringBetween( $sLine , $aLfdNr[0] & ";" & $aDate[0] & ";" & $aKundenNr[0] & ";" & $aKunde[0] & ";" & $aKundeZusatz[0] & ";" & $aStrasze[0] & ";" & $aPLZ[0] & ";" & $aOrt[0] & ";" & $aBetrag & ";" & $aGrund & ";" , "" )
    		_ArrayAdd( $aSHA256Res , $aSHA256[0] )
    	Next
    	FileClose( $hFile )
    EndFunc
    #EndRegion
    Alles anzeigen

    In data.txt steht Folgendes:

    Code: data.txt
    10001;29.01.2017;88888;Eisen-Schmidt;Erwin Meier;Teststraße 99;55555;Testort;123,99;Testgrund;srgrewfwredgfsfd
    10002;30.01.2017;99999;Holzwurm e.K.;Walter Schmitt;Probestraße 4;66666;Probeort;321,50;Probentest;43262465565247657

    Und in der settings.ini die laufende Nummer:

    Code: settings.ini
    [CurrentData]
    LfdNr=10003


    Mich würde der Fehler ja nicht verblüffen, wenn es bis zur Hinzunahme von $aGrund / $aGrundRes bzw. $aSHA256 / $aSHA256Res nicht wunderbar geklappt hätte. Und wenn Globals nicht accessible sind, tja; irgendwas läuft da verkehrt. 8|

    (Die lange String-Wurst zum Auslesen der Zeilen mag eleganter gehen, aber so funktionierte es erst mal)

    Fällt Euch vielleicht etwas dazu ein, woran mein Problem liegen könnte?

  • Senden von Escape-Sequenzen an Drucker (ESC/POS)

    • Dexter
    • 27. Januar 2017 um 02:27

    Nochmal danke für Deine Mühe @Bitnugger. Leider hat es so auch nicht geklappt, der Text kommt unverändert normal aus dem Drucker. Ist schon krass, was man manchmal veranstalten muss, um einfach Rohdaten irgendwohin zu schicken. :(

    Das Ding mit der PrintWinAPI.au3 hatte ich mir auch angesehen, aber das scheint definitiv über die Nutzung von grafischen Druckdaten hinauszulaufen wegen GDI & Co. Klar, ist ja auch heutzutage eigentlich der Normalfall. Trotzdem wundert mich, dass es so kompliziert ist, einen solch rudimentären Drucker anzusprechen. Gerade, wo doch in weltweit in jedem 2. Laden einer steht. *seufz*

  • Senden von Escape-Sequenzen an Drucker (ESC/POS)

    • Dexter
    • 26. Januar 2017 um 00:04

    Vielen lieben Dank@'Bitnugger', dass Du auch versuchst, mir zu helfen. :rock:
    Mit Deinen Änderungen im Script funktioniert zwar alles, aber nach wie vor ohne Formatierung. Also quasi so, als hätte sich nichts geändert.

    Konntest Du das mal an einem Bondrucker ausprobieren? Vielleicht schlummert noch irgendwo ein Fehler im Script... *grübel*

  • Senden von Escape-Sequenzen an Drucker (ESC/POS)

    • Dexter
    • 24. Januar 2017 um 04:01

    Ja, genau, wie in Deiner Liste. Das Modell ist ein Chinakracher von Hoin, aber der hält sich an diese Epson-Sequenzen (die haben irgendwann mal quasi den Standard gesetzt).

    Die Sequenzen entsprechen daher nahezu Deinen, ich habe den Teil mal aus meiner Anleitung beigefügt.

    24-01-_2017_03-54-18.png

    P.S.: Pixel gibt man bei diesen Druckern übrigens nicht an. Die haben eingebaute Fonts (oft nur zwei), die man einfach abruft und dann sagt, ob sie doppelt hoch, breit oder beides sein sollen. Man hat das früher wohl so eingeführt, weil alles über alte Ports ging und man wollte, dass es trotzdem schnell geht. Will man dann doppelt hoch und breit, addiert man die Bits und schickt z.B. einfach 16 + 32, also 48 als Wert.

  • Senden von Escape-Sequenzen an Drucker (ESC/POS)

    • Dexter
    • 23. Januar 2017 um 23:07

    Hallo @Kanashius und schon mal vielen lieben Dank für Deine Hilfe. :)

    Du hast natürlich Recht, Variablen müssen verknüpft sein. In meinem Fall hab ich Dussel ein Komma nach dem $Prn vergessen.

    Ich liste hier mal kurz die Druckfunktion des Scripts ohne jegliche Escape-Sequenzen, dann kann man sich das im Kontext wahrscheinlich besser vorstellen. Der Übersichtlichkeit halber lasse ich die Teile zum Auffangen von Fehlern mal weg.

    Code
    Func _Print()
        Local $Prn = _PrintDllStart($pErr)
        Local $sPrinter = "Pos-80-Series"
        _PrintSetDocTitle($Prn, "Zahlungsbeleg")
    
    
        ; start printing operation
        _PrintStartPrint($Prn)
        ;_PrintSetFont($Prn,$FontName,$FontSize,$FontCol=0,$Fontstyle = '')
        ;To check that the text will fit a space use _PrintGetTextHeight and _PrintGetTextWidth
        ;_PrintText($hDll,$sText,$ix=-1,$iy=-1,$iAngle=0)
        _PrintText($Prn, "            Musterfirma GmbH & Co.         ", 10, 20)
        _PrintText($Prn, "                                           ", 10, 60)
        _PrintText($Prn, "               Musterstraße 99             ", 10, 100)
        _PrintText($Prn, "              12345 Musterstadt            ", 10, 140)
        _PrintText($Prn, "                                           ", 10, 180)
        _PrintText($Prn, "              Tel: 0123 4567890            ", 10, 220)
        _PrintText($Prn, "                                           ", 10, 260)
        _PrintText($Prn, "                                           ", 10, 300)
        _PrintText($Prn, "           ZAHLUNGSBELEG NR. " & $sLfdNr    , 10, 340)
        _PrintText($Prn, "                                           ", 10, 380)
        _PrintText($Prn, "   Kd.Nr.: " & $sKundenNr & "      Datum: " & $sCurrentDate , 10, 420)
        _PrintText($Prn, "                                          " , 10, 460)
        _PrintText($Prn, "   Kunde:  " & $sKunde                      , 10, 500)
        _PrintText($Prn, "           " & $sZusatz                     , 10, 540)
        _PrintText($Prn, "           " & $sStrasze                    , 10, 580)
        _PrintText($Prn, "           " & $sPLZ & " " & $sOrt          , 10, 620)
        _PrintText($Prn, "                                           ", 10, 660)
        _PrintText($Prn, "   EUR " & $sBetrag & " dankend in bar erhalten." , 10, 700)
        _PrintText($Prn, "                                           ", 10, 740)
        _PrintText($Prn, "   Verw.zweck: " & $sGrund , 10, 780)
        _PrintText($Prn, "                                           ", 10, 820)
        _PrintText($Prn, "       * Dieser Beleg berechtigt nicht *   ", 10, 860)
        _PrintText($Prn, "            * zum Vorsteuerabzug *         ", 10, 900)
        _PrintEndPrint($Prn)
    
    
    	Local $sLfdNr		= Int(IniRead( $sIniPath , "CurrentData" , "LfdNr" , " " ))
    	IniWrite( $sIniPath , "CurrentData" , "LfdNr" , $sLfdNr + 1 )
    	Local $hFileOpen = FileOpen( $sFile, $FO_APPEND + $FO_UTF8 )
        If $hFileOpen = -1 Then
            MsgBox($MB_SYSTEMMODAL, "Fehler", "Die Werte konnten nicht ins Archiv geschrieben werden.")
            Return False
    	EndIf
    	FileWriteLine( $hFileOpen , String( $sLfdNr ) & ";" & String( $sCurrentDate ) & ";" & $sKundenNr & ";" & $sKunde & ";" & $sZusatz & ";" & $sStrasze & ";" & $sPLZ & ";" & $sOrt & ";" & $sBetrag & @CRLF )
    	FileClose($hFileOpen)
    EndFunc
    Alles anzeigen


    Mit der wie folgt eingebauten Sequenz passiert zwar schon mal etwas, aber nicht das Richtige. Schreibe ich z.B.
    _PrintText($Prn, Chr( 27 ) & Chr( 33 ) & 16 & " ZAHLUNGSBELEG NR. " & $sLfdNr , 10, 340)
    dann wird ab dem Wort Zahlungsbeleg alles in einem größeren, fetten Font gedruckt bis zum Schluss. Versuche ich, das in der nächsten Zeile mit
    _PrintText($Prn, Chr( 27 ) & Chr( 33 ) & 0 & " ", 10, 380)
    wieder auf Null zu stellen, kommt ein noch größerer Font bis zum Schluss.

    Wenn ich so wie hier noch Leerzeichen dazu mache
    _PrintText($Prn, Chr( 27 ) & " " & Chr( 33 ) & " " & 16 & " ZAHLUNGSBELEG NR. " & $sLfdNr , 10, 340)
    dann wird ab dieser Stelle alles mit dem normalen Font gedruckt, aber an jeder zweiten Druckposition ein Leerzeichen eingefügt, sodass es wie gesperrter Text aussieht (B e i s p i e l). :S

    P.S.: Nein, ein Handy ist hier nicht im Spiel, Tastendrücke wollte ich eigentlich keine übertragen.

  • Senden von Escape-Sequenzen an Drucker (ESC/POS)

    • Dexter
    • 23. Januar 2017 um 14:44

    Liebe Gemeinde,

    da ich kein gescheites Programm finden konnte, um unterwegs Quittungen für Kunden auszudrucken, ohne auf einen DIN A4-Drucker zurückgreifen zu müssen, habe ich mir ein kleines Skript mit der printMG.dll von Martin erstellt, um einen kleinen 80 mm Bluetooth-Bondrucker anzusteuern. Das klappt soweit wunderbar, was den Inhalt angeht. Nur mit der Formatierung habe ich ein kleines Problem.

    Zum Hintergrund: Generell benutzt man bei Kassenanwendungen häufig den Raw- oder Textmodus, da das einfach schneller geht, als Grafiken zum Drucker zu schicken. Z.B. hinterlegt man ein Logo einmal im Speicher des Druckers und löst es zum Anfang des Druckvorgangs einfach aus, statt die ganze Grafik neu zu übermitteln.

    Auch für Textformatierungen und andere Dinge gibt es dann entsprechende Escape-Sequenzen (Lade öffnen, Schrift doppelt breit, doppelt hoch, etc.), die man einfach in den Druck mit einbauen kann.

    Dummerweise bin ich anscheinend zu doof, um die Sequenzen richtig zu senden. Probiert habe ich z.B. den Druck in doppelter Höhe. Dazu müsste ich die Sequenz ESC ! n an den Drucker schicken. n steht dann für die Art des Drucks (n = 16 ist doppelte Höhe, n = 32 ist doppelte Breite). Es gilt also, dem Drucker zu sagen ESC ! 16. Dazu habe ich z.B.

    _PrintText( $Prn Chr( 27) & Chr( 33) & 16 ) sowie _PrintText( $Prn {ESC} & {!} & 16 ) oder auch send( Chr( 27) & Chr( 33) & 16 ) ausprobiert. Leider hat nichts davon funktioniert.

    Hat vielleicht schon einmal jemand von Euch mit solchen Escape-Sequenzen gearbeitet oder sonstwie eine Idee, wie ich diese korrekt an den Drucker schicken kann? Über jedwede Unterstützung würde ich mich riesig freuen. :)

  • ISN AutoIt Studio

    • Dexter
    • 26. April 2016 um 03:11

    Hallo @ISI360,

    zuerst einmal möchte ich Dir für die Mühe danken, die Du in AutoItStudio gesteckt hast. Ich bin zwar noch ganz am Anfang meiner Reise mit AutoIt, aber Dein Projekt wird mir sicher einiges erleichtern.

    Eine Sache würde mich jedoch interessieren. Wenn ich mit Koda arbeite und eine GUI erstelle, kann ich enthaltene Elemente, z.B. Felder oder Buttons anklicken und ihm eine "Benachrichtigung" verpassen. Damit erhalte ich dann im Quellcode direkt eine Referenz zum Element innerhalb einer Switch...Case Konstruktion, sodass ich einfach dort hin navigieren und den entsprechenden Code einfügen kann.

    Mache ich das Gleiche in AutoItStudio, enthält die Skriptdatei lediglich ein Include der GUI-Datei, sodass mir keinerlei Referenzen dargestellt werden. Mühsames hin- und herschalten ist bis jetzt das Einzige, was mir einfällt.

    Das es sich meiner Meinung und sehr begrenzten Erfahrung nach um eines der Basics handelt (nachdem es ja selbst mit dem alten Koda ganz intuitiv geht), frage ich mich, ob ich da einfach den Wald vor lauter Bäumen nicht sehe.
    Habe ich evt. eine Einstellung nicht aktiviert oder gehe ich AutoItStudio nur falsch an?

    Über eine kurze Rückmeldung würde ich mich sehr freuen.

    Gruß,

    Dexter :)

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™