28.07.2026 06:51:44
Navigation
· Bugtracker
· Kontakt
· Web Links
· Suche
· Buchtipps
Login
Benutzername

Passwort



Noch kein Mitglied?
Klicke hier um dich zu registrieren

Passwort vergessen?
Um ein neues Passwort anzufordern klicke hier.
Mitglieder Online
· Gäste Online: 1

· Mitglieder Online: 0

· Mitglieder insgesamt: 15,331
· Neuestes Mitglied: Wieland
Foren Themen
Neueste Themen
· Schrift im Buchungsf...
· Steuerfreies Stipendium
· Feature-Vorschlag: H...
· Elster Export, E/Ü ...
· Ich sage dann mal "T...
Heißeste Themen
Keine Themen erstellt
Thema ansehen
EasyCash&Tax Website » EasyCash&Tax - Fibu » CSV-Import-Plugin
   Thema drucken
Skripting mit GAWK
mielket
In dem kommenden Update des Plugins wird eine komfortable Möglichkeit vorgesehen sein, GAWK-Skripte auszuführen. Damit ist eine Vorverarbeitung des zu importierenden CSV-Datei möglich.

Ich werde mich die nächsten Tage in diesem Thread herumtreiben und auf evtl. Fragen eingehen, sofern welche auftauchen. Vielleicht bietet sich damit hier die Möglichkeit eine kleine Skripting-Werkstatt durchzuführen.

Für mehr Info bitte im Import-Plugin F1 drücken, sobald die neue Version installiert wurde!
 
http://am3.notify.live.net/throttledthirdparty/01.00/AQGwcKFTwqFdQoAAdm9TTl6zAgAAAAADEwAAAAQUZm52OjE3QjlBNEFEQTU4QzU2ODAFBkxFR0FDWQ
mielket
Dann will ich mal das Skript für mein Haupt-Geschäftskonto zum Besten geben. Grundlage ist ein CSV-Export des Freeware-Online-Banking Programms Hibiscus.


BEGIN { print "Datum;Betrag;Beschreibung;Belegnummer;Konto;Steuersatz;Betrieb;Bestandskonto" ; anzahl = 0 }
FNR > 1 {   # Header-Zeile überspringen
   gegenkonto = $4
   sub(/ *\"$/, "", gegenkonto)      # Leerzeichen und Anführungszeichen am Ende des Gegenkontos löschen
   sub(/^\"/, "", gegenkonto)       # Anführungszeichen am Anfang des Gegenkontos löschen
   sub(/^0*/, "", gegenkonto)      # Nullen am Anfang des Gegenkontos löschen
   
   gegenkontoinhaber = $6
   sub(/ *\"$/, "", gegenkontoinhaber)      # Leerzeichen und Anführungszeichen am Ende des Namens löschen
   sub(/^\"/, "", gegenkontoinhaber)       # Anführungszeichen am Anfang des Namens löschen
   
   betrag = $7
   betrag_mit_dezimalpunkt = betrag
   sub(/ *\"$/, "", betrag)   # Anführungszeichen am Ende des Betrags löschen
   sub(/^\"/, "", betrag)       # Anführungszeichen am Anfang des Betrags löschen
   sub(/,/, ".", betrag);      # Komma durch Punkt ersetzen   
   
   datum = $9
   belegnummer = ""
   
   # Verwendungszwecke miteinander verschmelzen, dabei störende Anführungszeichen abschneiden
   verwendungszweck = $10 
   verwendungszweck2 = $11
   verwendungszweck3 = $17
   verwendungszweck = substr(verwendungszweck, 2)
   sub(/\"$/, "", verwendungszweck)    
   verwendungszweck2 = substr(verwendungszweck2, 2)
   sub(/\"$/, "", verwendungszweck2)    
   verwendungszweck3 = substr(verwendungszweck2, 2)
   sub(/\"$/, "", verwendungszweck3)
   verwendungszweck = verwendungszweck verwendungszweck2 verwendungszweck3

   konto = "--> Konto manuell zuweisen und Steuersatz checken!"
   steuersatz = 0
   
   IGNORECASE = 1
   switch (gegenkontoinhaber)
   {
   # Einnahmen
   case "RETELL LIMITED":   # ein Kunde von mir
      if (betrag > 0)
         konto = "Lizenzeinnahmen Retell UST-ID GB442507958";
         break
   case "AMAZON.DE MUENCHEN":   # Hier bekomme ich Geld, wenn jemand über den Buchtipps-Link auf easyct.de Steuerfachliteratur kauft
      if (betrag > 0)
         konto = "Amazon Werbekostenerstattungen UST-ID LU20260743"
         break
      
   # Ausgaben
   case "Michael Zoellner":   # antlg. Miete für Soundstudionutzung
      if (betrag < 0)
         konto = "Anmietung von Gewerbefläche"
      break
   case "Thomas Mielke":   # Privatentnahmen auf mein Privatkonto
   case "MIELKE, THOMAS":
      if (gegenkonto == 1942522)
      {
         if (betrag < 0)
            konto = "/Privatentnahmen"
         else
            konto = "/Privateinlagen"
      }
      else if (gegenkonto == 5531742023)   # ist ein weiteres Geschäftskonto von mir
         konto = "/Transfers zwischen Geschäftskonten"
      break
   case "PAYPAL":      # Abbuchungen von PayPal ans Bankkonto
      konto = "/Transfers zwischen Geschäftskonten"
      belegnummer = substr(verwendungszweck, 1, 16)   # PayPal Transaktionsnummer als Belegnummer verwenden
      verwendungszweck = substr(verwendungszweck, 18) # restlichen Verwendungszweck beibehalten
      break
   case "GVL":       # gelegentliche private Zahlung vom Geschäftskonto aus
      if (betrag < 0)
         konto = "/Privatentnahmen"      
      break;
   case "AV.COM":      # ein Zulieferer, Auftragsbestätigungsnummer im Verwendungszweck als Belegnummer nehmen
      if (betrag < 0)
      {
         konto = "Medienkosten"
         steuersatz = 19
      }      
      break      
   case /DEUTSCHE POST/:   # Krempel aus dem Post-Shop mit MWSt. bezhahle ich immer bar,
      {      # Briefmarken und Pakete immer mit Karte -- so komme ich nicht durcheinander
         konto = "Porto"
         steuersatz = 0
      }
      break   
   case "Steuerkasse Hamburg":
      if (betrag < 0)
      {
         if (verwendungszweck ~ /VORAUSZAHLUNG/)
            konto = "/Privatentnahmen"   # Einkommensteuerzahlungen mache ich von meinem Geschäftskonto
         else if (verwendungszweck ~ /UST 20[0-9][0-9]/)
            konto = "Umsatzsteuerzahlungen an das Finanzamt"   # USt-Zahlung
            
      }
      else
         konto = "Umsatzsteuererstattungen des Finanzamts"      # USt-Erstattung
      break   
   default:   
      # Einnahmen und kein Bekannter Gegenkontoinhaber? Dann muss es wohl ein EC&T-Spender sein :)
      if (betrag > 0)
      {
         # Spendenbeträge sind meist duch 5 teilbar, den Rest auf Schlüsselworte im Verwendungszweck checken
         if (!(betrag % 5) || verwendungszweck ~ /EasyCash/ || verwendungszweck ~ /Spende/ || verwendungszweck ~ /Beitrag/ || verwendungszweck ~ /-AT-/)   
         {
            konto = "Software-Spenden (Charityware)"
            steuersatz = 7   # ermäßigter Steuersatz für Umsätze, die mit dem Urheberschutzgesetzt in Zusammenhang stehen
         }
      }
      
      # sonstige Ausgaben sind meist mit 19% MWSt.; checke ich, wenn ich das Konto manuell zuweise
      if (betrag < 0)
         steuersatz = 19;
   }

   # Belegnummer aus Verwendungszweck herausfischen, so gut es geht
   position = match(verwendungszweck, /R[0-9][0-9][0-9][0-9][0-9][^0-9]/)
   if (position > 0)
   {
          belegnummer = substr(verwendungszweck, position, 6);
   }
   else
   {
      position = match(verwendungszweck, /RECHNUNG [0-9][0-9][0-9][0-9][0-9][^0-9]/)
      if (position > 0)
      {
             belegnummer = "R" substr(verwendungszweck, position+9, 5);
      }
      else
      {
         position = match(verwendungszweck, /RE.NR. [0-9][0-9][0-9][0-9][0-9][^0-9]/)
         if (position > 0)
         {
                belegnummer = "R" substr(verwendungszweck, position+6, 5);
         }
      }

   }




   # wegen Fließkommaungenauigkeiten nehmen wir lieber den ursprünglichen Betrag als Zeichenkette, ansonsten müssten wir noch in etwa sowas machen:
   #betrag = sprintf("%.2f", betrag + 0.005);          # auf 2 Stellen nach dem Komma kürzen, dabei kaufmännisch runden
   #sub(/\./, ",", betrag);                            # jetzt den Dezimalpunkt wieder durchs Komma ersetzen

   # Beschreibungstext aufbereiten   
   beschreibung = "\"" gegenkontoinhaber
   beschreibung = beschreibung " / " verwendungszweck "\""         # verwendungszweck beginnt auch mit einem Anführungszeichen
   
   betrieb = "Softwareentwicklung"            # auf dem ING-Diba Konto laufen nur Zahlungen für meinen Haupt-Betrieb
   bestandskonto = "ING Diba"

   # Ausgabe der umgewandelten CSV-Zeile   
   print datum ";\"" betrag_mit_dezimalpunkt "\";" beschreibung ";" belegnummer ";" konto ";" steuersatz ";" betrieb ";" bestandskonto
   
   # hochzählen für die Statistik
   anzahl = anzahl + 1
}
END { print anzahl " Zeilen verarbeitet" > "/dev/stderr" }   # so gibt man Status- oder Fehlermeldungen im Kommandozeilenfenster aus


Habe damit 120 Transaktionan eingelesen, nur eine davon brauchte eine manuelle Kontozuweisung...

Ich hab die Datei nochmal im Original angehängt, wo die Einrückungen erhalten geblieben sind.
 
http://am3.notify.live.net/throttledthirdparty/01.00/AQGwcKFTwqFdQoAAdm9TTl6zAgAAAAADEwAAAAQUZm52OjE3QjlBNEFEQTU4QzU2ODAFBkxFR0FDWQ
mielket
Ein weiteres praktisches Skript-Beispiel findet sich in diesem Thread.

Im 8. Post gibt es auch ein paar Link-Tipps zu AWK.
 
http://am3.notify.live.net/throttledthirdparty/01.00/AQGwcKFTwqFdQoAAdm9TTl6zAgAAAAADEwAAAAQUZm52OjE3QjlBNEFEQTU4QzU2ODAFBkxFR0FDWQ
Springe ins Forum:
Forensuche


Shoutbox
Du musst dich einloggen um eine Nachricht zu senden.

mielket
23.07.2026 14:51:49
v4.0.18 behebt einen möglich Crash bei Formularen und enthält eine Währungs- Umrechnung mit Einstellungs- Seite!

mielket
22.07.2026 16:36:24
Sorry für den 503-Fehler auf der Seite. (Der blöde Malware-Scanner meines Webhosters hat wieder mal false positives geworfen.)

mielket
12.07.2026 14:21:55
@Isa: Du musst Details liefern, damit es die Chance gibt, dass Dir jemand helfen kann. Am Besten mit einem Forums-Beitrag.

mielket
12.07.2026 14:19:43
@Reiner: Wenn Du abgeschriebene Anlagegüter mit einem Erinnerungswert von 1 € beibehalten willst, stell auf degressiv mit 99 Jahren und 0% AfA-Satz.

Reiner S
11.07.2026 15:50:24
Frage zu AFA: PC Komponenten bzw. Erweiterungen (für einen bereits vollständig abgeschriebenen PC) tauchen im AFA Verzeichnis nicht auf, wenn die Abschreibungsdauer
auf 1 Jahr gelegt ist

Isa
10.07.2026 08:26:38
Bei der Umsatzstuererkläru
ng sind nur 19% aufegführt. Die Ausgaben zu 7% fehlen. Wie bekomme ich das hin?

mielket
06.07.2026 11:36:16
@Detlev Alaze: Update mal auf v3.10.

Detlev Alaze
26.06.2026 14:47:30
sorry - aber ich finde nirgends wie ich auf dem Mac mit Version 3.9 drucken kann - wo und was muss ich machen ?

mielket
11.06.2026 19:55:06
Ich habe auch schon mit Flatpac experimentiert. Sieht vielversprechend aus...

mielket
09.06.2026 12:32:34
@dschuhmann EC&T ist speziell angepasst, um mit Wine problemlos zu laufen, insofern: ja, ist was dran.

dschuhmann
06.06.2026 23:07:23
Elster zeigt auf der Softwareseite für Linux auch Easy cash & tax an. Ist da was dran?

mielket
03.06.2026 11:38:55
Würde mich interessieren: Sind hier sonst noch Hardcore- Alphatester unterwegs, die die v4 nicht nur installiert haben, um sich nur mal anzuschauen wie es aussieht?

mielket
03.06.2026 11:33:38
v4.0.8 patch: Dauerbuchungen ausführen stürzte ab und Zugriff auf bestimmte Einstellungen von Plugins aus war nicht möglich. Damit habe ich eben die USt.-Voranmeldung für das 1. Quartal übertragen.

mielket
02.06.2026 14:10:10
v4.0.7 patch: Anfangssaldo und Filtern bei WPF-Bestandskonten
-Journal sowie ein Out-Of-Memory Crash repariert.

mielket
29.05.2026 16:30:06
v4.0.6 patch verfügbar; u.a. funktioniert das CSV-Import-Plugin jetzt mit der v4. Viele andere Bugs sind gefixt.

33,888,234 eindeutige Besuche