Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/37: Рейтинг темы: голосов - 37, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 08.05.2009
Сообщений: 3
1

Печать бланка, печатная форма. Чем сделать печатную форму в VS?

08.05.2009, 10:48. Просмотров 7389. Ответов 5
Метки нет (Все метки)


Всем доброго времени суток. Есть следующая проблема:

Есть БД и клиент работающий с ней. Естественно есть необходимость печатать различную информацию из БД, в том числе и печать на бланке. Бланк: куча полей (около 100), собран в Excel'е, т.е. это около 5 часов нудной работы по подгонке всех полей в бланке, все работает замечательно, создаю новый экземпляр Excel открываю файл, нахожу нужный лист, заполняю cells'ы и отправляю на печать.

Но, есть несколько моментов, которые мне совершенно не нравятся:
  • объект Excel не уничтожается после
    C#
    1
    2
    3
    4
    5
    6
    7
    
       if (exl != null)
                {
                    try { wb.Close(false, Type.Missing, Type.Missing); }
                    catch (Exception) { }
                    exl.Quit();
                    GC.Collect();
                }
    , где exl это Excel.Application, а так и продолжает висеть в процессах, причем если пользователь напечатал 10 бланков, то и висит 10 Excel в Диспетчере задач, все экземпляры Excel замечательно уничтожаются при выходе из программы
  • на машинах без Microsoft Office такая система не работает
  • на машинах с Microsoft Office 2007 получаем странное форматирование некоторых полей, в итоге не попадание в нужные позиции на бланке
  • нет возможности сделать удобный предпросмотр, а открывать и показывать Excel кажется уродством

Вобщем некоторые моменты можно и исправить (1 - хоть сложно, думаю многие с такой проблемой сталкивались; 3 - принудительно из программы форматировать ВСЕ поля, а у меня их около 100), но в целом это не вариант.

Вопрос:
Чем максимально удобно сформировать нужную мне печатную форму средствами Visual Studio?

Пробовал Crystal Report, но мне не понравилась его связка с DataSet. Когда-то на Delphi делал отчеты, там можно было напрямую к объектам report'а обращаться и присваивать нужные значения, тут же все берется из DataSet, что в моем случае не удобно.

Примерно это выглядит так:
таблица1 (скажем договор)
индексТаблицы1
индексТаблицы2 (первый контрагент)
индексТаблицы2 (второй контрагент)
поле1
поле2
таблица2 (контрагенты)
индексТаблицы2
поле1
поле2
таблица3(производная от таблиц 1 и 2)
индексТаблицы1 (договор)
индексТаблицы2 (контрагент)
поле1
поле2

- при таком раскладе я в DataSet'е (привязанном к crystalReport'у) имею одну запись в таблица1, штук 5 записей в таблица3 и штук 7 в таблица2, crystalReport может мне вывести содержимое столбиком , но у меня поля разбросаны по всему листу. Т.е. я первого контрагента из таблица1 описываю в правой части формы, второго в левой, тех контрагентов что привязаны к договору через таблица3 внизу формы в специальной таблице.

Оптимально было бы что-то типа того же report'а как в Delphi. Может какая компанента есть к VS?

Добавлено через 1 час 12 минут 56 секунд
Вобщем после недолгих изысканий, нашел такой вариант:
с DataSet связывать не обязательно, можно наделать полей типа параметр, и передавать им нужные значения, например:
C#
1
            MyRPT.ParameterFields["nameFields"].CurrentValues.AddValue("любое значение типа string");
Вот только не знаю насколько это верное решение, народ отпишитесь пожалуйста, кто что думает по этому поводу?

Добавлено через 4 часа 30 минут 42 секунды
вот что-то мне подсказывает что это неверное решение... ну хоть кто-нибудь отпишитесь нормально так или нет?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2009, 10:48
Ответы с готовыми решениями:

Создать форму бланка, выводящую в печать результаты по 4 экзаменам пользователя, с необходимой информацией о нем
Создать форму бланка, выводящую в печать результаты по 4 экзаменам пользователя, с необходимой...

Можно ли добавить ещё одну печатную форму в документ, где уже есть одна форма?
Подскажите пожалуйста,фот у меня в документе есть печатная форма.Можно ли добавить ещё одну...

Как сделать внешнюю печатную форму из стандартной в 1С
Всем привет! Как можно сделать из печатной формы "Отчет о розничных продажах" сделать внешнюю...

Создание, заполнение и печать бланка
Здравствуйте, возник вопрос - через что реализовать "бланк", к примеру как препроводительная...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы С#-разработчиков‌
5
0 / 0 / 0
Регистрация: 08.05.2009
Сообщений: 3
08.05.2009, 17:25 2
А что если тебе печатные формы реализовать через кристал репорт???
0
0 / 0 / 0
Регистрация: 08.05.2009
Сообщений: 3
12.05.2009, 04:31  [ТС] 3
Цитата Сообщение от ATsidvintsev Посмотреть сообщение
А что если тебе печатные формы реализовать через кристал репорт???
круто... я конечно извиняюсь, но может сначала стоило почитать то что я писал?!

Я именно с crystal report и пытаюсь работать, но тот способ, который я нашел, мне кажется неправильным.
0
1922 / 427 / 41
Регистрация: 12.07.2007
Сообщений: 2,062
12.05.2009, 04:54 4
https://www.cyberforum.ru/wind... post155613
0
0 / 0 / 0
Регистрация: 08.05.2009
Сообщений: 3
12.05.2009, 17:57 5
Цитата Сообщение от PGorlov Посмотреть сообщение
круто... я конечно извиняюсь, но может сначала стоило почитать то что я писал?!

Я именно с crystal report и пытаюсь работать, но тот способ, который я нашел, мне кажется неправильным.
Да ты там много мути написал, именно поэтому дочитывать не хотелось... а вопрос про кристал репорт решаемый... создать физ. дата сет вывезти все те поля что тебе надо а при формировании отчета подсовывать ему данные, вещь не документирована, но работоспособная...
0
0 / 0 / 0
Регистрация: 08.05.2009
Сообщений: 3
13.05.2009, 10:33  [ТС] 6
Green - предложенный способ интересен, но не очень удобен, я не понял как в нем визуально, заранее нанести разметку на лист (линии например, т.е. собрать таблицу из них).

Вобщем нашел вот что:
C#
1
OsagoBlank1.DataDefinition.FormulaFields["UnboundString1"].Text = "'It Worked'";
это обычное string Unbound fields, вот так вот в него передаем значение.

На данный момент это решение меня удовлетворяет на 99% (1% оставлю на всякий случай, вдруг найду какой минус).

Ну и конечно готов к адекватной критике найденного варианта.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2009, 10:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Страница (Форма бланка для печати)
Здравствуйте, недавно я увлёкся сайтами и тут же возникла необходимость сделать что-то подобное. ...

Форма - как сделать форму...
Здравствуйте! В заголовке не знал как описать проблему... Дело вот в чем, создаю форму Form1 в ней...

Выбрать печатную форму
У клиентов свои печатные формы актов, поэтому чтобы не делать кучу печатных форм в кнопке "Печать",...

ТаблицаЗначений в печатную форму
Помогите, такая вот проблема нужно вывести в строку в печатной форме значений из таблицы значений....

Настроить печатную форму
Имеется макет печатной формы и то как он отображается в пользовательском режиме. Мне необходимо...

Вывод на печатную форму. УТ 11
Здравствуйте, в типовой печатной форме нужно вывести данные, в табл часть шаблон вставил, в модуле...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.