In unserer WAWI wird eine Rechnung erzeugt indem Daten aus einer Tabelle "Bestellungen" in eine Tabelle "Rechnungen" geschrieben werden. Im Hintergrund laufen dann noch ein paar Aktualisierungen.
Damit der Gesamtbetrag der Rechnung auch dauerhaft als Wert gespeichert wird, summiere ich die einzelnen Rechnungspositionen auf und schreibe den Wert in ein Feld.
Danach erfolgt automatisch der Ausdruck der Rechnung.
Nun mein Problem:
Bei Rechnungen die nur aus 2-3 Positionen bestehen, läuft alles korrekt ab.
Bei Rechnungen die viele Positionen haben, ist Access so schnell, dass die korrekte Summe zwar in der Datenbank gespeichert wird, im Formular jedoch "0" bleibt. Im Report, der sich die Summe widerum aus der Tabelle holt, stimmt der Wert.
Um das Formular auf den richtigen Stand zu bringen, muss ich im Prinzip nochmals die gleiche Routine aufrufen die die Summenwerte schon vorher aktualisiert und in die Felder schreibt.
Eine kleine Pause einzuprogrammieren hat natürlich nichts geholfen.
Hat jemand einen Tip ?
Zu schnell ist Access sicher nicht und eine Pause einzuprogrammieren läßt stark auf fehlendes Grundlagenwissen schließen. Entscheidend ist die Reihenfolge.
Ich habe zwar mal festgestellt, daß bei ADODB.Recordsets und einem Jet-Backend es sein kann, daß die neuen Werte nicht gleich da sind, wenn man sofort im Anschluß wieder ein neues Recordset aufruft, auch wenn vorher explizit ein Commit gesendet wurde. Das Phänomen tritt bei einem Server-Backend nie auf. Könnte also sein, daß erst irgendein Puffer synchronisiert werden muß bei Jet. Ob das mit Deinem Problem zu tun hat, weiß ich mangels Hintergrundinfos aber nicht.
Die Rechnungssumme in der Datenbank zu speichern ist normalerweise kein gutes Design, wenn sich diese jederzeit berechnen ließe. Das sollte auf jeden Fall überdacht werden. Auf die Gefahr, angefeindet zu werden: Was ist das für ein WaWi-System, das Du Dir da als Laie da zusammenfrickelst?
Würli
ich frickel mir hier nichts zusammen...
Wir betreiben einen komplett eigenprogrammierten Onlineshop.
Auf dessen Daten greife ich via mysql Schnittstelle zu und hole mir neben den Bestelldaten alles was ich für eine Administration des Shops brauche.
Ich stelle darüber neue Produkte ein, lösche alte raus, erstelle Rechnungen, Packzettel, Lieferscheine, pflege den Wareneingang etc.
Eben alles das was eine WAWI so macht.
Zu Deiner Info: Ich arbeite seit 1995 mit Access und habe schon vor Jahren eine Komplettlösung für die gesamte Abwicklung einer Großschreinerei geschrieben. Ich bin also nicht auf den Kopf gefallen.
Vielleicht ist meine Programmierung manchmal etwas "dirty" aber sie funktioniert.
Wenn Du eine Rechnung erzeugst (wie in unserem Fall) dann sind das nicht nur Einzelpreise * Menge = Summe sondern da kommen:
Kundenrabatte, Vereinsrabatte, Versandkosten (abhängig vom Land und der VK-Freigrenze), Zuschläge und Abschläge ins Spiel.
Diese Daten werden zum Großteil aus dem Shop generiert müssen aber auch änderbar sein.
Ich kann mir kaum vorstellen, dass Du eine ordentliche Verkaufsstatistik erzeugen kannst, wenn alle diese Wert in berechneten Feldern stehen die bei einer Statistik erneut durchgerechnet werden müssten.
Hallo,
Zitatsummiere ich die einzelnen Rechnungspositionen auf und schreibe den Wert in ein Feld
wie gehst du da vor, kannst du VBA-Code dazu zeigen?
Zitat von: jabama am Februar 19, 2015, 14:57:22
Zu Deiner Info: Ich arbeite seit 1995 mit Access und habe schon vor Jahren eine Komplettlösung für die gesamte Abwicklung einer Großschreinerei geschrieben. Ich bin also nicht auf den Kopf gefallen.
ok, ok, ich nehm alles zurück. :-)
Aber Access zu schnell und als Lösung das Pause einbauen in Access fand ich halt nicht so professionell.
Zeig mal, wie Du das update machst bei der Rechnungssumme
Nunja ich öffne ein recordset mit addnew und erzeuge mir einen neuen Datensatz in der Tabelle Rechnungen.
Dann hole ich mir (auch wenn es schneller ginge) mit Dlookup die Ursprungswerte aus der Bestelldatenbank des Shops - für die neue Rechnung. z.b Anschrift, Lieferanschrift, Bezahlart, Kundennummer, Bestellnummer etc.
Am Ende wird das Recordset durch Update und Close aktualisiert.
Die Werte stehen jetzt alle in der Rechnungstabelle richtig drin.
Über eine Anfügeabfrage werden jetzt die Artikel aus der Bestellung dieser Rechnung zugeordnet und über ein Forms!Rechnungen.Requery das Formular nochmal aktualisiert.
Und genau an dieser Stelle bräuchte ich eine P A U S E :-)
denn
es wird jetzt sofort
a.) aus der Rechnung ein PDF erzeugt und auf unserem Server abgelegt
b.) eine Rechnung auf dem Drucker ausgegeben
Beide Reports enthalten dann die richtigen Zahlen nur das Formular, dass meine Rechnungsdaten anzeigt - bei großen Rechnungen - leider nicht.
Eine kleine Routine schreibt die Wert dauerhaft.
d.h. die berechneten Felder sind unsichtbar die dauerhaften Felder sind sichtbar.
Ein Abgleich schafft dann z.b.
Forms!Rechnungen!mwstdauerhaft = Forms!Rechnungen!mwstberechnet
Diese Routine lasse ich sogar noch VOR dem PDF und Druckvorgang durchlaufen, aber irgendwie wir sie von Access verschluckt.