Kein Druck mehr möglich

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Kein Druck mehr möglich

Beitrag von Wolfgang_B »

Hallo,
diese Problem taucht plötzlich ohne Änderung an der App. schon bei 2 meiner Kunden auf. Beim Drucken kommt Fehlermeldung "Kein Drucker installiert". Beim ersten Kunden hat der IT-Service irgendetwas am Drucker umgestellt, dann gings wieder (leider keine Ahnung was, ist nicht erreichbar), beim zweiten Kunden heute das gleiche Problem. Dummerweise kann man mit Windows-Programmen (Word etc.) drucken.

Ist Euch das was bekannt?
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Kein Druck mehr möglich

Beitrag von Rolf Ramacher »

Hallo Wolfgang

wie druckst du denn aus xbase heraus ? xbpprintdialog ()

da kann das nicht passieren, hierbei werden die Drucker angezeigt, die unter Windows installiert sind.
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Kein Druck mehr möglich

Beitrag von Wolfgang_B »

Hallo Rolf,
ich drucke mit Huberts Durckerklasse. Die installierten Drucker sind auch sichtbar.

oPr := XbpPrinter():new()
oPr:create()
aPRList := oPr:list()

Der Fehler wird hier abgefragt:

oDrucker := Druckformulare():New():create()
IF oDrucker:IsPrinterError()
MsgBox("Kein Drucker installiert (J)" )
RETURN(NIL)
ENDIF

Bisher hats ja immer funktioniert ... Nichteinmal "Microsoft Print to PDF" funktioniert mehr ...
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Kein Druck mehr möglich

Beitrag von Wolfgang Ciriack »

Ich tippe mal stark auf irgendein Windows Update. Evtl. falls noch nicht passiert, PC nochmals komplett neu starten. Ansonsten mal schauen, welche Updates zuletzt installiert wurden, ob es noch weitere Windows Updates gibt, evtl. mal Updates deinstallieren, etc.
Auch mal den Standarddrucker direkt setzen (Windows verwaltet Standarddrucker ausschalten).
Zuletzt geändert von Wolfgang Ciriack am Fr, 10. Sep 2021 17:01, insgesamt 1-mal geändert.
Viele Grüße
Wolfgang
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Kein Druck mehr möglich

Beitrag von Wolfgang_B »

Die Vermutung habe ich auch. Das Problem ist, daß der Server in einem Rechenzentrum läuft. Auf die Windowsteile habe ich keinen Zugriff.
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Kein Druck mehr möglich

Beitrag von Wolfgang_B »

Habe gerade mit dem Rechenzentrum telefoniert. Bei denen ist nichts bekannt.
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Kein Druck mehr möglich

Beitrag von ramses »

Das ist ein bekanntes Problem:
Versuch mal PrintError() rauszunehmen. Unter Windows Drucker ist es eigenlich nicht vorgesehen den Druckerstatus aus der App abzufragen denn der Spooler ist immer bereit auch wenn der Drucker kein Papier mehr hat oder ausgeschaltet ist. Genau deshalb lässt sich auch aus Word problemlos Drucken.

Aus der Windows Doc:

Wenn die Druckerwarteschlange leer ist wird angenommen, dass der Drucker bereit für die Annahme von Druckaufträgen ist. Dies ist eine gültige Annahme, auch wenn sich der physische Drucker in einem Fehlerzustand befindet, z. B. offline. Das Betriebssystem betrachtet den Drucker als bereit, Druckaufträge zu akzeptieren, auch wenn die Zustellung an den physischen Drucker aus irgendeinem Grund nicht abgeschlossen werden kann. Ein solcher Fall wird als Fehlerstatus im Betriebssystem betrachtet, der vom Benutzer behoben werden muss. Es wird nicht als Fehler betrachtet, der für die Anwendung gemeldet werden kann, die die Warteschlange des Druckauftrags erfolgreich abschließen kann.

Quelle: Microsoft DOCS
Valar Morghulis

Gruss Carlo
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Kein Druck mehr möglich

Beitrag von Wolfgang_B »

ok, kann ich machen. Werde dann am Montag berichten..
Vielen Dank ..
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Kein Druck mehr möglich

Beitrag von AUGE_OHR »

hi,
ramses hat geschrieben: Fr, 10. Sep 2021 19:48 Das ist ein bekanntes Problem:
Versuch mal PrintError() rauszunehmen.
wie ich versucht habe dir zu erklären ist das Quatsch auf Xbase++ bezogen.

es geht Primär darum "ob" das XbpPrinter Object "richtig" erstellt wurde was üblicherweise nicht geprüft wird.
natürlich kann man nur dann den Printer Status "richtig" abfragen ohne das es knallt.
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Kein Druck mehr möglich

Beitrag von Werner_Bayern »

Servus Wolfgang,

dazu habe ich mir die Methode create() in Huberts Druckerklasse in hbprint.prg etwas angepasst:

Code: Alles auswählen

METHOD _HBPrinter:create(cDrucker)
LOCAL oDrucker, nDrucker := 1
STATIC saDrucker

IF saDrucker == NIL
  saDrucker := ::DruckerListe()
  aeval(saDrucker, {|x, i| saDrucker[i] := upper(x)})
ENDIF
IF cDrucker == NIL .OR. (nDrucker := aScan(saDrucker, {|x|x == upper(cDrucker)})) == 0
// entweder kein oder unbekannten Drucker uebergeben, also Standarddrucker aus dem System oder 1. tatsächlichen Drucker
  IF nDrucker == 0 // Drucker gibt es nicht (mehr), Druckerliste neu einlesen
    saDrucker := ::DruckerListe()
    aeval(saDrucker, {|x, i| saDrucker[i] := upper(x)})
  ENDIF
  cDrucker := getDefaultPrinter()
  IF empty(cDrucker)  // kein Defaultdrucker im System!
    oDrucker := Druckerauswahl(saDrucker[1])  // Dialog zur Druckerauswahl
    IF .NOT. oDrucker == NIL
      cDrucker := oDrucker:devName
      oDrucker:destroy()
    ELSE
      cDrucker := saDrucker[1]
    ENDIF
  ENDIF
ENDIF

if IsNil(::_oPS)
   ::_oPS             := ::PrinterPS(cDrucker)
   ::oPrinterPS       := ::_oPS
endif

::nLineFeed           := 49 // laut AmiPro hat 12 Punkt Times new Roman genau 4.9 mm Abstand.
                            // a 12 point Times New Roman in AmiPro (my favorite textprogram) has exactly 4.9 mm linefeed
return self
dann die Methode DurckerListe hinzugefügt:

Code: Alles auswählen

    METHOD _HBPrinter:Druckerliste() // gibt alle installierten Drucker zurück.
      LOCAL aDrucker := XbpPrinter():new():list()

      IF aDrucker == NIL
         aDrucker := {} // Fehler später vermeiden
      ENDIF
      RETURN aDrucker
und der Aufruf erfolgt so:

Code: Alles auswählen

oDrucker := FormularDrucker():new():create(cDruckername)
IF .NOT. oDrucker:printerStatus() == XBPPRN_STATUS_READY
   IF .NOT. fehler("Der Drucker '" + oDrucker:devName + "' meldet folgenden Fehler: " + chr(13) + chr(13) +;
   cPrinterStatus(oDrucker:printerStatus()) + chr(13) + chr(13) + "Trotzdem drucken?",,,,,,XBPMB_OKCANCEL) == XBPMB_RET_OK
      RETURN NIL
   ENDIF
ENDIF
Der Anwender kann also entscheiden, ob er trotzdem druckt, oder nicht.

Funktioniert nach etlichen Anpassungen seit Jahren...

Die Funktionen von uns dürften selbsterklärend sein.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Kein Druck mehr möglich

Beitrag von AUGE_OHR »

hi,

ist der Drucker an einem PC angeschlossen ( wie ? ) oder hat er eine eigene Netzwerkkarte ( mit IP Adresse ) :?:

leider "sehe" ich den IMHO wichtigen Teil nicht

Code: Alles auswählen

   ::PrinterPS(cDrucker)
das ist doch der Teil wo es, wenn, schon harkt

---

Printerstatus war ursprünglich für LPT wo man eine "direkte" Leitung durch den Parallele Port hatte.
USB und Netzwerk IP laufen aber "anders" und :PrinterPS(cDrucker) "könnte" ein "falsches" Object erzeugen.

dann tritt das auf was Carlo schildert mit dem Spooler wo sich die Druck-Jobs ansammeln aber nichts gedruckt wird.
"irgendwann" meldet sich dann der Spooler ... aber ich habe schon alle als "gedruckt" markiert ...

also überprügt ob das XbpPrinter Object "richtig" erstellt wurde bevor ihr es mit dem Presentation Space verknüpft

Code: Alles auswählen

FUNCTION PRINTERPS( cPrinter, nCopies, nPaperBin )
LOCAL oDC    := XBPPRINTER() :New()

      IF oDC:Create( cPrinter ) == oDC       // = self
      ELSE
         MSGBOX( "! Drucker ist Offline !" )
         BREAK                               // raus
      ENDIF
      nStatus := oDC:PrinterStatus()
      ...
      
      oPS := XBPPRESSPACE() :New()
      oPS:Create( )
      oPS:configure( oDC, oDC:paperSize(), GRA_PU_LOMETRIC )

RETURN oPS
probiert es doch einfach aus
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Kein Druck mehr möglich

Beitrag von Werner_Bayern »

AUGE_OHR hat geschrieben: Sa, 11. Sep 2021 2:39 ist der Drucker an einem PC angeschlossen ( wie ? ) oder hat er eine eigene Netzwerkkarte ( mit IP Adresse ) :?:
Ist doch egal, heutzutage dürften wohl >90% der Drucker über LAN oder WLAN und der Rest per USB angeschlossen sein. LPT gibt's seit 1000 Jahren nicht mehr...
Wen interessierts, PrinterStatus() liefert immer die korrekte Info, der Code von Hubert und mir lässt ggf. dem Benutzer die Wahl.
leider "sehe" ich den IMHO wichtigen Teil nicht

Code: Alles auswählen

   ::PrinterPS(cDrucker)
das ist doch der Teil wo es, wenn, schon harkt
Was fehlt Dir hier? cDrucker wird mit einem gültigen Namen belegt, sobald es mind. einen Drucker im System gibt.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Kein Druck mehr möglich

Beitrag von AUGE_OHR »

hi,

lies dir mal den Thread in der Alsaka Newgroup durch
29. Januar 2008
public.xbase++.generic
xbpprinter printerstatus
solange nicht "geprüft" wird ob das XbpPrinter() Object "richtig" ( = self ) erstellt wurde "kann" es schief gehen.

p.s. nur weil es bei dir funktioniert muss es nicht richtig sein
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Kein Druck mehr möglich

Beitrag von Werner_Bayern »

Servus Jimmy,

das fängt Hubert schon sauber in seiner Druckerklasse in der Methode PrinterPS ab:

Code: Alles auswählen

METHOD _HBPrinter:PrinterPS(cPrinterName)
    LOCAL oPS, oDC, nBreite,nHoehe,aPaperSize, IsPrinterVorgabe

    IsPrinterVorgabe := .f.

    if IsNil(::oPrinterPS)              // erster Aufruf - first Time
       if IsNil(::oUseXbpPrinter)       // keine Vorgabe - no preselection
          oPS := XbpPresSpace():New()
          oDC := XbpPrinter():New()
       else
          oPS := XbpPresSpace():New()
          oDC := ::oUseXbpPrinter
          IsPrinterVorgabe := .t.
       endif
    else

       oPS := ::oPrinterPS
       oDC := oPS:device()
       oPS:configure()                  // oDC freigeben - release oDC
       if IsNil(oDC)
          oDC := XbpPrinter():New()
       endif
       if oDC:Status() = XBP_STAT_CREATE  // dann zurücksetzen
          oDC:destroy()
       endif
       if oPS:Status() = XBP_STAT_CREATE  // dann zurücksetzen
          oPS:destroy()
       endif
    endif

    if ! IsPrinterVorgabe
       * Nun haben wir leere Objecte
       oDC:Create(cPrinterName)
    endif

    if IsNil(oDC) .or. oDC:Status() = XBP_STAT_FAILURE
       ::_PrinterCreateErr := .t.
    else
       ::_PrinterCreateErr := .f.
    endif

    if ! ::_PrinterCreateErr

       aPaperSize := oDC:PaperSize()               // hier kommen nur 6 Elemente
       nBreite := aPaperSize[5] - aPaperSize[3]    // laut DOKU sollten es 8 sein.
       nHoehe  := aPaperSize[6] - aPaperSize[4]
       oPS:Create( oDC, {nBreite,nHoehe} , GRA_PU_LOMETRIC )

       ::SetInternalPageVars(oPS)

    endif

RETURN oPS
Deshalb auch sein Hinweis im Code:
Nach MyHBPrinter:Create() muß in Ihrem Programm
IsPrinterError() abgeprüft werden. Bei .T. müssen Sie eine
Fehlermeldung anzeigen und dürfen nicht drucken.
Funktioniert bei vielen Programmen - nicht nur bei unseren - seit vielen Jahren.
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Kein Druck mehr möglich

Beitrag von AUGE_OHR »

hi,

die gezeigte Version gibt es IMHO seit 2009 denn ursprünglich gab es einige Zeilen vorher nicht.
man muss Hubert fragen warum er die Ergänzung gemacht hat ... hat er was in der Alaska Newsgroup gelesen ...

---

die ursprüngliche Anfrage von Wolfgang lautete ja warum seine Xbase++ Apps nicht drucken.
sollte er keine "Prüfung" in seiner PrinterPS haben "könnte" es genau daran liegen
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Kein Druck mehr möglich

Beitrag von Wolfgang_B »

Guten Morgen,
nochmal zur Erinnerung. Ich verwende die Druckerklasse von Herbert schon seit ca. 2 Jahren. Bei allen meinen Kunden hat das Drucken bisher problemlos funktioniert. Das erste Problem trat vor ca. 4 Monaten bei Kyrocera Druckern auf. Hier kam dann von Microsoft zwei Notfallpatche, die das Problem (lt. Microsoft Forum größtenteils) beseitigten. Der zweite Fall vor ca 4 Wochen bei einem anderen Kunden. Hier hat der IT-Support irgendwas an der Druckerinstallation geändert, was, ließ sich bis jetzt nicht herausfinden.

Ich habe gerade mit meinem Kunden telefoniert. Es ist wieder ein Kyrocera Drucker, der nicht druckt. Auf einem anderen Drucker kann gedruckt werden. Komisch ...

Die Prüfung findet auch statt:

Code: Alles auswählen

IF oDrucker:IsPrinterError()
			MsgBox("Kein Drucker installiert" )
	RETURN(NIL)


Ich werde zukünftig noch den Fehlercode abfragen. Das hilft vielleicht weiter ...
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Kein Druck mehr möglich

Beitrag von Jan »

Hallo Wolfgang,

nur mal so ins blaue hinein: Das ist aber nicht ein neu aufgesetzter Rechner, der die damaligen MS-Patches noch nicht bekommen hat?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Kein Druck mehr möglich

Beitrag von brandelh »

IF oDrucker:IsPrinterError()

prüft ob das Druckerobjekt mit dem Treiber verbunden werden konnte, ist also nötig.
Es kann aber sein, dass ein "angehaltener" Drucker oder einer ohne Papier das auch als Fehler ausgibt.
den genaueren Printstatus abzufragen macht also Sinn.

Ich habe allen Win10 Rechnern verboten die Druckereinstellungen eigenmächtig zu ändern.
Gruß
Hubert
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Kein Druck mehr möglich

Beitrag von Wolfgang_B »

Hallo Jan,
die Rechner laufen schon seit mindestens 1 Jahr ohne Probleme ..
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Kein Druck mehr möglich

Beitrag von AUGE_OHR »

hi,
Wolfgang_B hat geschrieben: Mo, 13. Sep 2021 9:55 Ich habe gerade mit meinem Kunden telefoniert. Es ist wieder ein Kyrocera Drucker, der nicht druckt. Auf einem anderen Drucker kann gedruckt werden. Komisch ...
hatte der Kunden bei den letzten malen auch Probleme mit anderen Apps beim drucken oder nur deine Xbase++ App ?

üblicherweise "sollte" man die Treiber des Hersteller verwenden aber zum "testen" tut es im Prinzip jeder PCL Treiber.
gruss by OHR
Jimmy
Antworten