Название: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Октябрь 31, 2011, 08:27 Добрый день!
Платформа win/linux. PostgreSQL сервер. Пытаюсь сделать отчет Торг12. Было три варианта: 1. Попытался приделать eXaro, но он только для SQLite. 2. NCReport бесплатный пока не хочет собираться. 3. (Предпочтителен) Пишем нормальный html. Учитываем заголовок, колонтитулы и все такое в самом html. Вроде бы самый простой вариант, но тут есть две засады: 3.1 Нужно знать номер текущй страницы. Для этого нужно знать, сколько информации входит на одну страницу. И что я достиг конца страницы. 3.2 Нужно знать общее количество страниц. Что бы можно было правильно верстать нижние колонтитулы: страницы 1 из 10. Если знать количество строк на страницу, можно было бы приблизительно сверстывать страницу, но если название позиции не входит в одну стандартную строку, то что тогда делать? :( Помогите советами, кто подобное реализовывал. Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: panAlexey от Октябрь 31, 2011, 09:55 Если знать количество строк на страницу, можно было бы приблизительно сверстывать страницу, но если название позиции не входит в одну стандартную строку, то что тогда делать? :( просто исходи из того, что каждая строка наименования товара/услуги занимает 2 строки. Даже если помещается.Вот алгоритм печати с моей 1С-ки. Он подскажет: Код: //***************************************************************************** Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: villager от Ноябрь 03, 2011, 01:10 вряд ли html поможет
просчитать его нереально, и колонтитулы не получится отрисовать правда я год назад смотрел, может что изменилось а руками - сначала просчитать (виртуально отрисовать) все страницы, затем расставить общее количество страниц, и тогда уже отрисовать в PDF, или на принтер Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: Termit от Ноябрь 03, 2011, 01:45 Посмотри на
http://qt-apps.org/content/show.php/TextPrinter?content=62383 сможет все рассчитать когда будешь рисовать в html Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 08, 2011, 09:02 Забавная вещица, просто и со вкусом, но она не показывает общее количество страниц :(
"Страница 1 из 10" не получается загнать. В полный рост встала другая проблема: а как на хтмл порезать текст на страницы и вставить разделители???? То-есть хочу сделать промежуточные итоги на каждой странице: отрисовываю нужное количество строк, отрисую итоги, но как мне явно указать. что это конец страницы???? Дальше печатать со следующей! Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: Termit от Ноябрь 08, 2011, 11:36 "Страница 1 из 10" не получается загнать. Показывает. 100%.В полный рост встала другая проблема: а как на хтмл порезать текст на страницы и вставить разделители???? Боюсь, что на середине страницы вставить перенос не получится.То-есть хочу сделать промежуточные итоги на каждой странице: отрисовываю нужное количество строк, отрисую итоги, но как мне явно указать. что это конец страницы???? Дальше печатать со следующей! Можно поиграться с колонтитулами и итоги рисовать в них. Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 08, 2011, 12:35 а можно пример с номерами страниц?
Код: /////////////////////////////////////////////////////////////////////////////// Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: Termit от Ноябрь 08, 2011, 12:55 а можно пример с номерами страниц? Код
&pages - хранит в себе сколько всего страниц и вдогонку вопрос: а как в данном случае на HTML можно реализовать текст в 2 колонки? Через html таблицу. Например footertext в коде. Соответственно количество строк будет больше чем 1 :-)Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 09, 2011, 08:27 ууу, все гениальное просто! :)
если все нормально, завтра попробую ваше предложение с таблицей в футере! :) PS кстати, а наверное через футер не прокатит, он же одинаковый для всех страниц должен быть! PPS вещица оказалась удобной, но допиливать надо. После отчетов МС Аксеса кажется сырой :), но на безрыбе ... :) То что они называют заголовком, на самом деле верхний колонтитул. Как такового заголовка отчета нет. Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 14, 2011, 09:35 Или вы все таки допиливали сами или выложен не самый последний вариант, но
QString footertext = "<table width=\"100%\">" " <tr>" " <td align=\"left\"><strong>%1</strong></td>" " <td align=\"right\"><strong>&page; / &pages;</strong></td>" " </tr>" "</table>"; что-то не так, у меня выдает 1 / &pages; Можете выложить куда-нить свой исходник? Или выслать? Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: Termit от Ноябрь 14, 2011, 12:05 Или вы все таки допиливали сами или выложен не самый последний вариант Да действительно немного допиливал... Давненько было, запамятовал уже :) Выкладываю Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 14, 2011, 12:27 Хмм, посмотрел вашу реализацию. Я сделал немного по другому, брал последнюю страницу, но сейчас понимаю, что не я совсем прав.
Спасибо. А не подскажете, как можно отформатировать текст контента? То-есть мне надо сделать двухколоночный отчет. Уже и хтмл повертел. Верстактся на две колонки замечательно, но там не получается в нужном месте вставить разрыв страницы. Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: Termit от Ноябрь 14, 2011, 12:45 А не подскажете, как можно отформатировать текст контента? Не совсем понял, что именно нужно сделать... Можете как-нить на яблоках рассказать/показать?То-есть мне надо сделать двухколоночный отчет. Уже и хтмл повертел. Верстактся на две колонки замечательно, но там не получается в нужном месте вставить разрыв страницы. Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 14, 2011, 13:17 page 1
1. пункт 5. пункт 2. пункт 6. пункт 3. пункт 7. пункт 4. пункт 8. пункт page 2 9. пункт 13. пункт 10. пункт 14. пункт 11. пункт 15. пункт 12. пункт 16. пункт Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: Termit от Ноябрь 14, 2011, 13:29 Ну так, боюсь, html не позволит сделать красиво
Разве, что как-то насильно указывать сколько строк должно быть в таблице. Но решение будет не гибким... Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 15, 2011, 05:07 Да и ладно, что решение будет не гибким. В данном случае, у меня вообще нет идей, как сделать гибкое решение :(. ХТМЛ еще и страницу резать не умеет :(.
По идее можно через QTextDocument тоже сделать 2 колонки, а в нужном месте ставить конец страницы. Но не получатся :( Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: panAlexey от Ноябрь 15, 2011, 22:54 Да и ладно, что решение будет не гибким. В данном случае, у меня вообще нет идей, как сделать гибкое решение :(. ХТМЛ еще и страницу резать не умеет :(. эх, помогли бы довести до ума вот эту штучку (http://code.google.com/p/unnstudioreport/), у тебя бы все было.Да и у меня ))) да и тот алгоритм мой подошел бы. как раз для фишек такого типа... Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 16, 2011, 06:05 сейчас посмотрю ваше творение :)
А в чем его надо доводить до ума? хмм, я демо уже до ошибки довел :(, упала и умерла Покрутил, повертел и появилось несколько вопросов (в порядке важности): 1. Нумерация страниц, если есть. то как добавить? 2. Можно ли сделать неразрывные группы? 3. Данные для этих отчетов надо самому сформировать в виде xml определенного формата? 4. Границы колонок как-то странно выделяются, нельзя ли выделить 2 колонки одной общей границей? Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 16, 2011, 07:48 Termit, а вы не пробовали допиливать данный отчет в направлении нормального заголовка отчет и подвала отчете? То, что там сейчас есть называется колонтитулами. А нужен нормальный заголовок. Я покрутил устройство данного отчета, похоже что там, все размеры под колонтитулы/контент вычисляются заранее один раз. Иначе может сбиться нумерация страниц. Поэтому изменить размер заголовка первой страницы проблематично :(. Можете что-нибудь посоветовать? Еще одной проблемой данного отчета является перенос. То-есть, если у вас в конце страницы будет текст размером в две строки, то он может часть текста оставить на одной странице, а вторую часть текста перенести на другую страницу :(. А это очень плохо.
Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: panAlexey от Ноябрь 16, 2011, 09:54 сейчас посмотрю ваше творение :) баги, падения, скорость, фьючи.А в чем его надо доводить до ума? хмм, я демо уже до ошибки довел :(, упала и умерла Покрутил, повертел и появилось несколько вопросов (в порядке важности): пака не заморачивался, но разумеется можно будет.1. Нумерация страниц, если есть. то как добавить? 2. Можно ли сделать неразрывные группы? а что это?3. Данные для этих отчетов надо самому сформировать в виде xml определенного формата? не. можно работать с uoReport::uoReportDoc* апиhttp://code.google.com/p/unnstudioreport/source/browse/trunk/Report/uoReportDoc.h в http://code.google.com/p/unnstudioreport/source/browse/trunk/main.cpp есть образцы кода. Просто обращаешся к ячейке и все. 4. Границы колонок как-то странно выделяются, нельзя ли выделить 2 колонки одной общей границей? а скрин можно?Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 16, 2011, 13:01 Я новичек, но сейчас вникая в дебри печати понимаю, что заголовок, колонтитулы, подвал и есть самые проблематичные места в формировании отчетов.
1. С нумерацией страниц будет тоже куча граблей. Надо учесть что на первой странице может быть/не быть заголовок + колонтитул. 2. Неразрывные группы. Есть товарный документ: накладная, у нее есть(сверху вниз): реквизиты, список товаров/услуг, итоговые данные. Дак вот, группа "итоговые данные" должна быть всегда на одной странице! Не может быть начало на одной, конец на другой. Если не влазит на конец страницы за товаром, нужно начать новую страницу. 4. см приложенный скрин сделанный на коленке в экселе. Это мелочь. но приятно :). Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: Termit от Ноябрь 16, 2011, 13:15 Termit, а вы не пробовали допиливать данный отчет в направлении нормального заголовка отчет и подвала отчете? То, что там сейчас есть называется колонтитулами. А нужен нормальный заголовок. Заголовок отчёта пишите в тегах <h1>,<h2> и т.д. но не в колонтитуле, а в теле документа. Замечательно переносит со страницы на страницу... Допиливать вроде бы и нечего. Если я правильно понял вопрос ;)Что касается разбить на 2 колонки. Где можно посмотреть как выглядит этот отчёт "Торг 12"? Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: panAlexey от Ноябрь 16, 2011, 14:03 Я новичек, но сейчас вникая в дебри печати понимаю, что заголовок, колонтитулы, подвал и есть самые проблематичные места в формировании отчетов. это решабельно. тем более когда напрямую управляешь процессом печати вплоть до комманд принтеру.1. С нумерацией страниц будет тоже куча граблей. Надо учесть что на первой странице может быть/не быть заголовок + колонтитул. 2. Неразрывные группы. Есть товарный документ: накладная, у нее есть(сверху вниз): реквизиты, список товаров/услуг, итоговые данные. Дак вот, группа "итоговые данные" должна быть всегда на одной странице! Не может быть начало на одной, конец на другой. Если не влазит на конец страницы за товаром, нужно начать новую страницу. я тебе уже говорил, что ТОРГ-12 особый случай и там просто посчитать надо при выводе.строки константной высоты и вперед. Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 17, 2011, 04:58 Termit:
Про две колонки - это я прайс для начала решил сделать :). Просто товар идет в первой колонке, продолжает во второй, потом следующая страница. Про заголовок: идея понятна, только тогда нужно ввести флаг: не печатать колонтитул на первой странице :) Иначе как-то странно это выглядит: -начало страницы 1 -(верхний колонтитул) наименование колонок -заголовок документа -содержимое документа -(нижний колонтитул) дата + номер страницы из страниц -конец страницы 1 panAlexey: а про строку большой константной высоты я не подумал, наверное это и будет выглядеть как надо! :) Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: Termit от Ноябрь 17, 2011, 12:41 Termit: Про две колонки - это я прайс для начала решил сделать :). Просто товар идет в первой колонке, продолжает во второй, потом следующая страница. Про заголовок: идея понятна, только тогда нужно ввести флаг: не печатать колонтитул на первой странице :) Иначе как-то странно это выглядит: -начало страницы 1 -(верхний колонтитул) наименование колонок -заголовок документа -содержимое документа -(нижний колонтитул) дата + номер страницы из страниц -конец страницы 1 panAlexey: а про строку большой константной высоты я не подумал, наверное это и будет выглядеть как надо! :) Не нужно в колонтитул тулить наименования колонок! Правильно делать так: Нужно сформировать html следующим образом Код Все что находится в тегах th будет автоматом повторятся на всех страницах где будет эта таблица. Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: panAlexey от Ноябрь 17, 2011, 12:53 panAlexey: а про строку большой константной высоты я не подумал, наверное это и будет выглядеть как надо! :) У меня такое есть: строке устанавливается атрибут фиксированного размера когда пользователь меняет её высоту руками."Стряхнуть" этот атрибут можно установив из контекстного меню "Автоширину". Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 17, 2011, 13:11 Чих-пых! Век живи, век учись, все равно дураком помрешь :(.
За <thead>, <tbody> и как сделать без верхнего колонтитула огромное спасибо!!! С колонками не совсем так: представьте открытую книгу. Вы в начале читаете левую страницу, потом правую. То же самое и с прайсом, в начале читаем левую колонку полностью на странице, потом правую. Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: Termit от Ноябрь 17, 2011, 13:46 С колонками не совсем так: представьте открытую книгу. Вы в начале читаете левую страницу, потом правую. То же самое и с прайсом, в начале читаем левую колонку полностью на странице, потом правую. Представляю :-)Вариант как я говорил выше - не гибкий. Считаем кол-во строк которое помещается на страницу. И ручками разбираем все строки которые нужно вывести. Для примера скажем так: На страницу влазит 10 строк. У нас есть массив строк для вывода из 51 элемента. Выводить будем так Из примера html выше Row 1-1 => Элемент массива строк 1 Row 1-2 => Элемент массива строк 10+1 Row 2-1 => Элемент массива строк 2 Row 2-2 => Элемент массива строк 10+2 и т.д. до конца страницы Дальше добавляем разделитель страниц. И вставляем новую таблицу Row 1-1 => Элемент массива строк 21 Row 1-2 => Элемент массива строк 31+1 Row 2-1 => Элемент массива строк 22 Row 2-2 => Элемент массива строк 31+2 и т.д. до конца страницы Дальше добавляем разделитель страниц. И вставляем новую таблицу А вот тут нужно будет посчитать как правильно разместить строки Row 1-1 => Элемент массива строк 41 Row 1-2 => Элемент массива строк 46 Row 2-1 => Элемент массива строк 42 Row 2-2 => Элемент массива строк 47 Row 3-1 => Элемент массива строк 43 Row 3-2 => Элемент массива строк 48 Row 4-1 => Элемент массива строк 44 Row 4-2 => Элемент массива строк 49 Row 5-1 => Элемент массива строк 45 Row 5-2 => Элемент массива строк 50 Row 6-1 => Элемент массива строк 51 Row 6-2 => Про <thead> и <tbody> - в этом случае не пригодятся т.к. на каждой странице будет своя таблица. Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 18, 2011, 04:51 Что-то подобное я и пытался сделать, посчитал количество строк, которое влазит на страницу, если текст переносится, то считаем строку за две.
Только сегодня нашел, что можно средствами html создать разрыв страницы. За идею "новая страница - новая таблица" - спасибо! Сам бы наверное не скоро до этого дошел. Кстати, проще и правильнее считать количество элементов в высоту, а в верстке делать таблицу в таблице: table(page) tr td table2(content) /td td table2(content) /td /tr /table(page) разделитель_страницы. PS А никто не подскажет, как посчитать высоту полученной ячейки? Сейчас реализовал дубово: высота = длина_строки_в_символах/константа(количество символов без переноса), но это дает погрешность. Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: Termit от Ноябрь 18, 2011, 12:07 Только сегодня нашел, что можно средствами html создать разрыв страницы. Каким образом?Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: o_m от Ноябрь 18, 2011, 20:07 не пробовал но вроде так:
...The following table lists the CSS properties supported by Qt's rich text engine: ... page-break-before [ auto | always ] Make it possible to enforce a page break before the paragraph/table page-break-after [ auto | always ]Make it possible to enforce a page break after the paragraph/table... (из справки по скриптрепорту...) Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: Termit от Ноябрь 18, 2011, 20:14 ...The following table lists the CSS properties supported by Qt's rich text engine: ... Ну да, видел, но это CSS не HTML.Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 21, 2011, 04:55 Да, неправильно написал, средствами CSS, а не HTML!
Код: <table style=\"width: 100%; padding: 0; border: none; border-collapse: collapse;\">\n Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 22, 2011, 11:49 Какой-то бред получается :(
Дописал функцию вычисления высоты: Код: int dialogCreatePrices::numRowInPrintText(int iWidth, QString iText) Что-то я уже себе весь мозг вынес, но так и не придумал, как это побороть. Подскажите такую вещь: как мне в QTextDocument дописывать данные в html виде? Уже подумываю о том, что бы самому создавать и отформатировать страницы и добавлять их в готовый документ. Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: panAlexey от Ноябрь 22, 2011, 12:20 Какой-то бред получается :( все-таки надо дописывать и стабилизировать uoReport. Дописал функцию вычисления высоты: Код: int dialogCreatePrices::numRowInPrintText(int iWidth, QString iText) Что-то я уже себе весь мозг вынес, но так и не придумал, как это побороть. Подскажите такую вещь: как мне в QTextDocument дописывать данные в html виде? Уже подумываю о том, что бы самому создавать и отформатировать страницы и добавлять их в готовый документ. ПС. Остальные сишники с подобными задачками видно редко сталкиваются. ПС2. PavelVX, может попробуешь его сам прикрутить? Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: PavelVX от Ноябрь 22, 2011, 13:00 Все заработало! Если долго сидеть над одной задачей, то глаз замыливается и перестаешь видеть очевидное. Все функции правильно работали, опечатка в одном месте :).
panAlexey, не поверишь, я новичек в С++! Qt выбрал только из-за бесплатности. Чуть позже могу попробовать твою форму, мне она больше нравится, чем полностью ручное создание отчетов. Просто сейчас надо допилить прайс и отчитаться о проделанном. Но впереди еще отчетные документы, так что не горюй, опробуем твой репорт :) PS Кстати, ты бы к нему пока что счетчики страниц бы прикрутил. PPS Походу отчетность и прочие печатные формы никто не делает или делают что-нить типа экселя. Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: panAlexey от Ноябрь 22, 2011, 13:21 Все заработало! Если долго сидеть над одной задачей, то глаз замыливается и перестаешь видеть очевидное. Все функции правильно работали, опечатка в одном месте :). У меня там основные глюки начинаются когда начинаю работать с масштабом при выводе на печать и разбиении на страницы с использованием масштаба. panAlexey, не поверишь, я новичек в С++! Qt выбрал только из-за бесплатности. Чуть позже могу попробовать твою форму, мне она больше нравится, чем полностью ручное создание отчетов. Просто сейчас надо допилить прайс и отчитаться о проделанном. Но впереди еще отчетные документы, так что не горюй, опробуем твой репорт :) PS Кстати, ты бы к нему пока что счетчики страниц бы прикрутил. PPS Походу отчетность и прочие печатные формы никто не делает или делают что-нить типа экселя. ну т.е. говоришь: поместить по ширине в лист, заходишь в просмотр и "бум". А счетчик страниц, там по сути есть: я же перед отсылкой на печать фактически калькулирую количество страниц и создаю массив неких структур индекс которых + 1 и является по сути номером страницы. т.е. для решения задачи надо просто сделать только вот что: в методе прорисовки текста ячейки поискать нечто вроде "@pagenom" и заменить на индекс страницы + 1. так что это дело плевое. Основной гемор в стабилизации. Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: panAlexey от Ноябрь 30, 2011, 14:29 http://code.google.com/p/unnstudioreport/
30.11.2011 Реализован механизм использования шаблонов и вывода секций шаблона в целевой документ. (http://unnstudioreport.googlecode.com/files/20111130_OutputSect.PNG) Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: sergun1604 от Май 24, 2012, 13:35 не могу понять каким образом отчет уходит на печать uoreport и где формируется xml?
Название: Re: Торг 12, кто делал под Qt и каким способом Отправлено: panAlexey от Май 24, 2012, 17:37 не могу понять каким образом отчет уходит на печать uoreport и где формируется xml? Для отправки на печать его надо отправить на печать.bool uoReportDoc::printDoc(const bool updPrintSourse, QWidget* qwidg) Использую xml в 2-х эпостясях как шаблон для вывода отчета и как файл для хранения самого отчета. xml-шаблон формируется пользователем в дизайнере в самом репорте мышкой. Собственно для этого и создавался такой софт - быстро набросать шаблон и вывести его. Собственно это и есть основное назначение софтины: дизайнить, редактировать, печатать. А если нужен уже сам отчет, то надо через АПИ поработать с обектом uoReport::uoReportDoc; |