Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / REPORT ... TO PRINTER PROMPT / 8 сообщений из 8, страница 1 из 1
15.07.2003, 23:19
    #32209077
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPORT ... TO PRINTER PROMPT
Привет всем.

Можно ли в полученном с помощью PROMPT диалоге заранее установить количество печатаемых экземпляров ?

VFP 7
...
Рейтинг: 0 / 0
15.07.2003, 23:58
    #32209095
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPORT ... TO PRINTER PROMPT
2Glory

Была когда-то такая переменная _PCOPIES, она хоть и included for backward compatibility, но должна работать. Только вот не помню readonly она или нет и не знаю как отобразится на Print Dialog. Попробуй поиграться.

ЗЫ извини, но сейчас мне запустить фокс и проверить не удалось, пора выбрасывать эту шарманку :((
...
Рейтинг: 0 / 0
16.07.2003, 06:24
    #32209182
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPORT ... TO PRINTER PROMPT
2Glory

Ну вот наконец винда отрубила дефектный диск, я смог запустить фокс и узнал, чтот _PCOPIES ни фига не работают. Но все оказалось не так сложно, нужно всего-то открыть отчет как таблицу и изменить число в мемо-поле expr для первой записи. Лови пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#define COPIES    'COPIES='
#define REPORTNAME    'Report1'
lnCopies=VAL(INPUTBOX('Количество копий'))
IF lnCopies> 0 
 lcCopies1=COPIES+'1'
 lcCopies2=COPIES+LTRIM(STR(lnCopies))
 =SetCopies(REPORTNAME, lcCopies1, lcCopies2)
 REPORT FORM REPORTNAME TO PRINTER PROMPT 
 =SetCopies(REPORTNAME, lcCopies2, lcCopies1)
ENDIF 

PROCEDURE SetCopies
LPARAMETERS tcReport, tcVal1, tcVal2
 lcAlias=ALIAS()
 SELECT  0 
 tcReport=tcReport+'.frx'
 USE (tcReport) 
 REPLACE expr WITH STRTRAN(expr,tcVal1,tcVal2)
 USE 
 SELECT (lcAlias)
ENDPROC 
...
Рейтинг: 0 / 0
16.07.2003, 12:02
    #32209490
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPORT ... TO PRINTER PROMPT
Некоторые уточнения:

1) Строго говоря, изменять поле Expr надо в записи имеющую значения

ObjType=1 AND ObjCode=53

То что как правило это именно первая запись в файле отчета, не гарантирует, что такой она и останется во всех случаях.

2) Не знаю, насчет VFP7, но в VFP6 синтаксис строки определяющей количество копий в поле Expr предполагает знак равенства:

COPIES=1

ну и надо предусмотреть вариант отсутствия такой строки в поле Expr в принципе, а не только замену. Кроме того, далеко не факт, что там будет стоять именно COPIES=1, а не допустим, COPIES=2. Но это уже мелочи.

3) Если файл отчета включен внутрь EXE, то вытащить его на этапе исполнения, для последующей модификации можно таким образом:

USE MyReport.frx
COPY TO FreeReport.frx

Здесь указывать расширение в обеих командах необходимо. Тогда во вне файла EXE будет создано 2 файла: FreeReport.frx и FreeReport.frt с которыми и можно дальше работать как с внешним файлом отчета.
...
Рейтинг: 0 / 0
16.07.2003, 20:04
    #32210271
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPORT ... TO PRINTER PROMPT
Спасибо за советы.
Отчет действительно встроенный. Так что подходит только п.3 от ВладимирМ. Жаль только что нужно копировать отчет - время забирает. Пользователь гораздо быстрее в диалоге выберет нужное число копий.
...
Рейтинг: 0 / 0
17.07.2003, 00:46
    #32210366
Sergey Ch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPORT ... TO PRINTER PROMPT
Мой совет не так крут как предыдущие.
Для изменения количества копий я просто делаю форму, в которой указывается это количество, а затем в цикле вызываю этот отчет на печать без PROMPT и с NOCONSOLE. Есть ряд недостатков (нет выбора принтера, медленно работает с большими отчетами, нельзя выбрать отдельные страницы на печать и т.д.) но для большинства случаев может быть полезен, особенно для простых программ, типа платежных поручений... и там, где не очень много оборудования в купе с не очень продвинутыми пользователями...
...
Рейтинг: 0 / 0
17.07.2003, 15:50
    #32211144
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPORT ... TO PRINTER PROMPT
Ну выбрать текущий принтер перд циклом можно через SYS(1037). В принципе, можно и формочку диалога самому нарисовать получив список принтеров через APRINTERS(), но вот количество копий будет все-равно через цикл.

Как вариант можно менять количество копий непосредственно у принтера, но это надо знать соответсвующие API-функции.
...
Рейтинг: 0 / 0
22.07.2003, 14:57
    #32214624
Mik Prokoshin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
REPORT ... TO PRINTER PROMPT
А мы много лет назад (когда еще с FOX работали) сделали окошко, где юзер ставил число копий и выбирал принтер (поскольку под ДОС, то номер LPT порта). И все. И отдельно настройка - типа на каком порту какой принтер.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / REPORT ... TO PRINTER PROMPT / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]