Access-o-Mania

Access-Forum (Deutsch/German) => Bericht => Thema gestartet von: Quax1306 am Dezember 10, 2011, 14:53:07

Titel: Daten aus ungebundenen Formularfeldern an Bericht übergeben.
Beitrag von: Quax1306 am Dezember 10, 2011, 14:53:07
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]
Titel: Re: Daten aus ungebundenen Formularfeldern an Bericht übergeben.
Beitrag von: DF6GL am Dezember 10, 2011, 17:50:59
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
Titel: Re: Daten aus ungebundenen Formularfeldern an Bericht übergeben.
Beitrag von: Quax1306 am Dezember 13, 2011, 15:28:57
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.