При печати отчетов из программы Налогоплательщик ЮЛ 4.14 (http://www.gnivc.ru/Default.aspx?id=20) не печатаются страницы далее третьей. То есть, если в отчете три страницы - все в порядке, если в отчете больше трех страниц, то печатаются три страницы, при выводе на печать четвертой все зависает. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(4117) - not supported. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(4119) - not supported. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(4120) - not supported. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(4117) - not supported. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(4119) - not supported. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(4120) - not supported. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(4117) - not supported. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(4119) - not supported. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(4120) - not supported. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(4117) - not supported. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(4119) - not supported. fixme:psdrv:PSDRV_ExtEscape QUERYESCSUPPORT(4120) - not supported. wine: Unhandled page fault on read access to 0x00000000 at address 0x5164f04 (thread 0037), starting debugger... WineDbg starting on pid 0028 Unhandled exception: page fault on read access to 0x00000000 in 32-bit code (0x05164f04). Register dump: CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:003b EIP:05164f04 ESP:00348584 EBP:00000000 EFLAGS:00210246( - 00 -RIZP1) EAX:00000000 EBX:003485d4 ECX:003470e4 EDX:001c01f2 ESI:003470e4 EDI:00000086 Stack dump: 0x00348584: 00000000 00000086 00000000 001c01f2 0x00348594: 003485d4 00000000 00360084 00000086 0x003485a4: 003485fc 7ec2bf30 00000000 00000086 0x003485b4: 00000000 001c01f2 00000000 00000000 0x003485c4: 00000000 00000024 00000001 7ec072da 0x003485d4: 003470e4 00347120 00000000 001c01f2 Backtrace: =>1 0x05164f04 in gnivcpdoc (+0x4f04) (0x00000000) 0x05164f04: call *0x0(%ebp) Wine-dbg>
Версия 4.13 Итересно то, что в текущей версии ветки eterhack это программа вообще не работает: появляются бесконечные сообщения о невозможности записи в файлы, и о несуществовании переменных. В "чистом" wine и в wine из репозитория eterwine программа работает. Пробовал печатать на тестовый (виртуальный) принтер. Печать 5 страниц проходит без проблем. Версия 4.14 Не работает даже в "чистом" wine. Думаю это уже отдельная бага
Завёл отдельную багу (#3301)
После нажатие на "Печать" появляется сообщение "При печати произошла неизвестная ошибка"
Трейс по каналам wineps,psdrv,commdlg даёт только: trace:commdlg:PrintDlgA (0x245ead0): hwndOwner = 0x20040, hDevMode = (nil), hDevNames = (nil) pp. 0-0, min p 0, max p 0, copies 0, hinst (nil) flags 0014010c (PD_NOSELECTION PD_NOPAGENUMS PD_RETURNDC PD_USEDEVMODECOPIES[ANDCOLLATE] PD_HIDEPRINTTOFILE ) trace:commdlg:PRINTDLG_WMCommandA OK button was hit
Проверил. Комманда PSDRV_StartDoc не вызывается. Предположительно бага в диалоге печати
Отладчик паказывает падение: 0x7e5f2a36 PRINTDLG_WMCommandA+0x916 in comdlg32: movzwl 0x4(%esi),%eax Wine-dbg>First chance exception: page fault on read access to 0x00000004 in 32-bit code (0x7e5f2a36). Backtrace: =>0 0x7e5f2a36 PRINTDLG_WMCommandA+0x916() in comdlg32 (0x003289f4) 1 0x7e5f380f in comdlg32 (+0x2380f) (0x00328b44) 2 0x7ed3cbea WINPROC_wrapper+0x1a() in user32 (0x00328b74) 3 0x7ed3deae in user32 (+0xadeae) (0x00328bd4) 4 0x7ed40d32 in user32 (+0xb0d32) (0x00328c24) 5 0x7ecc52f3 DefDlgProcA+0x83() in user32 (0x00328c74) 6 0x7ed3cbea WINPROC_wrapper+0x1a() in user32 (0x00328ca4) 7 0x7ed3e15d in user32 (+0xae15d) (0x00328cf4) 8 0x7ed40e73 CallWindowProcA+0xa3() in user32 (0x00328d64) 9 0x1002e7e0 in seon (+0x2e7e0) (0x00328d84) 10 0x1002deae in seon (+0x2deae) (0x00328db0) 11 0x100307be in seon (+0x307be) (0x00328de0) 12 0x1003139b in seon (+0x3139b) (0x00328e04) 13 0x1002f29d in seon (+0x2f29d) (0x00328e54) 14 0x1002ecdc in seon (+0x2ecdc) (0x00328ed0) 15 0x1002ec8e in seon (+0x2ec8e) (0x00328ef0) 16 0x1002ddf1 in seon (+0x2ddf1) (0x00328f50) 17 0x1002dff9 in seon (+0x2dff9) (0x00328f6c) 18 0x7ed3cbea WINPROC_wrapper+0x1a() in user32 (0x00328f9c) 19 0x7ed3e15d in user32 (+0xae15d) (0x00328fec) 20 0x7ed3cfca WINPROC_wrapper+0x3fa() in user32 (0x003294bc) 21 0x7ed412b3 in user32 (+0xb12b3) (0x0032950c) 22 0x7ecffe51 in user32 (+0x6fe51) (0x0032956c) 23 0x7ed05076 in user32 (+0x75076) (0x003295ec) 24 0x7ed0551c SendMessageW+0x4c() in user32 (0x0032963c) 25 0x7ecaaa56 in user32 (+0x1aa56) (0x0032971c) 26 0x7ecab5ac in user32 (+0x1b5ac) (0x0032973c) 27 0x7ed3cbea WINPROC_wrapper+0x1a() in user32 (0x0032976c) 28 0x7ed3e15d in user32 (+0xae15d) (0x003297bc) 29 0x7ed4121b in user32 (+0xb121b) (0x0032980c) 30 0x7ecfff76 DispatchMessageW+0x96() in user32 (0x0032985c) 31 0x7ecc9e89 IsDialogMessageW+0x119() in user32 (0x003299fc) 32 0x7ecca7f4 in user32 (+0x3a7f4) (0x00329a6c) 33 0x7ecccb72 DialogBoxIndirectParamAorW+0x52() in user32 (0x00329a9c) 34 0x7ecccc11 DialogBoxIndirectParamA+0x41() in user32 (0x00329acc) 35 0x7e5f7160 PrintDlgA+0x310() in comdlg32 (0x00329f4c) 36 0x1002bc40 in seon (+0x2bc40) (0x022755a8) 37 0x00000006 (0x1003f584) 38 0x100106e0 in seon (+0x106e0) (0x10010400) 39 0x9090c310 (0x03e858b8) 40 0x00000000 (0x00000000)
то же самое, но с отладкой: Backtrace: =>0 0x7e60c471 PRINTDLG_WMCommandA+0x90d(hDlg=0x10094, wParam=1, lParam=262290, PrintStructures=0x192f38) [/srv/vitperov/Projects/wine-dev/dlls/comdlg32/printdlg.c:435] in comdlg32 (0x00328bd4) 1 0x7e60cd3c PrintDlgProcA+0x9c(hDlg=0x10094, uMsg=273, wParam=1, lParam=262290) [/srv/vitperov/Projects/wine-dev/dlls/comdlg32/printdlg.c:1873] in comdlg32 (0x00328cf4) fixme:dbghelp_dwarf:dwarf2_parse_variable Unsupported form for const value System (a) 2 0x7ed3d59a WINPROC_wrapper+0x1a() in user32 (0x00328d24) 3 0x7ed3d81d call_dialog_proc+0x65(hwnd=<register EDI not in topmost frame>, msg=273, wp=1, lp=262290, result=0x328da4, arg=0x7e60cca0) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:482] in user32 (0x00328d64) 4 0x7ed4245f WINPROC_CallDlgProcA+0x54(func=0xffff0039, hwnd=<register EDI not in topmost frame>, msg=273, wParam=1, lParam=262290) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:2402] in user32 (0x00328db4) 5 0x7ecca4f2 DefDlgProcA+0x7d(hwnd=<register ESI not in topmost frame>, msg=<register EDI not in topmost frame>, wParam=1, lParam=262290) [/srv/vitperov/Projects/wine-dev/dlls/user32/defdlg.c:443] in user32 (0x00328de4) 6 0x7ed3d59a WINPROC_wrapper+0x1a() in user32 (0x00328e14) 7 0x7ed3d97f call_window_proc+0x61(hwnd=<register EDI not in topmost frame>, msg=<register ESI not in topmost frame>, wp=1, lp=262290, result=0x328ea0, arg=0x7ecca475) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:461] in user32 (0x00328e54) 8 0x7ed426a0 CallWindowProcA+0x118(func=<is not available>, hwnd=0x10094, msg=273, wParam=1, lParam=262290) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:2324] in user32 (0x00328ec4) 9 0x1002e7e0 in seon (+0x2e7e0) (0x00328ee4) 10 0x1002deae in seon (+0x2deae) (0x00328f10) 11 0x100307be in seon (+0x307be) (0x00328f40) 12 0x1003139b in seon (+0x3139b) (0x00328f64) 13 0x1002f29d in seon (+0x2f29d) (0x00328fb4) 14 0x1002ecdc in seon (+0x2ecdc) (0x00329030) 15 0x1002ec8e in seon (+0x2ec8e) (0x00329050) 16 0x1002ddf1 in seon (+0x2ddf1) (0x003290b0) 17 0x1002dff9 in seon (+0x2dff9) (0x003290cc) 18 0x7ed3d59a WINPROC_wrapper+0x1a() in user32 (0x003290fc) 19 0x7ed3d97f call_window_proc+0x61(hwnd=<register EDI not in topmost frame>, msg=<register ESI not in topmost frame>, wp=1, lp=262290, result=0x3296b0, arg=0x1002dfce) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:461] in user32 (0x0032913c) 20 0x7ed405f6 WINPROC_CallProcWtoA+0x196(callback=0x7ed3d91e, hwnd=0x10094, msg=273, wParam=1, lParam=262290, result=0x3296b0, arg=0x1002dfce) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:1276] in user32 (0x0032961c) 21 0x7ed42a64 WINPROC_call_window+0x183(hwnd=<register EDI not in topmost frame>, msg=273, wParam=1, lParam=262290, result=0x3296b0, unicode=1, mapping=WMCHAR_MAP_SENDMESSAGE) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:2213] in user32 (0x0032965c) 22 0x7ed0332a call_window_proc+0x8e(hwnd=<register ESI not in topmost frame>, msg=<register EDI not in topmost frame>, wparam=1, lparam=262290, unicode=1, same_thread=1, mapping=WMCHAR_MAP_SENDMESSAGE) [/srv/vitperov/Projects/wine-dev/dlls/user32/message.c:1642] in user32 (0x003296bc) 23 0x7ed08917 send_message+0x1bd(info=<register EDI not in topmost frame>, res_ptr=0x329758, unicode=1) [/srv/vitperov/Projects/wine-dev/dlls/user32/message.c:2502] in user32 (0x0032971c) 24 0x7ed08dd6 SendMessageW+0x4c(hwnd=0x10094, msg=273, wparam=1, lparam=262290) [/srv/vitperov/Projects/wine-dev/dlls/user32/message.c:2625] in user32 (0x0032975c) 25 0x7ecb06d4 ButtonWndProc_common+0x72f(hWnd=0x40092, uMsg=<is not available>, wParam=0, lParam=524307, unicode=1) [/srv/vitperov/Projects/wine-dev/dlls/user32/button.c:435] in user32 (0x0032982c) 26 0x7ecb1415 ButtonWndProcW+0x46(hWnd=<register ESI not in topmost frame>, uMsg=514, wParam=0, lParam=524307) [/srv/vitperov/Projects/wine-dev/dlls/user32/button.c:555] in user32 (0x0032984c) 27 0x7ed3d59a WINPROC_wrapper+0x1a() in user32 (0x0032987c) 28 0x7ed3d97f call_window_proc+0x61(hwnd=<register EDI not in topmost frame>, msg=<register ESI not in topmost frame>, wp=0, lp=524307, result=0x32992c, arg=0x7ecb13cf) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:461] in user32 (0x003298bc) 29 0x7ed429ce WINPROC_call_window+0xed(hwnd=<register EDI not in topmost frame>, msg=514, wParam=0, lParam=524307, result=0x32992c, unicode=1, mapping=WMCHAR_MAP_DISPATCHMESSAGE) [/srv/vitperov/Projects/wine-dev/dlls/user32/winproc.c:2226] in user32 (0x003298fc) 30 0x7ed0344a DispatchMessageW+0x96(msg=<register EDI not in topmost frame>) [/srv/vitperov/Projects/wine-dev/dlls/user32/message.c:3145] in user32 (0x0032993c) 31 0x7ecd1223 IsDialogMessageW+0x116(hwndDlg=<register ESI not in topmost frame>, msg=0x329af4) [/srv/vitperov/Projects/wine-dev/dlls/user32/dialog.c:1256] in user32 (0x00329abc) 32 0x7ecd1b01 DIALOG_DoDialogBox+0x119(hwnd=<register EDI not in topmost frame>, owner=0x20048) [/srv/vitperov/Projects/wine-dev/dlls/user32/dialog.c:813] in user32 (0x00329b1c) 33 0x7ecd1c0c DialogBoxIndirectParamAorW+0x52(hInstance=0xc000000, template=0x7e640038, owner=<register ESI not in topmost frame>, dlgProc=0x7e60cca0, param=1650488, flags=2) [/srv/vitperov/Projects/wine-dev/dlls/user32/dialog.c:874] in user32 (0x00329b3c) 34 0x7ecd1ca0 DialogBoxIndirectParamA+0x41(hInstance=0xc000000, template=0x7e640038, owner=0x20048, dlgProc=0x7e60cca0, param=1650488) [/srv/vitperov/Projects/wine-dev/dlls/user32/dialog.c:882] in user32 (0x00329b6c) 35 0x7e60a01f PrintDlgA+0x320(lppd=0x3862330) [/srv/vitperov/Projects/wine-dev/dlls/comdlg32/printdlg.c:2165] in comdlg32 (0x00329fec) 36 0x1002bc40 in seon (+0x2bc40) (0x02275608) 37 0x00000006 (0x1003f584) 38 0x100106e0 in seon (+0x106e0) (0x10010400) 39 0x9090c310 (0x03e858b8) 40 0x00000000 (0x00000000)
Строка, вызывающая ошибку: 0x7e60c471 PRINTDLG_WMCommandA+0x90d [/srv/vitperov/Projects/wine-dev/dlls/comdlg32/printdlg.c:435] in comdlg32: movzwl 0x4(%esi),%eax 435 copiesSupported = DeviceCapabilitiesA(devname,portname,DC_COPIES,NULL,dm);
странно. Без отладчика ошибка возникает уже на строке: devname = ((char*)dn)+dn->wDeviceOffset; При дальнейшем рассмотрении оказалось, что переменные lppd->hDevNames и lppd->hDevMode равны нулю. При проверке на ноль данных значений всё начинает работать. Но данный кусок кода отвечает за дуплексную печать. Сейчас бага решена, но дуплексная печать в Налогоплательщике работать не будет. Можно попробовать найти причину почему передаются нулевые структуры (исли эта причина не в самом Налогоплательщике)
место вызова PRINTDLG_UpdatePrintDlgA- строка 2168 функции PrintDlgA Странно, но PRINTDLG_CreateDevNames вызывается только после вызова самого диалога. Возможно донная структура остаётся после предыдущего выбранного принтера, и будет ошибкой вызывать её там, где она сейчас вызывается. Надо проверить что происходит в 1С
Проверил. Разница между Налогопл. и 1С следующая: В 1с PrintDlgA вызывается 2 раза: fixme:commdlg:PrintDlgA lppd->hDevMode=(nil), lppd->hDevNames=(nil) fixme:commdlg:PrintDlgA lppd->hDevMode=0x7da85fa, lppd->hDevNames=0x3b466b2 и второй раз с заполненными структурами, а в Налогоплательщике только 1 раз fixme:commdlg:PrintDlgA lppd->hDevMode=(nil), lppd->hDevNames=(nil)
Да, теперь я вижу, что предыдущий патч сделан неправильно: берутся старые параметры устройства. Можно попробовать получать их из структуры: LPPRINTER_INFO_2A pi = PrintStructures->lpPrinterInfo;
Откатил предыдущий неверный коммит commit 0da85e9a4a9e5f1131aeb473d77659ca749c5b4f Author: Vitaly Perov <vitperov@etersoft.ru> Date: Mon May 26 15:43:41 2008 +0400 [BUGFIX] comdlg32->printdlg.c: FIXES BUG 1686; Pages are printed incorrecly in duplex mode Сделал патч. Приложил в eterwine.
WINE@Etersoft 1.0.12 eter5/eter4 Приянто.