Цель работы: освоение команды распечатки баз данных.
Задание:
В данной работе необходимо вывести данные из БД на печатающее устройство в форматированном виде. В работе используется программа из лабораторной работы 8, в которую надо внести следующие изменения:
В пункте 3 задания к лабораторной работе 8 нужно организовать вывод записей, совпадающих с условием поиска, по запросу на экран или на печатающее устройство. В случае выбора печатающего устройства данные необходимо выводить на печать в виде таблички с шапкой и заголовком. Должна быть учтена нумерация страниц и возможность начала печати с любой страницы по запросу. Заголовок должен быть напечатан шрифтом в разрядку (код 14). Если табличка в ширину не будет умещаться на листе бумаги, то применить шрифт «Элита» (коды 27 и 77) или сжатый шрифт (код 15).
Выполнение
Лабораторная работа сделана на основе предыдущей лабораторной работы.
Текст добавленных процедур:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
procedure editprint define window printwindow from 2,2 to 16,72 title 'Печать'; in window mainwindow system close float grow nominimize shadow zoom activate window printwindow @ 1,1 say 'Введите условия печати:' ss=enterfindparams() beginpage=0 endpage=0 rowsonepage=0 clear do enterprintparams with beginpage,endpage,rowsonepage ? rowsonepage oldbeginpage=_PBPAGE oldendpage=_PEPAGE oldrowsonepage=_PLENGTH if beginpage#0 _PBPAGE=beginpage endif if endpage#0 _PEPAGE=endpage endif if rowsonepage#0 _PLENGTH=rowsonepage endif clear sg=getprintmode() filename='' if sg=1.or sg=2 filename=putfile('Сохранение','lab9.txt','txt') if len(filename)=0 return endif endif deactivate window printwindow activate window messagewindow ? 'Идёт печать. Пожалуйста, подождите...' printjob if len(filename)>0 set printer to &filename endif **Собственно вывод данных do case case sg=2.or.sg=4 report form lab9 to printer pdsetup for &ss case sg=1.or.sg=3 do myreport with ss endcase set printer to endprintjob _PBPAGE=oldbeginpage _PEPAGE=oldendpage _PLENGTH=oldrowsonepage wait deactivate window messagewindow return procedure enterprintparams parameter beginpage,endpage,rowsonepage @ 3,1 say 'Начальная страница: ' get beginpage @ 5,1 say 'Конечная страница: ' get endpage @ 7,1 say 'Кол-во строк на 1 странице: ' get rowsonepage read return procedure getprintmode @ 3,1 promp 'С помощью say в файл' @ 5,1 promp 'С помощью report builder в файл' @ 7,1 promp 'С помощью say' @ 9,1 promp 'С помощью report builder' menu to pm return pm procedure myreport parameter ss set print off set console on WRAP=.t. set filter to &ss GO TOP CP=1 DO WHILE .not.eof() * set print off if CP>=_PBPAGE.and.CP<=_PEPAGE set print on endif _ALIGNMENT='center' ? 'Газета' _ALIGNMENT='left' ? '╔══════╦═══════════════════════════════╦══════════╦═══════╗' ? '║Код ║Наименование ║Дата ║Тираж ║' ? '╚══════╩═══════════════════════════════╩══════════╩═══════╝' ? '┌──────┬───────────────────────────────┬──────────┬───────┐' DO WHILE .not.eof().and._PLINENO+3<_PLENGTH ? '│'+kod+'│'+naim+' │'+ dtoc(data)+'│'+str(tirag,7,0)+'│' SKIP 1 IF .not.eof().and._PLINENO+4<_PLENGTH ? '├──────┼───────────────────────────────┼──────────┼───────┤' ELSE ? '└──────┴───────────────────────────────┴──────────┴───────┘' ENDIF ENDDO DO WHILE _PLINENO<_PLENGTH-2 ? ENDDO _ALIGNMENT='CENTER' ? 'Страница '+str(_PAGENO,3) _ALIGNMENT='LEFT' CP=CP+1 enddo set print off set console on return |