Bug 3852

Summary: 1С77: не работает печать через Таб.Напечатать (без диалога)
Product: WINE@Etersoft Reporter: Боренко Денис <denis>
Component: Печать ; Диалог печатиAssignee: Денис Баранов <baraka>
Status: CLOSED FIXED QA Contact:
Severity: critical    
Priority: P1 CC: baraka, lav, sonner, vitperov
Version: 1.0.10   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: 16571 Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 443, 1217, 3851, 6388    

Description Боренко Денис 2009-04-21 09:56:39 MSD
Теперь не работает метод
Таб.Напечатать(); 
где Таб -- объект "Таблица"
Вне зависимости от параметров (показывать диалог печати или нет).
Печатаю на штатный cups PDF принтер.
Если таблицу показать и печатать из панели инструментов, то все ок.
wine 1.0.10-eter19/13 на ubuntu intrepid
Comment 1 Боренко Денис 2009-04-21 09:57:17 MSD
1с версии 7.7
Comment 2 Боренко Денис 2009-04-21 10:17:02 MSD
В трайсе выдает вот такое:
trace:winspool:OpenPrinterW (L"PDF", 0x32d9e8, (nil))
trace:winspool:OpenPrinterW returning 1 with 127 and 0x1
trace:winspool:GetPrinterDataExA (0x1, "PrinterDriverData", "Paper Size" (nil), 0x32d9ec, 00000004, 0x32d9f0)
warn:winspool:GetPrinterDataExA Can't open subkey "PrinterDriverData"
trace:winspool:EnumPrinterDataExA 0x1 PrinterDriverData\FontSubTable
trace:winspool:EnumPrinterDataExW 0x1 L"PrinterDriverData\\FontSubTable"
trace:winspool:EnumPrinterDataExW RegOpenKeyExW (0x1, L"PrinterDriverData\\FontSubTable") returned 2
trace:winspool:EnumPrinterDataExA EnumPrinterDataExW returned 2
trace:winspool:ClosePrinter (0x1)
trace:winspool:ClosePrinter (nil): (null) (hXcv: (nil)) for L"PDF" (doc: (nil))
lpr: Ошибка – не удается получить доступ к «1» – No such file or directory

Принтер в cups называется "PDF"
Comment 3 Боренко Денис 2009-04-21 23:56:20 MSD
Скорей всего 3851, 3855 -- то же самое. Тоже наблюдал в консоли:
fixme:psdrv:PSDRV_StartPage Already started a page?
Comment 4 Vitaly Lipatov 2009-04-22 19:00:47 MSD
Я так понимаю, что бага 3851 имеет эти же корни?

Воспроизведение:
Регламентированные отчёты -> бух. отчёты -> бух. балланс.

При печати в консоли появляется:
fixme:psdrv:PSDRV_StartPage Already started a page?

Сам документ на печать не посылается.

Если сохранить отчёт в формате mxl, а затем
распечатать, то всё прекрасно печатается.

Cудя по трейсу по каналу psdrv, 1С посылает
посылает документ на печать (рисует
графические примитивы).

Comment 5 Vitaly Lipatov 2009-04-22 19:03:15 MSD
*** Bug 3851 has been marked as a duplicate of this bug. ***
Comment 6 Боренко Денис 2009-04-22 19:41:20 MSD
3851 и 3855 -- очень похоже, что корень один.
Из 1с не печатает, если печать производится програмными средствами из модулей (методом Таб.Напечатать()). При печати из панели инструментов и из меню уже показаной таблицы все ок.
Баланс не печатается, скорей всего, потому что направляется на печать сразу, без показа таблицы.
Когда пытался потрейсить встречал две штуки:
lpr: Ошибка – не удается получить доступ к «1» – No such file or directory
и
fixme:psdrv:PSDRV_StartPage Already started a page?
причем первое вываливается несколько раз за печать и не вываливается если печатать показанную таблицу.
В 1.0.9 печатало нормально.
Comment 7 Виталий Перов 2009-04-24 17:47:37 MSD
Нашёл примерное место ошибки.
После печати первой страницы PSDRV_EndPage() не доходит до конца, а выходит на инструкции    
if(!PSDRV_WriteEndPage( physDev ))
        return 0;

соответственно не ставится physDev->job.OutOfPage = TRUE;
и PWDRV_StartPage думает, что предыдущая страница ещё не закончилась.

PSDRV_WriteEndPage вызывает WriteSpool16 для записи в спул заголовка конца страницы, но  WriteSpool16 возвращает SP_OUTOFDISK (количество записанных байт меньше количества исходных)
Comment 8 Виталий Перов 2009-04-24 18:10:06 MSD
можно проанализировать ошибку, содержащуюся в errno после вызова write:
ERROR = Обрыв канала

Скорей всего проблемы с вызовом "| lpr...."
Comment 9 Виталий Перов 2009-04-24 18:24:58 MSD
Всё оказалось просто. Формируется строка комманды:
lpr -P'HpTest' -T'' -# 1 -o Collate=False -o sides=one-sided

с пустым названием задание, поэтому lpr сразу завершается.
Где-то уже было это исправление, но оно как-то пропало.
Comment 10 Виталий Перов 2009-04-24 19:16:29 MSD
Сделал патч.
Всё работает.
Comment 11 Боренко Денис 2009-04-24 22:16:54 MSD
Ура!
А можно сборку с патчем?
Comment 12 Vitaly Lipatov 2009-04-25 01:45:40 MSD
Просто закажите сборку. Там будет пакет wine-etersoft-1.0.10-eter20
Comment 13 Денис Баранов 2009-04-25 18:00:09 MSD
Принято eter20/13
Comment 14 Глеб Кордюков 2010-11-08 15:19:53 MSK
Проверить на текущей сборке. В заявке РТ наблюдается регресс.
Comment 15 Глеб Кордюков 2010-11-08 15:21:53 MSK
По результату, ответить клиенту в заявку.
Comment 16 Глеб Кордюков 2010-11-08 15:26:50 MSK
Открываю по 1.0.12