[GELÖST] Cursormanipulation per Basic
Moderator: Moderatoren
Re: Cursormanipulation per Basic
Lieber Stephan,
danke, dass du dir die Mühe machst und die Daten im "Temp"-Sheet ansiehst.
==== schon wieder ein langer Exkurs zur Situation =======
Die ständige Veränderung der Datenstruktur (durch den Hersteller des HV-Programms - nahezu bei jedem Update) verhindert ja, dass ich die Zerlegung direkt in das EinleseProgramm einbaue. Dort hatte ich es schon und bin schier an den permanenten Änderungen und damit neuen Fehlern verzweifelt. Zusätzlich gibt es auch noch immer wieder echte Fehler in den Daten (es werden manchmal Zeichen verschluckt, Datenspalten vertauscht etc.)
Da ich ein ganz kleines Licht in der Datenkette bin, habe ich auch nicht die Möglichkeit hier mehr Zuverlässigkeit zu verlangen.
Ich muß also das Programm um die Realität herumbauen.
Deshalb gehe ich den aufwendigen (Um)weg der Zwischenschritte:
1. suchen der einzulesenden Dateien mit FilePiker (speichern der URL in den ersten Datenblock in Sheet "Temp")
2. Einlesen der ausgewählten Dateien: (jeweils in einen nächsten Datenblock)
2.1 Übernahme der realen Zeilennummern (im LisDoc) - Eintragung in Spalte "A"
2.2 Übertragung der Rohdaten in Spalte "B"
3. erste BereinigungsStufe und Übertragung der Daten in Spalte "C"
jetzt kämen die (noch nicht neu programmierten) weiteren Auswertungen:
4. Prüfung der Daten auf Konsistenz (ggf. ERROR-Kennung in Spalte "D")
5. Zerlegung der Daten in eine (zur jew. Datei) passenden Datenbankstruktur - Eintragung in Spalten "E - "AN" (je nach Inhalt der Daten)
6. ... Weiterverarbeitung Stufe 2, Stufe 3, Stufe 4 .... (diese Stufen benötigt es, weil es in jedem ZwischenSchritt zu notwendigen Korrekturen kommen kann - und auch kommt)
Das ganze Paket habe ich 1997 in VBA geschrieben - und immer wieder korrigieren müssen (wg. der Änderungen der Struktur und zusätzlichen Auswertungsaufgaben). 2010 bin ich auf Linux umgestiegen und 2012 habe ich die alte Version (mit der Hand am Arm) in StarBasic übertragen.
Da jetzt eine weitere, erhebliche Erweiterung ansteht, habe ich mir vorgenommen, das gesamte Werk zu überarbeiten und (noch) flexibler zu gestalten. Und in diesem Zusammenhang bin auf das Problem gestoßen, wie ich jedesmal unterschiedlich große Datenblöcke lokalisieren und anschließend adressieren kann.
Und - natürlich kann man jetzt die gesamte Logik hinterfragen und an vielen Stellen anders vorgehen - ABER, das System hat ja (an fast allen Stellen) funktioniert und es ist wirklich komplex. und dafür fehlt mir (leider) auch die Zeit (und die Lust).
==== ENDE des Exkurses ======
Ich hab mir aufgrund deiner Tips noch einmal das Thema "strg+Pfeiltaste" vorgenommen und auch eine Lösung gefunden (siehe Anhang)
... bin aber gleich auf ein neues Problem bei der Verwendung von "isMissing" gestoßen:
Ich möchte meine Routinen so aufbauen, dass ich wahlweise eine BezugsZelle übergeben kann, oder - falls nicht - die "aktuelle Zelle" verwendet wird. Wenn ich das ÜbergabeArgument als "optional" deklariere verliert komischer Weise das übergebene Object seine Deklaration nach der Verwendung von "isMissing" (Vor "isMissing" ist das nicht so .... ). Bei jeder Verwendung von dem Object taucht die Fehlermeldung "BASIC-Laufzeitfehler. Variable nicht definiert" auf. Kennt jemand dieses Verhalten?
Ich habe mit der Verwendung von "TypName(<Object>) für mich einen Lösungsweg gefunden ... Vielleicht sollte ich/man dieses Problem aber in einen eigenen "Thema" beschreiben...
für mich sind meine Ausgangsfragen beantwortet und ich markiere das Thema als [gelöst].
nochmals herzlichen Dank
Gruß
StePfl
danke, dass du dir die Mühe machst und die Daten im "Temp"-Sheet ansiehst.
==== schon wieder ein langer Exkurs zur Situation =======
Die ständige Veränderung der Datenstruktur (durch den Hersteller des HV-Programms - nahezu bei jedem Update) verhindert ja, dass ich die Zerlegung direkt in das EinleseProgramm einbaue. Dort hatte ich es schon und bin schier an den permanenten Änderungen und damit neuen Fehlern verzweifelt. Zusätzlich gibt es auch noch immer wieder echte Fehler in den Daten (es werden manchmal Zeichen verschluckt, Datenspalten vertauscht etc.)
Da ich ein ganz kleines Licht in der Datenkette bin, habe ich auch nicht die Möglichkeit hier mehr Zuverlässigkeit zu verlangen.
Ich muß also das Programm um die Realität herumbauen.
Deshalb gehe ich den aufwendigen (Um)weg der Zwischenschritte:
1. suchen der einzulesenden Dateien mit FilePiker (speichern der URL in den ersten Datenblock in Sheet "Temp")
2. Einlesen der ausgewählten Dateien: (jeweils in einen nächsten Datenblock)
2.1 Übernahme der realen Zeilennummern (im LisDoc) - Eintragung in Spalte "A"
2.2 Übertragung der Rohdaten in Spalte "B"
3. erste BereinigungsStufe und Übertragung der Daten in Spalte "C"
jetzt kämen die (noch nicht neu programmierten) weiteren Auswertungen:
4. Prüfung der Daten auf Konsistenz (ggf. ERROR-Kennung in Spalte "D")
5. Zerlegung der Daten in eine (zur jew. Datei) passenden Datenbankstruktur - Eintragung in Spalten "E - "AN" (je nach Inhalt der Daten)
6. ... Weiterverarbeitung Stufe 2, Stufe 3, Stufe 4 .... (diese Stufen benötigt es, weil es in jedem ZwischenSchritt zu notwendigen Korrekturen kommen kann - und auch kommt)
Das ganze Paket habe ich 1997 in VBA geschrieben - und immer wieder korrigieren müssen (wg. der Änderungen der Struktur und zusätzlichen Auswertungsaufgaben). 2010 bin ich auf Linux umgestiegen und 2012 habe ich die alte Version (mit der Hand am Arm) in StarBasic übertragen.
Da jetzt eine weitere, erhebliche Erweiterung ansteht, habe ich mir vorgenommen, das gesamte Werk zu überarbeiten und (noch) flexibler zu gestalten. Und in diesem Zusammenhang bin auf das Problem gestoßen, wie ich jedesmal unterschiedlich große Datenblöcke lokalisieren und anschließend adressieren kann.
Und - natürlich kann man jetzt die gesamte Logik hinterfragen und an vielen Stellen anders vorgehen - ABER, das System hat ja (an fast allen Stellen) funktioniert und es ist wirklich komplex. und dafür fehlt mir (leider) auch die Zeit (und die Lust).
==== ENDE des Exkurses ======
Ich hab mir aufgrund deiner Tips noch einmal das Thema "strg+Pfeiltaste" vorgenommen und auch eine Lösung gefunden (siehe Anhang)
... bin aber gleich auf ein neues Problem bei der Verwendung von "isMissing" gestoßen:
Ich möchte meine Routinen so aufbauen, dass ich wahlweise eine BezugsZelle übergeben kann, oder - falls nicht - die "aktuelle Zelle" verwendet wird. Wenn ich das ÜbergabeArgument als "optional" deklariere verliert komischer Weise das übergebene Object seine Deklaration nach der Verwendung von "isMissing" (Vor "isMissing" ist das nicht so .... ). Bei jeder Verwendung von dem Object taucht die Fehlermeldung "BASIC-Laufzeitfehler. Variable nicht definiert" auf. Kennt jemand dieses Verhalten?
Ich habe mit der Verwendung von "TypName(<Object>) für mich einen Lösungsweg gefunden ... Vielleicht sollte ich/man dieses Problem aber in einen eigenen "Thema" beschreiben...
für mich sind meine Ausgangsfragen beantwortet und ich markiere das Thema als [gelöst].
nochmals herzlichen Dank
Gruß
StePfl
- Dateianhänge
-
- MakroTest-Demo.ods
- (11.75 KiB) 126-mal heruntergeladen
Re: [GELÖST] Cursormanipulation per Basic
Hallo,
ich häng' mich nun auch mal mit 'rein, auch wenn du den Thread schon auf gelöst gesetzt hast.
Das Hauptproblem scheint mir wirklich die Analyse der .lis Datei zu sein. Beim Durchforsten der Rohdaten scheint es mir so, als ob da (durch automatische Importmechanismen) bereits einiges an Informationen verloren gegangen ist.
Ich vermute mal, dass die "~C", "~E" etc. Tags für bestimmte Datentypen sind. Daher würde ich versuchen die lis-Datei anhand dieser Tags zu zerlegen. Hierzu wäre eine Originaldatei sinnvoll. Darin sind aber sicher sensible Daten, die anonymisiert werden müssen. Beim Bearbeiten der Datei kann es passieren, dass der Editor z. B. aus Tabulatoren mehrere Leerzeichen macht oder Zeilenumbrüche einfügt etc. die in der Originaldatei gar nicht da sind.
Kurz: wenn du uns so eine Datei zur Verfügung stellen könntest, wäre hier genug know-how verfügbar um das Problem zu lösen.
Zu deiner Anfangsfrage und (eigentlich nur) Detailproblem.
Wenn du den "Block" auswählen möchtest, in dem du dich gerade befindest (resp. eine Zelle, die dich gerade interessiert), dann reicht folgender Codeschnipsel.
ich häng' mich nun auch mal mit 'rein, auch wenn du den Thread schon auf gelöst gesetzt hast.
Das Hauptproblem scheint mir wirklich die Analyse der .lis Datei zu sein. Beim Durchforsten der Rohdaten scheint es mir so, als ob da (durch automatische Importmechanismen) bereits einiges an Informationen verloren gegangen ist.
Ich vermute mal, dass die "~C", "~E" etc. Tags für bestimmte Datentypen sind. Daher würde ich versuchen die lis-Datei anhand dieser Tags zu zerlegen. Hierzu wäre eine Originaldatei sinnvoll. Darin sind aber sicher sensible Daten, die anonymisiert werden müssen. Beim Bearbeiten der Datei kann es passieren, dass der Editor z. B. aus Tabulatoren mehrere Leerzeichen macht oder Zeilenumbrüche einfügt etc. die in der Originaldatei gar nicht da sind.
Kurz: wenn du uns so eine Datei zur Verfügung stellen könntest, wäre hier genug know-how verfügbar um das Problem zu lösen.
Zu deiner Anfangsfrage und (eigentlich nur) Detailproblem.
Wenn du den "Block" auswählen möchtest, in dem du dich gerade befindest (resp. eine Zelle, die dich gerade interessiert), dann reicht folgender Codeschnipsel.
Code: Alles auswählen
Sub block
oDoc = thisComponent
oCell = oDoc.CurrentSelection
blatt=ocell.rangeaddress.sheet
oCurs = odoc.sheets(blatt).createCursorByRange(oCell)
oCurs.collapseToCurrentRegion()
odoc.currentcontroller.select(ocurs)
End Sub
Gruß,
mikeleb
mikeleb
Re: [GELÖST] Cursormanipulation per Basic
Hallo,
Stephan hatte den Vorschlag mit "Input#-Anweisung" gemacht, was ja auch schon mein Gedanke war. Und als ich das hier las,
Und der weitere Vorschlag
Jedoch muss ich folgendes noch vorher dazu erklären, besonders für StePfl.
Da ich in meinem Code mit Dialog arbeite, werden die gefundenen Ergebnisse nicht in eine Zelle in einem Tabellenblatt eingetragen, sondern z.B. in ein Textfield im Dialog. Und deshalb darf man sich nicht wundern das so etwas z.B. da steht.
Okay, Stephan und einige andere aktive hier verstehn das eben gesagte, bseonders das wegen Dialog und Textfield, aber StePfl wird das wahrscheinlich Fremd vorkommen.
Es spielt aber überhaupt keine Rolle ob da jetzt 'oBestellNr.text = ....' steht, oder 'oSheet.getCellRangeByName("A1").string = ....', denn es ist das gleiche Verfahren, es wird an der definierten Stelle etwas eingetragen.
Um aber den Quelltext zu untersuchen greife ich auf einen "Befehl" aus der OO Internen Tool-Sammlung zu. Der da lautet: FindPartString
Und hier der Code.
Wie zu sehen ist, steht bei FindPartString einiges in doppelten Anführungszeichen, wie z.B. "artnr", und anderes habe ich mit CHR(xx) geschrieben. Die Gründe dafür sind recht einach.
1.)
Manchmal ist es einfacher CHR(34) zu schreiben, anstatt ein doppeltes Anführungszeichen zu maskieren, da dann mehrere hintereinander gesetzt werden müssten, also so z.B. """. Was manchmal verwirrend sein kann.
2.
Einige zu suchende Zeichen kann man mit der Methode "xx" nicht suchen, da sie von StarBasic z.B. als Steuerzeichen interpretiert werden, auch wenn sie in doppelten Anführungszeichen stehen. Aber auch Sonderzeichenkombinationen können StarBasic durcheinander bringen, so z.B. "><". Und deshalb ist es dann besser 'CHR(62) & CHR(60)' zu schreiben.
Und schon sind wir bei einem Punkt, der hier irgendwo mal angesprochen wurde, und zwar Steuerzeichen oder ähnliches die sich in der *.Lis befindet.
Bei der Untersuchung dieser *.Lis-Datei müssten dann nur die sogenannten Störenfriede ausgeklammert werden, oder mit einbezogen werden und zwar per CHR(xx). Und zum Thema Steuer- und Sonderzeichen verweise ich auf Pitonyak Kapitel "7.1. ASCII- und Unicode-Werte"
Ich will mal kurz ein bestimmtes Suchkriterium so einfach wie möglich erklären.
Der Teil mit FindPartString ist so schwer zu lesen, deshalb drösel ich das mal auf.
Genauer gesagt wird jetzt in EINER sLine alles gesucht was zwischen artnr"size= und /> steht. Wenn also die sLine wie folgt aussehen würde:
artnr"size=Ich-bin-sehr-groß/>
Dann würde FindPartString folgendes ausgeben:
Ich-bin-sehr-groß
Die Suchparameter artnr"size= und /> (oder meinetwegen "Satzbegrenzer") werden nicht ausgegeben.
Gruß
balu
Stephan hatte den Vorschlag mit "Input#-Anweisung" gemacht, was ja auch schon mein Gedanke war. Und als ich das hier las,
dachte ich ja auch schon das er mit "Input#-Anweisung" arbeitet. Doch wie in seinem Code zu sehen ist, ist dem leider nicht so.StePfl hat geschrieben: lese diese per "Input" ein
Und der weitere Vorschlag
war auch mein Reden. Aber um mal zu zeigen, anstatt nur immer zu reden, poste ich gleich mal einen Codeausschnitt der einen HTML-Quelltext zeilenweise untersucht und nur geforderte und gefundene Suchkriterien rausfiltert und übernimmt.Stephan hat geschrieben:... sondern die ursprüngliche Textdatei per Basic zeilenweise einlesen und bearbeiten (und das Bearbeitungsergebnis dann ggf. in eine Calc-Tabelle eintragen).
Jedoch muss ich folgendes noch vorher dazu erklären, besonders für StePfl.
Da ich in meinem Code mit Dialog arbeite, werden die gefundenen Ergebnisse nicht in eine Zelle in einem Tabellenblatt eingetragen, sondern z.B. in ein Textfield im Dialog. Und deshalb darf man sich nicht wundern das so etwas z.B. da steht.
Code: Alles auswählen
oBestellNr.text = Right(sReps1, 9)
Es spielt aber überhaupt keine Rolle ob da jetzt 'oBestellNr.text = ....' steht, oder 'oSheet.getCellRangeByName("A1").string = ....', denn es ist das gleiche Verfahren, es wird an der definierten Stelle etwas eingetragen.
Um aber den Quelltext zu untersuchen greife ich auf einen "Befehl" aus der OO Internen Tool-Sammlung zu. Der da lautet: FindPartString
Und hier der Code.
Code: Alles auswählen
Open sFile For Input As iNumber
While not eof(iNumber)
Line Input #iNumber, sLine
sBestellnummer = FindPartString(sLine, "artnr" & CHR(34) & " size=", "/>", 1)
sVersandgewicht = FindPartString(sLine, "versandgewicht" & CHR(34) & " size=", "/>", 1)
sPreisBrutto = FindPartString(sLine, "preisb" & CHR(34) & " size=", "/>", 1)
sProduktName = FindPartString(sLine, "foto.gif" & CHR(34) & " alt=", " style", 1)
sUmschalter1 = FindPartString(sLine, "_werkzeugselect(this.form,", "option" & CHR(62) & CHR(60) &"/select", 1)
If sLine<>"" then
if sUmschalter1="" then
if sLine<>"" AND sBestellnummer<>"" then
sReps1 = Replace(sBestellnummer, CHR(34), "")
oBestellNr.text = Right(sReps1, 9)'<--bei treffer übernehmen'
END IF
if sLine<>"" AND sVersandgewicht<>"" then
sReps2 = Replace(sVersandgewicht, CHR(34), "")
sGewichtX0 = RTrim(Replace(Right(sReps2, 8), "=", ""))
oGewicht.Text = Replace(sGewichtX0, "kg", "")'<--bei treffer übernehmen'
END IF
if sLine<>"" AND sPreisBrutto<>"" then
io = 0 : ilvh = 0 : izvh = 0
for iq = len(sPreisBrutto) to 1 step -1
if Mid(sPreisBrutto, iq, 1) = CHR(34) then
io = io +1
if io = 2 then
izvh = iq' <--bei treffer übernehmen'
goto finisch
else
ilvh = iq
end if
end if
next iq
finisch:
oPreis.text = mid(sPreisBrutto, izvh +1, ilvh -izvh -1)' <--bei treffer übernehmen'
END IF
if sLine<>"" AND sProduktName<>"" then
oTitelS4.text = UCase(Replace(sProduktName, CHR(34), ""))'<--bei treffer übernehmen'
iEinzelArtikel = 0'<--bei treffer übernehmen'
end if
END IF
end if
wend
Close #iNumber
1.)
Manchmal ist es einfacher CHR(34) zu schreiben, anstatt ein doppeltes Anführungszeichen zu maskieren, da dann mehrere hintereinander gesetzt werden müssten, also so z.B. """. Was manchmal verwirrend sein kann.
2.
Einige zu suchende Zeichen kann man mit der Methode "xx" nicht suchen, da sie von StarBasic z.B. als Steuerzeichen interpretiert werden, auch wenn sie in doppelten Anführungszeichen stehen. Aber auch Sonderzeichenkombinationen können StarBasic durcheinander bringen, so z.B. "><". Und deshalb ist es dann besser 'CHR(62) & CHR(60)' zu schreiben.
Und schon sind wir bei einem Punkt, der hier irgendwo mal angesprochen wurde, und zwar Steuerzeichen oder ähnliches die sich in der *.Lis befindet.
Bei der Untersuchung dieser *.Lis-Datei müssten dann nur die sogenannten Störenfriede ausgeklammert werden, oder mit einbezogen werden und zwar per CHR(xx). Und zum Thema Steuer- und Sonderzeichen verweise ich auf Pitonyak Kapitel "7.1. ASCII- und Unicode-Werte"
Ich will mal kurz ein bestimmtes Suchkriterium so einfach wie möglich erklären.
Code: Alles auswählen
sBestellnummer = FindPartString(sLine, "artnr" & CHR(34) & " size=", "/>", 1)
Code: Alles auswählen
sLine, artnr"size=, />
artnr"size=Ich-bin-sehr-groß/>
Dann würde FindPartString folgendes ausgeben:
Ich-bin-sehr-groß
Die Suchparameter artnr"size= und /> (oder meinetwegen "Satzbegrenzer") werden nicht ausgegeben.
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden
Re: [GELÖST] Cursormanipulation per Basic
Hallo zusammen,
@mikeleb:
danke fü deinen "CodeSchnipsel" - so ähnlich habe ich es auch gelöst (siehe mein letztes "MakroTest-Demo.ods")
Ich habe nur ein Verständnisproblem mit dem Verhalten bei "isMissing"
Die "~" folgenden Zeichen sollen angeblich Druckersteuerzeichen sein - die LisDateien sind Datenausdruck, die in eine Datei umgeleitet wurden.
Es gibt in LIS keine Tabulatoren sondern nur Leerzeichen.
@Balu:
Input# hatte ich ursprünglich verwendet. StarBasic erwartet dabei leider als Zeichensatz Unicode- die Date ist aber DOS-850
Das lässt sich aber ziemlch elegant SO lösen: (Quelle: viewtopic.php?t=63442#p242227)
FindPartString kannte ich bisher noch nicht - DANKE für das Beispiel und die Erläuterungen dazu.
Das werde ich mir noch genauer ansehen.
Noch einen schönen Sonntag,
Gruß
StePfl
@mikeleb:
danke fü deinen "CodeSchnipsel" - so ähnlich habe ich es auch gelöst (siehe mein letztes "MakroTest-Demo.ods")
Ich habe nur ein Verständnisproblem mit dem Verhalten bei "isMissing"
Die "~" folgenden Zeichen sollen angeblich Druckersteuerzeichen sein - die LisDateien sind Datenausdruck, die in eine Datei umgeleitet wurden.
Es gibt in LIS keine Tabulatoren sondern nur Leerzeichen.
@Balu:
Input# hatte ich ursprünglich verwendet. StarBasic erwartet dabei leider als Zeichensatz Unicode- die Date ist aber DOS-850
Das lässt sich aber ziemlch elegant SO lösen: (Quelle: viewtopic.php?t=63442#p242227)
Code: Alles auswählen
oUcB = createUnoService("com.sun.star.ucb.SimpleFileAccess") ' File Object generieren
oInputStream = createUnoService("com.sun.star.io.TextInputStream") ' den Stream öffnen
' oDatei = oUcb.OpenFileReadWrite(sURL)
oDatei = oUcb.OpenFileRead(sURL) ' und für das Lesen öffnen
' oInputStream.setEncoding( "IBMPC_850" ) ' Beispiele für andere Zeichensätze
' oInputStream.setEncoding( "ISO-8859-1" ) ' Beispiele für andere Zeichensätze
oInputStream.setEncoding( "CP850" ) ' die scheint die richtige CodeTabelle fü die LIS-Dateien zu sein
'=== die Datei für den InputStream öffnen
oInputStream.SetInputStream(oDatei)
Das werde ich mir noch genauer ansehen.
Noch einen schönen Sonntag,
Gruß
StePfl
Re: [GELÖST] Cursormanipulation per Basic
Hallo,
ismissing() funktioniert korrekt. Der Fehler war die zusätzliche Dim-Anweisung für oCell.
So läuft die function mit und ohne Parameter:
ismissing() funktioniert korrekt. Der Fehler war die zusätzliche Dim-Anweisung für oCell.
So läuft die function mit und ohne Parameter:
Code: Alles auswählen
function locStrgRight(optional byval oCell as object) as object
dim oDoc as object, oSheet as object, oRange as object, oCurs as object
dim hlp as Variant
if isMissing(oCell) then
oDoc = thisComponent
oSheet=oDoc.CurrentController.ActiveSheet
oCell = oDoc.CurrentSelection
else
oSheet = oCell.getSpreadSheet
endif
oCurs = oSheet.createCursorByRange(oCell)
oCurs.collapseToCurrentRegion() ' Ausweiten des "oCurs" auf den gesamten DatenBlock, in dem "oCell" liegt.
' der ganz rechte ZellBereich ist die gesuchte Position
locStrgRight = oSheet.getCellRangeByPosition(oCurs.RangeAddress.EndColumn,oCell.RangeAddress.StartRow,oCurs.RangeAddress.EndColumn,oCell.RangeAddress.EndRow)
hlp = locStrgRight.AbsoluteName 'Kontrolle
msgbox hlp
end function
Gruß,
mikeleb
mikeleb
Re: [GELÖST] Cursormanipulation per Basic
Hallo Mikeleb,
Warum ich dieseDim-Anweisung eingeführt hatte, weiß ich nicht mehr genau. Ich vermute, dass ich eine Fehlermeldung "Variable nicht definiert" fälschlicher Weise "oCell" zugeordnet hatte. In sofern hat Balu Recht mit seinen Forderungen: Wenn man weiß (sich sauber/detailliert informiert), was man tut und dies auch ordentlich/sauber ausführt (und dokumentiert), ist das Sehr von Vorteil
Mich überrascht, dass die Dim-Anweisung innerhalb des "if isMissing"-Bereichs auch wirkt, obwohl dieser gar nicht ausgeführt (übersprungen) wird...
da hab ich wieder etwas dazugelernt ...
SO - mit "isMissing" - gefällt mir die Routine deutlich besser ...
Nochmal Danke und Gruß,
StePfl
Warum ich dieseDim-Anweisung eingeführt hatte, weiß ich nicht mehr genau. Ich vermute, dass ich eine Fehlermeldung "Variable nicht definiert" fälschlicher Weise "oCell" zugeordnet hatte. In sofern hat Balu Recht mit seinen Forderungen: Wenn man weiß (sich sauber/detailliert informiert), was man tut und dies auch ordentlich/sauber ausführt (und dokumentiert), ist das Sehr von Vorteil
Mich überrascht, dass die Dim-Anweisung innerhalb des "if isMissing"-Bereichs auch wirkt, obwohl dieser gar nicht ausgeführt (übersprungen) wird...
da hab ich wieder etwas dazugelernt ...
SO - mit "isMissing" - gefällt mir die Routine deutlich besser ...
Nochmal Danke und Gruß,
StePfl
Re: [GELÖST] Cursormanipulation per Basic
Hallo,
vielleicht habe ich es nur überlesen: Welches Programm liefert dir eigentlich diese .lis-Dateien?
Ist es richtig, dass diese Dateien die Informationen per Zeichenzahl gruppieren, also eine Buchungszeile (außen den Steuerzeichen ~C ~E usw.)
- ab dem 9. Zeichen das Konto
- ab dem 23. Zeichen das Gegenkonto
- ab/bis dem 42. Zeichen BS
- ab dem 44. Zeichen oder bis zum 45. Zeichen BA
- ab dem 47. Zeichen den MwSt.-Satz
- ab dem 53. Zeichen das We-Dat (6-stellig)
- ab dem 62. Zeichen den Beleg
- ab dem 73. Zeichen den Buchungstext
- bis zum 115. Zeichen den Soll-Betrag ("bis" da rechtbündig)
- bis zum 132. Zeichen den Haben-Betrag
enthält?
vielleicht habe ich es nur überlesen: Welches Programm liefert dir eigentlich diese .lis-Dateien?
Ist es richtig, dass diese Dateien die Informationen per Zeichenzahl gruppieren, also eine Buchungszeile (außen den Steuerzeichen ~C ~E usw.)
- ab dem 9. Zeichen das Konto
- ab dem 23. Zeichen das Gegenkonto
- ab/bis dem 42. Zeichen BS
- ab dem 44. Zeichen oder bis zum 45. Zeichen BA
- ab dem 47. Zeichen den MwSt.-Satz
- ab dem 53. Zeichen das We-Dat (6-stellig)
- ab dem 62. Zeichen den Beleg
- ab dem 73. Zeichen den Buchungstext
- bis zum 115. Zeichen den Soll-Betrag ("bis" da rechtbündig)
- bis zum 132. Zeichen den Haben-Betrag
enthält?
Gruß,
mikeleb
mikeleb
Re: [GELÖST] Cursormanipulation per Basic
Oh man ohhh, StePfl!
Ich hatte dich darauf angesprochen ob die ganzen hlpx vom Typ Variant sein sollen oder was?
Und was machst Du?
Du deklarierst sie alle ausführlich als Variant.
Das ist, um sehr deutlich zu sein, so ein absoluter Schwachsinn. Aber nicht nur das! Du deklarierst mehr als Du wirklich anwendest. Die deklaration geht von hlp bis hlp5, und das macht insgesamt 6 mal 'hlp'.
Anwenden tust Du aber nur hlp und hlp2.
Was soll das?
Du bist doch kein Eichhörnchen! Besser gesagt, StarBasic ist kein Eichhörnchen.
Wenn sie wirklich vom Typ Variant sein sollen, dann brauchst Du das nicht extra zu schreiben, denn das macht StarBasic automatisch von alleine.
Das ist aber nicht das einzige was mich da so aufregt. Da gibt es noch etwas was auch mit dem hlp zu tun hat.
Was für einen Sinn soll das ergeben, eine Variable vom Typ Object in eine Variable vom Typ Variant reinzupacken?
Das war noch immer nicht die Spitze des Eisberges. Denn die kommt jetzt.
Da wird ein und dieselbe Variable mit drei unterschiedlichen Dingen (oder wie auch immer) gefüttert.
Hier bekommt hlp den String von oDoc.Title zugewiesen.
Und hier bekommt hlp den String von oSheet.absoluteName zugewiesen.
usw.
etc. ....
Und spätestens hier muss ich mal ernsthaft nachfragen. Für was steht hlp und Verwante?
Ich sehe nirgends in deinen Dateien das hlp ein Ausgabefenster oder ähnliches ist. Du Komentierst aber das etwas angezeigt werden soll.
Und wo bitte schön wird das angezeigt?
Aber warum hlp als Variant deklarieren, wenn doch wie zu sehen hlp einen String aufnehmen soll?
Also müsste die deklaration theoretisch beispielsweise wie folgt aussehen
Und ganz ehrlich gesagt, wenn man alles sauber programmiert und alles Stück für Stück sauber aufbaut, dann kann man sehr gut auf option explicit verzichten.
Hab keinen Bock mehr, zumal ich deine Datei von gestern ja nicht mal ausführen kann.
Gruß
balu
Ich hatte dich darauf angesprochen ob die ganzen hlpx vom Typ Variant sein sollen oder was?
Und was machst Du?
Du deklarierst sie alle ausführlich als Variant.
Code: Alles auswählen
function locStrgRight(optional byval oCell as object) as object
dim oDoc as object, oSheet as object, oRange as object, oCurs as object
dim hlp as Variant, hlp1 as Variant, hlp2 as Variant, hlp3 as Variant, hlp4 as Variant, hlp5 as Variant
Anwenden tust Du aber nur hlp und hlp2.
Was soll das?
Du bist doch kein Eichhörnchen! Besser gesagt, StarBasic ist kein Eichhörnchen.
Wenn sie wirklich vom Typ Variant sein sollen, dann brauchst Du das nicht extra zu schreiben, denn das macht StarBasic automatisch von alleine.
Das ist aber nicht das einzige was mich da so aufregt. Da gibt es noch etwas was auch mit dem hlp zu tun hat.
Was für einen Sinn soll das ergeben, eine Variable vom Typ Object in eine Variable vom Typ Variant reinzupacken?
Code: Alles auswählen
hlp2 = oCell
hlp = TypeName(oCell)
hlp = TypeName(hlp2)
Code: Alles auswählen
if hlp = "Error" then
oDoc = thisComponent
hlp = oDoc.Title ' Ergebnis anzeigen'
oSheet=oDoc.CurrentController.ActiveSheet
hlp = oSheet.absoluteName ' Ergebnis anzeigen'
oCell = oDoc.CurrentSelection
hlp = oCell.absoluteName ' Ergebnis anzeigen'
elseif hlp <> "Object" then
' hier fehlt noch eine FehlerAbfangRoutine'
else
oSheet = oCell.getSpreadSheet
hlp = oSheet.absoluteName ' Ergebnis anzeigen'
endif
Code: Alles auswählen
hlp = oDoc.Title ' Ergebnis anzeigen'
Code: Alles auswählen
hlp = oSheet.absoluteName ' Ergebnis anzeigen'
usw.
etc. ....
Und spätestens hier muss ich mal ernsthaft nachfragen. Für was steht hlp und Verwante?
Ich sehe nirgends in deinen Dateien das hlp ein Ausgabefenster oder ähnliches ist. Du Komentierst aber das etwas angezeigt werden soll.
Code: Alles auswählen
hlp = oDoc.Title ' Ergebnis anzeigen
Aber warum hlp als Variant deklarieren, wenn doch wie zu sehen hlp einen String aufnehmen soll?
Also müsste die deklaration theoretisch beispielsweise wie folgt aussehen
Code: Alles auswählen
function locStrgRight(optional byval oCell as object) as object
dim oDoc as object, oSheet as object, oRange as object, oCurs as object
dim hlp as String, hlp2 as Variant
Und ganz ehrlich gesagt, wenn man alles sauber programmiert und alles Stück für Stück sauber aufbaut, dann kann man sehr gut auf option explicit verzichten.
Hab keinen Bock mehr, zumal ich deine Datei von gestern ja nicht mal ausführen kann.
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden
Re: [GELÖST] Cursormanipulation per Basic
Es handelt sich um Ausgaben eines Hausverwaltungsprogramm (Nemetschek: Buchungsjournal, SummenSaldenListe, KontenListen) (für mehrere Anwesen, über mehrere Abrechnungszeiträume). Die beauftragte Hausverwaltung führt die Buchhaltung; ich "darf" für die Eigentümergemeinschaften zusätzlich Auswertungen/Berichte durchführen (z.B. Kostenzuordnungen der einzelnen Einnahmen/Ausgaben zu den Eigentümern) - Auswertungen, die in dem GrundProgramm nicht möglich sind. Außerdem soll es eine Rückwärtskontrolle zu den Buchungen liefern.mikeleb hat geschrieben:Hallo,
vielleicht habe ich es nur überlesen: Welches Programm liefert dir eigentlich diese .lis-Dateien?
Ist es richtig, dass diese Dateien die Informationen per Zeichenzahl gruppieren, also eine Buchungszeile (außen den Steuerzeichen ~C ~E usw.)
- ab dem 9. Zeichen das Konto
- ab dem 23. Zeichen das Gegenkonto ...
Nemetschek liefert regelmäßig WartungsUpdates, in denen leider häufig auch die Druckmasken verändert werden - was meine Nachbearbeitung erheblich erschwert. (neue Spaltenbezeichnungen, Austausch der Spalten, Verschiebungen der Kopfdaten zu den Spaltenwerten, veränderte Zahlenformaten uvm.) Es gäbe zwar auch einen "CSV-Export" - nur liefert der nachweißlich SO falsche Daten, dass damit nicht zu arbeiten ist.
@Balu:
die diversen hlp-Variablen dienen mir hauptsächlich dazu, im im Einzelschrittmodus im Beobachtungsfenster die jeweiligen Werte ansehen zu können, oder um einzelne Berechnungen so zu zerlegen, dass ich die einzelnen Parameter nachvollziehen kann.
Stimmt - ich habe die DimZeilen einfach als Grundsammlung von Variablen nur kopiert und - wenn alles läuft - dann werden die nicht benutzen Variablen wieder gelöscht. Bis jetzt bin ich aber noch nicht so weit.
Grundsätzlich: ich bin sicherlich kein so guter Programmierer wie du und sicherlich bei weitem nicht so methodisch und ...
Leider bekomme ich aber von dir fast nur Rückmeldungen, wie unmöglich/unlogisch/unsauber meine Programme sind. Das mag aus deiner (und vll auch der Anderen) so sein. Für mich geht es aber primär darum, meine Aufgabe damit zu erledigen ... Dafür hatte ich hier meine Frage gestellt - und inzwischen auch (m)eine Lösung gefunden..
Vielleicht ist es wirklich besser, wenn wir diesen Diskurs beenden - deine Botschaft ist angekommen - ich mache DAS daraus, was mir möglich ist... Ich habe ehrlich gesagt auch keine Lust mehr, mich ständig so zurechtweisen zu lassen - selbst wenn deine Anregungen an vielen Stellen berechtig sind.
Gruß StePfl
Re: [GELÖST] Cursormanipulation per Basic
Hallo StePfl,
Die richtgig guten sind z.B. Stephan und Karolus.
Aber Methode kann man lernen, auch wenn es anfangs etwas dauert und disziplin fordert.
Ich meinerseits hätte ja schon interessa daran gehabt die .lis zu knacken, da sie aber nicht separat kam, hatte ich zumindest versucht Fehler oder dergleichen aufzuzeigen und anzusprechen um so die Zeit "einigermaßen" auszunutzen bis das sie vielleicht doch noch kommt.
Gruß
balu
Ja okay. Jetzt habe ich es auch kapiert.die diversen hlp-Variablen dienen mir hauptsächlich dazu, im im Einzelschrittmodus im Beobachtungsfenster die jeweiligen Werte ansehen zu können
Ich und guter Programmierer? Da muss ich lachen.ich bin sicherlich kein so guter Programmierer wie du und sicherlich bei weitem nicht so methodisch und ...
Die richtgig guten sind z.B. Stephan und Karolus.
Aber Methode kann man lernen, auch wenn es anfangs etwas dauert und disziplin fordert.
Stimmt wohl, aber auch scheinbar "unwichtige" Fehler oder Probleme können sich an anderer Stelle negativ bemerkbar machen und sehr oft dort wo man nicht mit rechnet. Und davon kann ich so manches Lied singen. Und ohne die Hilfe des Forums wäre ich nie und nimmer von alleine darauf gekommen. Nur weil ich relativ viele Beiträge geschrieben habe, heißt das nicht das ich alles kann.Leider bekomme ich aber von dir fast nur Rückmeldungen, wie unmöglich/unlogisch/unsauber meine Programme sind.
Ich meinerseits hätte ja schon interessa daran gehabt die .lis zu knacken, da sie aber nicht separat kam, hatte ich zumindest versucht Fehler oder dergleichen aufzuzeigen und anzusprechen um so die Zeit "einigermaßen" auszunutzen bis das sie vielleicht doch noch kommt.
Freut mich zu hören. DankeÜbrigens: ich habe schon einige deiner Beiträge sehr geschätz und daran viel gelernt - Danke dafür
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden
Re: [GELÖST] Cursormanipulation per Basic
Deine Verteidigung ist ganz unnötig, denn ich habe überhaupt nichts an Deiner Programmierlösung im Grundsätzlichen zu kritisieren.==== schon wieder ein langer Exkurs zur Situation ======= [...]
Da ich beruflich den überwiegenden Teil meines Geldes damit verdiene VBA nach StarBasic umzuschreiben, ist mein allgemeiner Rat:
ja, auch ich würde einen bewährten VBA-Code nicht grundlos ändern (insofern handelst Du völlig richtig) manchmal aber kommt man schneller zum Ziel wenn man VBA Code nicht 1:1 nach StarBasic umschreibt sondern eher nur 'sinngemäß', weil bestimmte Dinge in VBA und StarBasic zwar prinzipiell gleich zu lösen sind, aber das häufig nicht der optimale Weg ist, weil die Erfahrung lehrt das bestimmte WEge zu bevorzugen sind (ich nannte das an anderer Stelle 'best practice' und die können im Detail in VBA und StarBasic unterschiedlich sein.
Bitte versuche doch aber zielgerichtet zu diskutieren, denn sonst kommen wir nicht voran.
Das ich überhaupt einen neuen Weg vorgeschlagen hatte hatte z.B. maßgeblich den Grund das mir nicht klar ist warum manche Daten in der geposteten Beispieltabelle 'anders' strukturiert sind als Andere. Da die Ausgangsdaten per Programm erzeugt werden ist nämlich sowas wie ich es bezüglich der Zellen B46 bis B52 beschrieben hatte ganz untypisch, denn ein Programm wir solche Ausgaben per Schleife machen, also immer denselben Code durchlaufen, und im Ergebnis ist dann entweder alles 'falsch' oder alles 'richtig'.
Versuche auch die 'Grenzen' eines Forums zu sehen, denn eine Frage wie:
ist zwar natürlich nicht falsch, motiviert doch aber niemand zum antworten weil jeder sieht das ist quasi 'klassisches' Debugging, ist Arbeit die Du selbst tun musst, weil Du sie besser tun kannst als wir, denn Du kennst Dein Programm, bist eingearbeitet. Ja, Debugging ist langweilig, aber das ist es auch für uns.... bin aber gleich auf ein neues Problem bei der Verwendung von "isMissing" gestoßen:
Ich möchte meine Routinen so aufbauen, dass ich wahlweise eine BezugsZelle übergeben kann, oder - falls nicht - die "aktuelle Zelle" verwendet wird. Wenn ich das ÜbergabeArgument als "optional" deklariere verliert komischer Weise das übergebene Object seine Deklaration nach der Verwendung von "isMissing" (Vor "isMissing" ist das nicht so .... ). Bei jeder Verwendung von dem Object taucht die Fehlermeldung "BASIC-Laufzeitfehler. Variable nicht definiert" auf. Kennt jemand dieses Verhalten?
Eine Frage wie "Kennt jemand dieses Verhalten?" ist dann prima wenn Du wirklich nur die Antwort von demjenigen erwartest der genau das gleiche Problem hatte, nicht jedoch solltest Du systematische Antworten erwarten.
Ich habe jetzt mal den Code debugt und komme darauf das es hilft an den Anfang der Funktion "locStrgRigth" zu schreiben:
Code: Alles auswählen
k = oCell
Gruß
Stephan
Re: [GELÖST] Cursormanipulation per Basic
Nein - sie kommt nicht mehr: EINE Lis zu knacken ist einfach .... VIELE (unterschiedliche) Lis deutlich schwieriger.Balu hat geschrieben: Ich meinerseits hätte ja schon interessa daran gehabt die .lis zu knacken .... bis das sie vielleicht doch noch kommt.
War keine Verteidigung, sondern der Hinweis auf "viel Text". Das mag ich (beim Querlesen) oft selber nicht - dafür der Hinweis.Stephan hat geschrieben:Deine Verteidigung ist ganz unnötig, ....
STIMMT - diesen Ansatz hatte ich auch (eher zufällig) gefunden (siehe in "locStrgRight": "hlp2 = oCell" : Anhang in Post viewtopic.php?f=18&t=67253&start=45#p264281)Stephan hat geschrieben:und k in Folge statt oCell zu benutzen. Das ist aber eine Lösung auf die Du selbst auch gekommen wärst (und zwart mutmaßlich schneller als ich) ... jedoch keine LÖsung die Klarheit über die eigentliche Ursache des Problems gibt, ich weiß also weiterhin auch nicht zu sagen was da schiefläuft bzw. lief.Code: Alles auswählen
k = oCell
"Mikeleb" hat mich durch seinen Hinweis auf eine Idee der vermutlichen Ursache gebracht, die ich durch folgenden Code versucht habe nachzubilden:
Code: Alles auswählen
Sub TestDim(optional hlp1)
dim hlp, hlp2
hlp = 5
hlp1 = 6
if hlp > 5 then
redim hlp1
endif
hlp2 = hlp1 ' nach "Beobachter" erhält "hlp2" den Wert von "hlp1"
if hlp > 5 then
dim Hlp1
endif
hlp2 = hlp1 ' Fehlermeldung: "Variable nicht definiert"
end sub
Das Problem ist, dass scheinbar eine "Dim-Anweisung" auch dann ausgeführt wird, wenn sie innerhalb eines "if-Bereichs" steht, der aufgrund der Bedingung nicht ausgeführt wird. Eine "redim-Anweisung" dagegen hat keine Auswirkung. Vielleicht ist das für Andere hilfreich.
Genau auf diese Weise bin ich vorgegangen: ich hatte den "Lösungsweg" im Rahmen meines vorhandenen Wissens in StarBasic neu geschrieben - und das selbe tue ich gerade auch wieder .... sozusagen jeweils ein Upgrade.Stephan hat geschrieben:auch ich würde einen bewährten VBA-Code nicht grundlos ändern ...aber kommt man schneller zum Ziel wenn man VBA Code nicht 1:1 nach StarBasic umschreibt sondern eher nur 'sinngemäß'...
Sorry, du kennst vmtl. die "doppelte Buchhaltung" nicht - B46 beschreibt den Vorgang im buchhalterischen HabenKto, B47..B52 die Gegenbuchungen im SollKonto. Nach jeder "Buchungszeile" müssen die "Soll-" und "Haben"Seite ausgeglichen sein. Probleme macht aber z.B. dass in der "BS-Spalte" mal eine Zahl steht, dann wieder Text und dann wiederum überhaupt nichts (nur Leerzeichen).Da die Ausgangsdaten per Programm erzeugt werden ist nämlich sowas wie ich es bezüglich der Zellen B46 bis B52 beschrieben hatte ganz untypisch...
ABER - auch Das habe ich inzwischen ganz gut im Griff.
Gruß
StePfl
Re: [GELÖST] Cursormanipulation per Basic
Das ist aber nicht das was ich meinte, sondern ich meinte das Du inhaltlich schriebst, also im Wesentlichen das Du Dein VBA Programm für bewährt hälst, es deshalb nur auf StarBasic übersetzen willst und Du eigentlich keine neuen Lösungsweg beschreiten.War keine Verteidigung, sondern der Hinweis auf "viel Text".
Das halte ich nämlich selbst für hoch vernünftig, weshalb Du es nicht vor mir verteidigen musst.
Mein Vorschlag eines anderen LÖsungswegs verstand sich deshalb gerade nicht als bessere Alternative, sondern nur als Alternative weil Deine Rohdaten für mich Unklarheiten enthalten.
Doch, ich bin studierter Chemiker und Betriebswirt, allerdings erklärt die doppelte Buchführung nicht die unterschiedlichen Einträge von B46 und B47 ff. was ich eigentlich glaubte verständlich erklärt zu haben.Sorry, du kennst vmtl. die "doppelte Buchhaltung" nicht - B46 beschreibt den Vorgang im buchhalterischen HabenKto, B47..B52 die Gegenbuchungen im SollKonto.
Die Einträge sehen nämlich so aus (gekürzte Darstellung):
Code: Alles auswählen
~C 2798 1 50 04.01.01 1
~C 6151 1 50 19.00 04.01.01 1
und die Frage dabei ist (vereinfacht gesagt):
Warum stehen 2798 und 6151 nicht genau übereinander?
Das kann nämlich nur eine Ungenauigkeit des Programms sein (ich nannte das "Schreibfehler") oder Ausdruck davon das die Datenfelder im Datensatz ganz anders abgegrenzt sind als es die rein menschliche Intuition auf den ersten Blick nahelegt.
_z.B._ weiß ich auch nicht ob diese Zahlen IMMER 4-stellig sein werden, obwohl das in den Beispielwerte so ist kann es in anderen Daten anders sein ... und so gibt es noch einige Möglichkeiten die einfach kurz geklärt werden müssen ehe man zum Programmieren schreitet.
Ja, eben und das mach deshalb Schwierigkeiten weil die Art wie die Datenfelder in einem Datensatz getrennt sind nicht klar benannt ist. Das ist keine große Sache muss aber der Klarheit wegen getan werden, denn z.B. die Logik/Kodierung nach der ich in obigen Beispielwerten die 2798 und die 6151 abtrennen muss kann ziemlich verschieden sein, beispielweise:Probleme macht aber z.B. dass in der "BS-Spalte" mal eine Zahl steht, dann wieder Text und dann wiederum überhaupt nichts (nur Leerzeichen).
-nimm das 11. bis 14. Zeichen
-nimm die erste vierstellige Zahl nach "~C"
-nimm die ersten vier Zeichen nach dem 8. Leerzeichen
usw.
Gruß
Stephan
Re: [GELÖST] Cursormanipulation per Basic
Hallo Stephan,
Schau mal in "B23", da steht (Spaltenzuordnung- auch gekürzte Darstellung):
und dann in "B46ff" (WerteZeilen - gekürzte Darstellung)
die Spalten(Datenfelder) haben ihre Überschriften. und es werden die FiBu-Konten-Nummern für "Soll" und "Haben in getrennten Spalten aufgeführt... analog zu den Spalten "Soll" und "Haben"
Wie du richtig beschrieben hast, ist es (immer wieder) schwierig, die Einträge SAUBER den Datenfeldern zuzuordnen. Noch dazu, da sich dieses Bild bei jeden SW-Update nicht/wenig/grundsätzlich ändert. Ich versuche mich gerade daran eine (Teil-)Automatik für die Erkennungslogik zu gestalten, denn die Aufgabe der SW-Erweiterung ist nun, diese Auswertungen z.B. über die monatlichen Dateien von 5 Jahren durchzuführen (mit all den immer wieder auftauchenden Strukturänderungen).
(Manchmal werden auch zufällig immer wieder mal Leerzeichen verschluckt oder zusätzlich eingefügt.
Erklären kann mir das keiner (von wegen: SW sollte doch konsistente Ergebnisse liefern)
Aus diesem Grund funktioniert dein Vorschlag ...
(SO hatte ich es früher programmiert und nach der x-ten Änderung aufgegeben.)
DAMIT habe ich mich schon viel beschäftigt und meine(hoffe - bin zuversichtlich) das in der aktuellen Version realisieren zu können.
Gruß Stefan
PS: war dir das Verhalten der DIM-Anweisung in dieser Form bekannt? mir nicht! ... man lernt nie aus !
Schau mal in "B23", da steht (Spaltenzuordnung- auch gekürzte Darstellung):
Code: Alles auswählen
Konto Gegenkonto BS BA Mwst%% We-Dat Beleg ...
Code: Alles auswählen
~C 2798 1 50 04.01.01 1
~C 6151 1 50 19.00 04.01.01 1
Wie du richtig beschrieben hast, ist es (immer wieder) schwierig, die Einträge SAUBER den Datenfeldern zuzuordnen. Noch dazu, da sich dieses Bild bei jeden SW-Update nicht/wenig/grundsätzlich ändert. Ich versuche mich gerade daran eine (Teil-)Automatik für die Erkennungslogik zu gestalten, denn die Aufgabe der SW-Erweiterung ist nun, diese Auswertungen z.B. über die monatlichen Dateien von 5 Jahren durchzuführen (mit all den immer wieder auftauchenden Strukturänderungen).
(Manchmal werden auch zufällig immer wieder mal Leerzeichen verschluckt oder zusätzlich eingefügt.
Erklären kann mir das keiner (von wegen: SW sollte doch konsistente Ergebnisse liefern)
Aus diesem Grund funktioniert dein Vorschlag ...
leider nicht bzw. macht häufig Probleme und erfordert häufige Anpassungsarbeiten.-nimm das 11. bis 14. Zeichen
-nimm die erste vierstellige Zahl nach "~C"
-nimm die ersten vier Zeichen nach dem 8. Leerzeichen
usw.
(SO hatte ich es früher programmiert und nach der x-ten Änderung aufgegeben.)
DAMIT habe ich mich schon viel beschäftigt und meine(hoffe - bin zuversichtlich) das in der aktuellen Version realisieren zu können.
Gruß Stefan
PS: war dir das Verhalten der DIM-Anweisung in dieser Form bekannt? mir nicht! ... man lernt nie aus !
Re: [GELÖST] Cursormanipulation per Basic
Muss ich nicht, kenne ich! Bin ich hier im falschen Film?Schau mal in "B23", da steht (Spaltenzuordnung- auch gekürzte Darstellung):
Zum letzten Male:
Es gibt (bisher) keine klare ERklärung dafür warum die Einträge in B46 und B47 ff in TEilen unterschiedlich sind, AUCH B23 klärt das nicht auf, sondern fügt nun noch eine dritte Position für "Konto" hinzu, denn "Konto" steht nicht in gleicher Position wie 2798.
Code: Alles auswählen
Konto Gegenkonto BS BA Mwst%% We-Dat Beleg
~C 2798 1 50 04.01.01 1
~C 6151 1 50 19.00 04.01.01 1
Was nun wieder ein Missverständnis ist, denn es handelt sich um keinerlei Vorschlag.Aus diesem Grund funktioniert dein Vorschlag ...
Gruß
Stephan