Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Reihenfolge der Berechnungen in ungebundenen Textfeldern

Begonnen von PawelPopolski, Oktober 14, 2024, 19:15:46

⏪ vorheriges - nächstes ⏩

PawelPopolski

Hallo,

kann man die Reihenfolge der Berechnungen in ungebundenen Textfeldern in Berichten in irgendeiner Weise beeinflussen?

Grund der Frage:
Ich habe einen Bericht, in den verschiedenen Felder und Summen berechnet werden. So wird im Berichtsfuß die Gesamtsumme der Stunden ermittelt.
Im Berichtskopf werden per VBA die SollStunden errechnet und in einem ungebundenen Textfeld angezeigt.
Aus diesen beiden Angaben errechne ich per vba einen Korrekturfaktor, den ich im Berichtskopf ablege.
Nun soll in einer weiteren Spalte des Berichts eine korrigierte Stundenzahl errechnet werden.
Und an dieser Stelle hakt es. Wenn ich den Bericht öffne werde ich jedesmal nach dem Parameterwert für den Faktor gefragt, da dieser beim laden des Berichts noch nicht errechnet wurde. Ausserdem gibt es noch ein paar lustige Effekte bei berechnen der Summen in den Gruppenfüßen.
Wenn ich das so richtig in Erinnerung habe, werden die Bereiche im Bericht (grob) von oben nach unten abgearbeitet und berechnet...und hier komme ich auf meine Frage zurück. Kann ich die Berechnungsreihenfolge ändern?

MzKlMu

#1
Hallo,
wenn sich beechnete Felder auf andere berechnete Felder beziehen, so sollte in der nachfolgenden Berechnung die ursprüngliche Berechnung wiederholt werden.

Im einfachsten Fall sieht das so aus:

X= A*B
dann nicht so:
Y= X+10
sondern so:
Y= A*B+10

Dabei auf die Reihenfolge der Berechnung achten, ggf. mit Klammern arbeiten. Stichwort: Punkt vor Strich.
Gruß Klaus

PhilS

Zitat von: PawelPopolski am Oktober 14, 2024, 19:15:46Wenn ich den Bericht öffne werde ich jedesmal nach dem Parameterwert für den Faktor gefragt, da dieser beim laden des Berichts noch nicht errechnet wurde.
Das erscheint mir nicht plausibel.


Die Reihenfolge der Berechnung sollte, solange es nur um Ausdrücke in Berichtssteuerelementen geht eigentlich egal sein, weil Access selbst erkennt, wenn sich ein Ausdruck auf ein anderes Steuerelement bezieht, das zuerst berechnet werden muss.

Access fragt nicht nach Parametern, wenn deren Definition klar ist. - Ich denke, die Ursache dafür muss etwas anderes sein.

Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

PawelPopolski

Hallo,
das...
Zitat von: MzKlMu am Oktober 14, 2024, 19:22:01Im einfachsten Fall sieht das so aus:

X= A*B
dann nicht so:
Y= X+10
sondern so:
Y= A*B+10


habe ich bei den Summen in den entsprechenden Gruppen- und Berichtsfüßen mittlerweile berücksichtigt.

Grüße,
Pawelpoplski

PawelPopolski

#4
Jetzt mal eine vielleicht dümmliche Frage, aber ich verzweifel hier langsam an meinem kleinen Problem.

Das ungebundene Textfeld im Berichtskopf heisst txtFaktor mit großem F. Im Code wird es aber aus unerfindlichen Gründen konsequent txtfaktor, also mit kleinem f geschrieben.
Public Sub Faktor(rpt As Report)
'Umrechnungsfaktor für 'Überleistung' in gewähltem Zeitraum

    With rpt
    Dim IstStd As Single
    IstStd = Nz(DSum("[EinStd]", "qryEinsatzAlles", rpt.Filter), 0)

    If !txtSStd >= IstStd Or IstStd = 0 Then
        !txtfaktor = 1
    Else
        !txtfaktor = !txtSStd / IstStd
    End If
    End With

End Sub

Hat das irgendeinen Grund?

Knobbi38

Hallo PawelPopolski,

der Bezeichner ist einmal in dieser Form in die Symboltabelle von VBA gelangt und wird deshalb immer wieder auf diese Schreibweise zurück gesetzt. Das ist eine ewige Marotte von VBE/VBA.
Bei Variablennamen würde man die Deklaration mit Dim einmal löschen, kompilieren und dann wieder einfügen. Das zwingt VBA dazu, die Symboltabelle neu aufzubauen, wobei die Schreibweise des ersten Vorkommens übernommen wird.
Bei Steuerelementnamen ist das etwas schwieriger. Eine Möglichkeit wäre, Access mit dem Argument /decompile neu zu starten und als erstes alle Vorkommen des Bezeichners mit Suchen/Ersetzen im Projekt zu korrigieren - ansonsten einfach das Steuerelement umbenennen.

 

PawelPopolski

Moin zusammen,

kurze Info zu meinem Problem...Es ist gelöst. Vielleicht nicht auf die eleganteste, aber auf eine funktionierende Weise.

Ich habe einfach die Ergebnisse meiner benötigten Berechnungen in TempVars anstelle von txtFeldern hinterlegt. Hätte ich früher dran gedacht wären mir Stunden sinnlosen Stocherns im Nebel erspart geblieben.

Ihr: Wie dumm kann man sein?
Ich: Sehr sehr dumm!

Grüße,
Pawel

PhilS

Zitat von: PawelPopolski am Oktober 15, 2024, 08:19:20Ich habe einfach die Ergebnisse meiner benötigten Berechnungen in TempVars anstelle von txtFeldern hinterlegt. Hätte ich früher dran gedacht wären mir Stunden sinnlosen Stocherns im Nebel erspart geblieben.
Gut, dass du eine Lösung gefunden hast.
Ich glaube allerdings, dass nicht die TempVars selbst der entscheidende Faktor bei der Lösung sind, sondern dass du die Berechnung neu aufgebaut hast und dabei "zufällig" auch das bisher nicht klar identifizierte Problem in dem ursprünglichen Ansatz korrigiert hast.

Bei meinem vorigen Kommentar hatte ich allerdings übersehen, dass du auch VBA-Ereignisprozeduren in der Berechnung verwendest und damit durchaus Probleme bei der Reihenfolge der Berechnung entstehen können.


Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

PawelPopolski

Zitat von: PhilS am Oktober 15, 2024, 09:06:26Ich glaube allerdings, dass nicht die TempVars selbst der entscheidende Faktor bei der Lösung sind, sondern dass du die Berechnung neu aufgebaut hast und dabei "zufällig" auch das bisher nicht klar identifizierte Problem in dem ursprünglichen Ansatz korrigiert hast.

Ich habe die ursprünglichen Berechnungen verwendet. Die einzige Änderung, die ich im Code gemacht habe
vorher txtFeld=Berechnung
nachher tempvars!name=Berechnung

Zitat von: PhilS am Oktober 15, 2024, 09:06:26Bei meinem vorigen Kommentar hatte ich allerdings übersehen, dass du auch VBA-Ereignisprozeduren in der Berechnung verwendest und damit durchaus Probleme bei der Reihenfolge der Berechnung entstehen können.
Damit hattest du mich total verunsichert. Ich war (und jetzt bin ich) mir sicher, dass es zu solchen Reihenfolgen Problemen kommen kann. Daher auch meine Fragestellung (siehe meine erste Nachricht).
Das Positive ist, dass ich wieder ein wenig gelernt habe :-)

Grüße,
Pawel