Update / Bugfix zu Schritt 1: AutoHotkey-Skript für die Bescheidablage (Veranlagungsjahr-Korrektur) Hallo liebe Community, kurzes, aber wichtiges Praxissystem-Update zu Schritt 1 (automatische Ablage der Bescheide per AutoHotkey-Makro): Das Problem der bisherigen Version: Bei einigen Mandanten schlich sich bei der automatischen Beschriftung eine fehlerhafte Jahreszahl ein (z. B. ESt-Bescheid 2057 statt 2025). Der Grund: Wenn DATEV im DMS-Fenster die Feldbeschriftung Jahr: per Textauslesung nicht explizit ausgibt, griff die Suchfunktion nach vierstelligen Zahlen und hat dabei versehentlich die ersten vier Stellen 5-stelliger Mandantennummern (wie 20577) als Jahr interpretiert. Die Lösung: Das Veranlagungsjahr steht in DATEV immer unmissverständlich oben im Kopfbereich des Fensters Druckvorschau (VJ: 2024, VJ: 2025 etc.). Das überarbeitete Skript liest das Veranlagungsjahr nun direkt aus der Druckvorschau aus, bevor der DMS-Dialog überhaupt geöffnet wird. Hier ist der fehlerbereinigte Code für AutoHotkey v2: AutoHotkey #Requires AutoHotkey v2.0
#SingleInstance Force
SetTitleMatchMode 2
; Globale Variablen für das Abbruch-Protokoll
global ErfolgreichGeklickt := 0
global LetzterBescheid := "Noch kein Bescheid verarbeitet"
; --- START: Strg + Shift + S ---
^+s::
{
global ErfolgreichGeklickt, LetzterBescheid
SoundBeep(750, 200)
ToolTip("Makro gestartet...")
SetTimer () => ToolTip(), -2000
AnzahlBescheide := 3000
Loop AnzahlBescheide
{
; 1. Warten, bis Druckvorschau vorhanden ist
if !WinWait("Druckvorschau", , 20) {
MsgBox("Keine weitere Druckvorschau geladen. Makro beendet.`n`n"
. "Erfolgreich verarbeitet: " ErfolgreichGeklickt "`n"
. "Letzter Bescheid: " LetzterBescheid)
break
}
WinActivate("Druckvorschau")
Sleep 400
; --- KORREKTUR: Jahr direkt aus dem Kopfbereich der Druckvorschau auslesen ---
VorschauText := WinExist("Druckvorschau") ? WinGetText("Druckvorschau") : ""
VeranlagungsJahr := ""
if RegExMatch(VorschauText, "i)VJ:\s*(\d{4})", &mVJ) {
VeranlagungsJahr := mVJ[1]
}
; 2. Klick auf "Ablage in Dokumentenverwaltung"
CoordMode "Mouse", "Client"
Click 220, 12
Sleep 600
; 3. DMS-Ablagedialog bedienen
if WinWaitActive("Dokument in Dokumentenmanagement ablegen", , 20)
{
Sleep 400
; Daten direkt aus dem DMS-Fenster auslesen
DmsText := WinGetText("Dokument in Dokumentenmanagement ablegen")
MandantName := ""
; Fallback-Jahressuche, falls Druckvorschau leer war
if (VeranlagungsJahr == "") {
if RegExMatch(DmsText, "i)(?:Jahr|VJ):\s*(\d{4})", &mVJ) {
VeranlagungsJahr := mVJ[1]
} else {
DmsClean := RegExReplace(DmsText, "\b\d{5,6}\b", "") ; Entfernt 5-6 stellige Mandantennummern
if RegExMatch(DmsClean, "\b(19\d{2}|20[0-2]\d|203[0-6])\b", &mVJ) {
VeranlagungsJahr := mVJ[1]
}
}
}
; Mandantennamen lesen (Nummer wird abgeschnitten)
if RegExMatch(DmsText, "\d{4,6}\s*-\s*([^\r\n()]+)", &mMandant) {
MandantName := Trim(mMandant[1])
}
; Text zusammenbauen
if (MandantName != "" && VeranlagungsJahr != "")
TitelText := "ESt-Bescheid " . VeranlagungsJahr . ", " . MandantName
else if (VeranlagungsJahr != "")
TitelText := "ESt-Bescheid " . VeranlagungsJahr
else
TitelText := "ESt-Bescheid"
; --- Schritt A: 5x Tab ins Ordner-Feld ---
Send "{Tab 5}"
Sleep 200
Send "b" ; 'Bescheide' auswählen
Sleep 300
Send "{Enter}" ; Bestätigen
Sleep 200
; --- Schritt B: 5x Tab ins Beschreibung-Feld ---
Send "{Tab 5}"
Sleep 200
Send "^a" ; Alten Text markieren
Sleep 100
SendText TitelText ; Fügt Bezeichnung ein
Sleep 200
; --- Schritt C: 8x Tab zum OK-Button ---
Send "{Tab 8}"
Sleep 200
Send "{Enter}"
}
else
{
MsgBox("Das DMS-Ablagefenster ist nicht aufgetaucht. Makro gestoppt.`n`n"
. "Erfolgreich verarbeitet: " ErfolgreichGeklickt "`n"
. "Letzter Bescheid: " LetzterBescheid)
break
}
; 4. Erfolgs-Pop-up mit Enter bestätigen
if WinWaitActive("Ablage in Dokumentenmanagement", , 10)
{
Sleep 200
Send "{Enter}"
Sleep 400
}
; Zähler erhöhen und aktuellen Bescheid für das Abbruch-Protokoll speichern
ErfolgreichGeklickt++
LetzterBescheid := TitelText
; 5. Druckvorschau schließen & abwarten
if WinExist("Druckvorschau") {
WinClose("Druckvorschau")
WinWaitClose("Druckvorschau", , 5)
}
Sleep 800
}
MsgBox("Fertig! Es wurden " ErfolgreichGeklickt " Durchläufe ausgeführt.`n Letzter Bescheid: " LetzterBescheid)
}
; --- NOT-AUS / MANUELLER ABBRUCH: Strg + Esc ---
^Esc::
{
MsgBox("MAKRO ABGEBROCHEN!`n`n"
. "Anzahl verarbeiteter Bescheide: " ErfolgreichGeklickt "`n"
. "Letzter erfolgreich abgelegter Bescheid:`n" LetzterBescheid)
ExitApp
} Damit klappt die automatische Zuordnung der Veranlagungsjahre nun fehlerfrei. Viel Erfolg weiterhin beim Behalten der Datenhoheit! Step-by-Step-Anleitung: Einrichtung & Ausführung 1. Software & Skript-Vorbereitung AutoHotkey v2 herunterladen: Auf autohotkey.com kostenlos die Version 2.x herunterladen und installieren. (Wichtig: Version 1 funktioniert mit diesem Code nicht). Datei erstellen: Auf dem Desktop oder in einem Ordner rechtsklicken -> Neu ->AutoHotkey Script (oder eine einfache Textdatei erstellen und die Endung von .txt in .ahk ändern, z. B. DATEV_Klicker.ahk). Code einfügen: Rechtsklick auf die .ahk-Datei -> Edit Script (oder Öffnen mit -> Editor). Den obigen Code hineinkopieren und speichern (Strg + S). Als Administrator starten: Die Datei DATEV_Klicker.ahk mit der rechten Maustaste anklicken und "Als Administrator ausführen" wählen (das ist zwingend nötig, damit AutoHotkey in die DATEV-Fenster eingreifen darf). 2. Vorbereitung in DATEV (Post, Fristen und Bescheide) In DATEV Post, Fristen und Bescheide (PFB) die Ansicht öffnen. Bescheide auswählen: Erster Test: Markiert beim allerersten Versuch nur 3 Bescheide, um zu prüfen, ob der Ablauf auf eurem System flüssig läuft. Produktivbetrieb: Markiert Pakete von maximal ca. 1.250 Bescheiden auf einmal. Wichtiger Praxishinweis: DATEV lädt nach dem Start alle ausgewählten Bescheide nacheinander in den Speicher. Wer 3.000 Stück auf einmal markiert, riskiert einen DATEV-Absturz. Zudem gibt es seitens DATEV keine Möglichkeit, das Laden abzubrechen (außer den harten Abschuss über den Windows Task-Manager per Strg + Alt + Entf). Bescheidabgleich öffnen: Rechtsklick auf die markierten Zeilen -> Bescheidwerte wählen. Es öffnet sich die erste Druckvorschau. 3. Makro starten & stoppen Starten: Drückt die Tastenkombination Strg + Shift + S. Ablauf: Es ertönt ein kurzer Signalton (Beep). Nach wenigen Sekunden beginnt das Skript vollautomatisch: Es liest das Veranlagungsjahr aus der Druckvorschau, wählt den Ordner "Bescheide", fügt die Mandantenbezeichnung ein und bestätigt die Ablage im DMS. Not-Aus / Manueller Abbruch: Sollte etwas haken oder wollt ihr vorzeitig stoppen, haltet einfach Strg + Esc gedrückt. Das Makro bricht sofort ab und zeigt euch in einer Meldung genau an, wie viele Bescheide bis dahin erfolgreich verarbeitet wurden. 💡Hinweise zur individuellen Anpassung Ablage in einen anderen DMS-Ordner: Standardmäßig legt das Skript die Dokumente im DMS-Ordner Mandanten -> Bescheide ab. Wenn ihr einen anderen Ordner bevorzugt (z. B. "Steuern"): Sucht im Code nach dem Abschnitt ; --- Schritt A: 5x Tab ins Ordner-Feld --- und ändert die Zeile Send "b" auf den Anfangsbuchstaben eures Wunsch-Ordners (z. B. Send "s" für den Ordner Steuern). Unterscheidung der Steuerarten (USt, GewSt etc.): Da in meiner Praxis zu 99% Einkommensteuerbescheide verarbeitet werden, verwendet das Skript standardmäßig die Beschriftung ESt-Bescheid [Jahr], [Name]. Sollten USt- oder GewSt-Bescheide enthalten sein, werden diese aktuell ebenfalls mit dieser Bezeichnung abgelegt (was sich aber im Suchtext wiederfindet). Wer hier eine exakte Trennung wünscht, kann den Code ganz einfach per KI anpassen lassen, sodass auch die Steuerart dynamisch aus der Druckvorschau ausgelesen wird.
... Mehr anzeigen