|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
Всем, добрый день! Есть отчёт, который печатается на разных принтерах. На одном минимальное верхнее поле 1.06 см, а на втором - 0.42 см. При распечатке на бланке строгой отчётности на одном принтере всё получается красиво, а на втором необходимо высоту всех объектов отчёта увеличивать на 0.64 см. Хотелось бы узнать, как можно заставить программу самой определять, после выбора принтера, минимальное значение верхнего поля и изменять расположение всех объектов в шаблоне в зависимости от выбранного принтера? Думаю, что это решается с помощью ReportListener, но опыта работы с ним нет, буду благодарен за примеры программного кода. Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2011, 14:06 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
Макс_ПВсем, добрый день! Есть отчёт, который печатается на разных принтерах. На одном минимальное верхнее поле 1.06 см, а на втором - 0.42 см. При распечатке на бланке строгой отчётности на одном принтере всё получается красиво, а на втором необходимо высоту всех объектов отчёта увеличивать на 0.64 см. Хотелось бы узнать, как можно заставить программу самой определять, после выбора принтера, минимальное значение верхнего поля и изменять расположение всех объектов в шаблоне в зависимости от выбранного принтера? Думаю, что это решается с помощью ReportListener, но опыта работы с ним нет, буду благодарен за примеры программного кода. Заранее спасибо! намек: репорт - табличка. в заголовке есть опред-е поля - если репорту прореплейсить поля - будет чудо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2011, 14:11 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
подобные отемы поищите так ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2011, 14:16 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
В режиме модификации отчета пункт меню File \ Page Setup Там есть такое свойство "Print Area" которое может принимать одно из двух значений: Printable page - учитывать поля принтера и под область печати отводить только ту часть листа, которая находится "внутри" полей Whole page - игнорировать поля принтера и под область печати отводить весь лист. Т.е. все 210х297 мм Т.е. если поставить Whole Page то надо озабоится самому отступами от края листа. Если первый объект печати имеет верхнюю координату 1.06, то на ВСЕХ принтерах вне зависимости от размера полей будет предпринята попытка распечатать этот объект именно по этим координатам. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2011, 14:23 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
ВладимирМТ.е. если поставить Whole Page то надо озабоится самому отступами от края листа. Если первый объект печати имеет верхнюю координату 1.06, то на ВСЕХ принтерах вне зависимости от размера полей будет предпринята попытка распечатать этот объект именно по этим координатам. Попробовал, разница уменьшилась с 1.06 см до 2 мм, но это всё равно не то. Хотелось бы, чтобы было точно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2011, 18:41 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
Точно у Вас не получится никак. Это нужна идеальная подача бумаги в принтере и идеальный размер самой бумаги. Погрешность позиционирования в 1..2 миллиметра у Вас будет даже при печати на одном и том же принтере в режиме "Printable page". Однако можно "привыкнуть" к определенному принтеру и определенной бумаге. В смысле, через некоторое время пользователи приспособятся как именно надо вставлять бумагу в каждый конкретный принтер, чтобы "попасть" в бланк. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2011, 20:32 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
Макс_Празница уменьшилась до 2 мм. Хотелось бы, чтобы было точно.Приведу решение "в лоб", возможно, не самое изящное, но думается, что проблему решит. Вам нужно будет приготовить 2 отчета, "начинка" которых будет различаться высотой колонтитула или заголовка отчета на 2мм, и использовать команду SET PRINTER TO NAME. Получить имена принтеров, установленных в системе, можно, например, так (взято из Хелпа): ******************* IF APRINTERS(gaPrinters) > 0 CLEAR && clear the current output window DISPLAY MEMORY LIKE gaPrinters && show the contents of the array ELSE WAIT WINDOW 'No printers found.' ENDIF ******************* Через комбо или меню (или переключатель) выбираете имя принтера, и в зависимости от выбора печатаете либо первый, либо второй отчеты. Например: ******************** IF '1022' $ prnname1 SET PRINTER TO NAME (prnname1) REPORT FORM report1 ........... ELSE SET PRINTER TO NAME (prnname2) REPORT FORM report2 ........... ENDIF ********************* Желаю удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2011, 21:29 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
igorbikПриведу решение "в лоб", возможно, не самое изящное, но думается, что проблему решит. Вам нужно будет приготовить 2 отчета, "начинка" которых будет различаться высотой колонтитула или заголовка отчета на 2мм, и использовать команду SET PRINTER TO NAME. Именно так я и поступил пока у меня было 2 принтера, но когда их стало 5 и все разные, среди которых 2 матричных, то хотелось бы сделать это красиво и на все случаи жизни. Думаю, всё-таки, что здесь может помочь только ReportListener. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2011, 10:51 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
Макс_П, если документы MS Office печатаются на всех принтерах одинаково, то попробуйте сделать вывод в MS Excel или MS Word ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2011, 11:53 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
http://www.sql.ru/forum/actualthread.aspx?tid=220103&hl=expr http://www.foxclub.ru/sol/arc/203GetMargin.zip обратите внимание на строчку в проекте-примере Код: plaintext
поиграйтесь подобным образом. будет ли какой-то результат? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2011, 12:04 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
прошелмимо http://www.sql.ru/forum/actualthread.aspx?tid=220103&hl=expr http://www.foxclub.ru/sol/arc/203GetMargin.zip обратите внимание на строчку в проекте-примере Код: plaintext
Это всё под старые версии Fox, а хотелось бы реализовать это под FoxPro 9 с его новыми возможностями. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2011, 17:52 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
Макс_Пхотелось бы реализовать это под FoxPro 9 с его новыми возможностями. Масштабирование отчета Там в самом конце темы пример по теме ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2011, 20:36 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
Макс_Ппрошелмимо http://www.sql.ru/forum/actualthread.aspx?tid=220103&hl=expr http://www.foxclub.ru/sol/arc/203GetMargin.zip обратите внимание на строчку в проекте-примере Код: plaintext
Это всё под старые версии Fox, а хотелось бы реализовать это под FoxPro 9 с его новыми возможностями. Вас просили выполнить рекомендацию и сообщить рез-т ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2011, 22:08 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
прошелмимообратите внимание на строчку в проекте-примере Код: plaintext
Это работать будет. Меня же интересует, как после выбора принтера и запуска на печать: заставить программу сначала определить верхнее поле выбранного принтера, потом поменять значение поля VPOS из вашего примера и только потом начинать печатать. Из хелпа вижу, что с этим должен справиться ReportListener - события объекта BeforeReport. Я прав? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2011, 12:50 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
ВладимирММакс_Пхотелось бы реализовать это под FoxPro 9 с его новыми возможностями. Масштабирование отчета Там в самом конце темы пример по теме А за это огромное спасибо!!! А какую команду и куда... здесь нужно добавить, чтобы определить минимальное верхнее поле выбранного для печати принтера? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2011, 13:11 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
У Вас само представление о том как и что работает не правильное. Если Вы используете режим печати Printable Page, то, собственно, какая Вам разница, какой отступ указан в настройках отчета? Все-равно ведь размер отступа будет взят из настроек принтера, а то, что сохранено в настройках отчета будет просто проигнорировано. Если Вы используете режим печати Whole Page, то, собственно, какая Вам разница, какой отступ указан в драйвере принтера или настройках отчета. И то, и другое будет также успешно проигнорировано! Не будет использовано ни то, ни другое. Отчет начнет печататься с самого края листа БЕЗ каких-либо отступов. Погрешность позиционирования при использовании режима Whole Page вообще никак не связана с драйвером чего-либо. Это проблема железа. В самом прямом смысле этого слова. При захвате бумаги чуть дергает лист, лоток для бумаги не очень ровный, бумагу чуть криво положили и т.д., и т.п. Программными средствами это не лечится. Далее Вы не очень-то правильно представляете себе как работает ReportListener. Он как бы лежит "параллельно" генератору отчетов. Т.е. есть генератор отчетов FoxPro, который у себя внутри неким "волшебным" образом генерит отчет. После очередного этапа генерации он вызывает метод класса ReportListener и сообщает: "я завершил очередной этап генерации вот с такими параметрами". Вот в этот момент программист имеет возможность оценить "корректность" рассчитанных значений и, если необходимо, чуть подправить эти самые значения. Другими словами, программист не в состоянии изменить сам процесс генерации отчета. Он может лишь скорректировать (или отменить) результат этой генерации. Да, Вы имеете доступ к файлу отчета FRX из ReportListener. Проблема только в том, что Вы имеете доступ только на чтение. Ничего изменить в файле отчета Вы не можете. Первый же абзац в справке по событию BeforeReport об этом четко сообщает ReportListener.BeforeReport EventWhen Visual FoxPro triggers the BeforeReport event for a report run, it has done all necessary internal setup work for rendering the report. It has read the contents of the report definition file (frx) and has opened a read-only copy of this file in a private datasession for use by your derived class Когда Visual FoxPro вызывает событие BeforeReport для выполняемого отчета, он сделал всю необходимую подготовку для выполнения отчета. Он прочитал содержание файла определения отчета (frx) и открыл копию только для чтения этого файла в собственном сеансе (data session) для использования вашим классом. По приведенной мной ссылке чуть выше, я показал как можно сдвинуть все объекты отчета на нужный отступ в классе ReportListener. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2011, 13:32 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
Макс_ПА какую команду и куда... здесь нужно добавить, чтобы определить минимальное верхнее поле выбранного для печати принтера? Вторая ссылка прошелмимо содержит архив (203GetMargin.zip около 45КБ), в котором показан пример использования специфических API-функций для определения реквизитов принтера. В том числе и полей. Только, повторюсь, для данной задачи - это практически бесполезная информация. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2011, 13:37 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
ВладимирМТолько, повторюсь, для данной задачи - это практически бесполезная информация. Whole Page стоит, погрешность печати на двух разных принтерах - 2 мм. Для бланков строкой отчётности это недопустимо. Как бы в такой ситуации поступили вы? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2011, 15:56 |
|
Отчёт на разных принтерах
|
|||
---|---|---|---|
#18+
Макс_П, Задача, возможно, сложнее, чем Вы сейчас себе представляете. Дело не только в том, что нет одинаковых принтеров. Поступал новый тираж или партия бланков из типографии и обнаруживалось, что сами бланки тоже "гуляют" туда-сюда. Дальше следует привязка к cериям/номерам... Со временем кол-во всевозможных разновидностей начинает расти как снежный ком... В общем, кардинально проблема решилась только отказом от бланков с текстом, всё содержимое формировалось программно, а на бланках только элементы защиты, серия номер. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2011, 19:26 |
|
|
start [/forum/topic.php?fid=41&msg=37216035&tid=1584430]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
85ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 178ms |
0 / 0 |