LimeReport Forum

General Category | Основное => Discussion | Обсуждение => Topic started by: Maks on October 05, 2020, 11:18:04 AM

Title: Подзапросы / передача конекта из приложения
Post by: Maks on October 05, 2020, 11:18:04 AM
Добрый день!
К примеру, есть таблица пользоателей "Users":
 - Id
 - ФИО
 - Должность

И зависимая таблица, которая отражает, что/когда и в каком количестве делал пользователь "WorkUsers":
 - Id
 - IdUsers
 - NameWork
 - DateBeg
 - DateEnd
 - Аmount

Требуется в отчете вывести пользователя и совершенную им работу, аля:
 Иванов Ю.А. (Автослесарь)
  - Демонтаж переднего бампера(1 шт, 10.10.2019-11.10.2019)
  - Ремонт переднего бампера(1 шт, 11.10.2019-13.10.2019)
  - Монтаж переднего бампера(1 шт, 13.10.2019-14.10.2019)

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

Подскажите, пожалуйста, можно ли как-нибудь передавать конект к базе данных(тип, порт, хост, имяБД, пользователь, пароль) из приложения, чтобы создавать запросы прямо в редакторе Lime Report
или может есть возможность передавать модель, с зависимой моделью в отчет.
Если эти два варианта осуществимы, объясните, пожалуйста, как работает каждый из них.
Title: Re: Подзапросы / передача конекта из приложения
Post by: Arin Alex on October 06, 2020, 12:44:40 AM
Тут есть несколько решений :)
1. Если есть желание все данные передавать из приложения, то есть пример master - detail источников в demo_r1.
2. Можно передавать параметры соединения через переменные.
3. Limereport умеет использовать дефолтное соединение, установленное приложением, и более того, если в шаблоне отчета используется соединение с именем, совпадающим с уже установленным приложением, то limereport будет использовать его, а не устанавливать собственное. Если поставить галочку "Don't keep credentials in lrxml' имя пользователя и пароль не будут попадать в файл отчета. Можно подкрутить и адрес серевера с портом и название бд, тоже не будут туда попадать (хотя это вроде не сильно секретная информация). 
Title: Re: Подзапросы / передача конекта из приложения
Post by: Maks on October 10, 2020, 09:39:15 PM
Вариант с передачей модели в lime report как-то сложновато организован + у меня работа с базой в другом потоке происходит. Из потока с бд я передаю в основной модель, которую отправляю в lime report.
Так вот, нельзя ли проще организовать передачу зависимых моделей?
К примеру, указывать имя родителя, и по какому ключу эти модели соединяются?
Было бы очень удобно)
Title: Re: Подзапросы / передача конекта из приложения
Post by: Arin Alex on October 11, 2020, 02:07:10 PM
Так тоже можно, передаете 2 модели и в шаблоне создаете subdetail только не subquery, а filter mode
Title: Re: Подзапросы / передача конекта из приложения
Post by: Maks on October 12, 2020, 02:17:51 PM
Спасибо, получилось!

Теперь проблема в другом. Отчет строится не так, как мне нужно.
Планируемый вывод.
1. Иванов Петр Сергеевич
   - 1 день с 10 до 15
   - 2 день с 10 до 17
   - 3 день с 9  до 12
Работу закончил за 3 дня, сумма выплаты 5 тыс. рублей

2. Сидоров Иван Васильевич
   - 1 день с 10 до 20
   - 2 день с 10 до 20
Работу закончил за 2 дня, сумма выплаты 10 тыс. рублей

А получается так:
1. Иванов Петр Сергеевич
   - 1 день с 10 до 15
   - 2 день с 10 до 17
   - 3 день с 9  до 12
2. Сидоров Иван Васильевич
   - 1 день с 10 до 20
   - 2 день с 10 до 20
Работу закончил за 3 дня, сумма выплаты 5 тыс. рублей
Работу закончил за 2 дня, сумма выплаты 10 тыс. рублей

Схема в отчете:
-DataBand
  -SubDetailBand
-DataBand

Возможно ли сделать так, как мне нужно и как?
Title: Re: Подзапросы / передача конекта из приложения
Post by: Arin Alex on October 12, 2020, 02:34:45 PM
Работу закончил за 3 дня, сумма выплаты 5 тыс. рублей
Поместите в DataFooter к DataBand
Title: Re: Подзапросы / передача конекта из приложения
Post by: Maks on October 12, 2020, 03:46:03 PM
Спасибо, сделал. Правда с  DataFooter к DataBand не получилось. Он так же выводил как и с обычным бандом.
Но получилось вывести с SubDetailFooterBand. Не знаю, правильно ли это, но пока все работает
Title: Re: Подзапросы / передача конекта из приложения
Post by: Arin Alex on October 12, 2020, 04:13:34 PM
Да, все правильно, именно футер к SubDetail :) Это я в процессе написания ответа мысль потерял :)
Title: Re: Подзапросы / передача конекта из приложения
Post by: Maks on October 13, 2020, 07:37:39 AM
Понял :) У меня в отчете очень много текста в SubDetailFooterBand и он не влазит на страницу, поэтому и переносится на другую, а между ними пол страницы пустоты. И свойство  spplittable не активно. Как с этим быть?

И еще проблема. А если понадобится несколько разных подэлементов в одном отчете?

К примеру:
1. Иванов Петр Сергеевич
   - 1 день с 10 до 15
   - 2 день с 10 до 17
   - 3 день с 9  до 12
Работу закончил за 3 дня, сумма выплаты 5 тыс. рублей

Используемые ресурсы:
   - медь 1кг
   - сталь 2кг
   Общая ценность 500 руб

2. Сидоров Иван Васильевич
   - 1 день с 10 до 20
   - 2 день с 10 до 20
Работу закончил за 2 дня, сумма выплаты 10 тыс. рублей

Используемые ресурсы:
   - латунь 2кг
   - олово 2кг
   Общая ценность 1500 руб

Таким способом уже не получится сделать. Как можно решить эту проблему?

Title: Re: Подзапросы / передача конекта из приложения
Post by: Arin Alex on October 13, 2020, 04:26:05 PM
Quote
У меня в отчете очень много текста в SubDetailFooterBand и он не влазит на страницу, поэтому и переносится на другую, а между ними пол страницы пустоты. И свойство  spplittable не активно. Как с этим быть?
Добавил свойство Splittable к футерам

По второму вопросу - можно добавить второй SubdetailBand к DataBand