Страница 1 из 1

Печать на плохой сетевой принтер

Добавлено: 10 Июль 2018, 11:43
Игорь Столяров
Привет всем !

Обнаружился интересный нюанс работы приложений собранных под Clarion.
(во избежание предвзятости я экспериментировал со штатным примером Invoice)
Windows 10.

На рабочей станции, в обычной локальной сети, подключен сетевой принтер и установлен как
печатное устройство по умолчанию. Например "\\Server\HP Laser Jet 1020".
Всё работает штатно.

Отключаем рабочую станцию от сети (выдернул сетевой штекер).
При попытке печати на сетевой принтер, приложение собранное под C63 вылетает, причём молча, без GPF.
Это же приложение, собранное под C10, при печати - валит Windows и приводит к её перезагрузке.

Вылет идёт на "SELF.Report{PROP:FlushPreview} = CHOOSE (RVal = Level:Benign)" в ABCReport.clw,
но от понимания места проблемы - мало толку. Жесть ! :(

Печать на плохой сетевой принтер

Добавлено: 10 Июль 2018, 12:46
Yufil
Было когда-то у одного клиента. Правда, принтер не сетевой, а самый обычный, а авария возникала, если принтер просто был выключен из розетки или уборщица выдернула кабель.

В Панели Управления в свойствах принтера можно попросить не печатать текст сразу, а поставить в очередь при завершении задания. Или печатать сразу на принтер, не кэшируя... Если ставится в очередь, то Кларион тут как бы и не при чём, а отпечатать и потом можно.

Может быть, получится ?

Печать на плохой сетевой принтер

Добавлено: 10 Июль 2018, 13:03
Игорь Столяров
Yufil писал(а): 10 Июль 2018, 12:46Может быть, получится ?
У сетевого принтера стоит настройка "Начинать печать немедленно", но менять ничего нельзя (все настройки на сервере).

Установил тот же драйвер локально (без фактического подключения принтера) - всё прекрасно работает, независимо от настроек.
Задание пишется в очередь, Windows ссобщает, что принтер отключен. Т.е. так как оно и должно быть ...

При печати на "отключенный" сетевой принтер из Microsoft Office выводится сообщение, что "устройство печати недоступно
в настоящий момент". И нет никаких вылетов. Т.е. всё-таки как-то можно проверить статус принтера перед печатью …

Значит в самой системе печати Clarion что-то не то … Совсем. :(

Печать на плохой сетевой принтер

Добавлено: 10 Июль 2018, 13:17
Yufil
Может быть, сообщение выводится драйвером принтера. Тогда, возможно, конструкцию SELF.Report{PROP:FlushPreview} = CHOOSE (RVal = Level:Benign) стоит взять в скобки UnlockThread-LockThread.

Хотя, конечно, вряд ли.
Ну и если совсем никак, совсем на крайний случай, поставить драйвер псевдопринтера, типа FinePrint или Priprinter, а кларионовский Preview отключить нафиг .

Печать на плохой сетевой принтер

Добавлено: 10 Июль 2018, 13:48
morkovin
Игорь Столяров писал(а): 10 Июль 2018, 11:43Это же приложение, собранное под C10, при печати - валит Windows и приводит к её перезагрузке
это под admin-правами?

Печать на плохой сетевой принтер

Добавлено: 10 Июль 2018, 14:09
Игорь Столяров
morkovin писал(а): 10 Июль 2018, 13:48это под admin-правами?
Да. А таки есть разница с какими правами работает юзер в Windows ?!

Печать на плохой сетевой принтер

Добавлено: 10 Июль 2018, 14:26
finsoftrz
Я подобное наблюдал при печати из терминальной сессии. Принтер есть в списке подключенных, а фактически рабочая станция, на которой он находится физически, выключена. Как я понимаю, это скорее глюк винды. Кларионовское приложение молча вылетает. Без последствий для пользователей, перезашли, работают дальше. Когда прояснили ситуацию, пользователи больше по этому вопросу не беспокоили.

Печать на плохой сетевой принтер

Добавлено: 10 Июль 2018, 17:59
kreator
А только на десятой винде такое? А если принтер другой (может драйвер не так работает)? Что-то мне тоже кажется - не совсем кларионовская проблема :wink: .

Печать на плохой сетевой принтер

Добавлено: 10 Июль 2018, 22:00
gopstop2007
kreator писал(а): 10 Июль 2018, 17:59 А только на десятой винде такое? А если принтер другой (может драйвер не так работает)? Что-то мне тоже кажется - не совсем кларионовская проблема :wink: .
согласен с kreator :) когда то решил, есть офис и склад в разных частях города, в офисе послали на печать на складе отпечатало, за лет 5 ни одной накладной не пропало. Реализация имеет много решений, мое было такое, удаленный принтер скриптом каждую минуту (от 1сек до минуты - сами укажете) проверяет папку в который бросается документ (pdf), после завершения печати документ удаляется. В моем выше указанном случае, используется Megasync https://megasync.en.softonic.com/.

Печать на плохой сетевой принтер

Добавлено: 11 Июль 2018, 21:05
Yufil
Сейчас выполнил в форуме поиск по сочетанию "принтер по умолчанию". Ничто не ново под луной :)

Печать на плохой сетевой принтер

Добавлено: 19 Июль 2018, 15:02
kreator
Игорь, вышел из отпуска, провёл эксперимент. Есть десятая Винда на планшете, приложение, собранное на не самой последней версии десятки, сетевой принтер Konica-Minolta (сильно-продвинутый, со своим хранилищем). При отключении сети Винворд пишет о невозможности послать печать из-за неправильных настроек принтера. Приложение в printerdialog говорит, что принтер готов. При отправке на печать куда-то отправляет, Винду не валит, приложение остаётся штатно работать (как-будто всё путём). При повторном подключении сети в очереди печати принтера, естественно, ничего нет. Вот так!

Печать на плохой сетевой принтер

Добавлено: 19 Июль 2018, 15:14
kreator
Проверил на десктопной седьмой Винде (всё остальное такое же). Поведение абсолютно такое же.

Печать на плохой сетевой принтер

Добавлено: 20 Июль 2018, 3:34
vic7tar
А никто не пробовал перед посылкой на сетевой принтер пинговать его (апишные GetPrinter + InetPing)?
Структур, правда, многовато.

Печать на плохой сетевой принтер

Добавлено: 20 Июль 2018, 7:48
Игорь Столяров
Как-то уже обсуждали, что можно запрашивать статус принтера через API:

Код: Выделить всё

'
    Map
    WinOpenPrinter     (*CSTRING pPrinterName,       | printer or server name
                        *LONG phPrinter,             | printer or server handle
                        LONG pDefault                | printer defaults
                       ),BOOL,PASCAL,RAW,NAME('OpenPrinterA')

    WinGetPrinter      (LONG hPrinter,               | handle to printer
                        LONG Level,                  | information level
                        *? pPrinter,                 | printer information buffer
                        LONG cbBuf,                  | size of buffer
                        *LONG pcbNeeded              | bytes received or required
                       ),BOOL,PASCAL,RAW,NAME('GetPrinterA')

    WinClosePrinter    ( LONG hPrinter ),BOOL,RAW,PASCAL,PROC,Name('ClosePrinter')
    end
    
   Code
    
   If WinOpenPrinter(xName_,Loc:hPrinter,0)
        If WinGetPrinter(Loc:hPrinter,6,Loc:Buffer,Size(Loc:Buffer),Loc:Size)

        Case Loc:Buffer.PrnStatus
        Of PRINTER_STATUS_READY
           xStatus_ = 1
           xNameSt_ = 'Готов к печати'
        Of PRINTER_STATUS_PAUSED
           xStatus_ = 2
           xNameSt_ = 'Пауза'
        ...
        и т.д.   
     end

     If WinClosePrinter(Loc:hPrinter).
   end

Но толку с этого мало. Локальный принтер - всегда готов, даже если выключен.
Сетевой - по настроению. Скорее всего это функции-рудименты, которые работали когда печать
шла на матричный принтер без буферизации и можно было запросить его статус …. :(