PDA

Vollständige Version anzeigen : Warum zeigt der Bericht alle Daten und ignoriert Filter?


--=Franky=--
09.07.2006, 16:13
Hallo nochmal,

ich habe in einem Berichtsereignis "beim Öffnen" folgenden Code:

Private Sub Report_Open(Cancel As Integer)
On Error GoTo Err_frm_PrinterTable_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "frm_PrinterTable"
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_frm_PrinterTable_Click:
Exit Sub

Err_frm_PrinterTable_Click:
MsgBox Err.Description
Resume Exit_frm_PrinterTable_Click
End Sub


Vorher habe ich eine Abfrage, die mir einige wenige (je nach Filter) DS anzeigt.
Poppt dann das Druckerauswahlmenü aus dem Ereignis auf, zeigt er mir alle DS aus der DB an und das sind ca. 14.000.
Hat jemand eine Erklärung bzw. kann mir aus der Misere helfen?

Worf1001
09.07.2006, 16:44
Hallo,

was willst Du genau machen?

Gemäss Deinem Code öffnet sich ein Formular. Das hat nichts mit dem Bericht und seinen Kriterien zu tun.

Wie öffnest Du den Bericht? Und wie sieht der Code dort aus?

--=Franky=--
09.07.2006, 16:59
Hallo zurück Worf1001,

das passiert vor dem Bericht, so oder in ähnlicher Form:

Private Sub btn_Archiv_Click()
On Error GoTo Fehlermeldung:

Dim i As String

i = InputBoxDK("Bitte Passwort eingeben:")

If i <> "entsprechendes Passwort" Then

MsgBox "Falsches Passort!"
Exit Sub
End If

DoCmd.SetWarnings False 'Warnungen, dass Datensätze hinzugefügt/geändert werden, aussschalten
DoCmd.OpenReport "Bericht", acViewPreview, , "chkb_archiv = false"
strSQL = "Update [Graff-Koord] SET [archiv_datum]= '" & Now & "', [chkb_archiv]= TRUE WHERE [chkb_archiv] = FALSE;"
DoCmd.RunSQL strSQL
DoCmd.RunCommand acCmdFitToWindow
DoCmd.RunCommand acCmdZoom100
Exit Sub 'Sub verlassen, sonst kommt er jedesmal in die Fehlerbehandlung

Fehlermeldung: 'Fehlerbehandlung, wenn der Bericht keine Daten enthält
If Err.Number = 2501 Then
Exit Sub
Else
MsgBox Err.Description
End If
DoCmd.SetWarnings True
End Sub

Was ich erreichen möchte ist, dass der User auch ohne Systemmenüs einen Drucker erreicht und ich ihm evtl. den sogar vorgeben kann.

Danke im Voraus, für deine Bemühungen...

Worf1001
09.07.2006, 17:13
Was ich erreichen möchte ist, dass der User auch ohne Systemmenüs einen Drucker erreicht und ich ihm evtl. den sogar vorgeben kann.

Wie meinst Du das ohne Systemmenüs? Das verstehe ich nicht...

--=Franky=--
09.07.2006, 17:35
Menü:
Datei->drucken, dann
Drucker wählen,
Ausrichtung einstellen usw. usw.

Er soll zwar die Option haben, aber das Popup mit der festen Vorgabe wäre mein Wunsch.

Wer auch immer den Bericht erstellt, der will ihn auch weiterverarbeiten, zumindestens in dieser DB und da gibt es nur zwei Varianten.
PDF und FAX alles andere ist für mich unnötiger Ballast.
Sonst passiert es z.B., dass ein Bericht auf einem Netzwerkdrucker ausgegeben wird, oder oder oder...

Ich weiß, es ist immer schwer zu verstehen, was der andere gerade möchte, hoffe aber, dass ich Dir das damit etwas plastischer darstellen konnte.

Worf1001
09.07.2006, 17:53
Also mit folgendem Code kannst Du zum Beispiel einen bestimmten Drucken als Standard für den Bericht festlegen:


DoCmd.OpenReport "Abfrage_BGA_Test1", acViewPreview
Reports("Abfrage_BGA_Test1").Printer = Application.Printers("CutePDF Writer")


Musst Du immer die Ausrichtung ändern? Die kannst Du doch beim Bericht einmal einstellen und dann speichern.

--=Franky=--
09.07.2006, 18:04
Nein, ändern möchte ich sie nicht (immer Querformat), aber ich möchte vermeiden, dass sie jemand versehentlich ändert.

1. Evtl. kannst Du mir ja schreiben, wo ich diesen Code in meinen einfügen müsste.
2. Wie kann ich den Druckernamen in Teilen vorgeben? (Wenn ich z.B. weiß, dass im Namen Fritz! vorkommt,
aber nicht den exakten Namen kenne (Was bei deinem Code ja der Fall ist).
Dann wäre ich sozusagen schon gerettet.

Der Code zu Beginn des Threads, muss von der Funktionalität vollständig erhalten bleiben
und man soll auch den Bericht erst angezeigt bekommen, bevor man ihn als "Druckauftrag" rausschickt.

Worf1001
09.07.2006, 18:09
Wenn Du einen Drucker vorgibst, musst Du das Menü gar nicht zu Verfügung stellen. Das heisst mache doch eine eigene Menüleiste, so dass der Nutzer gar nicht einen anderen Drucker bzw. auch nicht andere Formate wählen kann.

Der Name des Druckers musst Du leider kennen. Anders geht das nicht...

Zu Punkt 1 komme ich noch, muss jetzt weg...

--=Franky=--
09.07.2006, 18:39
das mit dem Menü ist eher unwichtig, aber das mit dem festen Drucker!

Wenn Du mir hilfst das eine Problem zu lösen, so habe ich dann gleich zwei gelöst.
Ich möchte einen Button zum Faxen und einen zweiten für das Erstellen von PDF-Dateien einbauen.
Wichtig ist, das sind zwei völlig verschiedene Vorgänge und ich muss sie unabhängig voneinander in der DB erfassen.
Deshalb jeweils ein Button mit je einem "Drucker".
Der Code (oben) setzt ein sog. Archivbit und protokoliert so welche DS schon als Bericht gefertigt wurden und das ist very important!
Gleiches würde ich auch für die Faxe erstellen, damit im Fax keine DS doppelt vorkommen.

Den exakten Drucker (bzw. Faxnamen) besorge ich mir, daran sollte es nicht scheitern ;)

SWR
09.07.2006, 20:43
Der Code (oben) setzt ein sog. Archivbit und protokolliert so, welche DS schon als Bericht gefertigt wurden.Und das "Archivbit" bleibt da auch sitzen, selbst wenn aus irgendwelchen Gründen es gar nicht zum Druck kommen konnte? Dann behauptest Du (bei einem Fax beispielsweise), daß Du etwas versendet hast, der Empfänger weiß aber von nüscht.

Gruß
Stephan

--=Franky=--
10.07.2006, 05:41
Und das "Archivbit" bleibt da auch sitzen, selbst wenn aus irgendwelchen Gründen es gar nicht zum Druck kommen konnte? Dann behauptest Du (bei einem Fax beispielsweise), daß Du etwas versendet hast, der Empfänger weiß aber von nüscht.

Gruß
Stephan


Sei mal nicht sauer, aber konstruktive Kritik kann ich gut ertragen, aber das...!?
Nenne mir doch mal eine Alternative und vor allem, wie sie dann umzusetzen wäre, denn ich bin nun mal leider nicht der MegaCrack was VBA angeht.
Das ist auch der Grund, weshalb ich mein Problem hier darstelle.
Kann Access denn überhaupt erkennen, dass kein Fax versandt oder Bericht gedruckt wurde?
Dann wieder die entscheidende Frage für mich, wenn ja, wie baut man das in den Code (oben) ein?

Paul.Ostermeier
10.07.2006, 08:21
@Franky,

mit nachfolgender Funktion kannst Du Deine Druckeinstellungen vornehmen
- vor dem eigentlichen Ausdruck (Docmd.Openreport ............)

d.h Du rufst vom frm-Button aus diese Funktion mit den gewünschten Einstellung auf
und anschliessend druckst Du den Report


<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre>&nbsp;
<span class="TOKEN">Public Function</span> fktPrinterSelektion(strReport <span class="TOKEN">As</span> String, strPrinterName <span class="TOKEN">As</span> String, bolQuer <span class="TOKEN">As</span> <span class="TOKEN">Boolean</span>)
&nbsp;
<span class="REM">'// Call fktPrinterSelektion(&quot;DeinBericht&quot;, &quot;WindowsDruckerName&quot;, True)</span>
&nbsp;
<span class="TOKEN">Dim</span> prn <span class="TOKEN">As</span> Printer
<span class="TOKEN">Dim</span> rep <span class="TOKEN">As</span> Report
<span class="TOKEN">Dim</span> bytPrinter <span class="TOKEN">As</span> <span class="TOKEN">Byte</span>
<span class="TOKEN">Dim</span> I <span class="TOKEN">As</span> <span class="TOKEN">Byte</span>
&nbsp;
I = 0
<span class="TOKEN">For</span> <span class="TOKEN">Each</span> prn <span class="TOKEN">In</span> Application.Printers
<span class="TOKEN">If</span> prn.DeviceName = strPrinterName <span class="TOKEN">Then</span>
bytPrinter = I
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
I = I + 1
<span class="TOKEN">Next</span> prn
&nbsp;
<span class="REM">'// Bericht im Entwurfsmodus &ouml;ffnen (Hidden)</span>
DoCmd.OpenReport strReport, acViewDesign, , , acHidden
&nbsp;
<span class="TOKEN">Set</span> rep = Reports(strReport)
rep.Printer = Application.Printers(bytPrinter)
&nbsp;
<span class="TOKEN">If</span> bolQuer <span class="TOKEN">Then</span>
rep.Printer.Orientation = acPRORLandscape
<span class="TOKEN">Else</span>
rep.Printer.Orientation = acPRORPortrait
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
&nbsp;
<span class="REM">'// Einstellungen im Bericht speichern ..</span>
DoCmd.Close acReport, strReport, acSaveYes
&nbsp;
&nbsp;
<span class="TOKEN">End</span> <span class="TOKEN">Function</span>
&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

MfG
Paul

--=Franky=--
10.07.2006, 08:25
Werde ich heute Abend erst einbauen können, aber freue mich Hilfe erhalten zu haben.
Werde auf jeden Fall noch Vollzug melden :)

Danke...

Worf1001
10.07.2006, 09:13
Hallo Paul,

der Teil verstehe ich nicht:


...
If bolQuer Then
rep.Printer.Orientation = acPRORLandscape
Else
rep.Printer.Orientation = acPRORPortrait
End If
...


:confused:

Paul.Ostermeier
10.07.2006, 10:48
Hallo Roger

If bolQuer Then
rep.Printer.Orientation = acPRORLandscape ' = Seitenformat Quer
Else
rep.Printer.Orientation = acPRORPortrait ' = Seitenformat Längs
End If

beides sind Printer- Konstanten ...
d.h abhängig von True/False wird die Seite im Längs oder Querformat eingestellt


MfG
Paul

SWR
10.07.2006, 11:21
Sei mal nicht sauer, aber konstruktive Kritik kann ich gut ertragenFreut mich - wollte das nicht als Kritik, sondern vielmehr als Hinweis verstanden wissen. Kann halt unter Umständen Ergebnisse geben (von "krumm" bis "völlig falsch", von vernachlässigbar bis hin zu "Katastrophe" ist alles möglich), wenn man beispielsweise in einer Abfrage alle "unerledigten Vorgänge" ermitteln soll/muß, um daraus in irgendeiner Form Schlüsse draus zu ziehen. Das hat weniger mit "MegaCrack" zu tun, sondern mit Überlegungen, die einem bei sowas in den Sinn kommen (müssen!). Wenn Du erstmal alles andere erfolgreich im Griff hast, kannst Du ja dieses Thema nochmals separat angehen. Klar kann Access nicht erkennen, ob ein Fax gesendet wurde oder nicht oder der Drucker streikte etc. . . . Also: war nur ein Hinweis, daß hier evtl. ein Hund begraben sein könnte, wenigstens sollte man das Archivbit auch manuell rücksetzen können, wenn der User Kenntnis davon kriegt, daß sein Druck nicht funktioniert hat, damit dieser Vorgang nicht durch das rigororse automatische Setzen im Code dann evtl. zu Unrecht im Nirwana verschwindet (und der Kunde stinksauer ist und zur Konkurrenz geht).

Gruß
Stephan

--=Franky=--
10.07.2006, 12:25
Dann meinen konsequenten Dank an der Stelle. :D
Die DB läuft in unserer Firma und sollte zu Beginn des Jahres lediglich ein Excel-Ersatz sein,
bis dahin hatte ich mit Access noch nie zu tun.
Von daher bin ich schon zufrieden mit dem was jetzt schon möglich ist,
stoße leider schnell an die Grenzen.
Aber es gibt ja hier zum Glück eine Menge netter Zeitgenossen, die einem helfen :) :)

Ich habe in dem entsprechenden Berichtsformular einen Btn,
mit dem ist es möglich (Datum frei wählbar) das Archiv-Bit zurückzusetzen.
Kann ja auch sein, dass der gleiche Bericht, aus welchm Grund auch immer, noch einmal erstellt werden soll.
Außerdem ist der Zeitraum der Berichtserstellung im Formular zu ersehen,
also transparent nachzuvollziehen, aber für den User nicht zu ändern.
Er setzt das Bit nur zurück, wenn er in best. Feldern Daten ändert.

Worf1001
10.07.2006, 12:59
Hallo Paul,

danke für die Erklärung.

--=Franky=--
10.07.2006, 13:11
@Franky,

mit nachfolgender Funktion kannst Du Deine Druckeinstellungen vornehmen
- vor dem eigentlichen Ausdruck (Docmd.Openreport ............)

d.h Du rufst vom frm-Button aus diese Funktion mit den gewünschten Einstellung auf
und anschliessend druckst Du den Report


Das scheint so zu funktionieren, aber kannst Du mir noch sagen, wie ich es hinbekomme, dass sich höchstens noch eine Nachfrage öffnet "Wirklich drucken?" und nichts weiter!?

So muss ich ja wieder über das Druckemenü weitermachen und das ist ja genau der Step, den ich einsparen möchte. Oder habe ich was übersehen?? :rolleyes:

Jetzt habe ich ja nun schonmal die Voreinstellungen...
Irgendwie (nach meinem Verständnis) müsste entweder im Öffnenereignis des Berichtes oder in meinem Filtercode nur noch eine Routine rein, die fragt: "Drucken Ja/Nein" ich möchte später die Menüs für den User ausblenden, aber so ist das noch nicht möglich.

Paul.Ostermeier
10.07.2006, 14:18
woher Du momentan mehrere Nachfragen bekommst kann ich nicht nachvollziehen

Du kannst Deine Button-Ereignisse z.B. so abändern ....

Dim bytAntw As Byte

bytAntw = MsgBox("Tatsächlich ausdrucken ??", vbYesNo)

If bytAntw = vbYes Then
'// Dein Code fürs erlaubte Drucken
Call fktPrinterSelektion("DeinBericht", "WindowsDruckerName", True)
DoCmd.OpenReport "DeinBericht"

Else
'// das "Ausdrucken" wurde mit Nein gewählt
MsgBox "Aktion wurde abgebrochen ..."
Exit Function
End If

MfG
Paul

--=Franky=--
10.07.2006, 16:31
Ich habe es schon an einigen Stellen versucht einzupflegen, aber irgendwie... :rolleyes:


Private Sub btn_Archiv_Click()
On Error GoTo Fehlermeldung:

Dim I As String

I = InputBoxDK("Bitte Passwort eingeben:")

If I <> "entsprechendes PW" Then

MsgBox "Falsches Passort!"
Exit Sub
End If

DoCmd.SetWarnings False 'Warnungen, dass Datensätze hinzugefügt/geändert werden, aussschalten
DoCmd.OpenReport "Bericht", acViewPreview, , "chkb_archiv = false"
strSQL = "Update [Graff-Koord] SET [archiv_datum]= '" & Now & "', [chkb_archiv]= TRUE WHERE [chkb_archiv] = FALSE;"
DoCmd.RunSQL strSQL
DoCmd.RunCommand acCmdFitToWindow
DoCmd.RunCommand acCmdZoom100
Exit Sub 'Sub verlassen, sonst kommt er jedesmal in die Fehlerbehandlung

Dim bytAntw As Byte

bytAntw = MsgBox("Tatsächlich ausdrucken ??", vbYesNo)

If bytAntw = vbYes Then
'// Dein Code fürs erlaubte Drucken
Call fktPrinterSelektion("Bericht", "WindowsDruckerName", True)
DoCmd.OpenReport "Bericht"

Else
'// das "Ausdrucken" wurde mit Nein gewählt
MsgBox "Aktion wurde abgebrochen ..."
Exit Function
End If

Fehlermeldung: 'Fehlerbehandlung, wenn der Bericht keine Daten enthält
If Err.Number = 2501 Then
Exit Sub
Else
MsgBox Err.Description
End If
DoCmd.SetWarnings True
End Sub


Das einzige was ich erreicht habe:

Paul.Ostermeier
10.07.2006, 16:53
mein Fehler..

Du hast ja keine Function sondern eine Sub

'// das "Ausdrucken" wurde mit Nein gewählt
MsgBox "Aktion wurde abgebrochen ..."
Exit Function ''''<' Exit Sub
End If

MfG
Paul

--=Franky=--
10.07.2006, 17:17
Ich traue mich kaum noch zu fragen, aber so wie der Code jetzt steht, zeigt Access mir den Bericht (einige DS) auf dem Bildschirm an :) .
Ausgedruckt werde aber alle 14.000DS??? :(
Ich habe das bestimmt an die falsche Position eingebaut oder? :eek:

Paul.Ostermeier
10.07.2006, 18:06
das hat vermutlich nichts mit der Position zu tun ...

eher mit der Datenbasis auf der der Bericht basiert,
willst Du die Datenbasis einschränken ?

wenn der Bericht auf einer Tabelle basiert
und der Bericht ohne Filter oder LinkKriterien geöffnet wird
werden immer alle Datensätze herangezogen.

Was soll denn gedruckt werden ?
ein einzelner Datensatz von einem Formular aus ?
dann musst Du dies "synchronisieren"

dann wäre vermutlich richtig

strLinkCrtiteria = "FeldNameImBericht = '" & Me!FeldImFormular &"'"
If bytAntw = vbYes Then
'// Dein Code fürs erlaubte Drucken
Call fktPrinterSelektion("Bericht", "WindowsDruckerName", True)
DoCmd.OpenReport "DeinBericht", , , strLinkCriteria
'///

--=Franky=--
10.07.2006, 18:21
Private Sub btn_Archiv_Click()
On Error GoTo Fehlermeldung:

Dim I As String

I = InputBoxDK("Bitte Passwort eingeben:")

If I <> "DidHvN" Then

MsgBox "Falsches Passort!"
Exit Sub
End If

Call fktPrinterSelektion("Bericht", "Adobe PDF", True)

DoCmd.SetWarnings False 'Warnungen, dass Datensätze hinzugefügt/geändert werden, aussschalten
DoCmd.OpenReport "Bericht", acViewPreview, , "chkb_archiv = false"
strSQL = "Update [Graff-Koord] SET [archiv_datum]= '" & Now & "', [chkb_archiv]= TRUE WHERE [chkb_archiv] = FALSE;"
DoCmd.RunSQL strSQL
DoCmd.RunCommand acCmdFitToWindow
DoCmd.RunCommand acCmdZoom100
Exit Sub 'Sub verlassen, sonst kommt er jedesmal in die Fehlerbehandlung

Dim bytAntw As Byte

bytAntw = MsgBox("Tatsächlich ausdrucken ??", vbYesNo)

If bytAntw = vbYes Then
'// Dein Code fürs erlaubte Drucken
Call fktPrinterSelektion("Bericht", "WindowsDruckerName", True)
DoCmd.OpenReport "Bericht"

Else
'// das "Ausdrucken" wurde mit Nein gewählt
MsgBox "Aktion wurde abgebrochen ..."
Exit Sub
End If

Fehlermeldung: 'Fehlerbehandlung, wenn der Bericht keine Daten enthält
If Err.Number = 2501 Then
Exit Sub
Else
MsgBox Err.Description
End If
DoCmd.SetWarnings True
End Sub


Das ist das was ich habe!
Mit dem was Du mir schreibst fange ich ja wieder bei 0 an, dann gebe ich es auf, da der obige Code ja schon mein Können übersteigt :bawling:

Ich bin davon ausgegangen, dass es doch möglich sein müsste diesen so erstellten Bericht auch so auf den "Drucker" zu bekommen.
Denn auf dem Bildschirm ist ja alles super.
Nur eben das mit dem Requester hat mir noch gefehlt.


Ich danke auf jeden Fall allen Beteiligten für ihre Mühe, hat nicht sollen sein.

--=Franky=--
11.07.2006, 05:29
Sollte allerdings noch jemand einen konstruktiven Vorschlag haben, so würde ich diesen gerne entgegennehmen und ausprobieren.

Anne Berg
11.07.2006, 14:26
Was meinst du jetzt mit "Requester"?

Du öffnest da auf Button-Click einen gefilterten Bericht und die Vorschau ist OK? Und wenn du aus der Vorschau heraus druckst, geht der Filter verloren? - Das glaube ich nicht! :confused:

Gibt es noch weiteren Code in dem Berichtsmodul?

--=Franky=--
11.07.2006, 16:43
Hallo Anne Berg,

Requester = MsgBox mit der Ja/Nein Abfrage zum Drucken
Der Code unter #25 mit dem Code aus #20 hatte zur Folge, dass der Bericht auf dem Bildschirm ok. war (wenige Seiten) und beim Ausdruck alle (ca.800) drucken wollte.
Momentan bringt der Code aus #25 ja nicht mal mehr die MsgBox für den Ausdruck, ich habe das jetzt so oft hin- und hergebastelt, dass ich den Überblick verloren habe.

Ich hätte ja am liebsten Code im Berichtsöffenereignis (nach meinem Verständnis) der lediglich noch nach dem Drucken ja/nein fragt und die DS so übernimmt wie sie auch zu sehen sind, da ich den Drucker ja mit
Call fktPrinterSelektion("Bericht", "Adobe PDF", True) festlege.


Code im Bericht selbst ist wie folgt:

Option Compare Database

Private Sub Berichtskopf_Format(Cancel As Integer, FormatCount As Integer)
End Sub

Private Sub Report_NoData(Cancel As Integer)
'Wenn keine Datensätze vorhanden, dann Bericht gar nicht anzeigen.
MsgBox "Es sind keine neuen Datensätze vorhanden!"
Cancel = True
End Sub

Private Sub Seitenfußbereich_Format(Cancel As Integer, FormatCount As Integer)
Me!qmuebertrag = Me!qmzwsumme
End Sub


mehr ist nicht :(

Worf1001
11.07.2006, 17:06
Kannst Du die DB mal hier reinstellen? Zum testen...

Paul.Ostermeier
11.07.2006, 17:25
wenn hier mal nicht die Datenbasis des Berichts nach öffnen des Berichts als Preview
per Docmd.RunSQL auf 14000 DS erweitert wird ...

ich für meinen Teil hab hier im Thread genug mit der Stange im Nebel gestochert

MfG
Paul

--=Franky=--
11.07.2006, 17:45
Ja natürlich, hier ist sie zum Ansehen, allerdings nur mit ein paar Spieldaten, sonst wäre sie 6,5MB groß

wenn hier mal nicht die Datenbasis des Berichts nach öffnen des Berichts als Preview
per Docmd.RunSQL auf 14000 DS erweitert wird ...

ich für meinen Teil hab hier im Thread genug mit der Stange im Nebel gestochert

MfG
Paul


Diesen Kommentar finde ich etwas unfair, denn wenn es mir möglich wäre mich so zu artikulieren, dass Du verstehst was ich meine (oder ich verstehe wovon Du schreibst), dann wäre es mir auch lieber. Trotzdem danke für Deine Mühe...

Anne Berg
11.07.2006, 21:03
Hallo,

kannst du bitte mal eine Kurzanleitung zu deiner Demo geben? Ich habe nur einen kleinen Monitor und daher nicht so ganz den Überblick... ;)

--=Franky=--
12.07.2006, 07:21
Guten Morgen Anne Berg,

ich versuche es einfach mal ;)
Ich beziehe mich jetzt mal überwiegend auf die Berichtsseite.
Entscheidend ist der Btn":tägl. Archivierungsliste"
Der Bewirkt so ungefähr das gleiche wie das Setzen eines Archiv-Bits beim Datensichern unter Windows.
Beim ersten mal betätigen listet er alle DS auf, die noch keinen Haken bei ("Bericht gefertigt" in der Eingabemaske haben.
Klickt man kurz darauf noch einmal den Btn "tägl. Arch..." an, so findet er keine DS, weil keine neuen hinzugekommen sind.
Es tauchen erst bei Neueingaben und bei Veränderungen in einigen relevanten Feldern (Beanstandungen, Anzahl der Nachbesserungen) diese DS wieder in dem Bericht auf.

Teste einfach mal -> einmal Bericht fertigen
-> dann in einem Ds im Feld Beanstandungen Daten ändern und erneut Bericht fertigen, dann ist nur der eine DS aufgelistet.

Der Button zum "Zurücksetzen" dient dazu, wenn man feststellt, dass beim Erstellen etwas schiefgegangen ist, so kann man das Setzen des "Archiv-Bits" zurücksetzen.
Den Zeitraum sieht man in der Eingabemaske, da ich das setzen ja mit Datum und Uhrzeit dort anzeigen lasse.

Jetzt nochmal kurz zum Knackpunkt.

Wenn es möglich ist, dann soll sich direkt nach dem Erstellen des Berichtes Btn "tägl. Archiv..." klicken ein Fenster, Form, Popup oder wie immer man das nennt öffnen und lediglich die Frage nach "Drucken ja/nein" stellen und drucken.
Das Festlegen des entspr. Druckers, Einstellen auf Querformat findet ja bereits im Code des Buttons "tägl. Archiv..." statt. Hoffe ich jedenfalls ;)
Es soll der Weg nach dem Erstellen des Berichtes vermieden werden, der es nötig macht auf Datei\drucken\Druckerwahl... usw. auszuwählen.

Ich hoffe, ich konnte Dir das etwas plastischer darstellen :rolleyes:

Danke für Deine Bemühungen im Voraus

Anne Berg
12.07.2006, 07:48
Hallo, vorab noch einmal eine Rückfrage:

die Einstellung auf Querformat legst du doch bei Erstellung des Berichts fest, das sollte doch nachträglich überhaupt nicht mehr nötig sein. :confused:
Was die Druckerauswahl betrifft, so wüßte ich gern, warum die nicht auch mit dem Bericht gespeichert werden kann bzw. warum die immer wieder stattfinden muss.

--=Franky=--
12.07.2006, 08:12
Weil, wenn der Code mal irgendwann funktionieren sollte, ich einen weiteren einbaue, der die gleiche Routine für ein Faxgerät bereitstellt.
Auch mit Archivierungsfunktion und dem ganzen Schnickedöns, deshalb muss ich die Option haben.
Eigentlich drucke ich nie, ich erstelle PDFs und versende Faxe.
Das mit dem Querformat ist richtig, wenn es fest eingestellt ist, dann reicht das.
Ich habe ja erst in diesem Thread erfahren, dass das mit abgespeichert wird.

Anne Berg
12.07.2006, 08:29
Entscheidend ist der Btn":tägl. Archivierungsliste" und wenn du mir jetzt noch sagst, wo man den findet... :eek:

... dann kann ich mir (endlich) den Code dazu ansehen. ;)

--=Franky=--
12.07.2006, 08:35
"tglArchivierungsliste" = "Wochentagsliste" (Sorry, hatte ich schon geändert, da mir der Name nicht so gefiel) Der befindet sich auf der Berichtsseite..

Anne Berg
12.07.2006, 08:44
Hallo,

der Code hinter dem Button sieht aber leider völlig anders aus als der hier zuletzt gezeigte und wenn der Bericht gedruckt werden soll, erfolgt der Aufruf des Berichts ohne Filter. Anschließend wird er nochmals mit Filter in der Vorschau geöffnet...

Ich würde das ehrlich gesagt nicht so kompliziert machen. Zeige den Bericht in der Vorschau und überlasse es dem Anwender, ihn per Druckermenü zu drucken oder nach PDF zu konvertieren oder zu faxen - falls das ebenfalls über das Druckermenü zu steuern ist.

Wo siehst du den Vorteil, wenn du den Drucker aus einem Formular auswählst anstatt über das Druckermenü?

--=Franky=--
12.07.2006, 08:47
Ich weiß, ist nicht so einfach, aaaaaber:
Nicht Drucker wählen, sondern lediglich eine MsgBox die fragt drucken ja/nein, die Druckerauswahl soll im Code fest verankert sein.

Anne Berg
12.07.2006, 08:50
Und wozu die fktPrinterSelection? :confused:

Na ja, egal - jedenfalls wird der Bericht ohne Filter gedruckt, also alle Daten, so wie du es beschrieben hast, da musst du dich nicht wundern. :p


PS: ... die Vorschau kommt übrigens nur nach dem Drucken, andernfalls wird die Prozedur vorzeitig verlassen. :eek:

--=Franky=--
12.07.2006, 08:54
Ich hoffe, dass "fktPrinterSelection" den Drucker festlegt.
Na ja, egal - jedenfalls wird der Bericht ohne Filter gedruckt, also alle Daten, so wie du es beschrieben hast, da musst du dich nicht wundern.

Das ist doch des Pudels Kern und wie kann man das ändern????
Das ist doch genau das was ich wissen möchte!?
Und ich wundere mich doch... weil ich nicht mehr nachvollziehen kann was der Code im einzelnen tut :(

Anne Berg
12.07.2006, 09:16
Ich habe den Code noch ein bißchen überarbeitet und kommentiert.

<div><link href="http://www.ms-office-forum.net/forum/externals/codeconv.css" rel="stylesheet"><pre><span class="TOKEN">Private Sub</span> btn_Archiv_Click()
<span class="TOKEN">On Error GoTo</span> Fehlermeldung
<span class="TOKEN">Dim</span> I <span class="TOKEN">As</span> <span class="TOKEN">String</span>
I = InputBoxDK(&quot;Bitte Passwort eingeben:&quot;)
<span class="TOKEN">If</span> I &lt;&gt; &quot;&quot; <span class="TOKEN">Then</span>
MsgBox &quot;Falsches Passwort!&quot;
Exit Sub
<span class="TOKEN">ElseIf</span> MsgBox(&quot;Tats&auml;chlich ausdrucken ??&quot;, vbYesNo) = vbYes <span class="TOKEN">Then</span>
<span class="REM"> '// Dein Code f&uuml;rs erlaubte Drucken</span>
<span class="TOKEN">Call</span> fktPrinterSelektion(&quot;Bericht&quot;, &quot;WindowsDruckerName&quot;, <span class="TOKEN">True</span>)
DoCmd.OpenReport &quot;Bericht&quot;, acViewNormal, , &quot;chkb_archiv = False&quot; <span class="REM">' Ausdruck mit Filter!</span>
<span class="TOKEN">Else</span>
<span class="REM"> '// das &quot;Ausdrucken&quot; wurde mit Nein gew&auml;hlt, Vorschau zeigen</span>
DoCmd.OpenReport &quot;Bericht&quot;, acViewPreview, , &quot;chkb_archiv = false&quot;
DoCmd.RunCommand acCmdFitToWindow
DoCmd.RunCommand acCmdZoom100
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="REM"> '// Archiv-Bit setzen nach Ausdruck oder Vorschau</span>
strSQL = &quot;Update [Graff-Koord] SET [archiv_datum]= '&quot; &amp; Now &amp; &quot;', [chkb_archiv]= TRUE WHERE [chkb_archiv] = FALSE;&quot;
CurrentDb.Execute strSQL
end_proc:
<span class="TOKEN">Exit Sub</span> <span class="REM">'Sub verlassen</span>
Fehlermeldung: <span class="REM">'Fehlerbehandlung, wenn der Bericht keine Daten enth&auml;lt</span>
<span class="TOKEN">If</span> Err.Number = 2501 <span class="TOKEN">Then</span>
<span class="TOKEN">Exit Sub</span>
<span class="TOKEN">Else</span>
MsgBox Err.Description
<span class="TOKEN">End</span> <span class="TOKEN">If</span>
<span class="TOKEN">End</span> <span class="TOKEN">Sub</span>
&nbsp;</pre></div>
Code eingefügt mit dem MOF Code Converter (http://www.ms-office-forum.net/forum/codeconverter.php)

--=Franky=--
12.07.2006, 09:25
Yeeeehaaaaaaaaaaa!!! ,das ist es! :):):)
Ein erster Versuch hat funktioniert, teste es nochmal auf Herz und Nieren, aber sieht gut aus.

meinen herzlichsten Dank an alle die sich mit dem Thema befasst haben.