Welcome, Guest. Please login or register.
Did you miss your activation email?

Author Topic: Вопросы новичка  (Read 151234 times)

ldir

  • Jr. Member
  • **
  • Posts: 72
    • View Profile
Re: Вопросы новичка
« Reply #270 on: April 05, 2019, 10:07:56 pm »
Хоть на изнанку вывернись. Все удалил, по новому скачал. В дебаге есть, в релизе нет. Но ведь чудес не бывает.

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Re: Вопросы новичка
« Reply #271 on: April 05, 2019, 10:19:30 pm »
Версия Qt какая ? Компилятор ?

ldir

  • Jr. Member
  • **
  • Posts: 72
    • View Profile
Re: Вопросы новичка
« Reply #272 on: April 05, 2019, 10:26:34 pm »
5.7.1, 5.11.3 Mingw 5.3

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Re: Вопросы новичка
« Reply #273 on: April 05, 2019, 10:36:54 pm »
Кажется получилось повторить. Сейчас буду разбираться 

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Re: Вопросы новичка
« Reply #274 on: April 06, 2019, 12:29:06 am »
Поправил, пушнул :)
Перед сборкой обязательно клирануться :)

ldir

  • Jr. Member
  • **
  • Posts: 72
    • View Profile
Re: Вопросы новичка
« Reply #275 on: April 06, 2019, 09:38:15 am »
Arin Alex, спасибо! Заработало.

Vermilion

  • Newbie
  • *
  • Posts: 34
    • View Profile
Re: Вопросы новичка
« Reply #276 on: April 16, 2019, 03:27:55 pm »
Доброго времени суток.

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

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


Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Re: Вопросы новичка
« Reply #277 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 = "";
}

dim0n-333

  • Newbie
  • *
  • Posts: 6
    • View Profile
Re: Вопросы новичка
« Reply #278 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}), но это выглядит как огромный костыль.
Буду рад любому совету.

Vermilion

  • Newbie
  • *
  • Posts: 34
    • View Profile
Re: Вопросы новичка
« Reply #279 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

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Re: Вопросы новичка
« Reply #280 on: April 18, 2019, 04:20:44 pm »
dim0n-333,
Quote
При создании datasource в окне sql использовать внешние переменные не получается (хотел вставить после where).
Вот тут не понял. Вы можете использовать переменные отчета в запросе точно так же, как и данные из других источников данных.
Вы можете, например, написать: where CustomerID like $V{CustomerID}, а в переменой будет зачение %ALFKI% 

dim0n-333

  • Newbie
  • *
  • Posts: 6
    • View Profile
Re: Вопросы новичка
« Reply #281 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.
« Last Edit: April 19, 2019, 08:10:15 am by dim0n-333 »

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Re: Вопросы новичка
« Reply #282 on: April 19, 2019, 12:37:05 pm »
dim0n-333,
Quote
Но почему-то в результате такого запроса я получаю таблицу без строк.
Это происходит из-за того, что параметры в обычном режиме передаются через bind.
Если есть желание просто кусок sql вставить через переменную, то нужно использовать $V{VarName, nobind} 

dim0n-333

  • Newbie
  • *
  • Posts: 6
    • View Profile
Re: Вопросы новичка
« Reply #283 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;
Вижу таблицы с заполненными строками, т.е. все нормально.

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 1005
    • View Profile
Re: Вопросы новичка
« Reply #284 on: April 19, 2019, 09:36:21 pm »
dim0n-333, Параметр nobind был добавлен в новую версию, которая находится на github в ветке develop