Bug 4156

Summary: Печать линий в 1С
Product: WINE@Etersoft Reporter: Денис Баранов <baraka>
Component: Печать ; Диалог печатиAssignee: Илья Шпигорь <shpigor>
Status: CLOSED FIXED QA Contact: Денис Баранов <baraka>
Severity: minor    
Priority: P3 CC: lav, night, vitperov
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: 11037, 11189 Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 3932, 7391    
Attachments: Пример ошибки
Реестр документов в Windows
Реестр документов в Wine
Реестр документов в Wine с патчем

Description Денис Баранов 2009-07-29 21:53:31 MSD
Created attachment 1270 [details]
Пример ошибки

Конфигурация Торговля и склад.
Реестр документов не выводится на печать -
задание просто пропадает.
При этом в консоль валится
fixme:psdrv:PSDRV_SelectBitmap stub
fixme:bitmap:BITMAP_SetOwnerDC Trying to select bitmap 0x3d18 in different DC
type

Ошибка возникает из-за неправильно работающей функции Biblt() (http://bugs.etersoft.ru/show_bug.cgi?id=664)

Предлагается сделать хак, который будет вместо мусора заполнять 0.
Comment 1 Vitaly Lipatov 2009-07-29 22:22:21 MSD
В этом случае
а) не будет обращений к неинициализированной памяти (мусору), которая ведёт к падению
б) Линии будут нормально чёрными

Если конечно я правильно понимаю проблему.
Comment 2 Илья Шпигорь 2009-08-21 14:18:53 MSD
Created attachment 1295 [details]
Реестр документов в Windows
Comment 3 Илья Шпигорь 2009-08-21 14:19:18 MSD
Created attachment 1296 [details]
Реестр документов в Wine
Comment 4 Илья Шпигорь 2009-08-24 13:42:36 MSD
Выложил патч.

Проблема с функцией StretchBlt. В случае работы с DC принтера она вызывает StretchDIBits. Перед этим происходит заполнение bits. В данном случае этого сделать не удается. Bitmap, который находится в hdcSrc, имеет пустое bmBits равное NULL. Не совсем понятно почему так происходит, ведь в windows пунктирная линия копируется. Из-за этого в bits оказывается мусор, который и выводится на печать.

Решение заключается в проверке результата работы GetDIBits. Если возвращаемое значение равно 0, тогда область памяти bits заполняется нулями.
Comment 5 Илья Шпигорь 2009-08-24 13:45:34 MSD
Created attachment 1300 [details]
Реестр документов в Wine с патчем

После приложения патча линии выглядят так.
Comment 6 Andrey Vusik 2009-09-24 17:18:42 MSD
WINE@Etersoft 1.0 SQL 1.0.11-eter8.3/4

Печатается корректно. Линии нормально чёрные. 
Только смущает их неодинаковая толщина.

Закрываю.