Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 61 - 1Cv77: Неверно обрабатывается масштаб при печати   Make a simular bug
Summary: 1Cv77: Неверно обрабатывается масштаб при печати
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Печать ; Диалог печати (show other bugs)
Version: unspecified
Hardware: PC Linux
: P3 critical
Target Milestone: ---
Assignee: Svetlana Zhukova
QA Contact: Svetlana Zhukova
URL:
Whiteboard:
Keywords:
: 2847 2939 (view as bug list)
Depends on:
Blocks: 443 777
  Show dependency treegraph
 
In work:
Reported: 2006-03-24 18:39 MSK by Vitaly Lipatov
Modified: 2013-03-27 11:37 MSK (History)
8 users (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vitaly Lipatov 2006-03-24 18:39:46 MSK
Есть подозрение что при настройках в параметрах страницы 
указание "по ширине" и масштаб не являются взаимоисключающими, как это должно 
быть. Надо проверить
Comment 1 Александр Пликус 2006-04-03 10:40:05 MSD
Масштаб обрабатывается не верно. При установке 50%, как будто получается 25%. 
Comment 2 Александр Пликус 2006-04-03 10:57:40 MSD
Да, масштаб и по ширине не являются взаимозаменяемыми. При установленном 
масштабе 50%, и выборе По ширине в результате получаем около 50% на экране. 
Comment 3 Vitaly Lipatov 2006-04-22 22:28:23 MSD
Почему-то оказалась закрытой. 
Comment 4 Vitaly Lipatov 2006-04-22 23:25:34 MSD
шсправлю 
Comment 5 Дмитрий Аншаков 2007-11-20 19:25:34 MSK
Похожий глюк с масштабом наблюдается и в windows, и зависит от выбранного принтера.
Comment 6 Vitaly Lipatov 2007-12-13 18:38:23 MSK
Нужно провести дополнительное тестирование к баг-фикс релизу 1.0.8
Comment 7 Alexeev Alexey 2008-03-14 15:40:48 MSK
Воспроизвёл на последней сборке.
Масштаб выставляется неверно, вместо 50 установленных отображается никак не больше 25. 
Comment 8 Vitaly Lipatov 2008-07-15 21:50:05 MSD
Во-первых, сломано игнорирование указанного масштаба при выборе
"по ширине страницы".
Во-вторых, нужно сформулировать внятный тест, и приложить файл, на котором объяснять проблему.
Боря, надеюсь со вторым поможешь ты.
Comment 9 Виталий Перов 2008-09-03 18:40:26 MSD
Диалог "Параметры страницы" выглядит очень странно:
- после нажатия на ОК должна вызываться функция IsDlgButtonChecked для определения состояния всех checkboxes и radiobuttons, но она не вызывается ни разу
- невозможно найти CALLBACK функцию для этого диалога
Comment 10 Виталий Перов 2008-09-03 19:08:38 MSD
Скорее всего сам диалог не системный, а внутренний, и CALLBACK функция тоже внутренняя.
Comment 11 Виталий Перов 2008-09-03 19:10:54 MSD
В выходном файле не содержится такого параметра как масштаб.
Масштаб учитывается при прорисовке каждого элемента.
Т.е если сохранять страницу в файл с разным масштабом, то отличия будут только в координатах отдельных элементов
Comment 12 Виталий Перов 2008-09-03 22:07:16 MSD
Было подозрение что масштабирование производится 2 раза: масштабированием элементов, и задание масштаба в драйвере принтера.
масштаб в драйвере определяется параметром dmScale. Если принудительно поставить его 100, то масштаб всегда 100%
Никаких прямых обращений к этому параметру в коде wine нет. Масштабирования внутри кода прорисовки PostScript тоже не нешёл. Скорее всего 1C сама выполняет масштабирование.
Comment 13 Виталий Перов 2008-09-17 18:35:55 MSD
т.е 1с сама должна заполнять структуру PSDRV_DEVMODEA.
Кроме того она сама должна различать выбор "по ширине".
Всё это должно быть в Callback функции диалога "Параметры страницы", которая должна быть реализована внутри 1с. Поэтому проблем с выбором "по ширине" быть не должно!
Comment 14 Виталий Перов 2008-09-17 18:46:58 MSD
Ещё бага воспроизводится при предварительном просмотре.
Вообще прорисовкой элементов в окне предварительного просмотра должна заниматься 1с (хотя это надо проверить).
Вообще надо подробней разобраться в механизме работы предварительного просмотра
Comment 15 Vitaly Lipatov 2008-09-17 19:13:25 MSD
Мне кажется я уже объяснял десять раз. Никакого механизма нет.
Изображение либо рисуется на принтерном DC, либо на совместимом DC (это мы потом видим на экране), одним и тем же кодом.
Вся отрисовка производится с помощью функций из GDI32.
Comment 16 Vitaly Lipatov 2008-10-17 14:48:03 MSD
Проблемы с масштабом сильно мешают при печати отчётов.
Comment 17 Виталий Перов 2008-10-17 21:31:03 MSD
Проверил. Масштабирование происходит 2 раза. Масштабный коэффифиент получается в квадрате. т.е ставим 50%, получаем 0.5*0.5 = 25%. Чтобы получить 50% надо поставить корень(0.5) = 70%
Comment 18 Виталий Перов 2008-10-18 13:24:23 MSD
если в PSDRV_MergeDevmodes при копировании принудительно выставить масштаб 100%: (добавить строку):
dm2->dmPublic.u1.s1.dmScale = 100;
, то в предварительном просмотре всё начинает работать идеально! Даже работает выбор "По ширине".
Но при масштаб игнорируется, и печатается 100%
Comment 19 Виталий Перов 2008-10-18 14:14:36 MSD
Если применить другой подход: записывать в dm1->dmPublic.u1.s1.dmScale квадратный корень от dm2->dmPublic.u1.s1.dmScale, то печатается нужный масштаб.
НО:
1) Не правильно работает предварительный прсмотр
2) Не правильно работает выбор "По ширине"
3) После печати сбивается масштаб в настройках. Если, например, поставить туда 30%, то напечатается именно 30%, но сразу после печати масштаб там станет 54% (корень(0.3) = 0.54), и в следующий раз печататься будет уже с другим мастабом.

Опытным путём определил, что изменение параметра dm2->dmPublic.u1.s1.dmScale (откуда копируется масштаб) ни на что не влияет.
Comment 20 Виталий Перов 2008-10-18 14:50:58 MSD
сделал временный хак.
В дальнейшем нужно написать программу (доработать готовую), и на ней воспроизвести данную багу.
Comment 21 Виталий Перов 2008-10-18 19:58:47 MSD
Масштаб в диалоге запрашивается при помощи функции PSDRV_FindPrinterInfo
Притом срабатывает именно второй выхов ( который происходит по условию if(pi->ppd->DefaultPageSize) )

При предварительном просмотре MergeDevmodes вызывается из:
fixme:psdrv:PSDRV_FindPrinterInfo CALL_2
fixme:psdrv:PSDRV_FindPrinterInfo RET
fixme:psdrv:PSDRV_CreateDC CALL
fixme:psdrv:PSDRV_CreateDC RET
fixme:psdrv:PSDRV_CreateDC CALL
fixme:psdrv:PSDRV_CreateDC RET

Возможно поэтому сделанные изменения работают неправильно.
Думаю следует вынести коррекцию масштаба из MergeDevmodes, и применять её после вызова там, где это необходимо.

При вызове диалога принтера функция MergeDevmodes вызывается из:
fixme:psdrv:PSDRV_FindPrinterInfo CALL_2
fixme:psdrv:PSDRV_FindPrinterInfo RET
fixme:psdrv:PSDRV_FindPrinterInfo CALL_2
fixme:psdrv:PSDRV_FindPrinterInfo RET
fixme:psdrv:PSDRV_FindPrinterInfo CALL_2
fixme:psdrv:PSDRV_FindPrinterInfo RET


при печати:
fixme:psdrv:PSDRV_FindPrinterInfo CALL_2
fixme:psdrv:PSDRV_FindPrinterInfo RET
fixme:psdrv:PSDRV_FindPrinterInfo CALL_2
fixme:psdrv:PSDRV_FindPrinterInfo RET
fixme:psdrv:PSDRV_CreateDC CALL
fixme:psdrv:PSDRV_CreateDC RET
fixme:psdrv:PSDRV_CreateDC CALL
fixme:psdrv:PSDRV_CreateDC RET

На первый взгляд никаких отличий по сравнению с предварительным просмотром.
Comment 22 Виталий Перов 2008-10-20 17:42:13 MSD
Если выполнять коррекцию масштаба сразу после MergeDevmodes и только в функции PSDRV_CreateDC, то исчезает проблема с самопроизвольным изменением масштаба после печати.
Но предварительный просмотр по-прежнему работает неправильно
Comment 23 Виталий Перов 2008-10-28 17:17:06 MSK
Ошибся: на масштаб при печати влияет вызов MergeDevmodes из PSDRV_ExtDeviceMode

Изменение масштаба при вызове PSDRV_CreateDC влияет как на печать, так и на предварительный просмотр.
Для правильной работы в функции PSDRV_CreateDC масштаб изменяться не должен.
Comment 24 Виталий Перов 2008-10-28 17:41:22 MSK
Если принудительно ставить масштаб 100% после вызова MergeDevmodes из PSDRV_CreateDC, то бага полностью решается.
Работает даже предварительный просмотр, и выбор "по ширине".

Патч отправил.
Comment 25 Leonid Shadevsky 2008-11-21 11:43:26 MSK
*** Bug 2939 has been marked as a duplicate of this bug. ***
Comment 26 Leonid Shadevsky 2008-11-21 11:44:17 MSK
Из дублирующей баги:

Документ построен и отображается.
Заходим в "Параметры страницы" - Масштаб -
меняем его (например 30% - то что я пробовал).
Сохраняем параметры.
Совершаем "контрольный заход" в те самые
параметры страницы - стоит 30%
нажимаем педальку напечатать, получаем не
тот результат что ожидали.
Смотрим параметры страницы - стоит 54%.
прикидываем видимый на странице результат
и оно похоже как раз на эти 54%.
Comment 27 Leonid Shadevsky 2008-11-21 11:45:53 MSK
Сценарий по #26 воспроизвелся: после печати в файл масштаб печати изменился с 30 на 54%
Comment 28 Leonid Shadevsky 2008-11-21 11:46:14 MSK
*** Bug 2847 has been marked as a duplicate of this bug. ***
Comment 29 Виталий Перов 2008-11-24 17:25:55 MSK
Да, вижу. Только не знаю в чём может быть проблема. На моих исходниках всё замечательно работает.
Возможно мой патч был принят как-то наполовину.
Сейчас попробую заново склонировать ветку eterhack
Comment 30 Виталий Перов 2008-11-24 17:55:53 MSK
Разобрался.
Не приложен патч, убирающий предыдущий хак.

В рассылке письмо называлось: [Wine-patches] [Eterhack] Revert "Hack for eterbug #61"
Comment 31 Виталий Перов 2008-11-24 18:25:14 MSK
В следующей сборке всё должно работать (сейчас 41.35)
Comment 33 Svetlana Zhukova 2013-02-05 17:19:24 MSK
wine@eterhack bottle 1c77/1c77
WINE@Etersoft SQL 1.5.23/2.1.0-eter1/1
Проблемы вернулись.


(В ответ на comment #19)
> Если применить другой подход: записывать в dm1->dmPublic.u1.s1.dmScale
> квадратный корень от dm2->dmPublic.u1.s1.dmScale, то печатается нужный масштаб.
> НО:
> 1) Не правильно работает предварительный прсмотр
> 2) Не правильно работает выбор "По ширине"
> 3) После печати сбивается масштаб в настройках. Если, например, поставить туда
> 30%, то напечатается именно 30%, но сразу после печати масштаб там станет 54%
> (корень(0.3) = 0.54), и в следующий раз печататься будет уже с другим мастабом.
> 
> Опытным путём определил, что изменение параметра dm2->dmPublic.u1.s1.dmScale
> (откуда копируется масштаб) ни на что не влияет.
Comment 36 Svetlana Zhukova 2013-02-06 12:06:10 MSK
Например,берем документ:
1с77-документы-учет материалов-поступление материалов-печать
В windows:
1.Файл-параметры страницы. Если стоит 100% при предварительном просмотре отображается страница в натуральную величину,если установить 50% - на предварительном просмотре изображение отображается соответственно указаному %.
2. После печати  выбор масштаба в настройках сохраняется.
3. Выставляю в параметрах страницы масштаб 30%,одновременно выбираю "по ширине"
При предварительном просмотре страница отображается корреткно (таблица в ширину страницы).


В wine.

1.Файл-параметры страницы. Если стоит 100% при предварительном просмотре отображается корректно.Если установить 50% - на предварительном просмотре страница оттображается сильно уменьшенной (оценивая на глаз,примерно как 30% на windows )

2. После печати  выбор масштаба в настройках также сохраняется,данной проблемы теперь нет.

3. Выставляю в параметрах страницы масштаб 30%,одновременно выбираю "по ширине"
При предварительном просмотре страница отображается будто "по ширине" не выбрано,а масштаб зрительно соответствует корректному 30% в windows.
Comment 37 Dmitry Timoshkov 2013-02-06 12:20:26 MSK
(В ответ на comment #36)
> 3. Выставляю в параметрах страницы масштаб 30%,одновременно выбираю "по ширине"
> При предварительном просмотре страница отображается будто "по ширине" не
> выбрано,а масштаб зрительно соответствует корректному 30% в windows.

Я правильно понял, что проблема проявляется только если *одновременно*
задать масштаб и выбрать "по ширине"?
Comment 38 Dmitry Timoshkov 2013-02-06 12:58:23 MSK
(В ответ на comment #37)
> (В ответ на comment #36)
> > 3. Выставляю в параметрах страницы масштаб 30%,одновременно выбираю "по ширине"
> > При предварительном просмотре страница отображается будто "по ширине" не
> > выбрано,а масштаб зрительно соответствует корректному 30% в windows.
> 
> Я правильно понял, что проблема проявляется только если *одновременно*
> задать масштаб и выбрать "по ширине"?

Мое тестирование показывает, что исправлять нечего. Под Windows 1C 7.7
ведет себя полностью аналогично. Если указанный принтер - PostScript, то
он *не игнорирует* dmScale, заданный в DEVMODE, не PostScript принтер
масштабирование игнорирует. Отправленный ранее в winehq тест подтверждает
это поведение.

Скорее всего к путанице ведет ошибка в 1C, что программа не трактует
настройку масштаба в процентах и настройку "по ширине" как две отдельные
настройки, что и подтверждают первые комментарии в этой задаче.
Comment 39 Svetlana Zhukova 2013-02-06 13:01:35 MSK
(В ответ на comment #37)

> Я правильно понял, что проблема проявляется только если *одновременно*
> задать масштаб и выбрать "по ширине"?
Да.
Comment 41 Vitaly Lipatov 2013-02-11 12:48:21 MSK
Рома, тогда верни хак, добавив условие «только для 1С 7.7».
Нужно проследить, что новый вариант (с условием попал в 2.0, 2.1 и eterhack).
Comment 47 Роман Дадьков 2013-02-13 15:30:52 MSK
Хак возвращен в eterhack и eter-2.1, добавлено условие "только для 1с77".
Comment 48 Svetlana Zhukova 2013-02-21 14:24:52 MSK
Теперь масштаб соответствует выбранному,но только в том случае,если на стоит галочка "по ширине".
Если галочка все же стоит,то не зависимо от числа (будь то 30% или 200%),указанного в ячейке "масштаб",при предварительном просмотре отображается мелко (ну...примерно 10%)
Comment 49 Svetlana Zhukova 2013-02-21 14:26:01 MSK
(В ответ на comment #48)
> Теперь масштаб соответствует выбранному,но только в том случае,если на стоит
> галочка "по ширине".
> Если галочка все же стоит,то не зависимо от числа (будь то 30% или
> 200%),указанного в ячейке "масштаб",при предварительном просмотре отображается
> мелко (ну...примерно 10%)


wine@eter-2 bottle 1c77/1c77
WINE@Etersoft SQL 2.1.0-eter9/1
Comment 50 Svetlana Zhukova 2013-02-22 10:43:45 MSK
Проблема принимает вид "Некорректно обрабатывается условие "по ширине" ". 
Никто не жаловался на этот факт,откладываю.
Comment 51 Vitaly Lipatov 2013-02-24 06:25:22 MSK
(В ответ на comment #50)
> Проблема принимает вид "Некорректно обрабатывается условие "по ширине" ". 
> Никто не жаловался на этот факт,откладываю.
Я не понимаю. Как это работало в 2.0 или 1.0.12? Всё было нормально? И сейчас должно оставаться так же. Если что-то изменилось, багу вернуть на исправление.
Comment 52 Svetlana Zhukova 2013-03-27 11:36:51 MSK
swine -h eter-1.0.12 1c77/1c77
WINE@Etersoft 1.0 SQL 1.0.12-eter14/28

файл-открыть - ведомость.mxl (на с:)

Предварительный просмотр и печать работают корректно - масштаб документа соответствует выставленному, если стоит галочка "по ширине" - масштаб игнорируется,документ печатается по ширине листа.
В данной бутылке файл job_4979-214.pdf ,распечатанный при условии,что стоит галочка "по ширине",при этом в неактивном окне"масштаб" выставленно 20% (документ напечатан по ширине листа).

swine 2.0 1c77/1c77
WINE@Etersoft SQL 2.0.3-eter27/5
Также корректно. пособ проверки аналогиченвышеуказанному.

swine -h eter-2.0 1c77/1c77
WINE@Etersoft SQL 2.1.2/2.1.0-eter5/2
Предварительный просмотр и печать работают корректно.
Comment 53 Svetlana Zhukova 2013-03-27 11:37:16 MSK
закрываю.