abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 

VBScript-Tool für Aufteilung Vorlauf in Monat/Quartal

48
letzte Antwort am 03.07.2023 13:59:46 von chrisocki
Dieser Beitrag ist geschlossen
0 Personen hatten auch diese Frage
niels_ommen
Beginner
Offline Online
Nachricht 31 von 49
699 Mal angesehen

Ich habe eine Primanota ins DATEV-Format exportiert. Der Fehler trat bei 2 unterschiedlichen Mandanten auf. Es war auch in beiden Fällen der selbe Hinweis (gleiche Zeile). Hier die ersten beiden Zeilen der Datei:

 

niels_ommen_0-1614366666299.png

 

Am Ende sieht die Datei wie folgt aus:

 

niels_ommen_1-1614366774689.png

 

0 Kudos
vogtsburger
Allwissender
Offline Online
Nachricht 32 von 49
687 Mal angesehen

 

... besser wäre es, per Editor, z.B. per notepad.exe in die csv-Dateie zu 'schauen', nicht per Excel

Nach dem letzten vollständigen Buchungssatz soll nichts mehr kommen, "niente", "nada",

... ansonsten diesen 'Rest' entfernen.

 

... nur eine Vermutung ...

 

... aber wenn meine Vermutung zutrifft, ist der Stapel bereits aufgeteilt

... die Fehlermeldung kann eigentlich auch ignoriert werden, da 'witzlos'

 

Viele Grüße, M. Vogtsburger
... água mole em pedra dura, tanto bate até que fura ... ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
... mein Motto: "hast Du ASCII in den Taschen, hast Du immer was zu naschen" ... ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
... ich hatte viel weniger IT-Probleme, als es noch keine PCs, kein "WINDOWS" und kein "DATEV" gab ... ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
"Wenn sie einen ssıǝɥɔs Prozess digitalisieren, dann haben sie einen ssıǝɥɔs digitalen Prozess" (Thorsten Dirks) ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
" ... inkognito ergo sum ... " ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
"feine Pfote, derbe Patsche, fiddelt auf der selben Bratsche" (Heinrich Heine, 1797–1856) ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
... hinter so manchem Datev-Programm-(Fehl-)Verhalten steckt eine Logik. Sie versteckt sich bloß sehr gut ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
... wir Windows-Anwender können alle bis 11 zählen: 1.0/2.0/3.0/95/98/ME/2000/XP/Vista/7/8/10/11 ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
... "neue Kästchen braucht das Land !" (frei nach einem Songtext) ... (wg. mehrerer Dezimal-Limits in der Datev-Software) ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
... meine persönliche GuV (bzgl. Datev-Nutzung): deutliche Steigerungen bei Frustgewinn und Lustverlust ... ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
... immer auf der Suche nach dem Sinn des Lesens ... und Schreibens ... ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
... "du sollst nicht begehren deines Nächsten Fremdsoftware"(10. Gebot der DATEV) ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
... "allwissend bin ich (wirklich) nicht, doch viel ist mir (dennoch) bewusst"(frei nach Goethes Faust) ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
... "Die Botschaft(er/en) der Datev hör' ich wohl, allein mir fehlt der Glaube"(frei nach J.W.v.Goethe) ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
... Vorschläge für einen neuen Datev-Slogan: "man lernt nie aus" ODER "man lernt nie aus Fehlern" ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
... "außen hui ... innen pfui ... die GUI ??" ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
... den Begriff "Verböserung" gibt es nur im Steuerrecht, den 'Tatbestand' der "Verböserung" gibt es aber auch in der IT ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
"And so, my fellow Genossen: ask not what your DATEV can do for you — ask what you can do for your DATEV" (frei nach JFK) ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
Warnhinweis für Allergiker: Spoiler in meinem Beitrag können Spuren von Ironie, Witz oder Unwitz enthalten 😉 ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
"Über sieben Krücken musst Du geh'n, sieben dunkle Jahre übersteh'n ... " (frei nach einem Songtext) ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
(... ja sind wir denn hier bei den WaitWatchern ? .. warten und dem Gras beim Wachsen zusehen ? ..) ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
(..♬.. das bisschen Datev macht sich von allein ..♫.. das bisschen Datev kann so schlimm nicht sein ..♬..) ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
(... Datev-Software muss einmalig sein, wird also evtl. nur einmalig getestet ☺...) ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
(... das Motto "gut zitiert ist mindestens halb geschrieben" wird hier und anderswo geliebt ...) ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
(... neuer Urlaubs-Trend: Schiffsreise mit Barkasse nach LuG.ANO ...) ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
(... nein, ich bin nicht im KUG-LuGs-Klan ...) ☀ ☁ ☂ ☃ ☄
Viele Grüße, M. Vogtsburger
... "Wer bin ich und wenn ja, wie viele (... Gruppen in der BRV) ? " ...☂...
"Wer bin ich und wenn ja, wie viele (... Gruppen in der BRV) ? " ...☂...
Viele Grüße, M. Vogtsburger
... "alles so schön bunt hier !" ... auf dem richtigen Gerät ... ☀ ☁ ☂ ☃ ☄







Viele Grüße, M. Vogtsburger
... Motto: "Immer positiv denken und negativ bleiben !" ... bei jedem Wetter ☀ ☁ ☂ ☃ ☄ ....(betr. CORONA)







Viele Grüße, M. Vogtsburger
... kein Mitglied des KUG-LuGs-KLANs, sondern eher von REWE & Co ... Bits & Bikes bei jedem Wetter ☀ ☁ ☂ ☃ ☄







... auf der Suche nach dem Sinn des Lesens, bei jedem Wetter ☀ ☁ ☂ ☃ ☄




Hinweis: dieser Beitrag kann Spuren von Ironie enthalten, bei jedem Wetter ☀ ☁ ☂ ☃ ☄


Viele Grüße, M. Vogtsburger
☀ ☁ ☂ ☃ ☄ ... alle Wetter, die Frisur hält, trotz Corona !
"Ein Teil dieser Antworten würde die Bevölkerung verunsichern"
0 Kudos
Gelöschter Nutzer
Offline Online
Nachricht 33 von 49
678 Mal angesehen

Da müsste man noch eine Prüfung auf das Belegdatum einfügen. Muss ich mir mal in Ruhe anschauen.

 

Ich melde mich wieder.

0 Kudos
Gelöschter Nutzer
Offline Online
Nachricht 34 von 49
669 Mal angesehen

@vogtsburgerhat recht mit seinem Hinweis, dass am Ende der Datei keine Daten mehr vorhanden sein sollte.

 

Eventuell hat sich hier eine Zeilenschaltung eingeschlichen. Die Datei einfach einmal öffnen und an das Dateiende springen und eventuell nicht sichtbare Zeichen mit der Enft-Taste löschen.

 

Könnten Sie einmal den DATEV-Vorlauf in einem Editor öffnen und schauen, wie die letzte Zeile aussieht?

 

So müsste eigentlich aufgebaut:

 

grafik.png

 

Hatten Sie die Aufteilung direkt nach dem DATEV-Export vorgenommen oder haben Sie die Datei vorher noch einmal geöffnet und angeschaut?

 


Gruß Achilleus

0 Kudos
Gelöschter Nutzer
Offline Online
Nachricht 35 von 49
640 Mal angesehen

Hallo Leute,

 

ich habe die Prüfung auf Leerzeilen robuster gestaltet. Anscheinend kam es bei einigen Anwender zu einer Fehlermeldung, weil am Ende des exportierten DATEV-Vorlaufs ein nicht druckbares Zeichen angefügt wurde. Nach einer Internetrecherche handelt es sich um ein sog. SUB-Kennzeichen für die Markierung des Dateiendes. Woher und warum das nur bei einige auftaucht, ist mir rätselhaft. Es soll uns aber auch nicht weiter interessieren.

 

Hinzugekommen ist noch eine Abfrage, ob das Festschreibungskennzeichen aufgehoben werden soll, sollte es sich um ein bereits festgeschriebenen Vorlauf handeln.

 

Wer noch das Leistungsdatum für die Aufteilung berücksichtigen möchte, der verwende bitte die Separate_DATEVExt.vbs aus dem anderen Beitrag.

 

Hier nun die überarbeitete Fassung:

 

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Const DATEVBelegdatum = 9
Const DATEVFibuVon = 14
Const DATEVFibuBis = 15
Const DATEVFestschreibung=113

Dim fs
Dim sFileIn, f
Dim sPathOutput
Dim i, z, q
Dim sFileOut
Dim sLine
Dim sTemp, tArray
Dim sYear, iMonth
Dim sOutputFile
Dim ReadFibu
Dim blnResetFK

Set fs = createobject("Scripting.FileSystemObject")

If WScript.Arguments.length> 0 Then
	sFileIn = WScript.Arguments(0)
Else
	If sFileIn="" Then sFileIn=ChooseFile()
	If sFileIn="" Then WScript.Quit
End If

sPathOutput=GetPathName(sFileIn)
sFileOut = GetFileNameWithOutExtension(sFileIn)

Dim sChooseExport:	sChooseExport=InputBox("Bitte wählen Sie die Exportart aus." & vbNewLine & vbNewLine & "  => m = Monat" & vbNewLine & "  => q = Quartal","Vorlauf trennen","m")
If sChooseExport="" Then WScript.Quit 

If sChooseExport="q" Then
	ReDim sOutputFile(3)	
Else
	ReDim sOutputFile(11)
End If	


Set f = fs.OpenTextFile(sFileIn,ForReading)

Select Case LCase(sChooseExport)
	
Case "m"	'je Monat
	
	For i = 0 To 11
		Set sOutputFile(i)=fs.OpenTextFile(fs.BuildPath(sPathOutput, sFileOut &"_" & FormatExt((i+1),2) & ".csv")  ,ForWriting,True,0)
	Next
	
	'First Step
	'Write Header, erste Zeile Umwandlung Vorlaufdatum
	For z = 1 To 2
		sLine=f.Readline
		
		If z = 1 Then	'Fibu-Vorlaufdatum
			tArray = Split(sLine,";")
			
			If tArray(20)="1" Then		'Feschreibekennzeichen Header
				If MsgBox("Der Vorlauf wurde bereits festgeschrieben." & vbNewLine & "Möchten Sie für den späteren Import das Festschreibekennzeichen aufheben?",vbYesNo+vbQuestion+vbDefaultButton2,"Aufhebung Feschreibung")=vbYes Then
					blnResetFK=True
					tArray(20)="0"
				End If
			End If
			
			sYear = Left(tArray(DATEVFibuVon),4)
			
			For i = 0 To 11
				tArray(DATEVFibuVon)=sYear & FormatExt((i+1),2) & "01"	'Monatsanfang
				If i=11 Then
					tArray(DATEVFibuBis)=sYear & "1231" 	'Dezember
				Else
					tArray(DATEVFibuBis)=sYear & FormatExt((i+1),2) & Day(DateSerial(sYear,(i+2),0))	'Monats => 0.03.2020 => 29.02.2020
				End If				
				
				For q=LBound(tArray) To UBound(tArray)						
					sTemp = sTemp & tArray(q) & ";"						
				Next
				
				sTemp = Left(sTemp,Len(sTemp)-1)
				sOutputFile(i).writeline sTemp
				sTemp=""
			Next
			
		Else
			For i = 0 To 11
				sOutputFile(i).writeline sLine
			Next
		End If
	Next
	'End First Step
	
	'Second Step
	'Lese Fibu-Daten und verteile auf Einzevorläufe
	Do Until f.AtEndOfStream
		sLine = f.ReadLine
		tArray=Split(sLine,";")
		If UBound(tArray)>0 Then
			If blnResetFK = True Then 
				sLine=""
				tArray(DATEVFestschreibung)="0"
				For i=0 To UBound(tArray)
					sLine=sLine & tArray(i) & ";"
				Next
				sLine=Left(sLine,Len(sLine)-1)	
			End If
			iMonth=Right(tArray(DATEVBelegdatum),2)		
			sOutputFile(CInt(iMonth)-1).writeline sLine
		End If
	Loop
	'End Second Step
	
	'Last Step
	'Schließe alle offenen Dateien	
	For i = 0 To 11
		sOutputFile(i).close
		If GetNumberOfLines(fs.BuildPath(sPathOutput, sFileOut &"_" & FormatExt((i+1),2) & ".csv")) <= 3 Then fs.DeleteFile(fs.BuildPath(sPathOutput, sFileOut &"_" & FormatExt((i+1),2) & ".csv"))
	Next	
	
	MsgBox "Alle Buchungssätze wurden monatsweise in einzelne Vorläufe verteilt. Die Dateien haben den Zusatz *_MM erhalten und können jetzt importiert werden.",48,"Konvert DATEV-Fibu"
	
Case "q"	'je Quartal
	
	For i = 0 To 3
		Set	sOutputFile(i)=fs.OpenTextFile(fs.BuildPath(sPathOutput, sFileOut &"_" & RomanNumber((i+1)) & ".csv") ,ForWriting,True,0)
	Next
	
	'First Step
	'Write Header, erste Zeile Umwandlung Vorlaufdatum
	For z = 1 To 2
		sLine=f.Readline
		
		If z = 1 Then	'Fibu-Vorlaufdatum
			tArray = Split(sLine,";")
			If tArray(20)="1" Then		'Feschreibekennzeichen Header
				If MsgBox("Der Vorlauf wurde bereits festgeschrieben." & vbNewLine & "Möchten Sie für den späteren Import das Festschreibekennzeichen aufheben?",vbYesNo+vbQuestion+vbDefaultButton2,"Aufhebung Feschreibung")=vbYes Then
					blnResetFK=True
					tArray(20)="0"
				End If
			End If
			sYear = Left(tArray(DATEVFibuVon),4)
			
			For i = 0 To 3
				tArray(DATEVFibuVon)=sYear & FormatExt(((i+1)*3)-2,2) & "01"	'Anfang Quartal
				If i=3 Then
					tArray(DATEVFibuBis)=sYear & "1231" 	'Dezember
				Else
					tArray(DATEVFibuBis)=sYear & FormatExt(((i+1)*3),2) & Day(DateSerial(sYear,((i+1)*3)+1,0))	'Ende Quartal => 0.03.2020 => 28.02.2020
				End If				
				
				For q=LBound(tArray) To UBound(tArray)								
					sTemp = sTemp & tArray(q) & ";"
				Next
				
				sTemp = Left(sTemp,Len(sTemp)-1)
				sOutputFile(i).writeline sTemp
				sTemp=""
			Next
			
		Else
			
			For i = 0 To 3		
				sOutputFile(i).writeline sLine
			Next 
		End If
	Next
	'End First Step
	
	'Second Step
	'Lese Fibu-Daten und verteile auf Einzevorläufe
	Do Until f.AtEndOfStream
		sLine = f.ReadLine
		tArray=Split(sLine,";")
		If UBound(tArray)>0 Then
			If blnResetFK = True Then 
				sLine=""
				tArray(DATEVFestschreibung)="0"
				For i=0 To UBound(tArray)
					sLine=sLine & tArray(i) & ";"
				Next
				sLine=Left(sLine,Len(sLine)-1)	
			End If
			iMonth=Right(tArray(DATEVBelegdatum),2)
			
			Select Case True
				Case iMonth >= 1 And iMonth <= 3
				sOutputFile(0).writeline sLine
				Case iMonth >= 4 And iMonth <= 6
				sOutputFile(1).writeline sLine
				Case iMonth >= 7 And iMonth <= 9
				sOutputFile(2).writeline sLine
				Case iMonth >= 10 And iMonth <= 12
				sOutputFile(3).writeline sLine
			End Select
		End If		
	Loop
	
	'End Second Step
	
	'Last Step
	'Schließe alle offenen Dateien	
	For i = 0 To 3
		sOutputFile(i).close
		If GetNumberOfLines(fs.BuildPath(sPathOutput, sFileOut &"_" & RomanNumber((i+1)) & ".csv")) <= 3 Then fs.DeleteFile(fs.BuildPath(sPathOutput, sFileOut &"_" & RomanNumber((i+1)) & ".csv"))
	Next
	
	MsgBox "Alle Buchungssätze wurden quartalsweise in einzelne Vorläufe verteilt. Die Dateien haben den Zusatz *_QQ erhalten und können jetzt importiert werden.",48,"Konvert DATEV-Fibu"
	
	Case Else
	MsgBox "Sie haben eine falsche Auswahl getroffen. Erlaubt ist nur je Monat (m) oder je Quartal (q)." & vbNewLine & vbNewLine & "Bitte wiederholen Sie den Vorgang.",48,"Falsche Auswahl Exportart"
	WScript.Quit
End Select	


'Hilfsfunktionen
'---------------

Function GetPathName(sFilePath)
	sFilePath = Replace(sFilePath, "/" , "\")
	GetPathName = Left(sFilePath, InStrRev(sFilePath, "\"))
End Function

Function GetFileName(sFilePath)
	GetFileName = fs.GetFileName(sFilePath)
End Function

Function GetFileNameWithOutExtension(sFilePath)
	GetFileNameWithOutExtension = fs.GetBaseName(sFilePath)
End Function

Function FormatExt(Zahl,Anzahl)
	FormatExt= Right(String(Anzahl, "0") & zahl,Anzahl)
End Function

Function GetNumberOfLines(strFile)
	Dim ts
	Dim myArray
	Dim z
	Set ts = fs.OpenTextFile(strFile)
	myArray=Split(ts.ReadAll,vbNewLine)
	
	For z=UBound(myArray) To 0 Step -1
		If Len(myArray(z))>2 Then
			GetNumberOfLines=(z+1)
			Exit For
		End If
	Next
End Function

Function FormatExt(Zahl,Anzahl)
	FormatExt= Right(String(Anzahl, "0") & zahl,Anzahl)
End Function

Function RomanNumber(Number)
	Dim Result
	
	Select Case Number
		Case 1	: Result="I"
		Case 2	: Result="II"
		Case 3	: Result="III"
		Case 4	: Result="IV"
	End Select
	
	RomanNumber=Result 
End Function

Function ChooseFile()
	Set oExec=CreateObject("WScript.Shell").Exec( "mshta.exe ""about:" & "<" & "input type=file id=FILE>" & "<" & "script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);" & "<" & "/script>""" )
	Tst = oExec.StdOut.ReadAll
	Tst = Replace( Tst, vbCRLF, "" )
	ChooseFile= Tst  
End Function

 

Den Code einfach kopieren und in eine Textdatei einfügen. Anschließend die Datei umbenennen in z. B. SeparateDATEVFibu.vbs, wichtig ist die Extension "VBS".

 

Ich übernehme keine Verantwortung für Schäden am Datenbestand oder System. Es werden von mir keine Änderungen am System vorgenommen. Anspruch auf Support besteht nicht, stehe aber gerne für Probleme und Fragen hier im Forum zur Verfügung.

 


Gruß Achilleus

susannez
Beginner
Offline Online
Nachricht 36 von 49
611 Mal angesehen

Super, vielen Dank!

 

 

0 Kudos
Gelöschter Nutzer
Offline Online
Nachricht 37 von 49
573 Mal angesehen

Sorry Leute,

 

mir ist leider ein kleiner Fehler gemeldet worden. Wenn ein Vorlauf nur 1 Buchungssatz enthält, wird dieser in der neuen Fassung leider gelöscht. Hintergrund ist der, dass ich die Prüfung in der Hilfsroutine anders gestaltet hatte und vergessen hatte, das auch im eigentlichen Programm zu ändern.

 

Ich bitte vielmals um Entschuldigung.

Hier nun die neue und endgültige Fassung:

 

Neu für Monat:

If GetNumberOfLines(fs.BuildPath(sPathOutput, sFileOut &"_" & FormatExt((i+1),2) & ".csv")) <= 2 Then fs.DeleteFile(fs.BuildPath(sPathOutput, sFileOut &"_" & FormatExt((i+1),2) & ".csv"))

 

Neu für Quartal:

If GetNumberOfLines(fs.BuildPath(sPathOutput, sFileOut &"_" & RomanNumber((i+1)) & ".csv")) <= 2 Then fs.DeleteFile(fs.BuildPath(sPathOutput, sFileOut &"_" & RomanNumber((i+1)) & ".csv"))

 

 

 

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8
Const DATEVBelegdatum = 9
Const DATEVFibuVon = 14
Const DATEVFibuBis = 15
Const DATEVFestschreibung=113

Dim fs
Dim sFileIn, f
Dim sPathOutput
Dim i, z, q
Dim sFileOut
Dim sLine
Dim sTemp, tArray
Dim sYear, iMonth
Dim sOutputFile
Dim ReadFibu
Dim blnResetFK

Set fs = createobject("Scripting.FileSystemObject")

If WScript.Arguments.length> 0 Then
	sFileIn = WScript.Arguments(0)
Else
	If sFileIn="" Then sFileIn=ChooseFile()
	If sFileIn="" Then WScript.Quit
End If

sPathOutput=GetPathName(sFileIn)
sFileOut = GetFileNameWithOutExtension(sFileIn)

Dim sChooseExport:	sChooseExport=InputBox("Bitte wählen Sie die Exportart aus." & vbNewLine & vbNewLine & "  => m = Monat" & vbNewLine & "  => q = Quartal","Vorlauf trennen","m")
If sChooseExport="" Then WScript.Quit 

If sChooseExport="q" Then
	ReDim sOutputFile(3)	
Else
	ReDim sOutputFile(11)
End If	


Set f = fs.OpenTextFile(sFileIn,ForReading)

Select Case LCase(sChooseExport)
	
Case "m"	'je Monat
	
	For i = 0 To 11
		Set sOutputFile(i)=fs.OpenTextFile(fs.BuildPath(sPathOutput, sFileOut &"_" & FormatExt((i+1),2) & ".csv")  ,ForWriting,True,0)
	Next
	
	'First Step
	'Write Header, erste Zeile Umwandlung Vorlaufdatum
	For z = 1 To 2
		sLine=f.Readline
		
		If z = 1 Then	'Fibu-Vorlaufdatum
			tArray = Split(sLine,";")
			
			If tArray(20)="1" Then		'Feschreibekennzeichen Header
				If MsgBox("Der Vorlauf wurde bereits festgeschrieben." & vbNewLine & "Möchten Sie für den späteren Import das Festschreibekennzeichen aufheben?",vbYesNo+vbQuestion+vbDefaultButton2,"Aufhebung Feschreibung")=vbYes Then
					blnResetFK=True
					tArray(20)="0"
				End If
			End If
			
			sYear = Left(tArray(DATEVFibuVon),4)
			
			For i = 0 To 11
				tArray(DATEVFibuVon)=sYear & FormatExt((i+1),2) & "01"	'Monatsanfang
				If i=11 Then
					tArray(DATEVFibuBis)=sYear & "1231" 	'Dezember
				Else
					tArray(DATEVFibuBis)=sYear & FormatExt((i+1),2) & Day(DateSerial(sYear,(i+2),0))	'Monats => 0.03.2020 => 29.02.2020
				End If				
				
				For q=LBound(tArray) To UBound(tArray)						
					sTemp = sTemp & tArray(q) & ";"						
				Next
				
				sTemp = Left(sTemp,Len(sTemp)-1)
				sOutputFile(i).writeline sTemp
				sTemp=""
			Next
			
		Else
			For i = 0 To 11
				sOutputFile(i).writeline sLine
			Next
		End If
	Next
	'End First Step
	
	'Second Step
	'Lese Fibu-Daten und verteile auf Einzevorläufe
	Do Until f.AtEndOfStream
		sLine = f.ReadLine
		tArray=Split(sLine,";")
		If UBound(tArray)>0 Then
			If blnResetFK = True Then 
				sLine=""
				tArray(DATEVFestschreibung)="0"
				For i=0 To UBound(tArray)
					sLine=sLine & tArray(i) & ";"
				Next
				sLine=Left(sLine,Len(sLine)-1)	
			End If
			iMonth=Right(tArray(DATEVBelegdatum),2)		
			sOutputFile(CInt(iMonth)-1).writeline sLine
		End If
	Loop
	'End Second Step
	
	'Last Step
	'Schließe alle offenen Dateien	
	For i = 0 To 11
		sOutputFile(i).close
		If GetNumberOfLines(fs.BuildPath(sPathOutput, sFileOut &"_" & FormatExt((i+1),2) & ".csv")) <= 2 Then fs.DeleteFile(fs.BuildPath(sPathOutput, sFileOut &"_" & FormatExt((i+1),2) & ".csv"))
	Next	
	
	MsgBox "Alle Buchungssätze wurden monatsweise in einzelne Vorläufe verteilt. Die Dateien haben den Zusatz *_MM erhalten und können jetzt importiert werden.",48,"Konvert DATEV-Fibu"
	
Case "q"	'je Quartal
	
	For i = 0 To 3
		Set	sOutputFile(i)=fs.OpenTextFile(fs.BuildPath(sPathOutput, sFileOut &"_" & RomanNumber((i+1)) & ".csv") ,ForWriting,True,0)
	Next
	
	'First Step
	'Write Header, erste Zeile Umwandlung Vorlaufdatum
	For z = 1 To 2
		sLine=f.Readline
		
		If z = 1 Then	'Fibu-Vorlaufdatum
			tArray = Split(sLine,";")
			If tArray(20)="1" Then		'Feschreibekennzeichen Header
				If MsgBox("Der Vorlauf wurde bereits festgeschrieben." & vbNewLine & "Möchten Sie für den späteren Import das Festschreibekennzeichen aufheben?",vbYesNo+vbQuestion+vbDefaultButton2,"Aufhebung Feschreibung")=vbYes Then
					blnResetFK=True
					tArray(20)="0"
				End If
			End If
			sYear = Left(tArray(DATEVFibuVon),4)
			
			For i = 0 To 3
				tArray(DATEVFibuVon)=sYear & FormatExt(((i+1)*3)-2,2) & "01"	'Anfang Quartal
				If i=3 Then
					tArray(DATEVFibuBis)=sYear & "1231" 	'Dezember
				Else
					tArray(DATEVFibuBis)=sYear & FormatExt(((i+1)*3),2) & Day(DateSerial(sYear,((i+1)*3)+1,0))	'Ende Quartal => 0.03.2020 => 28.02.2020
				End If				
				
				For q=LBound(tArray) To UBound(tArray)								
					sTemp = sTemp & tArray(q) & ";"
				Next
				
				sTemp = Left(sTemp,Len(sTemp)-1)
				sOutputFile(i).writeline sTemp
				sTemp=""
			Next
			
		Else
			
			For i = 0 To 3		
				sOutputFile(i).writeline sLine
			Next 
		End If
	Next
	'End First Step
	
	'Second Step
	'Lese Fibu-Daten und verteile auf Einzevorläufe
	Do Until f.AtEndOfStream
		sLine = f.ReadLine
		tArray=Split(sLine,";")
		If UBound(tArray)>0 Then
			If blnResetFK = True Then 
				sLine=""
				tArray(DATEVFestschreibung)="0"
				For i=0 To UBound(tArray)
					sLine=sLine & tArray(i) & ";"
				Next
				sLine=Left(sLine,Len(sLine)-1)	
			End If
			iMonth=Right(tArray(DATEVBelegdatum),2)
			
			Select Case True
				Case iMonth >= 1 And iMonth <= 3
				sOutputFile(0).writeline sLine
				Case iMonth >= 4 And iMonth <= 6
				sOutputFile(1).writeline sLine
				Case iMonth >= 7 And iMonth <= 9
				sOutputFile(2).writeline sLine
				Case iMonth >= 10 And iMonth <= 12
				sOutputFile(3).writeline sLine
			End Select
		End If		
	Loop
	
	'End Second Step
	
	'Last Step
	'Schließe alle offenen Dateien	
	For i = 0 To 3
		sOutputFile(i).close
		If GetNumberOfLines(fs.BuildPath(sPathOutput, sFileOut &"_" & RomanNumber((i+1)) & ".csv")) <= 2 Then fs.DeleteFile(fs.BuildPath(sPathOutput, sFileOut &"_" & RomanNumber((i+1)) & ".csv"))
	Next
	
	MsgBox "Alle Buchungssätze wurden quartalsweise in einzelne Vorläufe verteilt. Die Dateien haben den Zusatz *_QQ erhalten und können jetzt importiert werden.",48,"Konvert DATEV-Fibu"
	
	Case Else
	MsgBox "Sie haben eine falsche Auswahl getroffen. Erlaubt ist nur je Monat (m) oder je Quartal (q)." & vbNewLine & vbNewLine & "Bitte wiederholen Sie den Vorgang.",48,"Falsche Auswahl Exportart"
	WScript.Quit
End Select	


'Hilfsfunktionen
'---------------

Function GetPathName(sFilePath)
	sFilePath = Replace(sFilePath, "/" , "\")
	GetPathName = Left(sFilePath, InStrRev(sFilePath, "\"))
End Function

Function GetFileName(sFilePath)
	GetFileName = fs.GetFileName(sFilePath)
End Function

Function GetFileNameWithOutExtension(sFilePath)
	GetFileNameWithOutExtension = fs.GetBaseName(sFilePath)
End Function

Function FormatExt(Zahl,Anzahl)
	FormatExt= Right(String(Anzahl, "0") & zahl,Anzahl)
End Function

Function GetNumberOfLines(strFile)
	Dim ts
	Dim myArray
	Dim z
	Set ts = fs.OpenTextFile(strFile)
	myArray=Split(ts.ReadAll,vbNewLine)
	
	For z=UBound(myArray) To 0 Step -1
		If Len(myArray(z))>2 Then
			GetNumberOfLines=(z+1)
			Exit For
		End If
	Next
End Function

Function FormatExt(Zahl,Anzahl)
	FormatExt= Right(String(Anzahl, "0") & zahl,Anzahl)
End Function

Function RomanNumber(Number)
	Dim Result
	
	Select Case Number
		Case 1	: Result="I"
		Case 2	: Result="II"
		Case 3	: Result="III"
		Case 4	: Result="IV"
	End Select
	
	RomanNumber=Result 
End Function

Function ChooseFile()
	Set oExec=CreateObject("WScript.Shell").Exec( "mshta.exe ""about:" & "<" & "input type=file id=FILE>" & "<" & "script>FILE.click();new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);" & "<" & "/script>""" )
	Tst = oExec.StdOut.ReadAll
	Tst = Replace( Tst, vbCRLF, "" )
	ChooseFile= Tst  
End Function

 

 

crazymike
Beginner
Offline Online
Nachricht 38 von 49
449 Mal angesehen

Danke für Deine Bemühungen und das Du es mit allen teilst. Das spart mir viel Arbeit. Ich wollte heute mit einem eigenen Skript anfangen. Ich werde es gleich mal ausprobieren.👍

0 Kudos
PS
Beginner
Offline Online
Nachricht 39 von 49
397 Mal angesehen

@Gelöschter Nutzer 

 

Vielen Dank für das tolle Tool. Ich bin leider zu blöd das Programm zu starten.

 

Doppelklick funktioniert nicht, Vorläufe draufziehen funktioniert auch nicht. 

 

Was mache ich falsch?

 

Viele Grüße

PS

0 Kudos
peitzmann
Beginner
Offline Online
Nachricht 40 von 49
196 Mal angesehen

Hallo @gelöschter Nutzer,
Leider funktioniert bei mir dein bisher gelegentlich genutztes Script nicht mehr.
Ich erhalte immer die angehängte Fehlermeldung.
Kannst du helfen?
Gruß 

theo
Meister
Offline Online
Nachricht 41 von 49
188 Mal angesehen

Kopier das Skript nochmal aus dem Thread, speicher es als VBS-Datei u. schau, ob die Fehlermeldung dann auch kommt. 

in dubio pro theo
0 Kudos
einmalnoch
Experte
Offline Online
Nachricht 42 von 49
184 Mal angesehen

@peitzmann 

 

Als Erstes mal den Anhang löschen - Klarnamen sind nicht so gut.

 

Dann das ungültige Zeichen suchen, findet sich vermutlich im Pfadnamen (Umlaut).

 

Der Ersteller des Scripts wird sich hier vermutlich nicht mehr melden.

„Einen guten Ruf erwirbt man sich nicht mit Dingen, die man erst machen will.“ - Henry Ford
peitzmann
Beginner
Offline Online
Nachricht 43 von 49
183 Mal angesehen

Hallo theo,
das habe ich schon ausprobiert. Bringt leider auch nichts.
Gruß

peitzmann
Beginner
Offline Online
Nachricht 44 von 49
175 Mal angesehen

Danke, ich finde den Button dafür gerade nicht und habe es an die Moderation weiter gegeben. Danke für den Hinweis

theo
Meister
Offline Online
Nachricht 45 von 49
169 Mal angesehen

theo_0-1688383862598.png

Da ist er.

in dubio pro theo
peitzmann
Beginner
Offline Online
Nachricht 46 von 49
161 Mal angesehen

Danke!
Da war was mit Wald und Bäumen! 🙂

chrisocki
Meister
Offline Online
Nachricht 47 von 49
159 Mal angesehen

Hallo @peitzmann,

 

ich habe den Scriptinhalt soeben mal in eine neue Textdatei unter c:\temp\datevexport\vorlauf-trennen.vbs kopiert. 

 

Aufruf --> funktioniert

Textdatei aus dem Musterholz-Bestand --> funktioniert (auch wenn keine Trennung notwendig war.

 

Ich tippe, wie meine Vorschreiber, mal auf ein Problem im Dateipfad, insbesondere mit den Sonderzeichen. Die PC's sind nun mal aus dem angel-sächsischen und kennen keine Umlaute... 

 

 

Beste Grüße
Christian Ockenfels

0 Kudos
peitzmann
Beginner
Offline Online
Nachricht 48 von 49
150 Mal angesehen

Hallo Christian,
vielen Dank für deine Mühe. Bei mir klappt es leider auch ohne Sonderzeichen nicht.
Ich habe das Problem für dieses Mal anders gelöst, da ich nicht mehr viel Zeit zum "spielen" habe.
Danke für eure Hilfe!

0 Kudos
chrisocki
Meister
Offline Online
Nachricht 49 von 49
134 Mal angesehen

Ok,

 

bei passender Gelegenheit:

 

1. Funktioniert der Aufruf des Scriptes

2. Die zu trennende Datei liegt auch in einem Verzeichnis, welche nicht mit Sonderzeichen belegt ist?

 

Beste Grüße
Christian Ockenfels

0 Kudos
48
letzte Antwort am 03.07.2023 13:59:46 von chrisocki
Dieser Beitrag ist geschlossen
0 Personen hatten auch diese Frage