Есть подозрение что при настройках в параметрах страницы указание "по ширине" и масштаб не являются взаимоисключающими, как это должно быть. Надо проверить
Масштаб обрабатывается не верно. При установке 50%, как будто получается 25%.
Да, масштаб и по ширине не являются взаимозаменяемыми. При установленном масштабе 50%, и выборе По ширине в результате получаем около 50% на экране.
Почему-то оказалась закрытой.
шсправлю
Похожий глюк с масштабом наблюдается и в windows, и зависит от выбранного принтера.
Нужно провести дополнительное тестирование к баг-фикс релизу 1.0.8
Воспроизвёл на последней сборке. Масштаб выставляется неверно, вместо 50 установленных отображается никак не больше 25.
Во-первых, сломано игнорирование указанного масштаба при выборе "по ширине страницы". Во-вторых, нужно сформулировать внятный тест, и приложить файл, на котором объяснять проблему. Боря, надеюсь со вторым поможешь ты.
Диалог "Параметры страницы" выглядит очень странно: - после нажатия на ОК должна вызываться функция IsDlgButtonChecked для определения состояния всех checkboxes и radiobuttons, но она не вызывается ни разу - невозможно найти CALLBACK функцию для этого диалога
Скорее всего сам диалог не системный, а внутренний, и CALLBACK функция тоже внутренняя.
В выходном файле не содержится такого параметра как масштаб. Масштаб учитывается при прорисовке каждого элемента. Т.е если сохранять страницу в файл с разным масштабом, то отличия будут только в координатах отдельных элементов
Было подозрение что масштабирование производится 2 раза: масштабированием элементов, и задание масштаба в драйвере принтера. масштаб в драйвере определяется параметром dmScale. Если принудительно поставить его 100, то масштаб всегда 100% Никаких прямых обращений к этому параметру в коде wine нет. Масштабирования внутри кода прорисовки PostScript тоже не нешёл. Скорее всего 1C сама выполняет масштабирование.
т.е 1с сама должна заполнять структуру PSDRV_DEVMODEA. Кроме того она сама должна различать выбор "по ширине". Всё это должно быть в Callback функции диалога "Параметры страницы", которая должна быть реализована внутри 1с. Поэтому проблем с выбором "по ширине" быть не должно!
Ещё бага воспроизводится при предварительном просмотре. Вообще прорисовкой элементов в окне предварительного просмотра должна заниматься 1с (хотя это надо проверить). Вообще надо подробней разобраться в механизме работы предварительного просмотра
Мне кажется я уже объяснял десять раз. Никакого механизма нет. Изображение либо рисуется на принтерном DC, либо на совместимом DC (это мы потом видим на экране), одним и тем же кодом. Вся отрисовка производится с помощью функций из GDI32.
Проблемы с масштабом сильно мешают при печати отчётов.
Проверил. Масштабирование происходит 2 раза. Масштабный коэффифиент получается в квадрате. т.е ставим 50%, получаем 0.5*0.5 = 25%. Чтобы получить 50% надо поставить корень(0.5) = 70%
если в PSDRV_MergeDevmodes при копировании принудительно выставить масштаб 100%: (добавить строку): dm2->dmPublic.u1.s1.dmScale = 100; , то в предварительном просмотре всё начинает работать идеально! Даже работает выбор "По ширине". Но при масштаб игнорируется, и печатается 100%
Если применить другой подход: записывать в 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 (откуда копируется масштаб) ни на что не влияет.
сделал временный хак. В дальнейшем нужно написать программу (доработать готовую), и на ней воспроизвести данную багу.
Масштаб в диалоге запрашивается при помощи функции 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 На первый взгляд никаких отличий по сравнению с предварительным просмотром.
Если выполнять коррекцию масштаба сразу после MergeDevmodes и только в функции PSDRV_CreateDC, то исчезает проблема с самопроизвольным изменением масштаба после печати. Но предварительный просмотр по-прежнему работает неправильно
Ошибся: на масштаб при печати влияет вызов MergeDevmodes из PSDRV_ExtDeviceMode Изменение масштаба при вызове PSDRV_CreateDC влияет как на печать, так и на предварительный просмотр. Для правильной работы в функции PSDRV_CreateDC масштаб изменяться не должен.
Если принудительно ставить масштаб 100% после вызова MergeDevmodes из PSDRV_CreateDC, то бага полностью решается. Работает даже предварительный просмотр, и выбор "по ширине". Патч отправил.
*** Bug 2939 has been marked as a duplicate of this bug. ***
Из дублирующей баги: Документ построен и отображается. Заходим в "Параметры страницы" - Масштаб - меняем его (например 30% - то что я пробовал). Сохраняем параметры. Совершаем "контрольный заход" в те самые параметры страницы - стоит 30% нажимаем педальку напечатать, получаем не тот результат что ожидали. Смотрим параметры страницы - стоит 54%. прикидываем видимый на странице результат и оно похоже как раз на эти 54%.
Сценарий по #26 воспроизвелся: после печати в файл масштаб печати изменился с 30 на 54%
*** Bug 2847 has been marked as a duplicate of this bug. ***
Да, вижу. Только не знаю в чём может быть проблема. На моих исходниках всё замечательно работает. Возможно мой патч был принят как-то наполовину. Сейчас попробую заново склонировать ветку eterhack
Разобрался. Не приложен патч, убирающий предыдущий хак. В рассылке письмо называлось: [Wine-patches] [Eterhack] Revert "Hack for eterbug #61"
В следующей сборке всё должно работать (сейчас 41.35)
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 > (откуда копируется масштаб) ни на что не влияет.
Например,берем документ: 1с77-документы-учет материалов-поступление материалов-печать В windows: 1.Файл-параметры страницы. Если стоит 100% при предварительном просмотре отображается страница в натуральную величину,если установить 50% - на предварительном просмотре изображение отображается соответственно указаному %. 2. После печати выбор масштаба в настройках сохраняется. 3. Выставляю в параметрах страницы масштаб 30%,одновременно выбираю "по ширине" При предварительном просмотре страница отображается корреткно (таблица в ширину страницы). В wine. 1.Файл-параметры страницы. Если стоит 100% при предварительном просмотре отображается корректно.Если установить 50% - на предварительном просмотре страница оттображается сильно уменьшенной (оценивая на глаз,примерно как 30% на windows ) 2. После печати выбор масштаба в настройках также сохраняется,данной проблемы теперь нет. 3. Выставляю в параметрах страницы масштаб 30%,одновременно выбираю "по ширине" При предварительном просмотре страница отображается будто "по ширине" не выбрано,а масштаб зрительно соответствует корректному 30% в windows.
(В ответ на comment #36) > 3. Выставляю в параметрах страницы масштаб 30%,одновременно выбираю "по ширине" > При предварительном просмотре страница отображается будто "по ширине" не > выбрано,а масштаб зрительно соответствует корректному 30% в windows. Я правильно понял, что проблема проявляется только если *одновременно* задать масштаб и выбрать "по ширине"?
(В ответ на comment #37) > (В ответ на comment #36) > > 3. Выставляю в параметрах страницы масштаб 30%,одновременно выбираю "по ширине" > > При предварительном просмотре страница отображается будто "по ширине" не > > выбрано,а масштаб зрительно соответствует корректному 30% в windows. > > Я правильно понял, что проблема проявляется только если *одновременно* > задать масштаб и выбрать "по ширине"? Мое тестирование показывает, что исправлять нечего. Под Windows 1C 7.7 ведет себя полностью аналогично. Если указанный принтер - PostScript, то он *не игнорирует* dmScale, заданный в DEVMODE, не PostScript принтер масштабирование игнорирует. Отправленный ранее в winehq тест подтверждает это поведение. Скорее всего к путанице ведет ошибка в 1C, что программа не трактует настройку масштаба в процентах и настройку "по ширине" как две отдельные настройки, что и подтверждают первые комментарии в этой задаче.
(В ответ на comment #37) > Я правильно понял, что проблема проявляется только если *одновременно* > задать масштаб и выбрать "по ширине"? Да.
Рома, тогда верни хак, добавив условие «только для 1С 7.7». Нужно проследить, что новый вариант (с условием попал в 2.0, 2.1 и eterhack).
Хак возвращен в eterhack и eter-2.1, добавлено условие "только для 1с77".
Теперь масштаб соответствует выбранному,но только в том случае,если на стоит галочка "по ширине". Если галочка все же стоит,то не зависимо от числа (будь то 30% или 200%),указанного в ячейке "масштаб",при предварительном просмотре отображается мелко (ну...примерно 10%)
(В ответ на comment #48) > Теперь масштаб соответствует выбранному,но только в том случае,если на стоит > галочка "по ширине". > Если галочка все же стоит,то не зависимо от числа (будь то 30% или > 200%),указанного в ячейке "масштаб",при предварительном просмотре отображается > мелко (ну...примерно 10%) wine@eter-2 bottle 1c77/1c77 WINE@Etersoft SQL 2.1.0-eter9/1
Проблема принимает вид "Некорректно обрабатывается условие "по ширине" ". Никто не жаловался на этот факт,откладываю.
(В ответ на comment #50) > Проблема принимает вид "Некорректно обрабатывается условие "по ширине" ". > Никто не жаловался на этот факт,откладываю. Я не понимаю. Как это работало в 2.0 или 1.0.12? Всё было нормально? И сейчас должно оставаться так же. Если что-то изменилось, багу вернуть на исправление.
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 Предварительный просмотр и печать работают корректно.
закрываю.