Summary: | 1Cv81: Вылет в "запись дампа" при печати отчёта | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Константин Кондратюк <kondratyuk> |
Component: | Печать ; Диалог печати | Assignee: | Andrey Vusik <night> |
Status: | CLOSED FIXED | QA Contact: | |
Severity: | blocker | ||
Priority: | P1 | CC: | baraka, ivan, lav, sonner, vitperov |
Version: | 1.0.9 | ||
Target Milestone: | выпуск 1.0.9 | ||
Hardware: | PC | ||
OS: | Linux | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 777 | ||
Attachments: |
отчёт
Скриншот |
Description
Константин Кондратюк
2008-04-14 14:02:07 MSD
перед этим: fixme:psdrv:PSDRV_SelectBitmap stub Притом несколько листов обрабатываются успешно, а вылетает на листе, который расположен ближе к концу C fixme см. 664 багу - это оттуда ошибка. Вряд ли она вызывает падение. При сохранении как внешний отчёт выдаёт ту же ошибку Вообще, ошибку с записью дампа всегда считали ошибкой при обращени к движку html. И всегда спасала установка IE. В баге с печатью - первый случай, когда IE не спас. Created attachment 418 [details]
отчёт
Сохранил как внешний отчёт.
Теперь wine падает при открытии
Думаю сначала надо проверить на более новой версии 1С. Маловероятно, но возможно, что старая версия не поддерживает какое-то форматирование в новой. Если ошибка останется, то думаю, что простым удалением частей из документа можно определить какой элемент вызывает ошибку на Win98 и в бутылке версии одинаковые. Получается, что ошибка возникает при наличии какого-то элемента в отчёте Странно как-то! Всё убрал. Осталась только пустая главная форма с двумя кнопками. И всё-равно при открытии появляется ошибка При замене mshtml.dll на нативную окно "запись дампа" появляется сразу после запуска 1С 1. Не надо подменять отдельные DLL. 2. Никакого отношения html и IE к печати не имеет. Если при дебаге использовать канал mshtml, то непосредственно перед ошибкой: fixme:mshtml:HTMLDocument_open (0x344eec8)->(L"text/html" 0x32e3e4) fixme:mshtml:HTMLDocument_close (0x344eec8) fixme:mshtml:HTMLElementCollection_item unsupported arguments fixme:mshtml:HTMLElementCollection_item unsupported arguments fixme:mshtml:HTMLDocument_createElement (0x344eec8)->(L"base" 0x32e474) Это, конечно, ещё ни о чём не говорит, но попробовать с нативной mshtml.dll всё же стоило. Если пробовать с нативной, надо ставить IE6 целиком, по частям эти dll (пока) не совместимы. Но насколько я понимаю, и с ним вылетает. Может действительно там какое окно пытается появиться? Может надо в винде посмотреть? пробовал и так. Удалял mshtml.dll, после чего устанавливал IE6. В итоге отсутствующая mshtml.dll так и не появилась. А с нативной вылетает при первом обращении. Если взять mshtml.dll от Win98, то вылетает не сразу, на экране появляется главное окно, ошибка возникает при появлении окна с рекламой (которое содержит html). Думаю, что сначала надо было попробовать открыть другой внешний отчёт, и выяснить возникает эта ошибка при открытии всех внешних отчётов, или только определённых. Взял пустой шаблон отчёта: открывается нормально. При открытии исходного отчёта сразу перед ошибкой в консоле появляется: fixme:mshtml:HTMLDocument_open (0x342d488)->(L"text/html" 0x32e188) fixme:mshtml:HTMLDocument_close (0x342d488) fixme:mshtml:HTMLElementCollection_item unsupported arguments fixme:mshtml:HTMLElementCollection_item unsupported arguments fixme:mshtml:HTMLDocument_createElement (0x342d488)->(L"base" 0x32e218) При пустом шаблоне такого нет. пробовал ещё несколько внешних отчётов. Ошибка возникает Станно, почему она не возникает при пустом шаблоне отчёта. Если пустой шаблон урезать по максимому (в том числе убрать главную форму), то получается файл размером 5145 байт. Если урезать исходный файл получается 5023 байт. Странно, то, что ни в одном ничего не содержится, но один вызывает ошибку, другой - нет. функции HTMLElementCollection_item() в качестве параметра перадаётся переменная VARIANT name. Функция умеет обрабатывать только типы VT_I4 и VT_BSTR, а ей передаётся тип VT_INT. В итоге она возвращает E_INVALIDARG Дописал обработку этого типа. Бага не исчезла. Конструкция: if( V_VT(&name) == VT_INT ) { TRACE("name is VT_INT: %d\n", V_INT(&name)); .... Выдаёт: trace:mshtml:HTMLElementCollection_item name is VT_INT: 0 Ошибка возникает из-за функции HTMLDocument_createElement(), которая является заглушкой. Получается, что без установки IE корректроная работа невозможна После правильной установки IE6 внешние отчёты стали открываться без ошибок. Но при печати бага по-прежнему появляется Backtrace: =>1 0x7ed6b372 FindPrintJobFromHandle+0x22(hHandle=0x0) [/home/vitperov/Projects/wine/dlls/gdi32/printdrv16.c:301] in gdi32 (0x0032b348) 2 0x7ed6b8e3 WriteSpool16+0x33(hJob=0x0, lpData=0x7dc68029, cch=<register EDI not in topmost frame>) [/home/vitperov/Projects/wine/dlls/gdi32/printdrv16.c:514] in gdi32 (0x0032b368) 3 0x7dc5b2dc PSDRV_WriteSpool+0x9c(physDev=0x7cd4ef0, lpData=0x7dc68029, cch=0x6) [/home/vitperov/Projects/wine/dlls/wineps.drv/ps.c:223] in wineps (0x0032b398) 4 0x7dc5c365 PSDRV_WriteGSave+0x25(physDev=0x7cd4ef0) [/home/vitperov/Projects/wine/dlls/wineps.drv/ps.c:627] in wineps (0x0032b3b8) 5 0x7dc4f5fc PSDRV_StretchDIBits+0x6cc(physDev=0x7cd4ef0, xDst=0x0, yDst=0x0, widthDst=0x31, heightDst=0x2c, xSrc=0x0, ySrc=0xffffffd5, widthSrc=0x31, heightSrc=0x2c, bits=0x6723ea8, info=0x32b56c, wUsage=0x0, dwRop=0xcc0020) [/home/vitperov/Projects/wine/dlls/wineps.drv/bitmap.c:371] in wineps (0x0032b488) Думаю, надо искать создать минимально возможный файл, воспроизводящий багу. А точнее элемент в отчёте, из-за которого бага возникает бага возникает при вызове: PSDRV_StretchDIBits->PSDRV_WriteGSave->PSDRV_WriteSpool->WriteSpool16->FindPrintJobFromHandle На багу в этой функции уже существует Костин патч. Теперь падает в другом месте Backtrace: =>1 0x7eaa192c X11DRV_DIB_Lock+0xc(physBitmap=0x18, req=0x0) [/home/vitperov/Projects/wine/dlls/winex11.drv/dib.c:4503] in winex11 (0x0032b36c) 2 0x7ea91174 X11DRV_BitBlt+0x44(physDevDst=0x65f1e48, xDst=0x0, yDst=0x0, width=<register ESI not in topmost frame>, height=<register EDI not in topmost frame>, physDevSrc=0x7c04ef0, xSrc=0x0, ySrc=0x0, rop=0xcc0020) [/home/vitperov/Projects/wine/dlls/winex11.drv/bitblt.c:1658] in winex11 (0x0032b4cc) 3 0x7ed2fa5c BitBlt+0xac(hdcDst=0xfd8, xDst=0x0, yDst=0x0, width=0x31, height=0x2c, hdcSrc=0xfc4, xSrc=0x0, ySrc=0x0, rop=0xcc0020) [/home/vitperov/Projects/wine/dlls/gdi32/bitblt.c:81] in gdi32 (0x0032b55c) 4 0x124362b0 in wbase81 (+0x62b0) (0x0032b608) Created attachment 432 [details]
Скриншот
Если я правильно понял, то падает где-то в функции закрытия окна.
Скорее всего это только следствие ошибки, которая появляется гораздо раньше
Из функции X11DRV_BitBlt вызываются: X11DRV_DIB_Lock, X11DRV_DIB_Coerce и X11DRV_DIB_Unloc В них передаётся physBitmap = 0x18 А ошибка возникает при обращении physBitmap->image адрес physBitmap = 0x18 очевидно неправильный. При добавлении перед "physBitmap->image" проверки "physBitmap <0x20" ошибка исчезает. Только печать проходит очень странно: на принтер посылается каждая страница по-отдельности Ошибка присутствует? (In reply to comment #29) > Ошибка присутствует? > Проблемы нет, но печатается, действительно странно - каждая страница отдельно. Закрываю. Андрей, нельзя ли проверить в винде, там печатается так же странно, или нормально? Да нет.. Отличий не нашёл. |