Hallo,
ich habe in einem Formular ein Listenfeld mit Herkunftstyp Werteliste. Es hat 7 Spalten und in 5 davon sollen Euro Beträge stehen. Wo kann ich die Spalten so formatieren, dass dort auch wirklich Euro Beträge stehen und nicht nur Zahlen?
Danke im vorraus
Hallo,
schau mal bei Karl Donaubauer in die faq
http://www.donkarl.com?FAQ4.16
;)
Hallo,
verzichte auf die Werteliste und lege eine Tabelle an. In der Tabelle verwendest Du den Datentyp Währung für die 5 Spalten.
Wertelisten sind meist verzichtbar und keine flexible Lösung.
Nachtrag:
Der Vorschlag von Jürgen funktioniert auch nur mit einer Tabelle als Datenherkunft für das Listenfeld.
Hallo,
unabhängig der Vorschläge:
und ich "verstehe" das Problem nicht...
Die Werteliste hat als "Datentyp" eh TEXT und kann deshalb auch so genutzt werden:
Z. B.:
für einspaltiges Kombi:
Datensatzherkunft: "10,5 €";"0,00 €";"-1,00 €"
für zweispaltiges Kombi mit ID-Wert in erster (0-ter) Spalte:
Datensatzherkunft: 1;"10,5 €";2;"0,00 €";3;"-1,00 €"
(Die Gänsefüße können auch weggelassen werden)
PS: das gilt auch für ein Listenfeld.
Ich fülle das Listenfeld mit vba mithilfe von mehreren Abfragen, die noch dazu abhängig von 4 optinalen Parmatern sind.
Ich habe jetzt so noch "€" angehängt bei den entsprechnden Spalten, aber kann ich die jetzt irgendwie rechtsbündig einstellen?
Hallo,
wenn Du ohnehin Abfragen hast, braucht es doch erst recht keine Wertliste.
Du kannst dem Listenfeld auch Abfragen mit Parametern direkt übergeben.
Z.B. so:
Me.Listenfeldname.RowSource = "Abfragename"Zitataber kann ich die jetzt irgendwie rechtsbündig einstellen?
nur mit einem Trick.
Die Antwort dazu hast Du in #1 von Jürgen schon bekommen. Siehe Link dort.
Ich habe mal ein Bild von der Vorgabe wie das hinterher Aussehen soll angehängt.
Ich weiß nicht wie ich das so hinkriegen soll mit einer Abfrage als Herkunftstyp.
Hallo,
Zitat
Ich fülle das Listenfeld mit vba mithilfe von mehreren Abfragen, die noch dazu abhängig von 4 optinalen Parmatern sind.
Naja, Du kannst einen ja schön hinter's Licht führen :'(
Ein Listenfeld ist für die gezeigte Darstellung wohl eher ungeeignet. Ich würde da eher zu einem Bericht raten, dort sind die Daten (auf einfache Art und Weise) gruppierbar, berechenbar und formatierbar.
Uff mit Berichten habe ich bisher nicht viel gearbeitet. Wie kann ich denn dort die einzelnen Werte so eintragen? Ich dachte da könnte ich auch nur Abfragen angeben, durch die die Werte eingetragen werden... oder auf bestimmte Felder in Formularen verweisen :/
Hallo,
???
bei mir zieht dichter Nebel auf..
Beschreibe mal Deine DB ( Tabellen, Felder, Beziehungen) und die genaue Aufgabe, die die DB lösen soll...
Hallo,
Zitat von: NinaG am November 24, 2015, 14:13:50
Ich habe mal ein Bild von der Vorgabe wie das hinterher Aussehen soll angehängt.
das ist ein klassischer Fall für einen Bericht mit Gruppierungen, Zwischen- und Endsummen. Das einzige was du dem Bericht dazu liefern musst sind die Detail-Datensätze, die alle Datenfelder enthalten die dafür gebraucht werden.
Ich habe die Tabellen als Bild angehängt, ist das in Ordnung so? Sonst fasse ich sie nochmal schriftlich zusammen.
Ich soll eine Asuwertung der Planzahlen machen die abhängig von Kostenstelle, Gruppenname, Projektnummer, Sachkontonummer und Jahr ist, wobei Jahr(default ist das aktuelle Jahr) der einzige Parmater ist der zwangsweise eingegeben werden muss und zusätzlich mindestens einer der anderen.
In der Auswertung sollen dann die jeweiligen Gruppen stehen, für jede Gruppe die jeweiligen Projekte und für die Projekte die jeweiligen Sachkonten.
Für die Gruppen brauche ich nur den Gruppennamen, für die Projekte nur die Projektnummer und die Bezeichnung. Für die Sachkonten brauche ich die Sachkontonummer, die Bezeichnung, alle Ausgaben, die für das Sachkonto bereits bezahlt wurden (Ist), die Planzahlen, alle Ausgaben für Bestellungen, die noch nicht bezahlt wurden (Bindung aus Bestellung), alle Ausgaben für Abrufaufträge, die noch nicht bezahlt wurden (Bindung aus Abruf), und der Rest (Planzahlen-Ist-Bindung aus Bestellung-Bindung aus Abruf)
(Abrufaufträge sind Bestellungen bei denen Abrufauftrag=TRUE ist)
Dann soll zusätzlich nachdem alle Sachkonten für ein Projekt abgearbeitet sind die Summe von disen Spalten in einer neuen Zeile "Summe Projekt" stehen. Nachdem dann alle Projekte einer Gruppe abgearbeitet sind die Summe für die Gruppe in der Zeile "Summe Projektgruppe" und wenn alles fertig ist die Summe von allem in der Zeile "Summe gesamt". (Das habe ich noch nicht gemacht)
Bisher hatte ich in meinem Formular sobald Kostenstelle, Projekt, Sachkonto oder Gruppe ausgewählt wird (über ein jeweiliges Kombinationsfeld) foglende Sub aufgerufen:
Private Sub AuswertungZeigen()
Dim sSQL As String
sSQL = ""
If Len(Gruppe) > 0 Then
sSQL = " And P.Gruppenname ='" & Gruppe & "'"
End If
If Len(Kostenstelle) > 0 Then
sSQL = sSQL + " And Pr.Kostenstelle=" & Kostenstelle
End If
If Len(Projekt) > 0 Then
sSQL = sSQL + " And P.Projektnummer='" & Projekt & "'"
End If
If Len(Sachkonto) > 0 Then
sSQL = sSQL + " And P.Sachkontonummer = " & Sachkonto
End If
Dim rs As Recordset
Dim dbs As Database
Set dbs = CurrentDb
Set rs = dbs.OpenRecordset("SELECT P.Projektnummer, P.Gruppenname, P.Sachkontonummer, S.Bezeichnung, P.Planzahlen, P.Jahr FROM (public_Planzahlen AS P INNER JOIN public_Projekte AS Pr ON((P.Projektnummer=Pr.Projektnummer) And (P.Gruppenname = Pr.Gruppenname))) INNER JOIN public_Sachkonten As S ON(S.Sachkontonummer=P.Sachkontonummer) WHERE (P.Jahr =" & Jahr & sSQL & ") ORDER BY P.Gruppenname, P.Projektnummer, P.Sachkontonummer;", dbOpenSnapshot)
Dim AltesProjekt As String
Dim NeuesProjekt As String
Dim AlteGruppe As String
Dim NeueGruppe As String
Dim BestellungIst As Currency
Dim BestellungBindung As Currency
Dim AbrufIst As Currency
Dim AbrufBindung As Currency
Dim Ist As Currency
Dim Rest As Currency
Dim rs2 As Recordset
AlteGruppe = ""
AltesProjekt = ""
PlanListe.RowSource = ""
If Not rs.BOF Then
rs.MoveFirst
NeuesProjekt = rs!Projektnummer
NeueGruppe = rs!Gruppenname
Do Until rs.EOF
'Wenn die Gruppe gleich bleibt wird sie nicht erneut zur PlanListe hinzugefügt
NeuesProjekt = rs!Projektnummer
NeueGruppe = rs!Gruppenname
If Not NeueGruppe = AlteGruppe Then
PlanListe.AddItem (rs!Gruppenname)
PlanListe.AddItem (rs!Projektnummer)
'Wenn die Gruppe und das Projekt gleich bleibt wird dass Projekt ebenfalls nicht erneut zur PlanListe hinzugefügt
ElseIf Not AltesProjekt = NeuesProjekt Then
PlanListe.AddItem (rs!Projektnummer)
End If
AltesProjekt = NeuesProjekt
AlteGruppe = NeueGruppe
'IstZahlen aus Bestellung
Set rs2 = dbs.OpenRecordset("SELECT SUM(A.Menge*A.[Preis pro Stück]) As BestellungIst FROM (public_Artikel As A INNER JOIN public_Bestellungen B ON (A.Bestellnummer=B.Bestellnummer)) WHERE ((B.Abrufauftrag=FALSE) And (A.Status=TRUE) And (A.Projektnummer='" & rs!Projektnummer & "') And (A.Sachkontonummer=" & rs!Sachkontonummer & ") And (A.Jahr=" & rs!Jahr & ") And (A.Gruppenname='" & rs!Gruppenname & "'));", dbOpenSnapshot)
If Not rs2.EOF Then
rs2.MoveFirst
If IsNull(rs2!BestellungIst) Then
BestellungIst = CCur(0)
Else
BestellungIst = CCur(rs2!BestellungIst)
End If
End If
'Bindung aus Bestellung
Set rs2 = dbs.OpenRecordset("SELECT SUM(A.Menge*A.[Preis pro Stück]) As BestellungBindung FROM (public_Artikel As A INNER JOIN public_Bestellungen B ON (A.Bestellnummer=B.Bestellnummer)) WHERE ((B.Abrufauftrag=FALSE) And (A.Status=FALSE) And (A.Projektnummer='" & rs!Projektnummer & "') And (A.Sachkontonummer=" & rs!Sachkontonummer & ") And (A.Jahr=" & rs!Jahr & ") And (A.Gruppenname='" & rs!Gruppenname & "'));", dbOpenSnapshot)
If Not rs2.EOF Then
rs2.MoveFirst
If IsNull(rs2!BestellungBindung) Then
BestellungBindung = CCur(0)
Else
BestellungBindung = CCur(rs2!BestellungBindung)
End If
End If
'IstZahlen aus Abruf
Set rs2 = dbs.OpenRecordset("SELECT SUM(R.Rechnungsbetrag) As AbrufIst FROM (((public_RechnungUndArtikel As RUA INNER JOIN public_Artikel A ON (RUA.Bestellnummer=A.Bestellnummer And RUA.Position=A.Position))INNER JOIN public_Rechnungen As R On(R.Rechnungsnummer=RUA.Rechnungsnummer And R.Bestellnummer=RUA.Bestellnummer))INNER JOIN public_Bestellungen B On(A.Bestellnummer=B.Bestellnummer)) WHERE ((B.Abrufauftrag=TRUE) And (A.Projektnummer='" & rs!Projektnummer & "') And (A.Sachkontonummer=" & rs!Sachkontonummer & ") And (A.Jahr=" & rs!Jahr & ") And (A.Gruppenname='" & rs!Gruppenname & "'));", dbOpenSnapshot)
If Not rs2.EOF Then
rs2.MoveFirst
If IsNull(rs2!AbrufIst) Then
AbrufIst = CCur(0)
Else
AbrufIst = CCur(rs2!AbrufIst)
End If
End If
'Bindung aus Abruf
'Betrag aus Abruf
Set rs2 = dbs.OpenRecordset("SELECT SUM(A.Menge*A.[Preis pro Stück]) As AbrufBetrag FROM (public_Artikel As A INNER JOIN public_Bestellungen B ON (A.Bestellnummer=B.Bestellnummer)) WHERE ((B.Abrufauftrag=TRUE) And (A.Projektnummer='" & rs!Projektnummer & "') And (A.Sachkontonummer=" & rs!Sachkontonummer & ") And (A.Jahr=" & rs!Jahr & ") And (A.Gruppenname='" & rs!Gruppenname & "'));", dbOpenSnapshot)
If Not rs2.EOF Then
rs2.MoveFirst
If IsNull(rs2!AbrufBetrag) Then
AbrufBindung = CCur(0) - AbrufIst
Else
AbrufBindung = CCur(rs2!AbrufBetrag) - AbrufIst
End If
End If
Ist = AbrufIst + BestellungIst
Rest = CCur(rs!Planzahlen) - Ist - BestellungBindung - AbrufBindung
rs2.Close
Set rs2 = Nothing
PlanListe.AddItem (rs!Sachkontonummer & ";" & rs!Bezeichnung & ";" & Ist & "€;" & CCur(rs!Planzahlen) & "€;" & BestellungBindung & "€;" & AbrufBindung & "€;" & Rest & "€")
rs.MoveNext
Loop
End If
rs.Close
Set rs = Nothing
PlanListe.Height = PlanListe.ListCount * 290
End Sub
Ich habe jetzt hoffentlich nichts vergessen.
Hallo,
wie vorgeschlagen, mach Dir das Leben leichter und erstell einen gruppierenden und berechnenden Bericht...
Ohne jetzt die Details "erforscht" zu haben, erscheint mir ein Bericht geeignet, die Auswertung zu liefern, und das ohne viel VBA-Gedöns..
Wie kriege ich es dort hin, dass für die jeweiligen Sachkonten dann nur einmal das Projekt angezeigt wird und für die jeweiligen Projekte genauso nur einmal die Gruppe?
Hallo,
für jeden Eintrag der einmalig sein soll muss eine Gruppe angelegt werden. Dabei ist auf die hierarchische Folge zu achten.
Ist die DB noch in der Entwicklung ?
Ich habe da Zweifel am Datenmodell.
- warum ist keine referentielle Integrität eingestellt ?
- warum verwendest Du zusammengesetzte Primärschlüssel, auch noch 4-fach
Das erschwert nur die Handhabung
- Was macht das Jahr bei den Artikeln ?
Das Jahr gehört nur zu den Planzahlen.
- Ist die Sachkontennummer eine Eigenschaft des Artikel oder der Planzahlen ?
Wohl eher des Artikels.
- kann ein Artikel nur für ein Projekt verwendet werden ?
Das könnte man meinen, weil es bei den Artikeln ein Feld für das Projekt gibt.
Das ist noch nicht alles, was mir aufgefallen ist. Ich halte das Datenmodell für stark verbesserungsbedürftig. Und das sollte erst mal geklärt(bereinigt werden, bevor Du an Berichte denkst.
Danke habe das mit den Gruppen vorher noch nicht verstanden, aber hab das jetzt soweit.
Als Datensatzquelle habe ich jetzt eine Abfrage die mir Projektnummer, ProjektBezeichnung, Gruppenname, Sachkontonummer, SachkontoBezeichnung, Planzahlen und Jahr gibt
Was mir jetzt noch fehlt sind die Werte für Ist, Bindung aus Bestellung und Bindung aus Abruf. Dafür muss ich eigene Abfragen machen, wie kann ich die zusätzlichen Abfragen jetzt in den Bericht einbringen und die Felder mit den Werten füllen?
Gruß Nina
Hallo,
ZitatDafür muss ich eigene Abfragen machen, wie kann ich die zusätzlichen Abfragen jetzt in den Bericht einbringen und die Felder mit den Werten füllen?
Wenn das wirklich nötig sein sollte, können die Domänenaggregats-Funktionen die Lösung sein.
DSum(), DCount(), Dlookup(), etc.
Hallo,
ZitatWas mir jetzt noch fehlt sind die Werte für Ist, Bindung aus Bestellung und Bindung aus Abruf.
nimm diese Datenfelder mit in die Abfrage, dann stehen sie dir automatisch im Bericht zur Verfügung. Der Bericht braucht dann vermutlich gar keinen Detailbereich, sondern die Werte werden in dem jeweiligen Gruppenkopf oder -fuß aggregiert.
Probiere das doch einfach mal aus und lass dich überraschen, was so ein Bericht dir liefern kann.