Hallo an alle neuen Weltmeister!!!
Ich bin gerade dabei den Fahrradfachhandel meiner Mutter etwas auf Vordermann zu bringen und möchte daher ein kleines erweitertes WWS für sie schreiben. Warum ich das selber mache? Gekaufte Produkte enthalten meist schon wieder zuviel. Sie soll keine Buchführung mit dem Programm machen können, sondern nur wesentliche Dinge buchen können, wenig Knöpfe, wenig zum verstellen. Im ersten Semester meines BWL Studiums haben wir in Excel VBA, dort hatte ich schon ein WWS für sie geschrieben, welches sie auch seit 3 Jahren nutzt. Jetzt im 6 Semester hatte wir Access und ich würde gern umschenken. Jedoch sehe ich trotz der selben Programmiersprache nicht so richtig durch, weil ich nicht wie in Excel gleich alle Sheets in VBA sehe und in meiner Datenbank auch Unterformulare vorhanden sind und wir damit im Studium nichts gemacht haben.
Soviel zu Einführung, jetzt folgt das Hauptproblem und Anschauungsmaterial:
Im Rechnungsformular wird die RGtbl mit der Untertabelle Rechnungsdetails angezeigt. Somit kann ich im Kopf alle wichtigen Daten zum Kunden reinziehen, durch das Unterformular aber auch mehrere Artikel mit einem Barcodescanne einlesen. Denn der Barcode ist PK und mit den Artikel verknüpft. Der Rechnungsbetrag, berechnet sich aus dem in der Artikelkartei hinterlegten Preis.
HIER komm ich nicht weiter, denn speicher ich eine Rechnung, und will sie später einmal aufrufen aber der Preis des Artikels hat sich in dieser Zeit geändert, wird er später in der Rechnung angepasst sein und es wird etwas anderes anzeigt als damals berechnet. Somit beeinflusst man bei jeder Preisanpassung sämtliche Auswertungen. Wie kann ich also Rechnungen so speichern, dass die gebuchten Preise statisch bleiben?
Ich freue mich über eure Antworten. Beste Grüße Tom
Hallo,
Zitat von: Th0ms3n am Juli 14, 2014, 15:08:11Jedoch sehe ich trotz der selben Programmiersprache nicht so richtig durch
naja, Excel-VBA und Access-VBA kann man auch nicht als "eine" Programmiersprache bezeichnen.
Zitataber der Preis des Artikels hat sich in dieser Zeit geändert
Da sehe ich zwei Möglichkeiten, entweder du pflegst die Preise mit Gültigkeitsdatum ein oder du speicherst den Preis mit der Rechnung.
Hallo MaggieMay und danke für die schnelle Antwort.
Dann bin ich etwas "beruhigt" wenn es nicht unbedingt vergleichbar ist. Es kam mir in Excel nämlich alles viel einfacher vor.
Wie könnte ich den Preis denn speichern? In Rechnungsdetails noch eine extra Spalte einfügen?
ZitatEs kam mir in Excel nämlich alles viel einfacher vor.
Das erscheint dir wohl aus dem Rückblick nur so, jedenfalls wird das von Access-Programmierern ohne Erfahrung mit Excel-VBA sicherlich umgekehrt empfunden. ;-)
Das Speichern des zur Rechnungstellung aktuellen Preises mit dem Bestell-/Rechnungsartikel ist sicherlich die einfachere Lösung. Und ja, natürlich brauchst du dann eine zusätzliche Spalte in der zugehörigen Tabelle.
So das habe ich jetzt soweit hinbekommen. Nun kommt ein anschließendes Problem:
Ist die Rechnung gebucht, würde ich gern einzelne Rechnungen in einem Bericht anzeigen lassen und darüber auch ausdrucken.
Doch im Bericht sind dann immer alle Rechnungen angezeigt.
Wie kann ich denn nur die gerade gebuchte Rechnung in einem Bericht anzeigen lassen?
Oder ist es einfacher das Formular schick zu machen und das zu drucken?
Hallo,
ZitatOder ist es einfacher das Formular schick zu machen und das zu drucken?
ein Formular ist zum Drucken nicht geeignet, außerdem hättest Du exakt das gleiche Problem.
Du kannst den Primärschlüssel des angezeigten Datensatzes übergeben.
Prinzip:
DoCmd.OpenReport stDocName, , , "[Primärschlüssel] = " & Me!PrimärschlüsselFeldImFormular
Hallo MzKIMu,
danke für deine Antwort. Leider hab ich keine Ahnung wie ich VBA in Access integriere. Muss ich immer ein neues Modul aufmachen? Wird das nur bei einem Button hinterlegt?
Hallo,
das ist der Code im Ereignis "Beim Klicken" eine Buttons. Namen anpassen.
PS:
Du machst Dir keine Freunde, wenn Du gleichzeitig auch in anderen Foren fragst.
Dass es unerwünscht ist, steht auch in den Regeln.
Ich brauche nur wie wohl jeder schnellstmöglich die passende Antwort. In anderen Foren können doch auch andere Profis sein oder? Ich werde es löschen falls ich dort keine Antwort bekomme.
Zu deiner Angabe habe ich allerdings noch Fragen. Welche Namen direkt muss ich ändern? Kannst du mir das bitte markieren?
Muss der Button dann in "DoCmd.OpenReport heißen?
Der Code den ich eingefügt habe heißt jetzt= DoCmd.OpenReport stDocRechnung, , , "[RgNr] = " & Me!RgNr
und ist laut Access syntaktisch falsch, Sie haben mögl. einen Operanden, aber keinen Operator eingegeben.
Hallo,
ZitatIn anderen Foren können doch auch andere Profis sein oder?
nein, es sind überall fast die gleichen Leute. Und lies die Regeln, es ist unerwünscht.
So sollte es klappen. Du musst nur die bei Dir vorhanden Namen für die Felder und und Namen einsetzen. Die kenne ich ja nicht.
Private Sub ButtonName_Click()
DoCmd.OpenReport "BerichtsName", , , "[RgNr] = " & Me!RgNr
End Sub
Ich muss gestehen ich weiß nicht mehr weiter, bin euch sehr dankbar für die Hilfe und steige auch langsam hinter, allerdings versteh ich nicht warum es immer noch nicht geht.
Siehe Anhang, das Formular heißt ganz sicher "Rechnung drucken" und der PM ist jeweils "RgNr"...
Neuer Fehler siehe Anhang.
Wäre es möglich die Datenbank einfach hochzuladen um den Fehler schneller zu finden?
Upps.... :D
Der Code gehört in eine Ereignisprozedur, welche du über die Eigenschaften einstellen kannst.
Über die drei Punkte kommst du dann in den VBA-Editor.
Hallo,
das ist ja auch völlig falsch und entspricht keinesfalls dem was ich vorgeschlagen habe.
Das ist der Code für die Ereignisprozedur "Beim Klicken".
Erstelle einen Button auf dem Formular und breche den Assistenten ab. Dann schreibst Du [Ereignisprozedur] in die Zeile "Beim Klicken", mit dem [] Klammerpaar. Dann klickst Du auf die 3 Punkte hinten.
Aus dem anderen Forum weis ich, dass die RgNr bei Dir Text ("RgNr"00000"/2014") ist, daher noch wie folgt ändern:
DoCmd.OpenReport "Rechnung drucken", , , "[RgNr] = '" & Me!RgNr &"'"
Eine solche Rechnungsnummer ist für Access auch nicht so geeignet. Besser wäre es, nur die reine Zahl (formatiert (0000) zu speichern und das Jahr aus dem Datum zu ermitteln und zur Anzeige nur addieren.
PS:
Du solltest Dich dringend mit den Basics zu Access vertraut machen, das kann man nicht alles im Forum vermitteln.
Ich hatte es schon in der Ereignisprozedur stehen, allerdings ging es da auch nicht.
Jetzt habe ich die Rechnungsnummer in reine Ziffern geändert und mich an eure Anleitung gehalten.
TOP Vielen Dank.
Kann man den Code jetzt einfach durch Variable erweitern die den Name und den Speicherort festlegen? Bei meinem Excel Projekt sah das folgendermaßen ausSub cmd_Rechnung_speichern_click()
Dim fn As String 'fn = Filename / Dateiname
Dim sh As Object 'sh = ActiveSheet
Dim us As Single 'us = Datum in der Zelle der Rechnung
Dim rgda As String 'Rechnungsdatum
Dim rgnr As Long 'Rechungsnummer
Dim name As String 'Name des Kunden
Dim rngnr1 As Range
Dim rngnr2 As Range
Dim wks2 As Worksheet
Dim VRG As Range
'RGdatum und Nummer sollen der jeweiligen Zelle der Rechung entsprechen
rgda = Format(Worksheets("Rechnung").Cells(14, 8), "yyyymmdd")
rgnr = Worksheets("Rechnung").Cells(13, 8).Value
'Name Kunden zuweisen
name = Worksheets("Rechnung").Cells(13, 2).Text
'weißt der Variablen den Monat der Rechnung aus der Zelle zu
us = Worksheets("Rechnung").Cells(15, 8).Value
'Set wks2 = Worksheets("Rechnung")
'Set rngnr2 = wks2.Range("H13")
'Set rngnr1 = wks2.Range("J13")
'rngnr1.Value = rngnr2.Value
Set sh = ActiveSheet
'Umsatz aus der Rechnung in der Umsatztabelle aufsummieren
Sheets("Umsätze 2014").Cells(5, us + 1).Value = Sheets("Umsätze 2014").Cells(5, us + 1).Value + sh.[H42].Value
'Rechnung kopieren
sh.Copy
'Dateinamen zum Speichern aus RG-Datum und RG-Nummer zusammensetzten
ActiveSheet.SaveAs Filename:= _
"c:\+++Pötschke WWS+++\Rechnung Excel\" & rgda & " " & "VRG" & rgnr & " " & name & ".xls"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"c:\+++Pötschke WWS+++\Rechnung PDF\" & rgda & " " & "VRG" & rgnr & " " & name & ".pdf" _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=False
'und ausdrucken
ActiveWindow.SelectedSheets.PrintOut Copies:=2, Collate:=True
'und schließen
ActiveWorkbook.Close
'erhöt beim öffnen einer neuen Rechnung die RG-nr um 1
Tabelle2_Rechnung_Vorlage.Range("J13") = Tabelle2_Rechnung_Vorlage.Range("J13") + 1
ActiveWorkbook.Save 'Speichert die Vorlage damit in Ihr der neue Umsatz gespeichert bleibt
'Hauptmenü anzeigen
frm1_WWS_Startseite.Show
End Sub