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

Обсуждение извечных проблем кларионовских (и не только) отчетов
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 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,
но от понимания места проблемы - мало толку. Жесть ! :(
«V» значит Вендетта !

Yufil
Ветеран движения
Сообщения: 1034
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

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

Сообщение Yufil » 10 Июль 2018, 12:46

Было когда-то у одного клиента. Правда, принтер не сетевой, а самый обычный, а авария возникала, если принтер просто был выключен из розетки или уборщица выдернула кабель.

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

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

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 10 Июль 2018, 13:03

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

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

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

Значит в самой системе печати Clarion что-то не то … Совсем. :(
«V» значит Вендетта !

Yufil
Ветеран движения
Сообщения: 1034
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

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

Сообщение Yufil » 10 Июль 2018, 13:17

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

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

Аватара пользователя
morkovin
Ветеран
Сообщения: 536
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

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

Сообщение morkovin » 10 Июль 2018, 13:48

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

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 10 Июль 2018, 14:09

morkovin писал(а):
10 Июль 2018, 13:48
это под admin-правами?
Да. А таки есть разница с какими правами работает юзер в Windows ?!
«V» значит Вендетта !

Аватара пользователя
finsoftrz
Ветеран
Сообщения: 875
Зарегистрирован: 06 Ноябрь 2014, 12:48

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

Сообщение finsoftrz » 10 Июль 2018, 14:26

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

kreator
Ветеран
Сообщения: 2955
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 10 Июль 2018, 17:59

А только на десятой винде такое? А если принтер другой (может драйвер не так работает)? Что-то мне тоже кажется - не совсем кларионовская проблема :wink: .
We are hard at work… for you. :)

gopstop2007
Ветеран
Сообщения: 1134
Зарегистрирован: 25 Март 2009, 21:55

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

Сообщение gopstop2007 » 10 Июль 2018, 22:00

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

Yufil
Ветеран движения
Сообщения: 1034
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

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

Сообщение Yufil » 11 Июль 2018, 21:05

Сейчас выполнил в форуме поиск по сочетанию "принтер по умолчанию". Ничто не ново под луной :)

kreator
Ветеран
Сообщения: 2955
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 19 Июль 2018, 15:02

Игорь, вышел из отпуска, провёл эксперимент. Есть десятая Винда на планшете, приложение, собранное на не самой последней версии десятки, сетевой принтер Konica-Minolta (сильно-продвинутый, со своим хранилищем). При отключении сети Винворд пишет о невозможности послать печать из-за неправильных настроек принтера. Приложение в printerdialog говорит, что принтер готов. При отправке на печать куда-то отправляет, Винду не валит, приложение остаётся штатно работать (как-будто всё путём). При повторном подключении сети в очереди печати принтера, естественно, ничего нет. Вот так!
We are hard at work… for you. :)

kreator
Ветеран
Сообщения: 2955
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

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

Сообщение kreator » 19 Июль 2018, 15:14

Проверил на десктопной седьмой Винде (всё остальное такое же). Поведение абсолютно такое же.
We are hard at work… for you. :)

Аватара пользователя
vic7tar
Активист
Сообщения: 137
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar » 20 Июль 2018, 3:34

А никто не пробовал перед посылкой на сетевой принтер пинговать его (апишные GetPrinter + InetPing)?
Структур, правда, многовато.
C10, Win10x64

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

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

Сообщение Игорь Столяров » 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

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

Ответить