Bug 1700

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
swine 1c81AccountingBase

Отчёты - Регламентированные отчёты - Налоговая отчётность - Декларация по ЕСН
При попытке распечатать сразу после формирования - появляется окно "Запись дампа" и 1С повисает.
Comment 1 Виталий Перов 2008-04-25 21:47:49 MSD
перед этим:
fixme:psdrv:PSDRV_SelectBitmap stub
Comment 2 Виталий Перов 2008-04-25 21:52:11 MSD
Притом несколько листов обрабатываются успешно, а вылетает на листе, который расположен ближе к концу
Comment 3 Константин Кондратюк 2008-04-26 14:13:56 MSD
C fixme см. 664 багу - это оттуда ошибка. Вряд ли она вызывает падение.
Comment 4 Виталий Перов 2008-04-26 15:29:45 MSD
При сохранении как внешний отчёт выдаёт ту же ошибку
Comment 5 Константин Кондратюк 2008-04-26 15:34:03 MSD
Вообще, ошибку с записью дампа всегда считали ошибкой при обращени к движку html. И всегда спасала установка IE. В баге с печатью - первый случай, когда IE не спас.
Comment 6 Виталий Перов 2008-04-26 15:47:13 MSD
Created attachment 418 [details]
отчёт

Сохранил как внешний отчёт.
Теперь wine падает при открытии
Comment 7 Виталий Перов 2008-04-26 15:51:02 MSD
Думаю сначала надо проверить на более новой версии 1С. 
Маловероятно, но возможно, что старая версия не поддерживает какое-то форматирование в новой.

Если ошибка останется, то думаю, что простым удалением частей из документа можно определить какой элемент вызывает ошибку
Comment 8 Виталий Перов 2008-04-26 16:24:59 MSD
на Win98 и в бутылке версии одинаковые.
Получается, что ошибка возникает при наличии какого-то элемента в отчёте
Comment 9 Виталий Перов 2008-04-26 17:44:09 MSD
Странно как-то!
Всё убрал. Осталась только пустая главная форма с двумя кнопками. И всё-равно при открытии появляется ошибка
Comment 10 Виталий Перов 2008-04-26 18:39:04 MSD
При замене mshtml.dll на нативную окно "запись дампа" появляется сразу после запуска 1С
Comment 11 Vitaly Lipatov 2008-04-26 18:44:18 MSD
1. Не надо подменять отдельные DLL.
2. Никакого отношения html и IE к печати не имеет.
Comment 12 Виталий Перов 2008-04-26 18:58:08 MSD
Если при дебаге использовать канал 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 всё же стоило.
Comment 13 Vitaly Lipatov 2008-04-26 19:54:12 MSD
Если пробовать с нативной, надо ставить IE6 целиком, по частям эти dll (пока) не совместимы. Но насколько я понимаю, и с ним вылетает.
Может действительно там какое окно пытается появиться? Может надо в винде посмотреть?
Comment 14 Виталий Перов 2008-04-26 20:57:36 MSD
пробовал и так.
Удалял mshtml.dll, после чего устанавливал IE6. В итоге отсутствующая mshtml.dll так и не появилась.

А с нативной вылетает при первом обращении.
Если взять mshtml.dll от Win98, то вылетает не сразу, на экране появляется главное окно, ошибка возникает при появлении окна с рекламой (которое содержит html).
Comment 15 Виталий Перов 2008-04-26 20:59:26 MSD
Думаю, что сначала надо было попробовать открыть другой внешний отчёт, и выяснить возникает эта ошибка при открытии всех внешних отчётов, или только определённых.
Comment 16 Виталий Перов 2008-04-28 16:39:15 MSD
Взял пустой шаблон отчёта: открывается нормально.

При открытии исходного отчёта сразу перед ошибкой в консоле появляется:
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)

При пустом шаблоне такого нет.
Comment 17 Виталий Перов 2008-04-28 16:50:25 MSD
пробовал ещё несколько внешних отчётов. Ошибка возникает

Станно, почему она не возникает при пустом шаблоне отчёта.

Если пустой шаблон урезать по максимому (в том числе убрать главную форму), то получается файл размером 5145 байт.

Если урезать исходный файл получается 5023 байт.

Странно, то, что ни в одном ничего не содержится, но один вызывает ошибку, другой - нет.
Comment 18 Виталий Перов 2008-04-28 17:19:55 MSD
функции HTMLElementCollection_item() в качестве параметра перадаётся переменная  VARIANT name.

Функция умеет обрабатывать только типы VT_I4 и VT_BSTR, а ей передаётся тип VT_INT. В итоге она возвращает E_INVALIDARG 
Comment 19 Виталий Перов 2008-04-28 17:29:25 MSD
Дописал обработку этого типа. Бага не исчезла.

Конструкция:
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
Comment 20 Виталий Перов 2008-04-28 17:54:09 MSD
Ошибка возникает из-за функции HTMLDocument_createElement(), которая является заглушкой.

Получается, что без установки IE корректроная работа невозможна
Comment 21 Виталий Перов 2008-04-28 17:57:18 MSD
После правильной установки IE6 внешние отчёты стали открываться без ошибок.
Но при печати бага по-прежнему появляется
Comment 22 Виталий Перов 2008-04-28 19:15:39 MSD
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)
Comment 23 Виталий Перов 2008-04-28 19:16:51 MSD
Думаю, надо искать создать минимально возможный файл, воспроизводящий багу. А точнее элемент в отчёте, из-за которого бага возникает
Comment 24 Виталий Перов 2008-04-28 20:32:04 MSD
бага возникает при вызове:
PSDRV_StretchDIBits->PSDRV_WriteGSave->PSDRV_WriteSpool->WriteSpool16->FindPrintJobFromHandle
Comment 25 Виталий Перов 2008-04-28 20:57:56 MSD
На багу в этой функции уже существует Костин патч.
Теперь падает в другом месте
Comment 26 Виталий Перов 2008-04-28 21:12:10 MSD
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)
Comment 27 Виталий Перов 2008-05-05 21:49:51 MSD
Created attachment 432 [details]
Скриншот

Если я правильно понял, то падает где-то в функции закрытия окна.

Скорее всего это только следствие ошибки, которая появляется гораздо раньше
Comment 28 Виталий Перов 2008-05-19 21:26:03 MSD
Из функции X11DRV_BitBlt вызываются:
X11DRV_DIB_Lock,  X11DRV_DIB_Coerce и X11DRV_DIB_Unloc
В них передаётся physBitmap = 0x18
А ошибка возникает при обращении physBitmap->image

адрес physBitmap = 0x18 очевидно неправильный.
При добавлении перед "physBitmap->image"  проверки "physBitmap <0x20" ошибка исчезает.

Только печать проходит очень странно: на принтер посылается каждая страница по-отдельности
Comment 29 Денис Баранов 2008-09-19 02:42:56 MSD
Ошибка присутствует?
Comment 30 Andrey Vusik 2008-09-19 14:34:32 MSD
(In reply to comment #29)
> Ошибка присутствует?
> 

Проблемы нет, но печатается, действительно странно - каждая страница
отдельно. Закрываю.
Comment 31 Vitaly Lipatov 2008-09-19 16:13:10 MSD
Андрей, нельзя ли проверить в винде, там печатается так же странно, или нормально?
Comment 32 Andrey Vusik 2008-09-21 21:22:20 MSD
Да нет.. Отличий не нашёл.