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

Обсуждение извечных проблем кларионовских (и не только) отчетов

Модератор: Дед Пахом

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

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

Сообщение Игорь Столяров »

Привет всем !

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

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

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

Вылет идёт на "SELF.Report{PROP:FlushPreview} = CHOOSE (RVal = Level:Benign)" в ABCReport.clw,
но от понимания места проблемы - мало толку. Жесть ! :(
За теми кто отстал - не возвращаться. (С) Кодекс
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

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

Сообщение Yufil »

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

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

Может быть, получится ?
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

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

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

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

Значит в самой системе печати Clarion что-то не то … Совсем. :(
За теми кто отстал - не возвращаться. (С) Кодекс
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

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

Сообщение Yufil »

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

Хотя, конечно, вряд ли.
Ну и если совсем никак, совсем на крайний случай, поставить драйвер псевдопринтера, типа FinePrint или Priprinter, а кларионовский Preview отключить нафиг .
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

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

Сообщение morkovin »

Игорь Столяров писал(а): 10 Июль 2018, 11:43Это же приложение, собранное под C10, при печати - валит Windows и приводит к её перезагрузке
это под admin-правами?
WBR, morkovin
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 48 раз

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

Сообщение Игорь Столяров »

morkovin писал(а): 10 Июль 2018, 13:48это под admin-правами?
Да. А таки есть разница с какими правами работает юзер в Windows ?!
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 4560
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 6 раз
Поблагодарили: 34 раза

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

Сообщение finsoftrz »

Я подобное наблюдал при печати из терминальной сессии. Принтер есть в списке подключенных, а фактически рабочая станция, на которой он находится физически, выключена. Как я понимаю, это скорее глюк винды. Кларионовское приложение молча вылетает. Без последствий для пользователей, перезашли, работают дальше. Когда прояснили ситуацию, пользователи больше по этому вопросу не беспокоили.
C6/C11, ШВС, tps/btrieve.
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

А только на десятой винде такое? А если принтер другой (может драйвер не так работает)? Что-то мне тоже кажется - не совсем кларионовская проблема :wink: .
We are hard at work… for you. :)
gopstop2007
✯ Ветеран ✯
Сообщения: 1702
Зарегистрирован: 25 Март 2009, 21:55
Благодарил (а): 9 раз
Поблагодарили: 4 раза

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

Сообщение gopstop2007 »

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

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

Сообщение Yufil »

Сейчас выполнил в форуме поиск по сочетанию "принтер по умолчанию". Ничто не ново под луной :)
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

Игорь, вышел из отпуска, провёл эксперимент. Есть десятая Винда на планшете, приложение, собранное на не самой последней версии десятки, сетевой принтер Konica-Minolta (сильно-продвинутый, со своим хранилищем). При отключении сети Винворд пишет о невозможности послать печать из-за неправильных настроек принтера. Приложение в printerdialog говорит, что принтер готов. При отправке на печать куда-то отправляет, Винду не валит, приложение остаётся штатно работать (как-будто всё путём). При повторном подключении сети в очереди печати принтера, естественно, ничего нет. Вот так!
We are hard at work… for you. :)
kreator
✯ Ветеран ✯
Сообщения: 4960
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 6 раз
Поблагодарили: 19 раз

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

Сообщение kreator »

Проверил на десктопной седьмой Винде (всё остальное такое же). Поведение абсолютно такое же.
We are hard at work… for you. :)
Аватара пользователя
vic7tar
Ветеран
Сообщения: 365
Зарегистрирован: 09 Февраль 2017, 20:12

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

Сообщение vic7tar »

А никто не пробовал перед посылкой на сетевой принтер пинговать его (апишные GetPrinter + InetPing)?
Структур, правда, многовато.
C10, Win10x64
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7327
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 13 раз
Поблагодарили: 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

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