Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Daten aus ungebundenen Formularfeldern an Bericht übergeben.

Begonnen von Quax1306, Dezember 10, 2011, 14:53:07

⏪ vorheriges - nächstes ⏩

Quax1306

Hallo Leute,

ich versuche nun seit Tagen Infos aus dem Netz zu meinem Problem zukriegen! - Vergeblich!

Also, wo fange ich an? Ich arbeite mit MS-Access 2007!

Jetzt möchte ich darin einen Bericht integrieren, um Assistenleistungen mit dem jeweiligen Kostenträger abzurechnen.
Der 1. Bericht funktioniert! Datei: 111210_Bild_01.png

Der braucht aber auch ein anschreiben.
Das soll so aussehen... Datei: 111210_Bild_02.png

Dazu habe ich eine Abfrage erstellt und den Bericht:

Die Abfrage
PARAMETERS [Erster Tag] DateTime, [Letzter Tag] DateTime, Vorschuss Currency;
SELECT NewHelferAbrech_Q.HELFERNAME, Sum([Stunden]*[ABRECH_SATZ]) AS Ausdr1, NewHelferAbrech_Q.WAEHRUNG, ADRESSEN.PLZ, ADRESSEN.ORT, ADRESSEN.FIRMA, ADRESSEN.NACHNAME, ADRESSEN.ANREDE, ADRESSEN.TITEL, IIf([ADRESSEN].[VORNAME],[ADRESSEN].[VORNAME] & " ","") & [ADRESSEN].[NACHNAME] AS K_Name, ADRESSEN.STRASSE, DienstStellen.ADRNR, [Vorschuss_1] AS Vorschuss
FROM (NewHelferAbrech_Q INNER JOIN DienstStellen ON NewHelferAbrech_Q.HELST = DienstStellen.DIENST_STELLE) INNER JOIN ADRESSEN ON DienstStellen.ADRNR = ADRESSEN.Nr
WHERE (((NewHelferAbrech_Q.D_Tag)>=[Erster Tag] And (NewHelferAbrech_Q.D_Tag)<=[Letzter Tag]) AND ((NewHelferAbrech_Q.HELST)="P"))
GROUP BY NewHelferAbrech_Q.HELFERNAME, NewHelferAbrech_Q.WAEHRUNG, ADRESSEN.PLZ, ADRESSEN.ORT, ADRESSEN.FIRMA, ADRESSEN.NACHNAME, ADRESSEN.ANREDE, ADRESSEN.TITEL, IIf([ADRESSEN].[VORNAME],[ADRESSEN].[VORNAME] & " ","") & [ADRESSEN].[NACHNAME], ADRESSEN.STRASSE, DienstStellen.ADRNR
ORDER BY NewHelferAbrech_Q.HELFERNAME;

enthält 3 Parameter, die ich gern ohne diese normale Parametereingabe über ein Formular an Abfrage/Bericht übergeben möchte:

  1. [Erste Tag] - erste Tag, an dem die Abrechnung beginnt.
  2. [Letzter Tag] - Letzter Tag der Abrechung
  3. [Vorschuss] - evtl. erhaltenen Vorschuss

Alle drei Parameter sind nicht in der DB gespeichert, sollen in einen Formular eingegeben (und geprüft) werden, und im Bericht (Brief) erscheinen.
[Erster Tag] und [Letzter Tag] um die Datenätze einzugrenzen, und um den Abrechnungszeitraum im Bericht zu dokumentieren. [Vorschuss] soll lediglich ausgewiesen werden und zur Berechnung des Restbetrages dienen.

Kann mir jemand helfen?

[Anhang gelöscht durch Administrator]

DF6GL

Hallo,

Entferne aus der Abfrage die Parameters-Sektion und die Where-Bedingungen, wie auch die Gruppierung und Sortierung.  Gruppieren und Sortieren wird im Berciht selber erledigt.

Im Formular öffnest Du den Bericht über eine Schaltfläche und übergibst dort die Filter-Bedingung (Where-Condition)  und den Vorschuss(wert) als Openargs-Parameter


Sub btnRechnung_Click()
Docmd.Openform "rptRechnung" ,acPreview,,"D_Tag >=" & Format(Me!txtErsterTag,"\#yyyy-mm-dd\#") & "  And D_Tag<="  &  Format(Me!txtLetzterTag,"\#yyyy-mm-dd\#") & "  AND HELST='P'",,Me!txtVorschuss
End Sub



Im Open-Ereignis des Berichtes wird der Openargs-Wert dem entspr. Berichts-Textfeld zugewiesen:

Sub Report_Open()
If Not Isnull(Me.Openargs) Then Me!txtVorschuss= Me.Openargs
End Sub

Quax1306

So, Problem gelöst.

Im Bericht:
Option Compare Database
Dim Frst_Day As Date
Dim Last_Day As Date
Dim Money As Currency

Private Sub Report_Open(Cancel As Integer)
Dim str1$, str2$, str3$, tmp$

On Error GoTo Report_Open_Err

If Not IsNull(Me.OpenArgs) Then
'* die Argumente splitten
    str1$ = Left(Me.OpenArgs, InStr(Me.OpenArgs, ";") - 1)
    tmp$ = Mid(Me.OpenArgs, InStr(Me.OpenArgs, ";") + 1)
    str2$ = Left(tmp$, InStr(tmp$, ";") - 1)
    str3$ = Mid(tmp$, InStr(tmp$, ";") + 1)
    Money = CCur(str1$)
    Frst_Day = CDate(str2$)
    Last_Day = CDate(str3$)
End If
Exit Sub

Report_Open_Err:
    MsgBox Error
    Exit Sub
End Sub

Function Get_Frst_Day() As Date
    Get_Frst_Day = Frst_Day
End Function

Function Get_Last_Day() As Date
    Get_Last_Day = Last_Day
End Function

Function Get_Money() As Currency
    Get_Money = Money
End Function

Im Formular:
Option Compare Database

Private Sub Drucken_Click()
Dim beding$, mldg$, hdr$, argum$

beding$ = "HELST = 'p'"
hdr$ = "Abrechnung mit Kostenträger"


If IsNull(Screen.ActiveForm![Erster Tag]) Then
    mldg = "Bitte geben Sie ein gültiges Datum ein!"
    MsgBox mldg, 48, hdr
End If

If IsNull(Screen.ActiveForm![Letzter Tag]) Then
    mldg = "Bitte geben Sie ein gültiges Datum ein!"
    MsgBox mldg, 48, hdr
End If

If Screen.ActiveForm![Letzter Tag] < Screen.ActiveForm![Erster Tag] Then
    mldg = "Letzter Tag kann nicht vor Erster Tag liegen!"
    MsgBox mldg, 48, hdr
End If

beding$ = beding$ & " AND "
beding$ = beding$ & "D_Tag >=" & Format(Me![Erster Tag], "\#yyyy-mm-dd\#")
beding$ = beding$ & " AND "
beding$ = beding$ & "D_Tag <=" & Format(Me![Letzter Tag], "\#yyyy-mm-dd\#")

If IsNull(Screen.ActiveForm![Vorschuss]) Then
    argum$ = "0,00"
Else
    argum$ = Str(Me!Vorschuss) & ";"
    argum$ = argum & Format(Me![Erster Tag], "dd.mm.yyyy") & ";"
    argum$ = argum$ & Format(Me![Letzter Tag], "dd.mm.yyyy")
End If

DoCmd.Close
dummy = SelPrintMode("Abrech_mit_Kostenträger_R", Null, Null, beding$, Null, argum$)

End Sub

-------------

Leider funktionierte die Zuweisung über Me!... nicht. Was soll's! Hab's über die Variablen gelöst.