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

Author Topic: Подзапросы / передача конекта из приложения  (Read 2377 times)

Maks

  • Newbie
  • *
  • Posts: 12
    • View Profile
Добрый день!
К примеру, есть таблица пользоателей "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
или может есть возможность передавать модель, с зависимой моделью в отчет.
Если эти два варианта осуществимы, объясните, пожалуйста, как работает каждый из них.
« Last Edit: October 05, 2020, 11:20:01 AM by Maks »

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Тут есть несколько решений :)
1. Если есть желание все данные передавать из приложения, то есть пример master - detail источников в demo_r1.
2. Можно передавать параметры соединения через переменные.
3. Limereport умеет использовать дефолтное соединение, установленное приложением, и более того, если в шаблоне отчета используется соединение с именем, совпадающим с уже установленным приложением, то limereport будет использовать его, а не устанавливать собственное. Если поставить галочку "Don't keep credentials in lrxml' имя пользователя и пароль не будут попадать в файл отчета. Можно подкрутить и адрес серевера с портом и название бд, тоже не будут туда попадать (хотя это вроде не сильно секретная информация). 

Maks

  • Newbie
  • *
  • Posts: 12
    • View Profile
Вариант с передачей модели в lime report как-то сложновато организован + у меня работа с базой в другом потоке происходит. Из потока с бд я передаю в основной модель, которую отправляю в lime report.
Так вот, нельзя ли проще организовать передачу зависимых моделей?
К примеру, указывать имя родителя, и по какому ключу эти модели соединяются?
Было бы очень удобно)

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Так тоже можно, передаете 2 модели и в шаблоне создаете subdetail только не subquery, а filter mode

Maks

  • Newbie
  • *
  • Posts: 12
    • View Profile
Спасибо, получилось!

Теперь проблема в другом. Отчет строится не так, как мне нужно.
Планируемый вывод.
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

Возможно ли сделать так, как мне нужно и как?
« Last Edit: October 12, 2020, 02:20:05 PM by Maks »

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Работу закончил за 3 дня, сумма выплаты 5 тыс. рублей
Поместите в DataFooter к DataBand

Maks

  • Newbie
  • *
  • Posts: 12
    • View Profile
Спасибо, сделал. Правда с  DataFooter к DataBand не получилось. Он так же выводил как и с обычным бандом.
Но получилось вывести с SubDetailFooterBand. Не знаю, правильно ли это, но пока все работает

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Да, все правильно, именно футер к SubDetail :) Это я в процессе написания ответа мысль потерял :)

Maks

  • Newbie
  • *
  • Posts: 12
    • View Profile
Понял :) У меня в отчете очень много текста в 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 руб

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

« Last Edit: October 13, 2020, 07:47:25 AM by Maks »

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Quote
У меня в отчете очень много текста в SubDetailFooterBand и он не влазит на страницу, поэтому и переносится на другую, а между ними пол страницы пустоты. И свойство  spplittable не активно. Как с этим быть?
Добавил свойство Splittable к футерам

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