Создание отчетов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 01.10.2004 (Пт) 9:22

Вроде у RTB проблемы с непропорциональными фонтами - он отображает их как пропорциональные... Сейчас вспомнил что тоже как-то натыкался на это. В твоем случае они неверно отображаются...

Если файлы отчетов небольшие то можно (да и даже лучше) тебе выводить их в обычный TextBox. Если большие, то придется устраивать разборки с RichText или искать сторонний контрол...

С Terminal и TextBox все нормально (вот только русские буквы наугад приходится вводить - надо перекодировкой заниматься).
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 01.10.2004 (Пт) 9:23

У предложенного способа с Terminal'ом - масса недостатков
1. Ограничение TextBox'а на объём выводимого текста
2. Существенное ограничение в оформлении отчёта
3. Проблематична организация переноса строк в ячейке
4. И главное. Сам написал и поддерживаю программу, извлекающую данные из отчётов (txt, xls). Так вот уж со счёта сбился - сколько раз обещал повыдёргивать кривые руки програмистов, формирующих отчёты в текстовой форме шрифтами с фиксированным размером символов. С ними не возможно работать. Мало того, что выглядят они убого, да и не каждый пользователь может просмотреть их, так извечь данные из них иногда просто не реально.
Так что уважаемые. Пожалуйста забудьте о Terminal'е. 21 век на дворе, и вы пишете на высокоуровневом современном языке, а не колупаетесь с командной строкой на чёрно-белом экране.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 01.10.2004 (Пт) 9:35

У предложенного способа с Terminal'ом - масса недостатков
1. Ограничение TextBox'а на объём выводимого текста


Да, автор вопроса так и не сказал что мешает ему выводить нормальный отчет. Принтер-а ведь это позволяют.

С другой стороны он хочет дать возможность пользователям редактировать полученный отчет перед печатью, причем не пользуя при этом Word/Excel.

Не знаю насколько это редактирование необходимо - с одной стороны это криминал, а с другой кто его знает - может оно и нужно.

Если просто нужно дописывать какие-либо примечания к табличкам то я бы сделал это в самой программе, перед формированием отчета, а потом бы просто выводил его на печать тем-же ActiveReport-ом.

В общем, по нормальному - это править в программе а не в уже сформированном тексте.

Но лично мне просто интересно что у RichTextBox-а с тем-же Courier-ом, к примеру? Чего он его так корежит? В своих программах RichTextBox я пользовал крайне редко, посему даже забыл об этой проблеме...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 01.10.2004 (Пт) 11:07

Andrey Fedorov - покажи как можно вывести нормальный отчет с использованием таблиц.
С какой стороны криминал- редактирование таблиц ? Представь отчет из 5 таблиц на листе.
Причем одна из них (верхняя) заполнена, остальные нет. Зачем остальные печатать, когда их можно удалить. А как ты представляешь программно дописывать примечание к таблицам? Пользователю, что угодно может в голову дописать. Как ты сделаешь в таком случае програмную правку?
Вообще, складывается впечатления, что Andrey Fedorov не смотрел пример (посмотрите вложение!!!!!!!!!!!!!!!!!!!!).
А RichTextBox использую потому что размер файла может быть больше 62 kB и текст необходимо выделять частично цветным.
Все "бывалые" и "обычные пользователи" предлагают "выдернуть руки" за использование
Terminala однако кроме этих ни чего не значащих предложений нет. Давайте прекратим лить воду. Хотелось бы увидеть что-то конкретной по решению проблемы.

marvan
Бывалый
Бывалый
 
Сообщения: 269
Зарегистрирован: 22.06.2004 (Вт) 13:26
Откуда: Москва

Сообщение marvan » 01.10.2004 (Пт) 11:15

пользуйтесь WebBrowser (Microsoft Internet Controls)
1 - неограниченные возможности по оформлению отчета (html+css)
2 - редактирование - легко (dhtml)
3 - печать и сохранение в файл
4 - бесплатен и стоит на любом win* пк

чем это не устраивает?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 01.10.2004 (Пт) 11:31

Andrey Fedorov - покажи как можно вывести нормальный отчет с использованием таблиц.


А тут-то в чем проблема? Большинство отчетов как раз и состоит из таблиц. Я же говорю что ты просто запутался.

В общем найди/скачай себе ActiveReport у него в комплекте есть примеры.

Представь отчет из 5 таблиц на листе.


Да хоть 50 - какая мне разница?

Причем одна из них (верхняя) заполнена, остальные нет. Зачем остальные печатать, когда их можно удалить.


Зачем удалять, когда их можно просто не печатать?

А как ты представляешь программно дописывать примечание к таблицам? Пользователю, что угодно может в голову дописать. Как ты сделаешь в таком случае програмную правку?


Перед выдачей отчета предложу пользователю написать примечание к нему (или его частям). В общем, тут никаких проблем нет вообще.

Вообще, складывается впечатления, что Andrey Fedorov не смотрел пример (посмотрите вложение!!!!!!!!!!!!!!!!!!!!).


Смотрел, смотрел ;) Обычный отчет, никаких заморочек в нем нет.

А RichTextBox использую потому что размер файла может быть больше 62 kB и текст необходимо выделять частично цветным.


В отчете можно выделить цветным что угодно, да и раскрасить его тоже как угодно...

Все "бывалые" и "обычные пользователи" предлагают "выдернуть руки" за использование Terminala однако кроме этих ни чего не значащих предложений нет. Давайте прекратим лить воду. Хотелось бы увидеть что-то конкретной по решению проблемы.


Теперь твоя проблема окончательно ясна - тебе просто надо освоить работу с генераторами отчетов. Серъезно. Никакой необходимости городить что-то свое у тебя просто нет. Я рекомендую посмотреть на ActiveReport.

Скачай с http://www.datadynamics.com/ShowForum.aspx?ForumID=37 триал версию, регистрилку найдешь в интернете. И посмотри на примеры отчетов. Делать там можно что угодно - вплоть до объединения нескольких отчетов в один (не путать с подотчетами!) - в общем, как на приложенном рисунке.
Вложения
Rep.rar
(26.21 Кб) Скачиваний: 29
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 01.10.2004 (Пт) 12:13

Спасибо, наконец-то добились конкретного направления. Буду смотреть.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.10.2004 (Пт) 16:13

Andrey Fedorov писал(а):
Вот именно про это я и говорил, что это неправда. Открой тот же charmap и убедись.

Ну может тут я все-же протормозил - все-же давно его не пользовал...

А если давно не пользовал - зачем ВОТ ТАКИМИ БУКВАМИ писал, что он пропорциональный? :evil:

Andrey Fedorov писал(а):
Чем лучше-то?

А ты в блокноте набери русское слово используя терминал - хотя бы этим...

Этим - да, но к рассматриваемой задаче это не имеет ни малейшего отношения...
Изображение

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 01.10.2004 (Пт) 16:17

А если давно не пользовал - зачем ВОТ ТАКИМИ БУКВАМИ писал, что он пропорциональный?


Потому что тормозил... Нельзя уж немного ;)

Этим - да, но к рассматриваемой задаче это не имеет ни малейшего отношения...


Впрочем, как уже поняли - автору вопроса вначале нужно просто ознакомиться со средствами разработки отчетов...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.10.2004 (Пт) 16:32

Тимофей писал(а):Кстати CharToOem псевдографику не преобразует, уже пробовал, она только преобразует буквы и цифры.

Псевдографика так же легко перекодируется из Юникода в OEM, как и буквы и цифры:

Код: Выделить всё
Option Explicit

Private Declare Function CharToOemW Lib "user32" (lpszSrc As Long, lpszDst As Integer) As Long

Sub Main()
Dim Result As Integer
CharToOemW &H256A, Result 'U+256A: Box Drawings Vertical Single And Horizontal Double
Debug.Print Hex(Result)   'Ответ: D8
End Sub
Изображение

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 06.10.2004 (Ср) 9:15

Освоить генераторы отчетов говорите.
Да уже смотрел я генераторы отчетов. Crystal Report и ActiveReport
первый вообще вроде вставляет данные только из БД. И как не печатать пустую таблицу как предлагают некоторые тоже не совсем ясно. А алгоритм предложенный мной по моему достаточно проще....
Есть еще варианты ?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 06.10.2004 (Ср) 9:27

Освоить генераторы отчетов говорите.
Да уже смотрел я генераторы отчетов. Crystal Report и ActiveReport


Мало смотреть - надо научиться их использовать.

И как не печатать пустую таблицу как предлагают некоторые тоже не совсем ясно.


Что может быть проще чем не печатать???

А алгоритм предложенный мной по моему достаточно проще....


Хм... Ты там такого уже накрутил...

Кстати, отчет такого типа который ты приводил в примере можно сделать одним отчетом (никакие подотчеты там не нужны). Но надо уметь работать с отчетами. Начал бы с какого попроще - чтобы руку хоть немного вначале набить... Этот все-же несколько посложней примитивных - немного покодить в отчете придется...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 06.10.2004 (Ср) 9:33

Согласен, отчет который я приводил, простой и состоит из одной таблицы, но их же модет быть несколько. Кстати не надо иронии. Я не только смотрел генераторы отчетов, но и разбирался с ними. Дак как насчет коррекции таблицы (удаления пустых строк) ? И если шаблон состоит из нескольких таблиц- как не печатать пустые ?

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 06.10.2004 (Ср) 9:44

Согласен, отчет который я приводил, простой и состоит из одной таблицы, но их же модет быть несколько.


Дык хоть из 50! Какая разница!

Дак как насчет коррекции таблицы (удаления пустых строк) ?


Самое простое - кто заставляет тебя давать пустые строки отчету?
Не давай и все.

И если шаблон состоит из нескольких таблиц- как не печатать пустые ?


Аналогично.

Могу сделать бесплатно примерчик твоего отчета. Если дашь MDB-шку с необходимыми для него данными и сделаешь в ней запрос извлекающий их для отчета и кратко и толково опишешь... В общем чтобы я не особо вникая мог понять откуда что берется для него...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Тимофей
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 01.03.2004 (Пн) 10:01
Откуда: Киров

Сообщение Тимофей » 06.10.2004 (Ср) 9:57

MDB........... я же говорил, что данные не БД. А получаются в результате расчета программы. Причем конкретно неизвестно, будет ли заполнена таблица или нет (зависит от расчета). Вот тебе пример шаблона. Вот и попробуй заполни какие нибудь таблицы данными (любыми), а другие оставь пустыми. При выводе на печать, что бы пустые не печатались. Если сделаешь в генераторе отчетов, сниму перед тобой шляпу и поверю что генераторы отчетов лучше.
Вложения
Dztr.zip
(1.42 Кб) Скачиваний: 30

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 06.10.2004 (Ср) 10:50

клади свой результат в базу и настравливай такой SQL-запрос, который тебе вытащит только то , что нужно и без пустых значений.
и любой из перечисленных раннее генераторов отчетов такое сделать может.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 06.10.2004 (Ср) 13:19

клади свой результат в базу и настравливай такой SQL-запрос, который тебе вытащит только то , что нужно и без пустых значений.


Ну ради этого не стоит заморачиваться с базой, если больше она нигде не используется. Ничто ведь не мешает просто не выводить пустые записи.

В общем, как обещал, прикладываю пример создания подобного отчета (по шаблону). На скорую руку, правда, но кажись все работает.
В архиве и скриншотик готового отчета есть...

В modMain собственно заполнение массива данными. Ну а сам отчет получился не столь уж и сложным. Думаю принцип понять вполне можно.
Вложения
RepKirov.rar
(55.29 Кб) Скачиваний: 38
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

val
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 14.11.2002 (Чт) 1:14

Сообщение val » 06.10.2004 (Ср) 20:36

Могу кинуть ComponentOne TrueDBGrid ocx. Правда документации нет.

PSV
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 29.01.2002 (Вт) 12:30
Откуда: Россия

Сообщение PSV » 07.10.2004 (Чт) 11:16

Тимофей писал(а):Освоить генераторы отчетов говорите.
Да уже смотрел я генераторы отчетов. Crystal Report и ActiveReport
первый вообще вроде вставляет данные только из БД.


Во первых Crystal Reports (на счет встроенного не знаю, а вот 8, 8.5 и 9.0 могут) УМЕЕТ ПЕЧАТАТЬ НЕ ИЗ БАЗЫ ДАННЫХ, а из массивов VB (например) - см. доку по Crystal на счет CDO.
В чем проблема дать пользователю на VB-ой форме в гриде или еще как выбрать данные для печати, а потом их напечатать?
Кроме того, если ты не заметил, то Crystal при выводе отчета позволяет выделять строки, ячеки и так далее, а для VB предоставляет для встроенных отчетов (через Designer) богатую объектную модель с событиями - если поковыряться, то возможно что через ето можно сделать изменение содержимого отчета (если и не удалить строки, то по крайней мере скрыть их).

Если так уж хочется гемороиться то QuantumExpress Grid тебе поможет и отсортировать данные и отфильтровать и напечатать свое содержимое.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 07.10.2004 (Чт) 11:40

Да я вообще-то уже поместил ему вариант решения именно его отчета с ActiveReport - но человек в отпуске - вернется посмотрит.

В принципе тему уже можно закрывать...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

val
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 168
Зарегистрирован: 14.11.2002 (Чт) 1:14

Сообщение val » 08.10.2004 (Пт) 5:03

Любой репорт может печатать ис массивoвVB a не только Crystal 8,9

Пред.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 111

    TopList