LimeReport Forum

General Category | Основное => Discussion | Обсуждение => Topic started by: rust on November 01, 2016, 10:39:03 PM

Title: Вопросы новичка
Post by: rust on November 01, 2016, 10:39:03 PM
Доброго времени суток.
Направьте на путь верный ответив на вопросы.
1. Сборка
qmake
mingw-32-make
mingw-32-make install
этого достаточно?
2. Как подключить LimeReport к уже существующему проекту.
3. Как передать значение 2-5 переменных из основного проекта в отчет (переменные берутся из разных баз и разных таблиц) как это осуществить не создавая модель. Заполняется печатная форма.

Если возможно исходники простых примеров посмотреть.
Например заполнили несколько QLineEdit, выбрали значение в QComboBox и вывели это в отчет.

Спасибо.



Title: Re: Вопросы новичка
Post by: Arin Alex on November 01, 2016, 10:59:07 PM
Доброго времени !

Проще всего, для начала изучения, открыть limereport.pro в QtCreator
в этом проекте, помимо самого LimeReport, так же содержатся простые примеры использования LimeReport (demo_r1, demo_r2).
В demo_r1 показано подключение LimeReport и передача значений в отчет.
Если останутся вопросы постараюсь ответить.
Title: Re: Вопросы новичка
Post by: Subst on November 02, 2016, 08:15:51 AM
1. Да, достаточно, тебе для проекта нужны заголовочные файлы (после сборки ищи в build/версия qt/операционка/release/lib/include), сами lib'ы b dll'ки

2. В файле проекта зацепи lib файлы, типа
LIBS += -Lпуть к limereport.a -lliblimereport

Также в INCLUDEPATH добавь путь поиска заголовочных файлов, типа
INCLUDEPATH += путь к limereport/include

3. Значения передаются с помощью setReportVariable

т.е. код вроде такого

LimeReport::ReportEngine *m_report=new LimeReport::ReportEngine(this);
m_report->dataManager()->setReportVariable("имя",значение);
Title: Re: Вопросы новичка
Post by: Subst on November 02, 2016, 08:18:25 AM
а, да... ну и убедись в том, что динамическая библиотека видима программой, либо рядом лежит либо в путях прописана
Title: Re: Вопросы новичка
Post by: rust on November 09, 2016, 10:29:38 PM
Спасибо. Направление понял.

Попробую сделать минимальный проект.
Title: Re: Вопросы новичка
Post by: Subst on November 10, 2016, 05:58:58 AM
Ну вот из pro файла моего кусок кода

LIMEREPORT_LIB_NAME = limereport
ZINT_LIB_NAME = QtZint

LIMEREPORT_DIR = $$[QT_INSTALL_PREFIX]/../LimeReport
LIMEREPORT_LIBRARY_DIR = $$LIMEREPORT_DIR/lib

INCLUDEPATH += $$LIMEREPORT_DIR/include

LIMEREPORT_LIB_FILE = -L$$LIMEREPORT_LIBRARY_DIR -l$${LIMEREPORT_LIB_NAME}
ZINT_LIB_FILE = -L$$LIMEREPORT_LIBRARY_DIR -l$${ZINT_LIB_NAME}

LIBS += $$LIMEREPORT_LIB_FILE
LIBS += $$ZINT_LIB_FILE

LimeReport лежит в папке с QT/LimeReport

dll я либо кидаю тудаже где исполняшка линкуется, либо прямо в qt/qtbase/bin, а он прописывается в переменной PATH. (точнее, у меня не совсем так, у меня для сборки переменные прописываются, но суть таже, dll видны должны быть исполняемому файлу)
Title: Re: Вопросы новичка
Post by: rust on November 10, 2016, 10:38:56 PM
Как раз с путями разбирался.
Кучу времени с экономил с этим постом.

"Привет Мир" из диалога в отчет передал :-)
Спасибо за ваш проект и помощь.

ЗЫ Возможно если бы часть этой ветки была где нибудь в readme.txt поклонников LimeReport было бы больше.

Title: Re: Вопросы новичка
Post by: rust on November 16, 2016, 03:32:12 PM
Отчет это 2-х страничный бланк.
Может я не там ищу, но как добавить 2-ю страницу к отчету?
Title: Re: Вопросы новичка
Post by: Subst on November 16, 2016, 04:02:42 PM
В toolBar значок с плюсиком :)

[вложение удалено администратором]
Title: Re: Вопросы новичка
Post by: rust on November 16, 2016, 05:00:53 PM
Видимо у меня не та версия.
1.3.11
Вопрос, где взять свежее? :-)

[вложение удалено администратором]
Title: Re: Вопросы новичка
Post by: Subst on November 16, 2016, 05:04:06 PM
на гитхабе исходники, там же рядом в другой ветке
https://github.com/fralx/LimeReport/tree/1.4
Title: Re: Вопросы новичка
Post by: yurii on March 24, 2017, 01:14:11 AM
У меня изображение храниться в базе QByteArray. Подскажите как вывести в отчет. 
Title: Re: Вопросы новичка
Post by: Subst on March 24, 2017, 05:56:03 AM
Обсуждался уже подобный вопрос. Тут.
http://limereport.ru/forum/index.php?topic=161.0

а именно
"Как вариант можно написать CallbackDatasource"

Хотя в твоем случае картинка должна подхватываться из базы. Определи для элемента imageItem DataSource и field, посмотри что получится
Title: Re: Вопросы новичка
Post by: yurii on March 27, 2017, 07:20:01 PM
Добавил на форму  imageItem. Добавил DataSource (select * from image) а в поле field что добавлять?
Title: Re: Вопросы новичка
Post by: Subst on March 28, 2017, 04:59:56 AM
название поля из таблицы, в котором картинка хранится
Title: Re: Вопросы новичка
Post by: yurii on March 31, 2017, 01:34:10 PM
В поле field прописал имя столбца, но картинка так и не появилась.
Title: Re: Вопросы новичка
Post by: Arin Alex on March 31, 2017, 06:37:35 PM
Если база данных в sqlite, зашлите мне я гляну.
Title: Re: Вопросы новичка
Post by: yurii on March 31, 2017, 07:22:39 PM
База MySQL.
Title: Re: Вопросы новичка
Post by: yurii on March 31, 2017, 07:51:36 PM
Вот БД
Title: Re: Вопросы новичка
Post by: Arin Alex on March 31, 2017, 11:18:14 PM
Воспроизвести проблему не удалось. Можно еще шаблон отчета ?
Title: Re: Вопросы новичка
Post by: yurii on April 01, 2017, 12:21:46 AM
У вас Все нормально выводится?
Title: Re: Вопросы новичка
Post by: yurii on April 01, 2017, 12:53:07 AM
Я заново добавил таблицу и все заработало.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 04, 2017, 11:18:52 PM
Таблица image была добавлена как подзапрос поэтому и не работало
Title: Re: Вопросы новичка
Post by: joss on April 05, 2017, 06:32:08 PM
Добрый день.
Подскажите пожалуйста, можно ли по значению "Report variable" с помощью скрипта в отчете, от рендерить только ту страницу которая нужна? Например: If var1 == 2 {RenderReport = page2};
Чтобы не создавая кучу файлов отчётов, менять вид отчёта.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 06, 2017, 12:37:03 AM
На данный момент нет. Но я подумаю над этим.
Title: Re: Вопросы новичка
Post by: Subst on April 06, 2017, 08:30:28 AM
Алекс, как вариант через скрипты какие-то данные делать пустыми. Если автовысота итемов и бандов будет, то они не станут рендериться. Костыль, но задачу решает вроде
Title: Re: Вопросы новичка
Post by: Abygor on April 21, 2017, 11:25:51 AM
Добрый день!
Возможно ли напечатать конкретную страницу или диапазон из всего отчёта?
Как я понимаю,
Code: [Select]
        printer.setPrintRange(QPrinter::PageRange);
        printer.setFromTo(0,0);
не помогает.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 21, 2017, 04:38:05 PM
Из предварительного просмотра при выборе принтера можно указать диапазон.
Можно приделать другие варианты.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 21, 2017, 11:09:10 PM
Abygor Пофиксил теперь можно в через принтер диапазон передать.
Единственно страницы у меня с 1 начинаются.
Title: Re: Вопросы новичка
Post by: rust on May 15, 2017, 02:35:12 PM
И снова доброго времени суток.
В отчете необходимо печатать каждый символ строки переданной из БД в отдельном квадратике.
См. вложение.
если бы это было одно поле то не вопрос, но таких полей более 20.
Можно ли это делать средствами LR? Если да то в какую сторону копать.
Спасибо.
Title: Re: Вопросы новичка
Post by: Subst on May 15, 2017, 05:05:50 PM
Примерно так... Каждый квадратик - техтИтем, содержимое ниже

$S{
 var text=$D{таблица.поле}.toString();
 text.substring(2,1);
 }
Title: Re: Вопросы новичка
Post by: rust on May 16, 2017, 01:43:58 PM
Спасибо. Из базы все ок. А вот тут что не так?
$S{
var text =$V{modemNumber}.toString();
text.charAt(0);
}
SyntaxError: Parse error
Title: Re: Вопросы новичка
Post by: Arin Alex on May 16, 2017, 02:55:07 PM
Вот так будет работать :)
Code: [Select]
$S{
var text =$V{modemNumber};
text.toString().charAt(0);
}
Title: Re: Вопросы новичка
Post by: rust on May 17, 2017, 11:33:37 AM
запутался напрочь в синтаксисе :-(
Code: [Select]
$S{
var text=$V{modemNumber};
var ch;
if(text.toString()!=""){
ch=text.toString().charAt(0);
}
else {
ch=" ";
}
ch;
}
Естественно не работает :-)
ЗЫ: пару бы примеров посмотреть на использование условий циклов и работу со строками, а то как слепой котенок бьюсь над элементарными вещами.
Title: Re: Вопросы новичка
Post by: Arin Alex on May 17, 2017, 09:42:15 PM
LimeReport использует синтаксис javascript, соответственно примеры доступны :)
Я так понимаю у вас при пустом значении ошибка вылетает ?
В этом случае ваш скрипт нужно поправить следующим образом :
Code: [Select]
$S{
var text="$V{modemNumber}";
var ch;
if(text.toString()!=""){
ch=text.toString().charAt(0);
}
else {
ch=" ";
}
ch;
}
Title: Re: Вопросы новичка
Post by: ___Val___ on May 23, 2017, 01:53:40 PM
Многоуважаемые форумчане!
Я используя ОС Ubuntu (amd64) и мне необходимо установить LimeReport для учебных целей. Прошу, опишите процесс установки данной программы под вышеупомянутую операционную систему, ибо установить своими силами у меня не получается. Прошу, подскажите.

Заранее благодарен.
Title: Re: Вопросы новичка
Post by: Arin Alex on May 24, 2017, 11:08:29 AM
LimeReport,  по большей части, библиотека для приложений на qt и по сути в установке не нуждается. Процесс подключения библиотеки к проекту уже обсуждался на форуме http://limereport.ru/forum/index.php?topic=137.0 (http://limereport.ru/forum/index.php?topic=137.0). А если нужно, просто запустить дизайнер отчетов, то можно скачать appimage дизайнера https://sourceforge.net/projects/limereport/files/Linux/LRDesigner_1_4_7-64bit.AppImage/download (https://sourceforge.net/projects/limereport/files/Linux/LRDesigner_1_4_7-64bit.AppImage/download) и запускать его без установки.
Title: Вопросы новичка (скрипты,редактор полей в предпросмотре)
Post by: shiman on September 11, 2017, 12:12:17 PM
Добрый день.
Спасибо за ваш продукт, очень понравился.
Вопросик новичка - где найти примеры\описание как использовать скрипты ? Вижу закладки, связанные со скриптами в редакторе отчетов, но не знаю как использовать.
Еще вопрос - в просмотре документа есть возможность отредактировать поля. Можно ли как то сохранять некоторые новые значения для использования в следующем документе ? Сохранить в шаблоне или в дополнительном ini файле. Например внизу документа подпись - пользователь редактирует ее один раз и печатает необходимое количество документов.
Title: Re: Вопросы новичка (скрипты,редактор полей в предпросмотре)
Post by: Arin Alex on September 11, 2017, 09:59:57 PM
Приветствую!

Документации к скриптам на данный момент не существует в силу отсутствия достаточного количества времени на её написание.
Вкратце могу сказать:
  1. Синтаксис скриптов javascript
  2. Скрипты доступны непосредственно при формировании вывода в TextItem, а также есть инициализационный скрипт, который выполняется перед генерацией отчета. Для выполнения скрипта в текстовом элементе используется конструкция $S{ Скрипт }. Если посмотреть демо примеры, то можно найти довольно много примеров такого использования скриптов. В инициализационном скрипте можно определить служебные функции, которые потом будут доступны при генерации текстовых элементов. Так же в этом скрипте можно вызвать диалоговое окно, в котором можно установить некоторые переменные отчета для дальнейшего использования во время генерации. В следующей версии (1.5) в инициализационном скрипте также можно будет определить функции, которые будут слотами для событий происходящих во время генерации отчета (beforeRender, afterData, afterRender).

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

 
Title: Re: Вопросы новичка
Post by: ldir on October 04, 2017, 10:59:11 PM
Здравствуйте!
Подскажите, есть ли возможность печати 2-х страниц на одном листе? Просто хотелось бы сделать стандартный документ формата А4 книжной ориентации и при необходимости печатать его либо как есть, либо впихнуть его на одну альбомную страничку в двух экземплярах.
Title: Re: Вопросы новичка
Post by: Arin Alex on October 05, 2017, 01:47:08 AM
К сожалению так не получится :( Одну страницу на два листа можно, а две страницы на один лист нет. 
Title: Re: Вопросы новичка
Post by: ldir on October 05, 2017, 11:10:54 AM
Жаль. Не всегда есть возможность сделать это через настройки принтера. Да и неудобно при каждой печати тыкать. В программе выставил и забыл - мухи отдельно, котлеты отдельно. Видимо придется для каждого варианта разные файлы создавать.
Title: Re: Вопросы новичка
Post by: niks on November 29, 2017, 07:59:12 PM
Здравствуйте, подскажите, как можно решить такую проблему?
Имеется текстовое поле, в котором размещен текст:
Quote
"Дата рождения: $D{owner.ДатаРождения}
Проблема в том, что даты или места может не быть, поэтому необходимо при получении $D{owner....} проверять, не пустое ли оно и выводить или не выводить его и вспомогательный текст в начале.
Насколько я понимаю, это можно сделать скриптом, что-то вроде:
Code: [Select]
if (getField('$D{owners.ДатаРождения}')<>"") 
{
"Дата рождения:" $D{owners.ДатаРождения},
}
адрес: $D{owners.АДРЕС}
Как это правильно оформить?
Title: Re: Вопросы новичка
Post by: Subst on November 30, 2017, 10:23:13 AM
в тексте поля примерно так

$S{
 if ($D{table.field}=="")
  "";
 else
  $D{table.field};
 }
Title: Re: Вопросы новичка
Post by: niks on November 30, 2017, 04:26:05 PM
В приведенном скрипте если поле пустое, то и в случае печати оно большой погоды не сделает.
Может вопрос не совсем корректно задал.
Сейчас есть таблица, составленная из текстовых полей с границами, объединенных построчно в layout-ы. В этой таблице есть ячейка-текстовое поле, в которой есть 2 строки:
"Дата рождения: $D{...}
Город: $D{...}"
Т.е. если поля будут возвращены пустые, то нужно убрать соответствующие фразы.
Если все поля будут пустые, то все фразы уберутся, но ячейка (исходное текстовое поле) должно остаться.

Параллельно возникли вопросы по текстовым полям:
1. На что и как влияют свойства:
- followTo;
- format;
- textIndent?
2. Текстовое поле имеет размер? Вложил в него текста примерно на страницу Word шрифтом Times New Roman, size 12. Вставилось все, но даже в предварительном просмотре выводится не весь текст. Бэнда, страницы хватает, включены свойства AutoHeight и MaxWordLength.
3. На бэнде размещено 3 текстовых поля по ширине бэнда друг над другом (в каждой содержится часть текста, т.к. в 1 поле все не отображается). Свойство allowHTML включено, в каждом блоке текста идет:
Quote
<style>
   p { text-indent: 100px; }
</style>
<p>текст</p>
...
<p>текст</p>
Проблема в том, что в первом блоке абзацы отрабатывают, а последующих либо нет, либо на печать выводится часть текста, обрезанная сверху и снизу, либо появляются промежуточные пустые страницы.
Я неправильно использую теги или в чем может быть дело?
Title: Re: Вопросы новичка
Post by: Subst on November 30, 2017, 05:21:35 PM
по примеру перефразирую, что вобщем-то очевидно:

$S{
 if ($D{table.field}=="") // если поле пустое ничего не выводим
  "";
 else
  "Произвольный текст:"+$D{table.field}; // в противном случае выводим, все что угодно в соответсвии с синтаксисом ECMA 262
 }

followTo - следует за, указать текстовое поле, в котором начало фразы, в текущем будет продолжение. Полезно использовать, например при обтекании рисунка текстом

format - формат отображения текста, нужно использовать вместе с dataType свойством

textIdent - очевидно, отступ текста от границы поля

по HTML не вполне понял вопрос, но почему бы не использовать свойство autoHeight?
Title: Re: Вопросы новичка
Post by: niks on December 01, 2017, 07:09:44 PM
Спасибо, со скриптом именно то, что нужно, что-то зациклился я на фигурных после if, поэтому не парсилось.

По HTML приложил файлы, в каждом абзацы отмечены соответствующими тегами:
- test1 - в бэнд помещены три текстовых поля (длинный текст, разбитый на 3 части), в каждом установлен стиль для абзаца - на PDF предпросмотра видно, что абзацы не работают;
- test2 - эти же три текстовых поля, стиль для абзаца установлен только в первом - на PDF предпросмотра видно, что абзацы не работают;
- test3 - эти же три текстовых поля, стиль для абзаца не установлен - на PDF предпросмотра видно, что абзацы не работают;
- test4 - скопировал текстовый блок из другого отчета, где абзацы работали. Размножил его до трех. Вставил тот же текст. В каждом блоке поместил стиль для абзаца - абзацы на предпросмотре есть.
Еще большая проблема - во всех PDF предпросмотра видно, что есть проблемы с выводом текста (странные переносы на новую строку, пропажа части абзаца). В этих блоках нет данных, но если добавить поля из модели, то сдвиги будут еще сильнее. Положение сдвигов меняется от манипуляций с тегами, что наводит на мысль, что проблема может быть в оформлении текста. При отключении тегов весь текст попадает в просмотр, но встает вопрос, как сделать абзацы. Отключал trimValue, делал пробелами - в самом дизайнере абзацы появляются, но уже в предпросмотре первого абзаца в блоке текста нет, а остальные разные (из-за равнения по ширине страницы).

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

Title: Re: Вопросы новичка
Post by: Subst on December 02, 2017, 06:14:35 AM
Проблема с переходом на новую страницу, когда DataBand занимает больше одной страницы единолично.
Это вопрос Алексу.

Вот тут подробней можно?

...в которое вставляются несколько полей из программы...

каким образом всавляются?
Title: Re: Вопросы новичка
Post by: niks on December 02, 2017, 09:25:11 AM
Quote
Вот тут подробней можно?
...в которое вставляются несколько полей из программы...
каким образом всавляются?
Идет текстовый блок в бэнде, в нем встречаются $D{имя_модели.имя_поля} - с самой вставкой значений проблем не заметил.

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

Вроде разобрался с первоначальным вопросом по абзацам (почему то работают, то нет) - свойство allowHTML не всегда срабатывает, если теги или текст добавлять после того, как она стоит. После добавления тегов или исправлений в блоке текста выкл/вкл галку и отображение в дизайнере и печати подхватывает форматирование.
Title: Re: Вопросы новичка
Post by: Subst on December 02, 2017, 03:04:24 PM
Quote
Вроде разобрался с первоначальным вопросом по абзацам (почему то работают, то нет) - свойство allowHTML не всегда срабатывает, если теги или текст добавлять после того, как она стоит. После добавления тегов или исправлений в блоке текста выкл/вкл галку и отображение в дизайнере и печати подхватывает форматирование.

Видимо, поэтому я и не заметил описаной проблемы.

Про последний итем и мусор: я это заметил, об этом и писал.Более того, это может быть и единственный итем на странице. И необязательно с allowHTML.

Я написал Алексу в личку и выслал упрощенный пример. Ждем.
Title: Re: Вопросы новичка
Post by: Arin Alex on December 02, 2017, 06:39:52 PM
Проблему увидел. Буду разбираться. 
Title: Re: Вопросы новичка
Post by: Arin Alex on December 07, 2017, 03:00:11 AM
Поправил разбиение TextItem. Пушнул на github. 
Title: Re: Вопросы новичка
Post by: Arin Alex on December 07, 2017, 08:35:20 PM
Еще раз поправил :) И пушнул
Title: Re: Вопросы новичка
Post by: niks on December 09, 2017, 02:09:55 PM
Спасибо! Попробуем.
Title: Re: Вопросы новичка
Post by: alfaruh on May 15, 2018, 09:18:02 PM
Парни, привет.
Возникла такая проблема, решил использовать LR Designer и пытаюсь подключиться к своей базе MariaDB, но когда выбираю драйвер - qmysql3, ловлю краш.
Windows 10 x64. База доступна для внешних соединений.
В какую сторону смотреть?
Title: Re: Вопросы новичка
Post by: Subst on May 16, 2018, 11:52:49 AM
Из программы нормально цепляется?
Title: Re: Вопросы новичка
Post by: Arin Alex on May 16, 2018, 12:04:46 PM
Можно более подробно? Валится в какой момент? Какое сообщение?
Title: Re: Вопросы новичка
Post by: alfaruh on May 16, 2018, 05:20:00 PM
Попробовал DBeaver, соединение ловлю, базу вижу.
Захожу в LRDesigner, указываю данные для соединения (пробовал и без порта), нажимаю Check Connection - ловлю краш.
Если использую драйвер - qsqlite, получаю пустое сообщение об ошибке.
Скрины приложил.
Title: Re: Вопросы новичка
Post by: Subst on May 16, 2018, 05:38:17 PM
Ну Sqlite - это сильно, думаю :)

Все таки MariaDB более совместима с MySQL. Какая версия? Там кажется ситуация была следующая - MariaDB и MySQL версии 5.5 полностью совместимы. Потом идут разногласия. Дрова как собираешь для MariaDB?
Title: Re: Вопросы новичка
Post by: alfaruh on May 16, 2018, 08:59:31 PM
10.1.26-MariaDB-0+deb9u1 - Debian 9.1 - версия БД
А дрова...
Если честно, я даже не понял о чем речь, как, куда и под что их собирать :o
Ткните, будьте добры, в нужном направлении :)
Title: Re: Вопросы новичка
Post by: Subst on May 17, 2018, 05:34:32 AM
версия 10 - это позже 5.5, именно число 10 говорит о неполной совместимости с MySQL.

Дрова.. я про драйвер MySQL для QT. В Assistant статья SQL Database Drivers.

Или ты не собирал сам драйвер, а использовал из репозиотрия? Собственно, этот момент и важен, собирал сам или нет, если собирал, то как, если не собирал, то какой используешь.
Title: Re: Вопросы новичка
Post by: alfaruh on May 17, 2018, 10:48:27 AM
Драйверов я не собирал. В корне ПО была папка sqldrivers и там уже лежит qsqlmysql.dll.
Я посчитал, что он сгодится.
Title: Re: Вопросы новичка
Post by: Subst on May 17, 2018, 12:20:26 PM
Понятно. Это драйвер собран явно конкретно под MySql. В силу уже указанных причин он, возможно, не подходит в полной мере для MariaDB версии 10.
ПО хорошему надо собрать драйвер именно под Maria.


Аналогичная ситуация возникает при использовании InterBase и/или FireBird
Title: Re: Вопросы новичка
Post by: alfaruh on May 17, 2018, 01:14:51 PM
Хорошо, углублюсь в эту тему. Попробую собрать драйвер. ::)
Подскажите только, вот - http://joelwilkins.blogspot.ru/2013/11/building-mariadb-driver-for-qt-v52-beta.html . Эта статейка, то что мне нужно?
Title: Re: Вопросы новичка
Post by: Subst on May 17, 2018, 01:46:00 PM
Версия QT какая?
Я так понял, что ставил уже готовый тулкит QT? ТОгда тебе исходники понадобятся, если их нету.

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

Я не уверен в успехе, я не собирал. Говорю по аналогии с FireBird, его я собирал. Принцип должен быть один и тот же.
Title: Re: Вопросы новичка
Post by: alfaruh on May 17, 2018, 02:37:48 PM
Хорошо, спасибо. Отпишусь о результатах)
Title: Re: Вопросы новичка
Post by: alfaruh on May 17, 2018, 07:58:40 PM
Собрал драйвер, закинул в папку /limereport/sqldrivers .
Получаю ошибку - Driver not loaded.
Собственно, как его и куда загружать?
Title: Re: Вопросы новичка
Post by: Subst on May 17, 2018, 08:08:00 PM
Закинуть надо туда, где у тебя лежал ранее драйвер default'ный

> Драйверов я не собирал. В корне ПО была папка sqldrivers и там уже лежит qsqlmysql.dll.

сюда пробуй. Старый бэкапни куда-нить на всякий случай. И не забудь, рядом с исполняшкой положить dll клиентовскую от MariaDB
Title: Re: Вопросы новичка
Post by: alfaruh on May 17, 2018, 08:47:25 PM
Клиентовская .dll имеешь ввиду...
Title: Re: Вопросы новичка
Post by: Subst on May 17, 2018, 10:20:49 PM
угу
Title: Re: Вопросы новичка
Post by: alfaruh on May 17, 2018, 10:31:14 PM
Подложил, заменил - результат тот же. Driver not loaded :-\
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 05:46:38 AM
Собирал как плугин?
Давай попробуем сначала по порядку
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 09:13:21 AM
Действовал в соответствии с инструкцией, размещенной по ссылке выше.
Вопросов до 10 шага не возникало.
Вот такой код получился:

TARGET = qsqlmysql

SOURCES = main.cpp
OTHER_FILES += mysql.json
include(../../../sql/drivers/mysql/qsql_mysql.pri)

PLUGIN_CLASS_NAME = QMYSQLDriverPlugin
include(../qsqldriverbase.pri)


win32: LIBS += -L"$$PWD/'../../../../../../../../MariaDB 10.1/lib/'" -llibmysql

INCLUDEPATH += "$$PWD/'../../../../../../../../MariaDB 10.1/include/mysql'"
DEPENDPATH += "$$PWD/'../../../../../../../../MariaDB 10.1/include/mysql'"

win32:!win32-g++: PRE_TARGETDEPS += "$$PWD/'../../../../../../../../MariaDB 10.1/lib/libmysql.lib'"
#else:win32-g++: PRE_TARGETDEPS += "$$PWD/'../../../../../../../../MariaDB 10.1/lib/liblibmysql.a'"


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

:-1: ошибка: No rule to make target 'D:/Qt52/5.2.0/Src/qtbase/src/plugins/sqldrivers/mysql/'../../../../../../../../MariaDB 10.1/lib/liblibmysql.a'', needed by '\plugins\sqldrivers\qsqlmysql.dll'.  Stop.

Найдя свежеиспеченный драйвер, подложив его в /limereport/sqldrivers и подложив клиентскую библиотеку, получаю driver not loaded.
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 10:54:02 AM
где лежит исполняемый файл, где плугин? Ты запускаешь LRDesigner из приложения?
В какой момент говорит Driver Not Loaded?
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 11:02:30 AM
Запускаю LRDesigner как самостоятельную программу.
Driver not loaded говорит в момент когда пытаешься установить соединение с базой.
Check connection или когда пытаешься установить соединение с ней.
Прилагаю скрины

P.S Вот тут есть какие-то MariaDB Коннекторы - https://mariadb.com/kb/en/library/connectors/ . Это вообще к чему и почему? :o
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 11:19:14 AM
Попробуй сначала накидать софтинку элементарную, законектиться оттуда к базе
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 11:23:08 AM
Хихихи. Это надолго.
Яжнепрограммист.
Хорошо, отпишусь о результатах.
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 11:42:10 AM
т.е. ты не программист, собираешь драйвер БД, но написать че-нить что коннектит этот драйвер, не могешь... :D Срыв шаблона :D
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 11:44:47 AM
Давай еще с другой стороны зайдем... я не вижу, лежит ли рядом Qt5Sql.dll
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 11:51:01 AM
Вот он.
А по статейкам действовать не мудрено :)

Примерно получается вот такой код...

static bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLMYSQL");
    db.setDatabaseName("zabbix");

    db.setUserName("ralfaruh");
    db.setHostName("192.168.50.107:3306");
    db.setPassword("password");
    if (!db.open()) {
        qDebug() << "Cannot open database:" << db.lastError();
        return false;
    }
    return true;
}
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 12:05:51 PM
что пишет по qDebug() ?
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 01:41:32 PM
Итак, есть успех.
Нужно было клиентскую .dll от MariaDB закинуть в C:/Windows. (Если убрать оттуда эту .dll, прога будет так же ругаться Driver Not Loaded).

Закинул собранные драйвера в D:\Qt52\5.2.0\mingw48_32\plugins\sqldrivers и словил соединение с базой.

Из LimeReportDesigner все так же Driver Not Loaded.

Прилагаю скрин, что соединение с базой есть (соединение безуспешное из за неправильного пароля. Используя валидный получаем успешное соединение)
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 02:35:48 PM
> Нужно было клиентскую .dll от MariaDB закинуть в C:/Windows

Достаточно ее положить рядом с экзешником. Если этого мало, это уже не хорошо. Возможно в переменной path окружения прописан путь к какой-то другой клиентской библиотеке или в c:/windows была другая библиотека?

Запустиить LRDesigner из программы для тебя проблема, я так понимаю?
Или попробуешь?
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 02:38:00 PM
В C:/Windows не было этой библиотеки вовсе. Я подсмотрел это здесь - http://seppemagiels.com/blog/create-mysql-driver-qt5-windows.

Сейчас покурю интернет, думаю разберусь.
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 02:43:17 PM
Ну можно и иначе сделать, пришлешь проект текущий мне, скажешь пути, я сделаю.. но позже несколько, может часа через 2-4.
Или могу тебе "рыбу" проекта состряпать

И вот еще... ты LRDesigner именно из той папки запускаешь? Что в нем кокретно делаешь?
Добавить datasource ? Там что пишешь?
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 02:55:05 PM
Давай пока попробую сам разобраться с запуском из софтины.

По LRDesigner'у - запускаю из папки, жму Add database connection, заполняю как на скрине.
Check Connection -> Driver not loaded.
OK -> "кнопочка розеток" -> Driver not loaded

А про рыбу я не понял. :-[
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 03:07:02 PM
Выбери QMySql вместо QMySql3.

"Рыба" - это шаблон, с подключением LM и т.д.
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 03:09:56 PM
пробовал qmysql/qmysql3
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 03:16:01 PM
Посмотри содержимое переменной окружения Path
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 03:22:41 PM
Приложил скрин
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 03:35:44 PM
не полная инфа.. давай иначе, запусти консоль, выполнить -> cmd

набери where libmysql.dll
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 03:36:07 PM
Я отойду, чуть позже буду, прочитаю.
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 04:03:56 PM
Соответственно выполнил. Указал директорию.
Попробовал убрать оттуда файл (переименовал), больше нигде не нашел.
Вернул файл - все норм.

Скрин приложил.
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 04:51:29 PM
ну стало быть в этой части все нормально.
Надо пробовать из приложения LMDesigner запускать
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 04:52:16 PM
Пробовал через system start - driver not loaded.

Курю QT запуск...

#include <QCoreApplication>
#include <QDebug>
#include <QtSql>
#include <QProcess>

static bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL3");
    db.setDatabaseName("zabbix");

    db.setUserName("ralfaruh");
    db.setHostName("192.168.50.107");
    db.setPassword("password");
    db.setPort(3306);
    if (!db.open()) {
        qDebug() << "Cannot open database:" << db.lastError();
        return false;
    }
    else
        qDebug() << "db open";
    return true;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
createConnection();
    QProcess *process = new QProcess;
    QString file = "D:/limereport/LRDesigner.exe";
    process->start(file);
    return a.exec();
}


С БД соединяется, в LRDesigner'е - Driver not loaded ::)
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 05:02:16 PM
не-не.. в корне неправильно

Надо подрубить библиотеку к проекту.
Погодь, еще одна мысль... а ты LR качал бинарники или собирал?
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 05:40:27 PM
Качал вот с https://sourceforge.net/projects/limereport/files/LR_1_3_12_binares_Qt5.5_VC2010_win32.7z/download .
Сам ничего не собирал.
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 06:17:06 PM
а QT откуда качал?
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 06:21:11 PM
Там у них загрузочник свой. Версия 5.2
Кажется я делал вот так
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 07:05:58 PM
Ну судя по картинке ты установил сборку QT с MinGW.
Решение мне нравится больше, чем с VC, но в даннном случае возникает косяк.

Давай убедимся или опревергнем. Открой папку где стоит QT, что там есть?
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 07:18:54 PM
Приложен скрин
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 07:27:22 PM
нет, похоже VC а не MinGW.

Но вообще симптомы похожи на то, что не может LR зацепить libmysql.dll
Попробуй ее выкинуть из папки LR совсем. Пусть в c:/windows только лежит, не забудь в sqldrivers твою собранную либу оставить
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 07:30:00 PM
Безуспешно :o
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 07:50:02 PM
Значит надо собирать LR ручками.
У тебя QT 5.2.0, собранный тобой драйвер заточен под эту версию QT.
Бинарники LR собраны на базе QT 5.5.0, насколько я вижу. Видимо тут трабла. Тебе нужно из исходников LR собрать.

Завтра могу пошагово помочь. У меня уже полночь сейчас. Или поковыряй форум LR, там должно быть руководство к сборке.
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 07:55:25 PM
Subst, я только что собрал ручками LR))
Успех есть))!!
Законнектился к базе!
ТЕПЕРЬ НАДО КУРИТЬ SQL))))))))))))))
Title: Re: Вопросы новичка
Post by: Subst on May 18, 2018, 08:02:17 PM
Ну с почином :D
Дерзай, будут вопросы - пиши
Title: Re: Вопросы новичка
Post by: alfaruh on May 18, 2018, 08:07:05 PM
Вопросы уже появляются, но задавать пока не буду ::)
Огромное спасибо за помощь! ;D
Title: Re: Вопросы новичка
Post by: amkru on May 23, 2018, 11:41:05 AM
День добрый.
Подскажите,  нужно ли менять какие-либо настройки, чтобы интерфейс собираемого проекта(limereport.pro) был русскоязычным?
Title: Re: Вопросы новичка
Post by: Subst on May 23, 2018, 11:48:11 AM
интерфейс проекта?
или интерфейс дизайнера все же?
Title: Re: Вопросы новичка
Post by: amkru on May 23, 2018, 11:51:58 AM
Получается, что дизайнера
Title: Re: Вопросы новичка
Post by: Arin Alex on May 23, 2018, 12:06:07 PM
Нужно установить транслятор, что-то вроде того :
Code: [Select]
QTranslator limeReportTranslator;
    QString translationPath = QApplication::applicationDirPath();
    translationPath.append("/languages");
    limeReportTranslator.load("limereport_"+QLocale::system().name(),translationPath);
    a.installTranslator(&limeReportTranslator);
Title: Re: Вопросы новичка
Post by: amkru on May 23, 2018, 12:08:24 PM
Нужно установить транслятор, что-то вроде того :
Code: [Select]
QTranslator limeReportTranslator;
    QString translationPath = QApplication::applicationDirPath();
    translationPath.append("/languages");
    limeReportTranslator.load("limereport_"+QLocale::system().name(),translationPath);
    a.installTranslator(&limeReportTranslator);
В файле /designer/main.cpp это уже сделано, но язык при этом остается английским
Title: Re: Вопросы новичка
Post by: Arin Alex on May 23, 2018, 12:12:29 PM
Нужно проверить есть ли рядом с исполняемым файлом папка languages в которой должны лежать переводы вида limereport_*.qm
Title: Re: Вопросы новичка
Post by: amkru on May 23, 2018, 12:42:24 PM
Нужно проверить есть ли рядом с исполняемым файлом папка languages в которой должны лежать переводы вида limereport_*.qm
Создал папку "languages" в \LimeReport-master\build\5.9.1\win32\debug\designer
Скопировал в нее файлы *qm. из \LimeReport-master\translations
Не помогло.
Или надо переводы цеплять к demo_r1?
Title: Re: Вопросы новичка
Post by: Arin Alex on May 23, 2018, 12:52:01 PM
А вы designer запускаете или demo_r1?
Title: Re: Вопросы новичка
Post by: amkru on May 23, 2018, 01:12:22 PM
А вы designer запускаете или demo_r1?
Судя по всему запускается все-таки demo_r1. (в QtCreator открыт проект limereport.pro)
Title: Re: Вопросы новичка
Post by: Arin Alex on May 23, 2018, 01:38:25 PM
В qtcreator можно выбрать запускаемый подпроект
Title: Re: Вопросы новичка
Post by: amkru on May 23, 2018, 01:55:03 PM
В файле /designer/main.cpp заменил строку
Code: [Select]
limeReportTranslator.load("limereport_ru"+QLocale::system().name(),translationPath);на
Code: [Select]
limeReportTranslator.load("limereport_ru",translationPath);После этого заработало. Иначе получалось неверное имя файла.
Либо, можно переименовать файлы локализации.
Title: Re: Вопросы новичка
Post by: Arin Alex on May 23, 2018, 02:00:13 PM
По умолчанию дизайнер берет локаль системы и если она не Russian то соответственно дизайнер русским не будет ;) И принудительная загрузка русского в этом случае самое то :) В новой версии дизайнера можно будет менять язык интерфейса из настроек
Title: Re: Вопросы новичка
Post by: amkru on May 23, 2018, 02:23:17 PM
По умолчанию дизайнер берет локаль системы и если она не Russian то соответственно дизайнер русским не будет ;) И принудительная загрузка русского в этом случае самое то :) В новой версии дизайнера можно будет менять язык интерфейса из настроек
запрос имени системной локали возвращает "ru_RU". В результате и получается неверное имя файла.
Title: Re: Вопросы новичка
Post by: Arin Alex on May 23, 2018, 03:00:25 PM
bool QTranslator::load() последовательно перебирает возможные названия локалей и если не нашел limereport_ru_RU.qm загузит limereport_ru.qm.

в исходном main.cpp
Code: [Select]
limeReportTranslator.load("limereport_"+QLocale::system().name(),translationPath);
а не
Code: [Select]
limeReportTranslator.load("limereport_ru"+QLocale::system().name(),translationPath);
Title: Re: Вопросы новичка
Post by: Subst on May 23, 2018, 04:02:54 PM

запрос имени системной локали возвращает "ru_RU". В результате и получается неверное имя файла.
[/quote]

To amkru: Название файла локализации - это вобщем-то ваша зона желаний и ответсвенности, есть общие правила, довольно относительные. Это в первую очередь - файл заканчивается названием локали, а начинается именем проекта, в остальном Ваша фантазия. Так что прописывайте как угодно, хоть явно файл укажите.
Title: Re: Вопросы новичка
Post by: alfaruh on May 24, 2018, 06:26:11 PM
И снова здравствуйте! ;)

Набежали такие вопросы:

1) Что это за язык (если можно так назвать)? Хочется понять, что с ним можно делать и как. (Приложен скрин)
2) Могу ли я вывести значение только одной строки? ???
3) Могу ли я получить значения из связной таблицы (через внешний ключ).

Спасибо
Title: Re: Вопросы новичка
Post by: Subst on May 24, 2018, 06:47:55 PM
1) Язык - изобретение Алекса по большей части. Что он брал за отправную точку - спросим у него :D Вообще, в LR используется скриптовый язык, основанный на Ecma-262. JavaScript еже с ним тоже на этом стандарте основаны. Кое-что есть в Assiatant по теме QScriptEngine

2) Создай dataSource c ограничением типа select * from Table where id=42, и будет столько строк сколько попадут под where

3) смотри доку по LR, она не богата по содержанию, всего не раскрывает, старая уже. Но ЭТОТ моент там хорошо показан. Раздел "Создание наборов данных в отчете"
Title: Re: Вопросы новичка
Post by: alfaruh on May 24, 2018, 06:51:49 PM
Спасибо за быстрый ответ!
Продолжаю изучать ;)
Title: Re: Вопросы новичка
Post by: Subst on May 24, 2018, 07:10:01 PM
по 3) смотри также demo_r1/demo_reports/categories.lrxml
Title: Re: Вопросы новичка
Post by: Vermilion on July 06, 2018, 04:20:33 PM
Доброго времени суток!

Подскажите пожалуйста, как в бэнде с данными менять выравнивание по горизонтали (left, right, center ...) текста в поле по некоторому условию (условное форматирование)?

Заранее спасибо!
Title: Re: Вопросы новичка
Post by: Subst on July 06, 2018, 09:38:10 PM
To Vernilion:

Приветствую!

С помощью скрипта в текстовом итеме.
Примерно, так (содержимое textItem)

$S{
 if (1>0)
  THIS.alignment=2; // Qt::AlignRight
 else
  THIS.alignment=1; // Qt::AlignLeft
 "klop";
 }
Title: Re: Вопросы новичка
Post by: Vermilion on July 07, 2018, 08:21:37 AM
Спасибо огромное за подсказку!  :D

Есть ли где то описание всех методов и свойств объекта THIS?
Чтобы не засорять нубскими вопросами форум, есть ли где то описание всех фичей репортера и скриптового языка?
Title: Re: Вопросы новичка
Post by: Subst on July 07, 2018, 06:04:23 PM
Есть.. у Алекса и в исходниках :)
А если более серьезно, смотри, свойства итема в дизайнере. По сути эти свойства и можно применять в THIS

Например смотрю есть autoHeight... отлично, пишу в скрипте THIS.autoHeight=true

Если пороешь исходники textItem'а, то увидишь, что именно они и интерпритируются применительно к THIS
Title: Re: Вопросы новичка
Post by: Vermilion on July 07, 2018, 07:42:14 PM
Хорошо, будем копать!
Репортер очень радует своими возможностями, еще чуть чуть и будет по наворотам как FastReport, можно будет все самые бредовые отчеты, которыми у нас любит жить всякая отчетность, генерить.  :D
Title: Re: Вопросы новичка
Post by: Subst on July 08, 2018, 07:23:55 AM
Да куда уж больше возможностей...
с помощью скриптов и html можно, наверное, все сделать
Title: Re: Вопросы новичка
Post by: Vermilion on July 08, 2018, 02:38:29 PM
Приветствую!

Еще есть пара вопросиков:
 - как заставить pagefooter отображаться только на последней странице?
 - можно ли управлять видимостью band-ов из скриптов?

Спасибо.
Title: Re: Вопросы новичка
Post by: Subst on July 08, 2018, 03:13:38 PM
Хай!
1. А смысл отображать Page Footer только на последней странице (как следует из его названия, он отображается на всех страницах, включая или исключая последнюю и первую взаисимости от значений соответсвующих свойств) ? У тебя есть Report Footer.
   Но если очень хочется см. п.2

2. Если тебе нужно из срипта управлять видимостью Band'а - я обычно пользую такое решение: ставишь autoHeight у Band'а и textItem'ов внутри Band'a. Сриптом (ами) регулирешь содержимое textItem'а (ов). При пустом содержимом ни item ни band виден не будет.

Это как вариант. Возможны и другие, как фантазии хватит.
Title: Re: Вопросы новичка
Post by: Vermilion on July 08, 2018, 10:30:56 PM
Да п.2 нормальное решение, в скриптах смотреть на несовпадение текущего номера страницы и общего количества страниц.. Попробую, спасибо.
А по п1. ну вот такой отчет нужен, чтобы на последней странице внизу были данные, не зависимо от заполненности данными этой последней страницы. Понятное дело, что отчет может быть всего 1 страница - для него тоже это правило распространяется. А ReportFooter прижимается к последним данным на странице.. если бы его можно было принудительно отправить вниз страницы, тогда да..

Еще раз спасибо за совет.
Title: Re: Вопросы новичка
Post by: Vermilion on July 08, 2018, 11:06:15 PM
по п.2 - Для textItem'ов все красиво получается, но вот на бэнде лежит картинка с Qr-кодом... Как ее придушить? Из скрипта можно управлять элементами, отличными от textItem?
Title: Re: Вопросы новичка
Post by: Arin Alex on July 09, 2018, 10:14:21 PM
Vermilion
Quote
- как заставить pagefooter отображаться только на последней странице?
Есть tearoffband это как раз то, что вам нужно, этот раздел печатается на последней странице в нижней её части.
Quote
Из скрипта можно управлять элементами, отличными от textItem?
В новой версии (ветка develop на github) можно делать вот так: 

Code: [Select]
Reportpage1_DataBand1.beforeRender.connect(BRDataBand1)

function BRDataBand1(){
   if (getField("customers.CustomerID") == "ANTON") {
         Reportpage1_TextItem1.isVisible = false
//         Reportpage1_TextItem1.fontColor = LimeReport.color("red")
   }
}
Title: Re: Вопросы новичка
Post by: Vermilion on July 10, 2018, 09:12:55 AM
Спасибо Alex!

Это решает мои проблемы!
Title: Re: Вопросы новичка
Post by: AAL on July 12, 2018, 12:26:12 PM
Подскажите пожалуйста!
Есть две абстрактные модели. 1я хранит список маршрутов.
У каждого маршрута есть список точек.
Мне нужно распечатать для каждого маршрута список точек.
2я модель ссылается на объект маршрута и предоставляет список точек маршрута.
Что то типа:
Маршрут 1:
  Точка 1  Координаты
  Точка 2  Координаты
Маршрут 2:
  Точка 1  Координаты
  Точка 2  Координаты

Если я пытаюсь напечатать символ градуса, то выводится знак вопроса. Шрифт Arial
Title: Re: Вопросы новичка
Post by: Arin Alex on July 12, 2018, 05:26:58 PM
AAL
Вложенные структуры можно выводить через SubDetail band
Как строить связанные источники данных можно посмотреть в demo_r1 (master, detail источники)
Quote
Если я пытаюсь напечатать символ градуса, то выводится знак вопроса. Шрифт Arial
Если в контент TextItem попадает знак градуса то TextItem без проблем его выводит см. аттач
Title: Re: Вопросы новичка
Post by: AAL on July 12, 2018, 07:12:50 PM
Вложенные структуры можно выводить через SubDetail band
Как строить связанные источники данных можно посмотреть в demo_r1 (master, detail источники)
То есть без сигналов и слотов не обойтись?

Вот так вот я смог решить свою задачу:
bool addModel(QAbstractItemModel *model)
    {
        bool result = report->dataManager()->addModel(model->objectName(), model, false);
        if(result) {
            QJSValue jsVal = report->scriptManager()->scriptEngine()->newQObject(model);
            if(!jsVal.isNull())
                report->scriptManager()->scriptEngine()->globalObject().setProperty(model->objectName(), jsVal);
        }
        return result;
    }
----------------------------
В TextItem:
$S{
 var wocId = $D{zonelinelist.wocId};
 zoneline.wocId = wocId;
 wocId;
}
Title: Re: Вопросы новичка
Post by: Arin Alex on July 12, 2018, 07:28:28 PM
Можно обойтись :) Пихаете 2 модели в отчет и на подчиненную накидываете прокси (Subdetail -> filterMode)
Сигналы слоты гибче :) А чем они вас не устраивают ?
Title: Re: Вопросы новичка
Post by: AAL on July 12, 2018, 07:45:16 PM
Можно обойтись :) Пихаете 2 модели в отчет и на подчиненную накидываете прокси (Subdetail -> filterMode)
Сигналы слоты гибче :) А чем они вас не устраивают ?
С прокси я не понял как работать. Если примерчик дадите будет хорошо :)
К тому же если добавить в Fields map строку, и не заполнять ее, то при нажатии ОК падает. Удаление строки не работает.

В сигнал/слотовом варианте мне не нравится возвращаемый параметр для сигнала. К тому же из QML ничего вернуть нельзя.
Плюс появляется дополнительная зависимость библиотек, в которых эти модели существуют, от библиотеки печати.
Title: Re: Вопросы новичка
Post by: AAL on July 12, 2018, 07:54:40 PM
С градусом так и не получается, но это уже походу моя проблема. Правда пока не знаю как решить.
В коде объявляю строку, которая в qDebug() уже с вопросом печатается:
QString format = "%1 %2°%3'%4''";
Title: Re: Вопросы новичка
Post by: AAL on July 12, 2018, 08:11:38 PM
Помогла такая запись, но надолго ли  ;D
QString format = QString::fromLocal8Bit("%1 %2°%3'%4''");
Title: Re: Вопросы новичка
Post by: Arin Alex on July 12, 2018, 08:13:59 PM
Вот примерчик (order_proxy)
Прокси поправлю :)
Title: Re: Вопросы новичка
Post by: AAL on July 12, 2018, 08:24:01 PM
Все равно не понял как master влияет на detail.
Что должно быть у моей модели, чтобы выставить CustomerId?
Title: Re: Вопросы новичка
Post by: Arin Alex on July 12, 2018, 08:34:57 PM
Прокси фильтрует подчиненную модель по заданному полю, в данном случае это CustomerID.
В приведенном примере, обе модели имеют поле CustomerID, соответственно при перемещении по мастеру, в подчиненной модели выбираются все записи с условием detail.CustomerID = master.CustomerID
Title: Re: Вопросы новичка
Post by: AAL on July 17, 2018, 07:20:52 PM
Доброго времени суток.
Создал переменную в шаблоне, хочу в нее записывать QImage через setVariable.
Можно ли так делать? А то у меня падает :)

ЗЫ. Вообщем не понятно почему стало падать, но падает
на функции:
BaseDesignIntf* HorizontalLayout::findNext(BaseDesignIntf* item){
    if (layoutsChildren().count() < childItems().size()-1){
        layoutsChildren().clear();// <<-- тут падает
        foreach (BaseDesignIntf* childItem, childBaseItems()) {
            layoutsChildren().append(childItem);
        }
    }
    qSort(layoutsChildren().begin(),layoutsChildren().end(),horizontalLessThen);
    for (int i=0; i<layoutsChildren().count();++i){
        if (layoutsChildren()==item && layoutsChildren().size()>i+1){ return layoutsChildren()[i+1];}
    }
    return 0;
}
Title: Re: Вопросы новичка
Post by: Arin Alex on July 17, 2018, 11:46:11 PM
В develop ветке можно пропихнуть QImage через переменную.
Воспроизвести падение не получается, можно в меня демкой кинуть?
Title: Re: Вопросы новичка
Post by: AAL on July 18, 2018, 10:59:45 AM
В демке все нормально, падает только на определенном наборе данных.
Причем дело не в картинке как оказалось.
Если получится определить причину, скину демку. В предыдущей версии все ок.
Title: Re: Вопросы новичка
Post by: AAL on July 18, 2018, 04:18:00 PM
Фууух, ну и задачка попалась. Устал дебажить  ;D
Вообщем вот тут происходит ошибка:

void PageItemDesignIntf::relocateBands()
{
    if (isLoading()) return;

    int bandSpace = (itemMode() & DesignMode)?4:0;

    QVector<qreal> posByColumn;

    qSort(m_bands.begin(),m_bands.end(),bandSortBandLessThenByIndex);

    int bandIndex = 0;
    if (!(itemMode() & DesignMode)){
        while ( (bandIndex < m_bands.count()) &&
                ((m_bands[bandIndex]->bandType() == BandDesignIntf::TearOffBand) ||
                (m_bands[bandIndex]->bandType() == BandDesignIntf::PageFooter) ||
                 m_bands[bandIndex]->bandType() == BandDesignIntf::ReportFooter )
        ){
            bandIndex++;
        }
    }

    if ( (m_bands.count()>0) && (bandIndex<m_bands.count()) ) {
        initColumnsPos(posByColumn,pageRect().y(),m_bands[bandIndex]->columnsCount());
        m_bands[bandIndex]->setPos(pageRect().x(),pageRect().y());
        posByColumn[0]+=m_bands[bandIndex]->height()+bandSpace;
    }

    if(m_bands.count()>1){
        for(int i=0;i<(m_bands.count()-1);i++){
            if (((m_bands[i+1]->bandType()!=BandDesignIntf::PageFooter) &&
                (m_bands[i+1]->bandType()!=BandDesignIntf::TearOffBand)) || (itemMode() & DesignMode)){
                if (m_bands[i+1]->columnsCount()>1 &&
                    m_bands->columnsCount() != m_bands[i+1]->columnsCount())
                {
                    qreal curPos = posByColumn[0];
                    initColumnsPos(posByColumn,
                                   curPos,
                                   m_bands[i+1]->columnsCount());
                }
                if (m_bands[i+1]->columnIndex()==0){
                    m_bands[i+1]->setPos(pageRect().x(),posByColumn[0]);
                    posByColumn[0] += m_bands[i+1]->height()+bandSpace;
                } else {
                    //columnIndex()==-1
m_bands[i+1]->setPos(m_bands[i+1]->pos().x(),posByColumn[m_bands[i+1]->columnIndex()]);
                    posByColumn[m_bands[i+1]->columnIndex()] += m_bands[i+1]->height()+bandSpace;
                }
            }
        }
        foreach(BandDesignIntf* band, m_bands){
            if (band->isSelected()) band->updateBandNameLabel();
        }
    }
}
Title: Re: Вопросы новичка
Post by: AAL on July 18, 2018, 04:45:07 PM
У меня один заголовок настроен columnCount = 2. Сделал 1, все заработало.
Но опять же, проявляется не всегда. В тестовом не получается добиться падения
Title: Re: Вопросы новичка
Post by: Arin Alex on July 18, 2018, 05:03:52 PM
Какой эксепшн летит? Стектрэйс можно?
Title: Re: Вопросы новичка
Post by: AAL on July 18, 2018, 05:08:46 PM
Смог добиться в тестовом.
Запускал под demo_r1
Title: Re: Вопросы новичка
Post by: Arin Alex on July 18, 2018, 05:11:35 PM
Супер, сегодня гляну.
Title: Re: Вопросы новичка
Post by: Arin Alex on July 18, 2018, 06:57:08 PM
AAL Я правильно понимаю, что у вас лайм валится на генерации отчета "categories" ?
У меня он генерится без каких либо проблем.
В нем и колонок то нет :) а я так понимаю проблемы именно в колонках. 
Title: Re: Вопросы новичка
Post by: Arin Alex on July 18, 2018, 07:57:37 PM
AAL Поправил, пушнул (1.4.92)
Title: Re: Вопросы новичка
Post by: AAL on July 18, 2018, 08:20:52 PM
У меня падает, если заголовок subdetailheaderband имеет 2 колонки и columnFillDirection = Horisontal,
а subdetailband имеет 2 колонки и columnFillDirection = Vertical.
Это как раз в прикрепленном файле и сделано. :)
Title: Re: Вопросы новичка
Post by: Arin Alex on July 18, 2018, 08:50:03 PM
Я скачиваю
http://limereport.ru/forum/index.php?action=dlattach;topic=109.0;attach=338
и получаю в результате categories.lrxml :) (Без колонок в том виде, в котором он есть изначально)
Может ошибка закралась в момент загрузки файла?
Я там пушнул изменения полагаю должно исправить ситуацию :)

Выловил еще один вылет буду ковырять дальше.
Title: Re: Вопросы новичка
Post by: Arin Alex on July 18, 2018, 09:51:59 PM
AAL 1.4.93 Должно все работать.
Title: Re: Вопросы новичка
Post by: AAL on July 19, 2018, 10:48:03 AM
Ай, точно. Не тот файл скинул ))
Падение ушло, но есть небольшой косяк с заголовком, прилагаю картинку.
Title: Re: Вопросы новичка
Post by: Arin Alex on July 20, 2018, 02:17:51 PM
AAL Для Vertical пофиксил :), а для VerticalUniform даже не просите :), не буду делать. 
Title: Re: Вопросы новичка
Post by: AAL on July 20, 2018, 04:23:38 PM
Хорошо, и так все супер вроде :)
А для чего он, это Uniform?
Title: Re: Вопросы новичка
Post by: Arin Alex on July 20, 2018, 05:50:51 PM
AAL Равномерное распределение содежимого колонок на последней странице или перед следующим датабандом
Title: Re: Вопросы новичка
Post by: Ender X on September 07, 2018, 12:34:51 PM
День добрый.

Есть заполненная QStandardItemModel.

По коду:
Code: [Select]
report = new LimeReport::ReportEngine(this);
    report->dataManager()->addModel("model", model, true);
    report->designReport();
исправно выводит дизайнер отчёта.

А вот по коду:
Code: [Select]
report = new LimeReport::ReportEngine(this);
    report->dataManager()->addModel("model", model, true);
    report->loadFromFile("report.lrxml");
    report->previewReport();
открывается только виджет, предпросмотра готового отчёта не видать.

Что я делаю не так?

P.S. report->printReport() показывает окно настройки печати.

Win 7 Pro Rus
Qt Creator 4.6.2
Qt 5.11.1
Title: Re: Вопросы новичка
Post by: Subst on September 07, 2018, 02:57:32 PM
Ender X, ты уверен, что по заданному пути точно есть твой шаблон отчета?
Если он лежит рядом с исполняшкой (exe файлом), укажи явно

report->loadFromFile(qApp->applicationDriPath()+"/report.lrxml");
Title: Re: Вопросы новичка
Post by: Ender X on September 07, 2018, 03:15:53 PM
Ender X, ты уверен, что по заданному пути точно есть твой шаблон отчета?
Если он лежит рядом с исполняшкой (exe файлом), укажи явно

report->loadFromFile(qApp->applicationDriPath()+"/report.lrxml");

Спасибо! Помогло.  :)
Title: Re: Вопросы новичка
Post by: Kilek on November 20, 2018, 12:07:44 PM
Здравствуйте, я новичок в qt, поэтому не могли бы вы обьяснить мне кое что. Я смог подключить LimeReport как библиотеку к своему проекту, при нажатии на кнопку я запускаю LimeReport :
LimeReport::ReportEngine m_report;
m_report.designReport();
Вопрос, как мне передать значения в отчёт не из бд, а из моей программы, грубо говоря я имею объект с тремя свойствами и хочу передать их в отчёт в виде таблицы.
Возможно вопрос глупый, но буду крайне признателен за разжеванный ответ, спасибо.
Title: Re: Вопросы новичка
Post by: Arin Alex on November 20, 2018, 09:33:07 PM
Kilek Приветствую!
В limereport можно передавать
 1. переменные 
 
Code: [Select]
  report->dataManager()->setReportVariable(ui->leVariableName->text(), ui->leVariableValue->text());
 
2. Источники данных унаследованные от QAbstractItemModel
 
Code: [Select]
  QSqlQueryModel* customersModel = new QSqlQueryModel();
  customersModel->setQuery("select * from customers", m_db);
  report->dataManager()->addModel("external_customers_data",customersModel,true);
 
  QStringList simpleData;
  simpleData << "value1" << "value2" << "value3";
  QStringListModel* stringListModel = new QStringListModel();
  stringListModel->setStringList(simpleData);
  report->dataManager()->addModel("string_list",stringListModel,true);
 
https://www.youtube.com/watch?v=Wc_sPNuArjA 

 3. так называемые callback datasources 
 https://www.youtube.com/watch?v=IekDWzh251c

Останутся вопросы пишите.
Title: Re: Вопросы новичка
Post by: Kilek on November 22, 2018, 12:05:50 PM
Alex, спасибо за ответ, есть ещё два вопроса. Возможно ли из моей программы задавать шаблон, что бы пользователю открывался сразу готовый отчёт в LimeReport даже без необходимости нажатия на Render.
 И есть ли механизм задания параметров для создания отчёта. Например, LimeReport принимает поле даты, но выводить будет только информацию за последний месяц.
Title: Re: Вопросы новичка
Post by: Arin Alex on November 22, 2018, 03:41:06 PM
Kilek
report->loadFromFile(fileName);
report->dataManager()->setReportVariable("VarName", "VarValue");
Можно установить переменные и потом в отчете формировать запросы с использованием этих значений.
report->preview() // Для вызова окна просмотра
report->print() // Для вывода на печать
report->printToPDF("FileName") // Печать в PDF
Title: Re: Вопросы новичка
Post by: Kilek on November 23, 2018, 05:59:59 PM
  Я пытаюсь открыть файл lrxml, но Preview открывается пустым. Вот код из mainwindow.cpp:
    QString fileName =  QFileDialog::getOpenFileName(this,"Select report file");
    if (!fileName.isEmpty()){
        report.loadFromFile(fileName);
        report.previewReport();//Открывает, но он пустой
    }
  Открываю файл из demo_1, этот же код в demo_1 работает правильно, что не так в моей программе, может что-то ещё нужно добавить? Понимаю, что нужно разобраться с demo_1, но я не особо шарю, что там к чему(
Title: Re: Вопросы новичка
Post by: Arin Alex on November 23, 2018, 07:43:45 PM
Kilek
Если вместо previewReport() вызвать designReport(), что открывается ? Дизайнер показывает шаблон отчета?
Title: Re: Вопросы новичка
Post by: Kilek on November 26, 2018, 11:22:21 AM
Всё разобрался, как всегда сам тупил)
Title: Re: Вопросы новичка
Post by: Kilek on November 26, 2018, 06:21:22 PM
Ну а выборку возможно делать только непосредственно подготавливая передаваемые значения в моём коде. В LimeReport нет возможности задать параметры для принимаемых значений? Просто, если я сделаю, к примеру, критерий по необходимой дате, а в другой ситуации программа не будет работать с датой, тогда придётся переписывать код, получается очень не универсально. Или всё-таки есть способ красиво обыграть данную ситуацию?
Title: Re: Вопросы новичка
Post by: Arin Alex on November 26, 2018, 08:45:47 PM
С данными, грубо говоря, есть два сценария:
  1. limereport сам подготавливает данные, то есть на основании переменных строит запросы к БД и т.д.
  2. Данные подготавливает внешнее приложение, и в этом случае они должны быть полностью готовы к использованию генератором отчетов.
В новой версии (develop ветка на github) можно управлять процессом генерации отчета посредством скриптов и, в зависимости от условия, предотвращать генерацию раздела, таким образом, по сути, осуществить фильтрацию. Вопрос эффективности в этом случае остается открытым, поскольку генератору отчетов придется перебрать все переданные записи, и если на выход уйдет, к примеру, 1% от переданного объема, то время ожидания формирования отчета может не соответствовать результату. Таким образом данные целесообразнее подготовить заранее для максимально быстрой генерации отчета.   
 
Title: Re: Вопросы новичка
Post by: Kilek on November 28, 2018, 01:13:11 AM
Ок понятно, спасибо за ответ
Title: Re: Вопросы новичка
Post by: Kilek on December 04, 2018, 03:12:57 PM
Добрый день, если использовать callback datasources, то как передавать туда мои данные? К примеру у меня есть QVector, каждый элемент которого это объект класса, имеющий 4 параметра. Каким образом я могу адекватно представить их в отчете. С шаблоном и как показывать понятно, вопрос, как передать вектор в ColumnData?
case LimeReport::CallbackInfo::ColumnData:
   date =  info.columnName + “ “ + QString::number(info.index);

Я сначала пытался преобразовать вектор в QVariant и просто присвоить date, но так не работает, получается, что я вывожу одно значение во все колонки. Сейчас я думаю, что нужно передавать информацию в info. Но знаний и опыта у меня мало, так что решил спросить у вас.
Title: Re: Вопросы новичка
Post by: Arin Alex on December 04, 2018, 05:10:59 PM
Добрый день.
Если у вас есть массив объектов с некоторыми свойствами,
и вам из этого нужно получить табличное представление,
то следует сделать следующее :

1. case LimeReport::CallbackInfo::RowCount: // запрос кол-ва строк
            data = myObjectsVector.size() // возвращаем кол-во строк в таблице равное количеству эл-тов. в массиве;
            break;
2. case LimeReport::CallbackInfo::ColumnCount: // запрос кол-ва колонок
            data = 4; // возвращаем кол-во свойств у объекта (Я так понял в вашем случае 4)
            break;
3. case LimeReport::CallbackInfo::ColumnHeaderData: // запрос наименований полей
            switch (info.index) {
                case 0:
                    data = "Наименование первого свойства"; // Наименование первого свойства для названия поля
                    break;
                . . .
                case 3:
                    data = "Наименование четвертого свойства"; // аналогично
                    break;
            }
4. case LimeReport::CallbackInfo::ColumnData: // запрос значений
           if (info.columnName == "Наименование первого свойства")
              data = myObjectsVector[info.index].property1Data; // Значение свойства (парамера)
           . . .
           if (info.columnName == "Наименование четвертого свойства")
              data = myObjectsVector[info.index].property1Data;

Вот собствено и все :)
Title: Re: Вопросы новичка
Post by: Kilek on December 04, 2018, 05:51:39 PM
Огромное спасибо, вроде понял, сейчас буду пробовать)
Title: Re: Вопросы новичка
Post by: Vermilion on December 24, 2018, 09:48:04 AM
Добрый день!

Подскажите, как в отчете сделать печать картинки (Элемент изображения) в PageFooter только для первой страницы?
Title: Re: Вопросы новичка
Post by: Arin Alex on December 31, 2018, 03:43:41 AM
Vermilion
Приветствую.
В develop версии можно в инитскрипте написать следующее:
Code: [Select]
ReportPage1.beforeRender.connect(ReportPage1BeforeRender)
function ReportPage1BeforeRender(){
    if (  getVariable("#PAGE")  != 1 ){ 
       ReportPage1_ImageItem2.isVisible = false;
       ReportPage1_PageFooter1.setItemHeight(0);
    }
}
Title: Re: Вопросы новичка
Post by: Vermilion on January 10, 2019, 11:05:35 AM
Спасибо Alex!

Будем пробовать!
Title: Re: Вопросы новичка
Post by: ldir on February 18, 2019, 09:56:27 AM
Здравствуйте!
Подскажите, можно ли поменять цвет фона предпросмотра?
Title: Re: Вопросы новичка
Post by: Arin Alex on February 18, 2019, 02:12:36 PM
ldir
На данный момент этот функционал не предусмотрен.
Если сильно надо можно попробовать прикрутить.
Title: Re: Вопросы новичка
Post by: Arin Alex on February 18, 2019, 03:18:59 PM
ldir
Прикрутил в develop ветке.
Теперь можно делать так: report->setPreviewPageBackgroundColor(Qt::gray);
Title: Re: Вопросы новичка
Post by: ldir on February 18, 2019, 05:44:04 PM
Спасибо за оперативность. Но моя программа стала падать при добавлении своей функции (на report->scriptManager()->addFunction)
Title: Re: Вопросы новичка
Post by: Arin Alex on February 18, 2019, 06:55:23 PM
ldir
Если раньше использовали мастер то:
1. У девелопа свои заголовочные файлы, важно - перед линковкой не забыть заменить старые на новые :)
2. По умолчанию в девелопе для обработки скриптов используется новый QJSEngine вместо QtScriptEngine, 
а у него нет возможности добавлять свои функции так, как это было в старом движке.
Поскольку QtScriptEngine еще не полностью вырезан из Qt, сохраняется возможность его использования и в develop ветке
для этого нужно использовать флаг сборки CONFIG+=qtscriptengine.
В случае использования старого движка, сохранится возможность добавления своих функций как и раньше.
Если есть желание пересесть на новый движок, то свои функции можно передать через регистрацию в скриптовом движке
объекта унаследованного от QObject с Q_INVOKABLE функциями.     

Title: Re: Вопросы новичка
Post by: ldir on February 18, 2019, 08:35:45 PM
Пробую регистрировать свои функции как описано здесь:
http://limereport.ru/forum/index.php?topic=259.msg1511#msg1511 (http://limereport.ru/forum/index.php?topic=259.msg1511#msg1511)

Всё равно крашится на строчке 2:
Code: [Select]
My_ReportFunctions * functions = new My_ReportFunctions(this);
QScriptValue jsFuncs = report->scriptManager()->scriptEngine()->newQObject(functions);

но перед этим выдает QObject::connect: No such slot QJSEngine::_q_objectDestroyed(QObject*)

Title: Re: Вопросы новичка
Post by: Arin Alex on February 18, 2019, 08:51:10 PM
Какой эксепшн летит ?
Title: Re: Вопросы новичка
Post by: ldir on February 18, 2019, 09:06:38 PM
Segmentation fault
Title: Re: Вопросы новичка
Post by: Arin Alex on February 18, 2019, 09:20:31 PM
А версия Qt какая?
Title: Re: Вопросы новичка
Post by: ldir on February 18, 2019, 09:22:59 PM
5.7.1
Title: Re: Вопросы новичка
Post by: Arin Alex on February 18, 2019, 09:33:00 PM
Кроме кастомных функций остальное работает ?
Title: Re: Вопросы новичка
Post by: ldir on February 18, 2019, 10:05:45 PM
Да, все остальное работает. И цвет серенький)
Title: Re: Вопросы новичка
Post by: Arin Alex on February 18, 2019, 10:12:45 PM
Так значит будем смотреть что с функциями :)
Первое, что смущает это то, что
QScriptValue jsFuncs = report->scriptManager()->scriptEngine()->newQObject(functions);
при сборке не ругается :) У нового движка вместо QScriptValue QJSValue

Title: Re: Вопросы новичка
Post by: Arin Alex on February 18, 2019, 10:27:09 PM
ldir
Пофиксил сборку под разные движки

Title: Re: Вопросы новичка
Post by: ldir on February 19, 2019, 11:32:59 AM
Arin Alex
Спасибо! Только теперь не компилируется.

Code: [Select]
D:\QtProjects\LimeReport-develop\limereport\lrscriptenginemanager.cpp:1616: ошибка: 'class LimeReport::DataSourceManager' has no member named 'fieldDataByRowIndex'
     return dm->fieldDataByRowIndex(fieldName, rowIndex);
                ^
Title: Re: Вопросы новичка
Post by: Arin Alex on February 19, 2019, 11:34:58 AM
Да, я уже заметил :) Вчера забыл пушнуть финальные изменения. Сейчас должно компилироваться.
Title: Re: Вопросы новичка
Post by: ldir on February 19, 2019, 11:42:38 AM
Пока не забыл. А как количество копий при печати задавать?
Title: Re: Вопросы новичка
Post by: Arin Alex on February 19, 2019, 11:58:51 AM
ldir
В диалоге выбора принтера указывается
Title: Re: Вопросы новичка
Post by: ldir on February 19, 2019, 01:34:37 PM
Решил ради научного интереса попробовать собрать с CONFIG+=qtscriptengine (я его в limereport.pro добавил, правильно?). Лайм собрался, а вот моя программа нет. Ругается на отсутствие <QQmlEngine> в lrscriptenginemanagerintf.h :(
Title: Re: Вопросы новичка
Post by: Arin Alex on February 19, 2019, 01:54:05 PM
У себя в приложении в pro файл добавьте DEFINES += USE_QTSCRIPTENGINE
Title: Re: Вопросы новичка
Post by: ldir on February 19, 2019, 02:18:11 PM
У себя в приложении в pro файл добавьте DEFINED += USE_QTSCRIPTENGINE
Понял.

А на счет
Quote
В диалоге выбора принтера указывается
не совсем. Вы имеете ввиду каждый раз при печати вручную указывать?
Title: Re: Вопросы новичка
Post by: Arin Alex on February 19, 2019, 02:35:23 PM
ldir
Если принтер не был передан в limereport, то в диалоге выбора принтера можно руками указать.
Если передаете принтер, то у него printer.setCopyCount()
Title: Re: Вопросы новичка
Post by: ldir on February 19, 2019, 03:00:59 PM
Что-то уже стыдно, но я уже запутался
Решил ради научного интереса попробовать собрать с CONFIG+=qtscriptengine (я его в limereport.pro добавил, правильно?). Лайм собрался, а вот моя программа нет. Ругается на отсутствие <QQmlEngine> в lrscriptenginemanagerintf.h :(

У себя в приложении в pro файл добавьте DEFINES += USE_QTSCRIPTENGINE
Добавил, скомпилировалось и .... получил вылет на старой доброй addFunction.
Да, в сообщениях лайма есть qjsengine, а qtscriptengine нету.
Title: Re: Вопросы новичка
Post by: Arin Alex on February 19, 2019, 03:10:32 PM
ldir
CONFIG+=qtscriptengine нужно добавить в параметры qmake.
Если собираете QtCreator'ром то это Projects -> Build Steps -> qmake -> Additional arguments
Title: Re: Вопросы новичка
Post by: ldir on February 19, 2019, 03:56:46 PM
ldir
CONFIG+=qtscriptengine нужно добавить в параметры qmake.
Если собираете QtCreator'ром то это Projects -> Build Steps -> qmake -> Additional arguments
Чет туплю. Спасибо.
Правда я его в common.pri сунул и все заработало.
Title: Re: Вопросы новичка
Post by: ldir on February 20, 2019, 09:21:18 AM
Если принтер не был передан в limereport, то в диалоге выбора принтера можно руками указать.
Если передаете принтер, то у него printer.setCopyCount()

А где его можно передать? Передачу принтера я нашел только в этих методах:
Code: [Select]
   
bool    printReport(QPrinter *printer=0);
bool    printReport(QMap<QString, QPrinter*> printers, bool printToAllPrinters = false);
bool    printPages(ReportPages pages, QPrinter *printer);

Так это уже сама печать. Превьюхе его передать нельзя, а мне бы хотелось показать документы и оттуда уже печатать. Или такой возможности нет?
Title: Re: Вопросы новичка
Post by: Arin Alex on February 20, 2019, 11:02:23 AM
ldir
Могу прикрутить передачу принтера в превью, если надо или вообще установку дефолтного для всех операций.
Title: Re: Вопросы новичка
Post by: ldir on February 20, 2019, 11:13:36 AM
Arin Alex
Буду премного благодарен если можно будет передавать принтер.
Title: Re: Вопросы новичка
Post by: Arin Alex on February 20, 2019, 11:18:20 AM
Ок, прикручу.
Title: Re: Вопросы новичка
Post by: Arin Alex on February 20, 2019, 01:55:15 PM
Прикрутил :) previewReport(QPrinter* printer, PreviewHints hints = PreviewBarsUserSetting);
Title: Re: Вопросы новичка
Post by: ldir on February 20, 2019, 03:33:56 PM
Низкий Вам поклон.
Title: Re: Вопросы новичка
Post by: ldir on February 20, 2019, 11:40:27 PM
Алекс, извините, может уже задолбал Вас, но после последнего обновления появилась проблема с печатью, если передать принтер:
Code: [Select]
    QPrinter printer;
    printer.setCopyCount(optionsDocuments.copiesCertificate);
    report->previewReport(&printer);

При нажатии на печать окно выбора принтера не появляется и сыпятся ошибки типа QWin32PrintEngine::begin: StartDoc failed, document "document1" ()

Если его не передавать, то все ОК.
Подозреваю что если передавать принтер, то при нажатии на печать сразу идет попытка печати на дефолтном принтере.
Title: Re: Вопросы новичка
Post by: Arin Alex on February 21, 2019, 12:54:00 AM
Ну принтер то должен быть проинициализорован :)
Вы принтер должны передать уже готовый к печати.
Я так понимаю весь сыр бор из-за количества копий ?
Вызовите диалог выбора принтера, после установите у него кол-во копий :)
Title: Re: Вопросы новичка
Post by: ldir on February 21, 2019, 09:12:59 AM
Я так понимаю весь сыр бор из-за количества копий ?

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

В любом случае спасибо.
Title: Re: Вопросы новичка
Post by: ldir on February 21, 2019, 11:36:36 AM
Еще один вопрос появился. А как узнать размеры страницы документа? Поясню зачем: по-умолчанию в настройках принтера формат бумаги задан А4 - назовем его дефолтным. Если печатать документ такого формата то все нормально. Но у меня есть и А5, и другие форматы, размеры которых я не знаю - кастомные (у меня есть два типа конвертов). Так вот при печати на принтере по-умолчания эти кастомные форматы не учитывают размер бумаги - печать все равно идет в дефолтном формате А4. Соответственно текст вылезает за пределы страницы. Если же задать нужный формат в настройках принтера, тогда печатается правильно.
Как я уже говорил, раньше пользовался родной Qt-шной превьюхой. Там этой проблемы не было. Но приходится переходить на превью лайма из-за того, что родное превью очень долго обрабатывает большое количество страниц - 130 штук около двух минут.
Title: Re: Вопросы новичка
Post by: Arin Alex on February 21, 2019, 05:44:24 PM
ldir
А в самом шаблоне отчета какой формат стоит ?
Title: Re: Вопросы новичка
Post by: ldir on February 21, 2019, 06:34:49 PM
Arin Alex
A5
Title: Re: Вопросы новичка
Post by: Arin Alex on February 21, 2019, 06:45:34 PM
А установка setPageSizeToPrinter у страницы не исправляет ситуацию ?
Title: Re: Вопросы новичка
Post by: ldir on February 21, 2019, 07:06:42 PM
Это я не пробовал. Завтра проверю. Спасибо за подсказку. Я пока откатился на версию 1.4.80 и вернул стандартное преьвю. В этой версии обработка большого количества идет в разы быстрее, секунд за 5 против двух минут. Проверял на том же количестве.
Title: Re: Вопросы новичка
Post by: Arin Alex on February 21, 2019, 07:10:57 PM
Вернулись на master ?
2 минуты генерация отчета идет ?
Title: Re: Вопросы новичка
Post by: ldir on February 21, 2019, 07:34:42 PM
Да пришлось вернуться. Из-за длительного времени формирования отчета все и началось. НО, только в Qt-шной превью QPrintPreviewDialog. Проблем с тормозами в превью лайма нет.

Вернулись на master ?
2 минуты генерация отчета идет ?
Дело не только в мастере. В версии мастер 105 (вроде) отчет тоже очень долго фомируется.
Title: Re: Вопросы новичка
Post by: Arin Alex on February 21, 2019, 07:42:31 PM
Интересно :) А можете, если не сложно, найти версию на которой начинаются тормоза?
Хочется понять где собака порылась :) Я там превъю поправил в develop,
теперь принтер как и в кутишном варианте всегда инициализируется диалогом
с учетом переданного принтера.
Title: Re: Вопросы новичка
Post by: ldir on February 21, 2019, 07:55:51 PM
Интересно :) А можете, если не сложно, найти версию на которой начинаются тормоза?
Постараюсь завтра найти. Но однозначно в 1.4.80 проблем со скоростью не наблюдается. После нее я использовал 1.4.105, но чтобы не быть голословным я завтра проверю. Я честно говоря и не подозревал о том, что 105-я медленнее. Лишь несколько дней назад возникла необходимость в обработке большого количества страниц.
Title: Re: Вопросы новичка
Post by: ldir on February 22, 2019, 11:36:20 AM
В общем проверил еще раз мастер 80, 105 и до кучи последнюю 123. Во всех скорость приблизительно одинаковая до 10 секунд. А вот в девелопе результат более чем полторы минуты (на AMD A4-4020). Так что разница в мастере и девелопе налицо.
Также в девелопе проверил превью лайма - очень быстро - около пяти секунд. И да, спасибо. Последняя версия то что доктор прописал.
Title: Re: Вопросы новичка
Post by: ldir on February 22, 2019, 11:54:23 PM
Приветствую еще раз!
Подскажите как задать денежный формат (или числовой) в виде "100,00"? Нашел функцию currencyFormat, а как в ней задавать формат не пойму.

Уже разобрался - нашел в примерах
Title: Re: Вопросы новичка
Post by: ldir on March 26, 2019, 08:05:17 PM
Здравствуйте!
Подскажите, можно ли программно (не в дизайнере, а непосредственно перед печатью) добавить в отчет textItem определенного размера, содержания и в определенных координатах?
Title: Re: Вопросы новичка
Post by: Arin Alex on March 26, 2019, 09:56:38 PM
Приветствую!
Добавить нельзя. Можно в дизайнере добавить, а из кода убрать :)
Или есть желание ко всем отчетам добавлять некую метку?
Title: Re: Вопросы новичка
Post by: ldir on March 27, 2019, 01:01:23 PM
Quote
Или есть желание ко всем отчетам добавлять некую метку?
\
Ага оно
Title: Re: Вопросы новичка
Post by: Arin Alex on March 27, 2019, 04:34:29 PM
Я подумаю :)
Title: Re: Вопросы новичка
Post by: Arin Alex on March 30, 2019, 09:49:19 AM
Прикрутил в девелопе возможность создания меток для всех отчетов.
Теперь что-то вроде этого можно делать:
report->addWatermark(LimeReport::WatermarkSetting("Test",LimeReport::ItemGeometry(5,5,10,5), QFont("Arial",10)));
для удаления меток report->clearWatermarks();
   
Title: Re: Вопросы новичка
Post by: ldir on March 31, 2019, 06:52:16 PM
Arin Alex, спасибо!
Появилось два вопроса. Как узнать геометрию страниц отчета (для центрирования)? И второй. Как поменять шрифт? Что-то не получается поменять, ни размер ни сам шрифт что бы ни указывал.
Title: Re: Вопросы новичка
Post by: Arin Alex on March 31, 2019, 07:27:21 PM
ldir, С шрифтом косякнул :)
А вот геометрию страницы узнать проблематично, ибо она недоступна :)
Подумаю как сделать.
Title: Re: Вопросы новичка
Post by: ldir on March 31, 2019, 07:59:47 PM
Arin Alex, спасибо. Буду ждать.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 02, 2019, 11:15:25 PM
ldir, Поправил шрифт и прикрутил якорь к геометрии, теперь положение метки вычисляется относительно краев или центра страницы.
использовать как-то так :
report->addWatermark(LimeReport::WatermarkSetting("Test",LimeReport::ItemGeometry(-5,-5,10,5, Qt::AlignCenter | Qt::AlignBottom), QFont("Tahoma",10)));
Title: Re: Вопросы новичка
Post by: ldir on April 03, 2019, 08:47:52 PM
Arin Alex, благодарю. Попробую - отпишусь.
Title: Re: Вопросы новичка
Post by: ldir on April 03, 2019, 11:08:20 PM
Arin Alex, еще такой вопрос. А есть ли DataFooter'а возможность печати на каждой странице как у DataHeader'а? А то в договоре идет таблица со спецификациями которая может растянуться более чем на одну страницу, а подписи нужны на каждой. Вариант с нижним колонтитулом не подходит, т.к. после спецификаций должен быть еще TextItem с ценами (его я сунул в ReportFooter).
Title: Re: Вопросы новичка
Post by: ldir on April 04, 2019, 02:32:27 PM
Не хотел создавать новую тему, напишу здесь. Не знаю что это. Глюк или какая-то особенность, но если в одном скрипте будут функции COUNT() и SUM(), то получаю ошибку: Функция SUM не найдена или вызвана с неверными аргументами. Это если вызываемые функции идут в этом же порядке, т.е. сначала COUNT потом SUM, если наоборот, то будет другая ошибка - Can't find variablе... далее то что идет после COUNT().
Title: Re: Вопросы новичка
Post by: Arin Alex on April 04, 2019, 04:01:30 PM
ldir, По первому вопросу - я думаю, решением может быть скрытие подписей в колонтитуле страницы,
для этого можно использовать переменную #IS_LAST_PAGEFOOTER.
По второму - можно посмотреть само выражение где эти функции SUM и COUNT используются ?
Title: Re: Вопросы новичка
Post by: ldir on April 04, 2019, 04:24:44 PM
Arin Alex, первый вопрос пока решил с использованием комбинации DataFooter'а и PageFooter'а с включением флага "Печать на первой странице" у последнего. Не знаю правильно ли это. Полагаю, если данные растянутся на одну - максимум две страницы, то все будет как надо. На три и больше вряд-ли.
А вот с вышеописанными функциями вообще интересно. Содержимое Item'а выглядит так (хромой Item находится на DataFooter'е относящимся к DataBand1):
Quote
Всего повреждено $S{
var res = "____________";
var n = SUM($D{corruptedsealsmodel.Counter},"DataBand1");
var counter = COUNT($D{corruptedsealsmodel.Counter},"DataBand1") ;

if(counter != 0)
{
res =n;
}
res;
} штук.

Самое интересное, если туда же добавить еще один Item, содержащий функцию SUM,
Quote
$S{var n = SUM($D{corruptedsealsmodel.Counter},"DataBand1");
n;
}
то обработка проходит правильно - как в одном, так и во втором Item'e!

Забыл сказать, количество строк в выводимой таблице больше нуля.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 04, 2019, 04:29:37 PM
ldir, А ветка какая master или develop?
Title: Re: Вопросы новичка
Post by: ldir on April 04, 2019, 04:30:32 PM
Arin Alex, девелоп. Если важно, то данные передаются через модель.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 04, 2019, 04:38:21 PM
ldir, Страно, у себя проверяю вот такой скрипт
Code: [Select]
Всего повреждено $S{
var res = "_____";
var c = COUNT($D{test.2},"DataBand1"); 
var s = SUM($D{test.2},"DataBand1")
if  (c !=0) {
  res = s;
} else {
  res;
}
} штук
и отрабатывает нормально
Title: Re: Вопросы новичка
Post by: ldir on April 04, 2019, 04:43:50 PM
Извиняюсь, но пока решается текущий вопрос хочу уточнить такой момент (может конечно где-то на форуме есть ответ, но найти не могу): если где-нибудь в скрипте какого-либо Item'а была определена переменная, например, qwe и ей было присвоено значение, то в любом другом нижеследующем Item'e (даже на другой странице) эта переменная будет доступна. Это так должно быть? Или это баг?
Title: Re: Вопросы новичка
Post by: ldir on April 04, 2019, 04:47:07 PM
У меня тот же код:

Code: [Select]
Всего повреждено $S{
var res = "_____";
var c = COUNT($D{corruptedsealsmodel.Counter},"DataBand1"); 
var s = SUM($D{corruptedsealsmodel.Counter},"DataBand1")
if  (c !=0) {
  res = s;
} else {
  res;
}
} штук

выдает это: Всего повреждено ReferenceError: Can't find variable: s штук
Title: Re: Вопросы новичка
Post by: Arin Alex on April 04, 2019, 04:49:06 PM
Скриптовый контекст один на весь отчет, благодаря этому можно в инит скрипте объявить функции и юзать во всех айтемах.
Можете взять крайнюю версию и я вам на проверку свой отчет заброшу ?
Title: Re: Вопросы новичка
Post by: ldir on April 04, 2019, 04:54:56 PM
Arin Alex, понял.
Да, конечно. Я через час-полтора буду дома и проверю. Без вашей помощи проблему не решу, сам часа 2 бился. Уже в себе сомневаться начал.
Title: Re: Вопросы новичка
Post by: ldir on April 04, 2019, 06:21:37 PM
Еще раз попробовал дома в последней девелоп версии. Те же яйца. Жду Ваш отчет для теста.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 04, 2019, 06:44:22 PM
ldir, Я нашел проблему :) Просто на 5.12 её уже нет :) Сейчас поправлю пушнусь
Title: Re: Вопросы новичка
Post by: Arin Alex on April 04, 2019, 07:00:52 PM
ldir, Все, можно забирать :)
Title: Re: Вопросы новичка
Post by: ldir on April 04, 2019, 09:42:10 PM
Arin Alex, большое спасибо. Теперь работает.
Title: Re: Вопросы новичка
Post by: ldir on April 04, 2019, 10:00:39 PM
Только ватермарка где-то потерялась...
Title: Re: Вопросы новичка
Post by: Arin Alex on April 04, 2019, 10:12:38 PM
ldir, У меня вроде работает :)
Code: [Select]
   report->addWatermark(
        LimeReport::WatermarkSetting(
            "Test",
            LimeReport::ItemGeometry(-5,-5,10,5, Qt::AlignCenter | Qt::AlignBottom),
            QFont("Tahoma",10)
        )
    );
Выводится в центре нижней части страницы
Title: Re: Вопросы новичка
Post by: ldir on April 04, 2019, 10:22:44 PM
То ли лыжи не едут, то ли я ....
У меня даже на пустом листе не выводится
Title: Re: Вопросы новичка
Post by: Arin Alex on April 04, 2019, 10:24:04 PM
Вот жеж странно
Title: Re: Вопросы новичка
Post by: Arin Alex on April 04, 2019, 10:25:05 PM
А до этого выводилась ?
Title: Re: Вопросы новичка
Post by: ldir on April 04, 2019, 10:32:24 PM
В первый и последний раз была когда Вы ее только добавили, в ней еще шрифт не менялся. На 16-й странице сообщение #233. После того до сегодняшнего дня не пробовал.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 04, 2019, 10:35:08 PM
А вы мой пример пробвали у себя повторить ?
Просто я поменял алгоритм размещения метки сделав его зависимым от якоря.
Title: Re: Вопросы новичка
Post by: ldir on April 04, 2019, 10:36:24 PM
Скопировал и вставил.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 04, 2019, 10:41:58 PM
Вот тут я совсем не понимаю :) У меня все ок :)
А если в demo_r1 в коструктор окна MainWindow вставить ?
Тоже не будет метки ?
Title: Re: Вопросы новичка
Post by: Arin Alex on April 04, 2019, 10:48:55 PM
У меня это вот так выглядит
Title: Re: Вопросы новичка
Post by: ldir on April 04, 2019, 11:00:56 PM
А вот так у меня
Title: Re: Вопросы новичка
Post by: Arin Alex on April 05, 2019, 07:48:28 PM
ldir, Все перепробовал :) Уже и под виндами собрал :) Ну не пропадает у меня водянка.
Вот уже даже не знаю куда копать
Title: Re: Вопросы новичка
Post by: ldir on April 05, 2019, 09:15:25 PM
Arin Alex, только что попробовал в режиме отладки - выводится!!! А в релизе нет(.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 05, 2019, 09:20:42 PM
ldir, А попробуйте клирануть релиз, а еще лучше удалить все папки с собранными бинарниками
Title: Re: Вопросы новичка
Post by: ldir on April 05, 2019, 09:42:35 PM
Не помогло. Сейчас попробую в какой нибудь другой проект репорт сунуть. Хотя, если в дебаге работает, а в релизе нет то вряд ли.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 05, 2019, 09:54:34 PM
Попробуйте по новой на чистую склонировать limereport и сбилдить его
И в demo_r1 метку добавить
Просто я проверял и в дебаге и релизе все одинаково, да и, собственно, в плане водянки,
что дебаг, что релиз, должно быть пофиг :)
Title: Re: Вопросы новичка
Post by: ldir on April 05, 2019, 10:07:56 PM
Хоть на изнанку вывернись. Все удалил, по новому скачал. В дебаге есть, в релизе нет. Но ведь чудес не бывает.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 05, 2019, 10:19:30 PM
Версия Qt какая ? Компилятор ?
Title: Re: Вопросы новичка
Post by: ldir on April 05, 2019, 10:26:34 PM
5.7.1, 5.11.3 Mingw 5.3
Title: Re: Вопросы новичка
Post by: Arin Alex on April 05, 2019, 10:36:54 PM
Кажется получилось повторить. Сейчас буду разбираться 
Title: Re: Вопросы новичка
Post by: Arin Alex on April 06, 2019, 12:29:06 AM
Поправил, пушнул :)
Перед сборкой обязательно клирануться :)
Title: Re: Вопросы новичка
Post by: ldir on April 06, 2019, 09:38:15 AM
Arin Alex, спасибо! Заработало.
Title: Re: Вопросы новичка
Post by: Vermilion on April 16, 2019, 03:27:55 PM
Доброго времени суток.

Подскажите, как в таблице на странице подавить отображение повторяющегося значения в столбце, но на следующей странице это значение снова должно отобразиться на первой строке таблицы?

Типа:
Колонка1Колонка2Колонка3
СидоровАпрель122
Март177
Апрель222
Май77

Title: Re: Вопросы новичка
Post by: Arin Alex on April 16, 2019, 05:09:55 PM
Vermilion, Процесс не простой, но возможный :)
Для этого нужно взять крайний комит в develop ветке (Специально сделал изменения под это дело).
Далее в поле где выводится Фамилия пишем нечто вроде этого:
Code: [Select]
$S{
if (CustomerID !=$D{detail.CustomerID}) {
$D{detail.CustomerID};
CustomerID  = $D{detail.CustomerID}
} else {
"";
}
}
А в стартовом скрипте
Code: [Select]
var CustomerID = "";
Reportpage1.afterRender.connect(AfterPageRender);
function AfterPageRender(){
CustomerID = "";
}
Title: Re: Вопросы новичка
Post by: dim0n-333 on April 18, 2019, 06:52:29 AM
Здравствуйте, интересует возможность фильтрации в LimeReport.

Вводные: имеется таблица Продукты и Продажи, в продажах есть несколько столбцов (продавец, продукт, время продажи и тп).
Перед запуском отчета пользователь может указать продукт(-ы), продавцов, промежуток времени и тп(aka фильтрация).

В band вывожу название продукта и заголовочную часть таблицы. Далее создаю datasource к таблице Продаж, где включаю subquery mode и в качестве master указываю таблицу Продуктов. Использую этот datasource в SubDetailBand.
Таким образом получаю несколько таблиц, Продукт и Продажи для этого продукта. Но не могу понять как сделать фильтрацию по остальным столбцам (время, продавец и тп).

При создании datasource в окне sql использовать внешние переменные не получается (хотел вставить после where).
Можно заранее отсортировать и передать модель, но т.к. продукт меняется от таблицы к таблице, запрос должен меняться тоже.
Т.е. в SubDetailBand модель не используешь (нельзя провести фильтрацию по продукту созданного из модели datasource).

Заметил, что запрос, используемый для создания datasource хранится в xml шаблоне, можно сделать поиск по этому файлу и перед запуском предпросмотра для запроса, который создает datasource, менять значения условия после where (разумеется, оставляя Product=$D{Sales.Product}), но это выглядит как огромный костыль.
Буду рад любому совету.
Title: Re: Вопросы новичка
Post by: Vermilion on April 18, 2019, 10:31:13 AM
Vermilion, Процесс не простой, но возможный :)
Для этого нужно взять крайний комит в develop ветке (Специально сделал изменения под это дело).
Далее в поле где выводится Фамилия пишем нечто вроде этого:
Code: [Select]
$S{
if (CustomerID !=$D{detail.CustomerID}) {
$D{detail.CustomerID};
CustomerID  = $D{detail.CustomerID}
} else {
"";
}
}
А в стартовом скрипте
Code: [Select]
var CustomerID = "";
Reportpage1.afterRender.connect(AfterPageRender);
function AfterPageRender(){
CustomerID = "";
}

Спасибо, Alex! Буду пробовать  ;D
Title: Re: Вопросы новичка
Post by: Arin Alex on April 18, 2019, 04:20:44 PM
dim0n-333,
Quote
При создании datasource в окне sql использовать внешние переменные не получается (хотел вставить после where).
Вот тут не понял. Вы можете использовать переменные отчета в запросе точно так же, как и данные из других источников данных.
Вы можете, например, написать: where CustomerID like $V{CustomerID}, а в переменой будет зачение %ALFKI% 
Title: Re: Вопросы новичка
Post by: dim0n-333 on April 19, 2019, 07:42:37 AM
dim0n-333,
Quote
При создании datasource в окне sql использовать внешние переменные не получается (хотел вставить после where).
Вот тут не понял. Вы можете использовать переменные отчета в запросе точно так же, как и данные из других источников данных.
Вы можете, например, написать: where CustomerID like $V{CustomerID}, а в переменой будет зачение %ALFKI% 

Мне нужно отправить запрос вида:
select * from Sales where Product=$D{Product.Id} and Seller=2 and Date between 'date1' and 'date2';

Причем в зависимости от выбора пользователя запрос может быть и таким:
select * from Sales where Product=$D{Product.Id} and Date between 'date1' and 'date2';
select * from Sales where Product=$D{Product.Id} and Seller=2;
select * from Sales where Product=$D{Product.Id};

Поэтому я планировал сформировать часть после Product=$D{Product.Id} как строку, записать в переменную и передать в LimeReport

А уже в sql запросе для формирования datasource записать
select * from Sales where Product=$D{Product.Id} and $V{filter};

Но почему-то в результате такого запроса я получаю таблицу без строк.

P.S. Если это имеет значение, в качестве базы данных используется SQLite.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 19, 2019, 12:37:05 PM
dim0n-333,
Quote
Но почему-то в результате такого запроса я получаю таблицу без строк.
Это происходит из-за того, что параметры в обычном режиме передаются через bind.
Если есть желание просто кусок sql вставить через переменную, то нужно использовать $V{VarName, nobind} 
Title: Re: Вопросы новичка
Post by: dim0n-333 on April 19, 2019, 02:19:18 PM
dim0n-333,
Quote
Но почему-то в результате такого запроса я получаю таблицу без строк.
Это происходит из-за того, что параметры в обычном режиме передаются через bind.
Если есть желание просто кусок sql вставить через переменную, то нужно использовать $V{VarName, nobind} 
Опишу все по порядку:
В программе задаю переменную:
m_report.dataManager()->setReportVariable("filterProduct", "Product=1");

Далее создаю datasource и в поле sql пишу для проверки:
select * from Sales where $V{filterProduct, nobind};
Нажимаю preview.

Появляется сообщение об ошибке "Количество параметров не совпадает".

Для проверки пишу туда же:
select * from Sales where Product=1;
Вижу таблицы с заполненными строками, т.е. все нормально.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 19, 2019, 09:36:21 PM
dim0n-333, Параметр nobind был добавлен в новую версию, которая находится на github в ветке develop
Title: Re: Вопросы новичка
Post by: ldir on April 21, 2019, 11:24:40 PM
Arin Alex, здравствуйте!
Подскажите пожалуйста, есть ImageItem на DataBand и таблица, в одном из полей которой содержатся имена файлов с изображениями. Файлы живут в папке. Можно ли как-то отобразить их в ImageItem?  Datasource и field указал, в resourcePath задал путь к папке с файлами - картинки не выводятся. Или изображения должны обязательно храниться в базе?
Title: Re: Вопросы новичка
Post by: dim0n-333 on April 22, 2019, 11:01:53 AM
dim0n-333, Параметр nobind был добавлен в новую версию, которая находится на github в ветке develop
Arin Alex, при использовании LimeReport с ветки develop появляется огромное число ошибок (скрин во вложении).

Попробовал взять с ветки master, компилируется нормально.

P.S. Не дождался ответа, снова вернулся к модулю отчетов, нашёл в ошибках нехватку файла Qml или типа того.
Дописал в .pro файл:
QT += qml

А также добавил в заголовках форм, где использую LimeReport
#include <QtQml>


Скомпилировалось, запустилось.
Напомню, в программе прописано:
m_report.dataManager()->setReportVariable("filterProduct", "Product=1");

Снова в поле sql пишу для проверки:
select * from Sales where $V{filterProduct, true};

Появляется ошибка "Отсутствует запрос Невозможно получить строку"

Для проверки пишу туда же:
select * from Sales where Product=1;
Получаю таблицу.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 27, 2019, 11:20:32 PM
dim0n-333,Приветствую!
Прошу прошения за долгое молчание, был в таких местах где доступ к интернет отсутствовал как факт :)
Quote
select * from Sales where $V{filterProduct, true};
нужно заменить на:
Code: [Select]

select * from Sales where $V{filterProduct, nobind};
Title: Re: Вопросы новичка
Post by: Arin Alex on April 27, 2019, 11:23:46 PM
ldir, Приветствую!
resourcePath, на данный момент, должен указывать на путь к файлу, а не к директории.
Но я думаю, что это дело можно немного поправить :)   
Title: Re: Вопросы новичка
Post by: dim0n-333 on April 29, 2019, 06:01:32 AM
dim0n-333,Приветствую!
Прошу прошения за долгое молчание, был в таких местах где доступ к интернет отсутствовал как факт :)
Quote
select * from Sales where $V{filterProduct, true};
нужно заменить на:
Code: [Select]

select * from Sales where $V{filterProduct, nobind};
Удивительное совпадение, только что написал nobind, все заработало, и тут вижу ваше сообщение.
Так как в версии с ветки master nobind не приносил результата, решил, что это булевский параметр,
а после замены на версию с ветки develop почему-то не протестировал вариант с nobind.

В любом случае, спасибо за ответы, если будут ещё вопросы, напишу)
Title: Re: Вопросы новичка
Post by: Arin Alex on April 29, 2019, 11:08:14 AM
ldir, Приветствую!
Я изменил обработку свойства resourcePath в ImageItem терперь в нем можно использовать переменные и поля источников данных.
Title: Re: Вопросы новичка
Post by: Vermilion on April 29, 2019, 02:33:52 PM
Vermilion, Процесс не простой, но возможный :)
Для этого нужно взять крайний комит в develop ветке (Специально сделал изменения под это дело).
Далее в поле где выводится Фамилия пишем нечто вроде этого:
Code: [Select]
$S{
if (CustomerID !=$D{detail.CustomerID}) {
$D{detail.CustomerID};
CustomerID  = $D{detail.CustomerID}
} else {
"";
}
}
А в стартовом скрипте
Code: [Select]
var CustomerID = "";
Reportpage1.afterRender.connect(AfterPageRender);
function AfterPageRender(){
CustomerID = "";
}

Приветствую, Arin Alex!

Скажите, а Ваши доработки не попали еще в master ветку? я взял сегодняшнюю 1.4.128 ветку, доработал отчет, как Вы рекомендовали, все нормально, первая страница формируется так как задумано, но на второй странице повторение подавленного значения появляется только на второй строке данных, хотя должна появиться на первой строке 2-й страницы... по логике работы скрипта. Куда копать?

Ветка develop криво интегрируется в приложение, не хотелось бы с ней линковаться..
Title: Re: Вопросы новичка
Post by: Arin Alex on April 29, 2019, 06:30:00 PM
Vermilion, Приветствую!
Некоторые доработки в master в принципе не попадают :) Потому как следующаяя версия будет та, которая находится в девелопе.
Quote
Ветка develop криво интегрируется в приложение, не хотелось бы с ней линковаться..
Можно поподробнее ?
 
Title: Re: Вопросы новичка
Post by: Vermilion on April 29, 2019, 09:25:08 PM
Vermilion, Приветствую!
Некоторые доработки в master в принципе не попадают :) Потому как следующаяя версия будет та, которая находится в девелопе.
Quote
Ветка develop криво интегрируется в приложение, не хотелось бы с ней линковаться..
Можно поподробнее ?


У меня собрана статическая версия Qt5.7.1 с поддержкой PSQL, ODBC и SQLite. В сборку включен минимум библиотек. Qml не используется и прочие "вкусности" я тоже не включаю в сборку фреймфорка. Я Вашу библиотеку включаю как часть своего приложения (через limereport.pri). Т.е. не собираю lib и потом не прилинковываю ее к проекту.

Для примера я в папке с проектом designer делаю designer.pro следующего содержания:

#-----
CONFIG += no_formdesigner no_embedded_designer

QT += core gui

TARGET = LRDesigner
TEMPLATE = app

HEADERS +=  $$PWD/designersettingmanager.h

SOURCES +=  $$PWD/main.cpp \
            $$PWD/designersettingmanager.cpp

RESOURCES += $$PWD/../3rdparty/dark_style_sheet/qdarkstyle/style.qrc

include($$PWD/../limereport.pri)

MOC_DIR         = moc
OBJECTS_DIR     = obj
UI_DIR          = ui
UI_HEADERS_DIR  = ui
UI_SOURCES_DIR  = ui
RCC_DIR         = rcc

#-----

при выполнении qmake получаю ошибки с поиском файлов:
Project MESSAGE: TOP_BUILD_DIR:
Project MESSAGE: Debug
Project MESSAGE: uitools
Project MESSAGE: qjsengine
Project MESSAGE: TOP_BUILD_DIR:
Project MESSAGE: Debug
Project MESSAGE: uitools
Project MESSAGE: qjsengine
WARNING: Failure to find: ..\3rdparty\zint-2.6.1\backend_qt4\qzint.cpp
WARNING: Failure to find: ..\3rdparty\zint-2.6.1\backend\maxipng.h
WARNING: Failure to find: ..\3rdparty\zint-2.6.1\backend_qt4\qzint.h
Project MESSAGE: TOP_BUILD_DIR:
Project MESSAGE: Release
Project MESSAGE: uitools
Project MESSAGE: qjsengine
WARNING: Failure to find: ..\3rdparty\zint-2.6.1\backend_qt4\qzint.cpp
WARNING: Failure to find: ..\3rdparty\zint-2.6.1\backend\maxipng.h
WARNING: Failure to find: ..\3rdparty\zint-2.6.1\backend_qt4\qzint.h

странно, но qzint.pri я не трогал.. почему qmake не видит эти файлы.. такое впечатление, что переменная $$ZINT_PATH в какой то момент искажается..

С исходниками из master такого не наблюдается.. скорее всего недостаточно настроек я указываю в проекте, где копать не могу понять..
Title: Re: Вопросы новичка
Post by: dim0n-333 on April 30, 2019, 05:49:15 AM
Vermilion, я конечно могу ошибаться, но в версии библиотеки на develop ветке используется Qml.

Например, когда я взял либу с ветки develop (изначально использовал с ветки master), пришлось дописать в .pro файл
QT += qml

P.S. Кое-что нагуглил, мб поможет:

Quote
Предположительно, QtCreator не находит файлы заголовков, перечисленные в файле .pri. Если ваш .pri файл находится в другой директории, отличной от вашего .pro файла, Qt ищет файлы, перечисленные в файле .pri, в том же каталоге, что и файл .pri(а не. pro file), и любой относительный путь будет разрешен из этого каталога.

Когда файл не может быть найден, QtCreator молча игнорирует его и просто не добавляет его в папку в представлении проектов.
Title: Re: Вопросы новичка
Post by: Vermilion on April 30, 2019, 07:46:41 AM
Vermilion, я конечно могу ошибаться, но в версии библиотеки на develop ветке используется Qml.

Например, когда я взял либу с ветки develop (изначально использовал с ветки master), пришлось дописать в .pro файл
QT += qml

P.S. Кое-что нагуглил, мб поможет:

Quote
Предположительно, QtCreator не находит файлы заголовков, перечисленные в файле .pri. Если ваш .pri файл находится в другой директории, отличной от вашего .pro файла, Qt ищет файлы, перечисленные в файле .pri, в том же каталоге, что и файл .pri(а не. pro file), и любой относительный путь будет разрешен из этого каталога.

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

Добрый день, Alex!
Я QtCreator пользуюсь только, когда что то надо отлаживать под Linux, а так его никогда не использую.. Мне привычнее все делать в MS Visual Studio, я делаю проект для VC (qmake -t vcapp) и далее уже пишу код и отлаживаюсь в студии, или вообще в Far-manager пишу код и потом компилирую проект nmake в командной строке... Я думаю в данном случае это не принципиально. Я добавил qml в проект, но легче не стало.

выполнение qmake все равно приводит к описанному ранее предупреждению об отсутствии файлов. (WARNING: Failure to find: ..\3rdparty\zint-2.6.1\backend_qt4\qzint.cpp)
Повторюсь, qmake я вызываю из командной строки в консольном окне, в котором определены переменные окружения Visual Studio и QT.
Мне надо сначала добиться безошибочной работы qmake, а дальше уже все заработает без проблем  :)

Я попробовал сейчас убрать из сборки zint (закомментировал в limereport.pri строку "CONFIG += zint"), qmake отработал без предупреждений, проект собрался, но при запуске приложения гуй дизайнера не появляется, процесс болтается в памяти..
Title: Re: Вопросы новичка
Post by: Arin Alex on April 30, 2019, 11:17:55 AM
Vermilion, Приветствую!
Quote
Добрый день, Alex!
Предыдущее сообщение было от dim0n-333 :)
По сути вопроса:
А вы после перехода на develop, перед сборкой проекта, очищали его ?
Крайне рекомендую грохнуть директории где происходит сборка и собрать по новой.
Использования qml можно избежать если использовать qtscriptengine вместо qjsengine
qml добавлен в силу того что qtscript теперь deprecated

Вы также можете собрать limereport как статическую либу и линковать к себе в проект CONFIG+= static_build
PS: Надеюсь ваш проект опенсорс в противном случае статическая линковка нарушает лицензионное соглашение ;)
Title: Re: Вопросы новичка
Post by: Vermilion on April 30, 2019, 11:45:56 AM
Vermilion, Приветствую!
Quote
Добрый день, Alex!
Предыдущее сообщение было от dim0n-333 :)
По сути вопроса:
А вы после перехода на develop, перед сборкой проекта, очищали его ?
Крайне рекомендую грохнуть директории где происходит сборка и собрать по новой.
Использования qml можно избежать если использовать qtscriptengine вместо qjsengine
qml добавлен в силу того что qtscript теперь deprecated

Вы также можете собрать limereport как статическую либу и линковать к себе в проект CONFIG+= static_build
PS: Надеюсь ваш проект опенсорс в противном случае статическая линковка нарушает лицензионное соглашение ;)

Еще раз добрый день, Alex!

Прошу прощения у dim0n-333, с утра резкость не успел еще навести...

Да перед сборкой тупо все удаляю и делаю все с чистого листа.
По поводу статической сборки в курсе, стараемся не нарушать :-)

Ладно попробую другим путем пойти.. Спасибо за советы.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 30, 2019, 12:01:48 PM
Vermilion, Я проверю линковку через pri если, что найду поправлю :)
Просто обычно используют линковку библиотеки, потому давно не проверял линковку через код.
Title: Re: Вопросы новичка
Post by: Vermilion on April 30, 2019, 12:06:51 PM
Vermilion, Я проверю линковку через pri если, что найду поправлю :)
Просто обычно используют линковку библиотеки, потому давно не проверял линковку через код.

Спасибо Alex! Иногда нужно иметь монолитное приложение, которое за собой ничего не тянет, а только самую малость библиотек.. Так что, если у Вас будет такая возможность и время - гляньте.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 30, 2019, 12:17:59 PM
Vermilion, Дык, если вы соберете статический лайм, он прекрасно влинкуется в приложение :)
Title: Re: Вопросы новичка
Post by: Vermilion on April 30, 2019, 12:32:40 PM
Vermilion, Дык, если вы соберете статический лайм, он прекрасно влинкуется в приложение :)

Alex, да, тоже вариант. Но наверно все ж буду смотреть в сторону динамической сборки, так как под линухом все равно шареные объекты валяются.. и смысла в статической сборке там совсем нет.
Title: Re: Вопросы новичка
Post by: Arin Alex on April 30, 2019, 01:55:40 PM
Vermilion, Пофиксил qzint.pri, можно попробовать собрать, у меня вроде нормально собралось.
Title: Re: Вопросы новичка
Post by: Vermilion on April 30, 2019, 06:41:45 PM
Vermilion, Пофиксил qzint.pri, можно попробовать собрать, у меня вроде нормально собралось.

Спасибо, Alex !

Будет чем заняться на праздники! С наступающим Всех!
Title: Re: Вопросы новичка
Post by: ldir on April 30, 2019, 10:39:57 PM
Arin Alex, большое спасибо. Буду пробовать. Еще появился такой вопрос: в трех разных TextItem есть три разных числа (по одному в каждом). В четвертом нужно вывести сумму. Я пробовал закинуть каждое число в свою переменную (admin,support,service), а в четвертом айтеме их суммирую:
Code: [Select]
var total = service + admin + support;
numberFormat(total,"0,00","2","UK");
Но в итоге получается не прибавление чисел, а конкатенация строк: 0,000,0027,00
Как правильно сложить?
Title: Re: Вопросы новичка
Post by: ldir on May 01, 2019, 09:36:57 AM
ldir, Приветствую!
Я изменил обработку свойства resourcePath в ImageItem терперь в нем можно использовать переменные и поля источников данных.

Что-то не могу разобраться, можно небольшой пример?
Title: Re: Вопросы новичка
Post by: Arin Alex on May 01, 2019, 11:25:53 AM
ldir, Приветствую!
1. сложить строки (limereport использует javascript): $S{parseFloat(value1)+parseFloat(value2)}
2. resourcePath:
   например так resourcePath = $V{path}design.png, переменная path = "E:\Test Path\"
   или так $V{path}$D{источник.поле_с_именем_картинки}
Title: Re: Вопросы новичка
Post by: ldir on May 01, 2019, 11:54:29 AM
Arin Alex, спасибо! Все получилось.
Title: Re: Вопросы новичка
Post by: Vermilion on June 14, 2019, 11:45:21 AM
Приветствую, Arin Alex!

Прошерстил весь форум, но что то не смог найти такого вопроса..

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

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

Проблема появляется на последней строке в таблице на каждой странице. Мне там надо по-любому нарисовать эту границу снизу.
Как в скрипте мне понять, что сейчас я работаю с последней строкой данных databand на текущей странице?


И еще один вопрос:
Подавление повторяющегося значение хорошо работает, как вы мне рекомендовали сделать, но тоже есть один момент, а именно:
Есть таблица и она заканчивается footer-ом. Если датабэнду установить признак "keep footer together" и последняя строка переносится с footer на следующую страницу, то AfterPageRender, который очищает переменную CustomerID - не отрабатыват и соответственно колонка с подавленным значением не печатает текст..
Если выключить "keep footer together", то получается что данные у меня на 1 странице а footer на второй, но без данных..
Title: Re: Вопросы новичка
Post by: Arin Alex on June 18, 2019, 12:49:13 PM
Vermilion, Приветствую!
Проблема с вашей задачей в том, что построитель отчета сам не знает о том, что это крайний банд на странице.
Тут дело в следующем - даже если банд поместился на странице, как вы сами заметили, он может переползти на другую страницу ряде случаев.
Подобные задачи возможно решить только на втором проходе, когда все страницы уже полностью сформированы.
На данный момент, к сожалению, обработка в скрипте второго прохода не реализована. 
Я еще подумаю над этой задачей, возможно, решение будет найдено в рамках существующих возможностей.
 
Title: Re: Вопросы новичка
Post by: Vermilion on June 18, 2019, 01:21:34 PM
Спасибо, Alex!

Буду ждать от Вас каких то вестей..
Title: Re: Вопросы новичка
Post by: Shookk69 on September 26, 2019, 06:04:00 PM
Такой вопрос, у меня в программе формируется картинка QPixmap, можно ли через переменную добавить ее в отчет?
Title: Re: Вопросы новичка
Post by: Arin Alex on September 26, 2019, 09:24:29 PM
Shookk69, Можно только не QPixmap а QImage для этого у QPixmap есть метод toImage()
Title: Re: Вопросы новичка
Post by: Shookk69 on September 27, 2019, 10:13:35 AM
Arin Alex, можете поподробней описать, у меня  не получаетсья через переменную задать. Делал так, cоздал переменную
"m_report->dataManager()->setReportVariable("MapImage", m_clippedPixmap.toImage());",
далее захожу в дизайнер отчета, создаю ImageItem1 и в свойство variable записываю переменную $V{MapImage}, в предпросмотре отчета картинка не отрисовалась.
Title: Re: Вопросы новичка
Post by: Arin Alex on September 27, 2019, 10:41:09 AM
Shookk69, в свойстве variable просто имя переменной указывается без $V{} поскольку и так понятно, что это переменная
Title: Re: Вопросы новичка
Post by: Shookk69 on September 27, 2019, 10:55:54 AM
Arin Alex, заработало, спасибо большое)
Title: Re: Вопросы новичка
Post by: yurii on November 10, 2019, 12:24:12 AM
Добрый вечер.

Собрал новую версию, но при сборке проекта, ошибка на скрине.
Title: Re: Вопросы новичка
Post by: yurii on November 10, 2019, 12:47:21 AM
Проблема появилась после обновления Qt
Title: Re: Вопросы новичка
Post by: Arin Alex on November 20, 2019, 04:23:00 PM
yurii, Клирануть и собрать по новой пробовали?
Title: Re: Вопросы новичка
Post by: yurii on November 21, 2019, 07:15:21 PM
Конечно. И не раз  :)
Title: Re: Вопросы новичка
Post by: Arin Alex on November 21, 2019, 10:31:55 PM
yurii, Попробуйте снять галочку отладки QML в настройках сборки
Title: Re: Вопросы новичка
Post by: Dmitri on November 25, 2019, 11:38:16 AM
Добрый день!
Создаю datasource из таблицы CSV. Вставляю диаграмму, указываю этот datasource. Всё работает.
Вставляю DataBand, переношу диаграмму туда, в рендере не показываются значения. Пробовал указывать и нет datasource для DataBand.
Title: Re: Вопросы новичка
Post by: Arin Alex on November 26, 2019, 11:42:38 PM
Dmitri, Пофиксил, пушнул 
Title: Re: Вопросы новичка
Post by: Dmitri on November 27, 2019, 11:41:09 AM
Спасибо!
Title: Re: Вопросы новичка
Post by: Midzou on February 12, 2020, 04:59:54 PM
Доброго времени суток.
Подскажите пожалуйста,как накинуть на pdf пароль?
Т.е защитить отчет от редактирования
Title: Re: Вопросы новичка
Post by: Arin Alex on February 13, 2020, 10:22:41 AM
Midzou, К сожалению limereport такую функцию не поддерживает. 
Title: Re: Вопросы новичка
Post by: Hugo on February 15, 2020, 04:24:25 PM
добрый день
-возможен ли вывод отчета в html?
-можно ли подсоединяться к postrgesql?
Title: Re: Вопросы новичка
Post by: Arin Alex on February 16, 2020, 06:31:39 PM
Hugo,

Quote
-возможен ли вывод отчета в html?
В процессе разработки.

Quote
-можно ли подсоединяться к postrgesql?
Можно
Title: Re: Вопросы новичка
Post by: ploop on April 23, 2020, 06:45:54 PM
Добрый день!
Вопрос по дизайнеру: Можно ли добавить новый бэнд (SubDetail) между другими? Или вообще как-то перемещать их?
Понадобилось добавить в имеющийся отчёт (уже навороченный) ещё одну таблицу. Естественно бэнд добавляется в конец, можно тупо копировать содержимое вышестоящих и вставлять в нижестоящие, тем самым "сдвинув" всё вниз, но это как-то... не по людски :)
Title: Re: Вопросы новичка
Post by: Arin Alex on April 23, 2020, 08:03:56 PM
ploop, Приветствую!
Видать сломал перетаскивание :) Поправлю. 
Title: Re: Вопросы новичка
Post by: Arin Alex on April 23, 2020, 09:06:13 PM
ploop, Пофиксил (1.5.50). Можете проверять. 
Title: Re: Вопросы новичка
Post by: ploop on April 23, 2020, 10:33:44 PM
Ничего себе, как оперативно! Спасибо!
Title: Re: Вопросы новичка
Post by: ploop on June 01, 2020, 10:06:23 AM
Пожалуй ещё спрошу: У ReportEngine есть метод printToPDF(fileName), который сохраняет результат в файл. А есть возможность сформировать PDF в QByteArray? На данный момент перебрасываю через файл, что не есть хорошо.
Title: Re: Вопросы новичка
Post by: Arin Alex on June 10, 2020, 01:51:30 PM
ploop, К сожалению, на данный момент так :) Подумаю, что можно с этим сделать :).
Title: Re: Вопросы новичка
Post by: zzmiyy on November 25, 2020, 01:58:44 PM
Привет
Только начал изучение LR.
Какие есть способы добавить изображение из кода(QPixmap\QImage)?
Пробовал засунуть QPixmap в таблицу, не работает :((в отчете не показывается, в таблице есть)
Code: [Select]
    QTableWidgetItem * img = new QTableWidgetItem;
    QPixmap pix = QPixmap(100,100);
    pix.fill(Qt::red);
    img->setData(Qt::DecorationRole, pix);
    ui->tableWidget->setItem(2,2, img);
    engine.dataManager()->addModel("tablewidget",ui->tableWidget->model(),false);
Title: Re: Вопросы новичка
Post by: Subst on November 25, 2020, 06:28:44 PM
В отчете то какой элемент принимает картинку?
Есть Элемент изображение
Title: Re: Вопросы новичка
Post by: zzmiyy on November 25, 2020, 07:38:20 PM
В отчете то какой элемент принимает картинку?
Есть Элемент изображение
Есть. Но что в него передать не могу понять  :)
Пробовал подцепить модель куда вставлена картинка и привязать к ImageItem - не хочет.
Вопрос такой: как можно вставить изображение НЕ из БД и НЕ с помощью прямого указания пути. По форуму искал, не нашел. В примерах как я понял все из БД, или косо смотрел...
Title: Re: Вопросы новичка
Post by: Subst on November 25, 2020, 07:53:02 PM
Варианты:

Дважды кликни на элементе этом, расположенным на странице. Дальше довольно очевидно.
Или откуда необходимо вставить картинку? Поясни..
Title: Re: Вопросы новичка
Post by: Arin Alex on November 25, 2020, 08:33:18 PM
zzmiyy, Приветствую! Можно глянуть demo_r1 там oneslotds картинку передает.
Title: Re: Вопросы новичка
Post by: zzmiyy on November 25, 2020, 10:48:46 PM
zzmiyy, Приветствую! Можно глянуть demo_r1 там oneslotds картинку передает.
Отлично, примерно то что нужно. Буду копать. А кроме как колбеком из кода никак? Что еще почитать можно, чтобы понять как мне простейший отчет ( картинка + подпись)*n сделать? Подписи я так  понял я могу закинуть все в модель одну и сразу все вывести. Или я не верно мыслю?

Варианты:

Дважды кликни на элементе этом, расположенным на странице. Дальше довольно очевидно.
Или откуда необходимо вставить картинку? Поясни..
Открывается окошко где меня просят указать путь к картинке. А у меня картинка сгенерирована и хранится в QImage. я могу ее конечно сохранить как файл, но очень не хотелось бы.
Title: Re: Вопросы новичка
Post by: Arin Alex on November 25, 2020, 11:03:20 PM
zzmiyy, Ну можно еще свою модель написать, но через калбек то проще, мне кажется :)
Quote
Что еще почитать можно, чтобы понять как мне простейший отчет  (картинка + подпись)*n сделать?
Ну из доков только https://github.com/fralx/LimeReport/blob/master/docs/UserManualRu.pdf

P.S.
Code: [Select]
    QStandardItemModel* testModel = new QStandardItemModel(3,1);
    for (int i = 0; i<3; ++i){
        QStandardItem* img_item = new QStandardItem("");
        img_item->setData( QImage(":/report//images/logo32"), Qt::DisplayRole);
        testModel->setItem(i, 0, img_item);
        testModel->setItem(i, 1, new QStandardItem(QString("img_item_%1").arg(i)));
    }
    report->dataManager()->addModel("Test_Model", testModel, true);
Вот такое еще можно сколхозить
Title: Re: Вопросы новичка
Post by: zzmiyy on November 26, 2020, 04:07:54 AM
Спасибо, то что нужно! Мануал посмотрел, но там заполнение из бд, что мне не подходит.
Пытаюсь заполнить данными из модели и столкнулся с абсолютным непониманием работы.
Code: [Select]
QStandardItemModel* tst = new QStandardItemModel(10,2); //тестовая модель
    for(int i=0; i< tst->rowCount();i++){
        tst->setItem(i,0,new QStandardItem(QString("%1").arg(i)));  //заполняем
        tst->setItem(i,1,new QStandardItem(QString("%1").arg(i*i)));
    }
    ui->tableView->setModel(tst);   //добавил в tableView для проверки
    engine.dataManager()->addModel("tst", tst,false); //добавляем модель напрямую
    engine.dataManager()->addModel("tst1", ui->tableView->model(),false); //добавляем модель, вытащенную из вьюхи. По логике должно быть одно и тоже?
Иии... нет. Что я делаю не так?) Скрины вывода и шаблона прикрепил.

UPD: Самое смешное:
Code: [Select]
engine.dataManager()->addModel("tst", view->model(),false); //эта строчка выводит ток нули
engine.dataManager()->addModel("tst1", view->model(),false); //а эта строчка работает...
Code: [Select]
    engine.dataManager()->addModel("tst", tst,true); //не работает
    engine.dataManager()->addModel("tst1", tst,true);//работает
Если поменять местами - ничего не меняется...
Работает только с названием tst1...
Title: Re: Вопросы новичка
Post by: Subst on November 26, 2020, 06:46:17 AM

Открывается окошко где меня просят указать путь к картинке. А у меня картинка сгенерирована и хранится в QImage. я могу ее конечно сохранить как файл, но очень не хотелось бы.
[/quote]

Как раз с Алексом обсуждали. Передай в переменную отчета картинку.
Как то так:

QIMage image=...;
QVariant variant=image;

report->setReportVariable(variable,variant);
Title: Re: Вопросы новичка
Post by: zzmiyy on November 26, 2020, 08:13:34 AM

Как раз с Алексом обсуждали. Передай в переменную отчета картинку.
Как то так:

QIMage image=...;
QVariant variant=image;

report->setReportVariable(variable,variant);
Спасибо, так тоже получилось.
Title: Re: Вопросы новичка
Post by: Arin Alex on November 26, 2020, 04:34:27 PM
zzmiyy,
Quote
Работает только с названием tst1...
Вы положили на один DataBand два источника данных, DataBand может управлять перемещением по записям только одного источника, указанного в свойстве "datasource" у DataBand. Таким образом, вы перемещаетесть по tst1 и там значения меняются, а tst стоит на первой записи где все значения равны 0.
Title: Re: Вопросы новичка
Post by: zzmiyy on November 26, 2020, 04:57:40 PM
Понял, спасибо.
Title: Re: Вопросы новичка
Post by: zzmiyy on December 07, 2020, 04:29:03 PM
Привет.
Видел, что есть возможность добавлять оглавление. А как? На форуме не увидел примера :(
Title: Re: Вопросы новичка
Post by: Subst on December 07, 2020, 08:18:48 PM
Что именно ты имеешь ввиду под Оглавлением?
Title: Re: Вопросы новичка
Post by: zzmiyy on December 07, 2020, 08:21:36 PM
Заголовок раздела - страница.
Тут в 7ом пункте: http://limereport.ru/forum/index.php?topic=3.msg1721#msg1721
Title: Re: Вопросы новичка
Post by: Subst on December 07, 2020, 08:31:19 PM
Ну это у Алекса надо спросить :)
Возможно имелось ввиду setReportName или setPreviewWindowTitle

давно уже было, сложно вспомнить, что там было. Боюсь, и Алекс не вспомнит :)

P.S. может, что-то из области tableOfContents
Title: Re: Вопросы новичка
Post by: Subst on December 07, 2020, 08:33:41 PM
А...
Сообразил, band - заголовок отчета имеется ввиду.

Band, который печатается один раз, на старте всего отчета
Title: Re: Вопросы новичка
Post by: Arin Alex on December 07, 2020, 09:03:56 PM
zzmiyy, Можете глянуть demoReport1_report_header_group_subdetail_TOC.lrxml там оно есть :)
еще можно глянуть https://youtu.be/9tVicuuTWFc там есть расхождения с существующей реализацией, но общий принцип тот же.
 
Title: Re: Вопросы новичка
Post by: zzmiyy on December 08, 2020, 11:45:28 AM
Arin Alex, Пробую заполнить все точно так же как в примере, но из модели( addTableOfContentsItem(getField("model.column"), getField("model.column")); ). В ТоС добавляется только первый элемент. Что может быть не так?
Title: Re: Вопросы новичка
Post by: Arin Alex on December 08, 2020, 05:46:31 PM
zzmiyy, А можно сам отчетик глянуть ?
Title: Re: Вопросы новичка
Post by: zzmiyy on December 08, 2020, 08:55:16 PM
Arin Alex, например вот.
 Еще у меня всегда кнопка "Удалить страницу" неактивна, так и должно быть?
Title: Re: Вопросы новичка
Post by: Arin Alex on December 09, 2020, 05:47:57 PM
zzmiyy, На странице оглавления у банда должен быть укакзан источник данных = tableofcontents 
Quote
Еще у меня всегда кнопка "Удалить страницу" неактивна, так и должно быть?
Странно, должна быть активной (в случае если страниц отчета больше одной).
Title: Re: Вопросы новичка
Post by: zzmiyy on December 14, 2020, 04:53:24 PM
Arin Alex, Разобрался, спасибо.
А мне нигде не дает удалить репорт пейдж...
Почему элементы внутри одного лейаута могут быть "перемешаны"? Можно как-то отключить это?
Отчет на 81 страницу с кучей картинок отказался сохраняться в пдф(при нажатии на кнопку принт просто ничего не происходит)? Как фиксить?

Title: Re: Вопросы новичка
Post by: Subst on December 14, 2020, 05:57:12 PM
zzmiyy, не сохраняется в pdf - странно. Попробуй костыль сделать, поставь pdf-принтер какой-нить, Bullzip например. Посмотри, как там. Скорее всего там не то, что не сохраняет, а долго рендерит и ты не дожидаешься. Но это предположение.
Title: Re: Вопросы новичка
Post by: zzmiyy on December 18, 2020, 05:46:01 PM
Subst, Да с этим пока не важно, позже разберусь.
Меня сильно огорчает, что перемешиваются внутри лейлаута объекты.
Структура такая: есть лейаут, в нем несколько лейаутов, в каждом картинка + подпись. И вот некоторые перемешиваются, то есть идут не по порядку как в модели. Это происходит при смене страницы.
На рисунке пример что я имею ввиду.
А на счет невозможности удалить страницу:
Не дает, пока не создам новую. После кнопка становится активной.
Title: Re: Вопросы новичка
Post by: Arin Alex on December 18, 2020, 06:21:34 PM
zzmiyy, Правильно ли я понимаю, что с кнопкой удаления, последовательность действий такая:
report->loadFromFile(fileName);
report->designReport();
И в этом случае кнопка удаления страницы не активна?
Про перемешивание лейаутов не совсем понятно, можно сам файл отчета кинуть?
 
Title: Re: Вопросы новичка
Post by: zzmiyy on December 21, 2020, 03:17:18 PM
Arin Alex, Да, последовательность именно такая.
В связи с тем, что сначала я не догадался как автоматически нумеровать подписи к рисункам, я вставлял номер рисунка в подпись, а подписи хранил в модели. В первой картинке сам лейаут с элементами и модель с данными. На второй результат рендера и сохранения в ПДФ. Возможно я опять что-то пропускаю мимо...
Как нумеровать из шаблона я придумал, сейчас попробую, надеюсь что-то изменится.
Title: Re: Вопросы новичка
Post by: zzmiyy on December 21, 2020, 03:33:53 PM
Arin Alex, изменил, вставляю номер картинки из скрипта, не помогло. Прикрепленный пик. Теперь дело точно не в модели ;D
Title: Re: Вопросы новичка
Post by: Arin Alex on December 24, 2020, 01:35:30 PM
zzmiyy, А можно все таки сам lrxml глянуть? Его можно мне на почту arin_a@bk.ru кинуть.
Title: Re: Вопросы новичка
Post by: zzmiyy on December 25, 2020, 07:51:10 PM
Arin Alex
Прикрепил шаблон.
Вот код для заполнения модели похожими данными:
QStandardItemModel * model = new QStandardItemModel();
    for(int i = 0; i<3; i++){
        QList<QStandardItem *> items;
        for(int j=0;j<8;j++){
            items << new QStandardItem("");       //skip fields
        }
        for(int j=0;j<10;j++){
            items << new QStandardItem("sample text");
            QStandardItem * b = new QStandardItem("");
            QPixmap pix = QPixmap(1200,600);
            pix.fill(QColor(qrand()%255,qrand()%255,qrand()%255));
            b->setData(pix.toImage(), Qt::DisplayRole);
            items << b;
        }
        items << new QStandardItem("sample text");
        model->appendRow(items);
    }
    reporter.dataManager()->addModel("allData", model, true);

 
Title: Re: Вопросы новичка
Post by: Arin Alex on December 25, 2020, 08:28:18 PM
zzmiyy, Ага спасибо гляну
Title: Re: Вопросы новичка
Post by: Arin Alex on December 25, 2020, 09:12:50 PM
zzmiyy, Быстрый способ поправить ситуацию - грохнуть объемлющий лаяут. Но случай интересный на досуге поковыряю :)
Title: Re: Вопросы новичка
Post by: Arin Alex on December 25, 2020, 11:38:52 PM
zzmiyy, Нашел баг, пофиксил, пушнул (1.5.75). 
Title: Re: Вопросы новичка
Post by: zzmiyy on December 28, 2020, 06:06:07 PM
Arin Alex, Спасибо!
Есть возможность как-то увеличить время удержания клавиши мыши для drag-n-drop`а? Часто простым кликом(возможно только у меня правда) что-то чуть-чуть сдвигается.
Title: Re: Вопросы новичка
Post by: MultiMote on December 29, 2020, 10:05:30 AM
@zzmiyy, не только у вас :)
Title: Re: Вопросы новичка
Post by: Arin Alex on December 30, 2020, 12:50:53 AM
zzmiyy, MultiMote, По просьбам трудящихся добавил небольшую задержку перед измерением положения и размеров :)

P.S. А еще геометрию можно лочить используя Ctr+L и обратно через Ctrl+Shift+L.
Title: Re: Вопросы новичка
Post by: MultiMote on December 30, 2020, 09:33:02 AM
Спасибо!
Title: Re: Вопросы новичка
Post by: zzmiyy on January 13, 2021, 07:44:10 PM
Arin Alex, А какие возможности есть у скриптового языка? Только те функции, что перечислены Functions?
А то я тут подумал, что передаю кучу всяких полей внутрь через поля DataSource, а мог бы передать одной структурой на подобии JSON. Возможно ли такое?
Title: Re: Вопросы новичка
Post by: Arin Alex on January 13, 2021, 10:04:26 PM
zzmiyy, язык JavaScript можете и JSON пихнуть 
Title: Re: Вопросы новичка
Post by: leoneii on January 27, 2021, 03:09:31 PM
Народ! Ну как сделать ценники? Чтоб несколько в ряду)) А то я последний раз году в 2017 делал, но так и не осилил)) В демках нету - этож самый популярный вид отчета должен быть))
Title: Re: Вопросы новичка
Post by: Arin Alex on January 27, 2021, 10:44:04 PM
leoneii, Ну как то так :)
Title: Re: Вопросы новичка
Post by: leoneii on January 28, 2021, 04:13:52 PM
leoneii, Ну как то так :)

Попробую завтра, спасибо))
Title: Re: Вопросы новичка
Post by: leoneii on January 29, 2021, 11:21:01 AM
не получилос(((
Title: Re: Вопросы новичка
Post by: leoneii on January 29, 2021, 11:29:24 AM
Ааааа, все, простите, я тупой, датасорс не выбрал новый, все заработало
Title: Re: Вопросы новичка
Post by: leoneii on January 30, 2021, 01:25:11 PM
Воть ;)
Title: Re: Вопросы новичка
Post by: leoneii on February 10, 2021, 02:07:20 PM
А чтож, здрасте, есть готовая функция суммы прописью?
Title: Re: Вопросы новичка
Post by: Arin Alex on February 10, 2021, 08:08:15 PM
В интернете полно :) Можно javascript пихнуть
Вот например
Code: [Select]
num2str = (function (){var money;
var price;
var rub, kop;
var litera = sotny = desatky = edinicy = minus = "";
var k = 0, i, j;
N = ["", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять",
    "", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать",
    "", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто",
    "", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот",
    "тысяч", "тысяча", "тысячи", "тысячи", "тысячи", "тысяч", "тысяч", "тысяч", "тысяч", "тысяч",
    "миллионов", "миллион", "миллиона", "миллиона", "миллиона", "миллионов", "миллионов", "миллионов", "миллионов", "миллионов",
    "миллиардов", "миллиард", "миллиарда", "миллиарда", "миллиарда", "миллиардов", "миллиардов", "миллиардов", "миллиардов", "миллиардов"];
var M = new Array(10);
for (j = 0; j < 10; ++j)
    M[j] = new Array(N.length);
for (i = 0; i < N.length; i++)
    for (j = 0; j < 10; j++)
        M[j][i] = N[k++]
var R = new Array("рублей", "рубль", "рубля", "рубля", "рубля", "рублей", "рублей", "рублей", "рублей", "рублей");
var K = new Array("копеек", "копейка", "копейки", "копейки", "копейки", "копеек", "копеек", "копеек", "копеек", "копеек");
function num2str(money) {
    if (typeof money == "number") {money = money.toString();}
    rub = "", kop = "";
    money = money.replace(",", ".");
    if (isNaN(money)) {
        return "Не числовое значение";
    }
    if (money.substr(0, 1) == "-") {
        money = money.substr(1);
        minus = "минус "
    }
    else minus = "";
    money = Math.round(money * 100) / 100 + "";
    if (money.indexOf(".") != -1) {
        rub = money.substr(0, money.indexOf("."));
        kop = money.substr(money.indexOf(".") + 1);
        if (kop.length == 1) kop += "0";
    }
    else rub = money;
    if (rub.length > 12) {
        return "Слишком большое число";
    }
    ru = propis(price = rub, R);
    ko = propis(price = kop, K);
    ko != "" ? res = ru + " " + ko : res = ru;
    ru == "Ноль " + R[0] && ko != "" ? res = ko : 0;
    kop == 0 ? res += " ноль " + K[0] : 0;
    return (minus + res).substr(0, 1).toUpperCase() + (minus + res).substr(1);
}
function propis(price, D) {
    litera = "";
    for (i = 0; i < price.length; i += 3) {
        sotny = desatky = edinicy = "";
        if (n(i + 2, 2) > 10 && n(i + 2, 2) < 20) {
            edinicy = " " + M[n(i + 1, 1)][1] + " " + M[0][i / 3 + 3];
            i == 0 ? edinicy += D[0] : 0;
        }
        else {
            edinicy = M[n(i + 1, 1)][0];
            (edinicy == "один" && (i == 3 || D == K)) ? edinicy = "одна" : 0;
            (edinicy == "два" && (i == 3 || D == K)) ? edinicy = "две" : 0;
            i == 0 && edinicy != "" ? 0 : edinicy += " " + M[n(i + 1, 1)][i / 3 + 3];
            edinicy == " " ? edinicy = "" : (edinicy == " " + M[n(i + 1, 1)][i / 3 + 3]) ? 0 : edinicy = " " + edinicy;
            i == 0 ? edinicy += " " + D[n(i + 1, 1)] : 0;
            (desatky = M[n(i + 2, 1)][2]) != "" ? desatky = " " + desatky : 0;
        }
        (sotny = M[n(i + 3, 1)][3]) != "" ? sotny = " " + sotny : 0;
        if (price.substr(price.length - i - 3, 3) == "000" && edinicy == " " + M[0][i / 3 + 3]) edinicy = "";
        litera = sotny + desatky + edinicy + litera;
    }
    if (litera == " " + R[0]) return "ноль" + litera;
    else return litera.substr(1);
}
function n(start, len) {
    if (start > price.length) return 0;
    else return Number(price.substr(price.length - start, len));
}
return num2str;
})()
Title: Re: Вопросы новичка
Post by: leoneii on February 13, 2021, 11:42:05 AM
Охох, спасибо! Я сначала в программулине написал класс, ну как написал, взял отсюда и переделал - http://www.prog.org.ru/topic_7629_0.html
А потом до меня дошло, что в программе нигде нету суммы! В смысле можно выполнить запрос, но зачем? И до меня дошло второй раз, что Alex выложил готовый скрипт для lreport)) Работает))