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

Author Topic: Использование переменных  (Read 2842 times)

serg_zep

  • Newbie
  • *
  • Posts: 3
    • View Profile
Использование переменных
« on: August 03, 2016, 03:54:00 PM »
Алекс, Доброго времени суток!

Пользователю (Администратору) нужна возможность самому делать шаблоны (не привлекая программиста)
Для этого ему в отчеты нужно передать некоторые фильтры из программы (с этим я разобрался)
А в отчете нужно динамически генерировать запросы с учетом этих переменных
Возник вот какой вопрос как это сделать.
Пытался сделать что то типа этого
$S{SELECT * FROM TABLE AS T  WHERE  T.CD_ID IN ($V{FILTER1}) AND S.SELECTED = 4}

В FILTER1 = '1007','1006'

Но ничего не получилось. Возможно ли это вообще сделать.

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Re: Использование переменных
« Reply #1 on: August 04, 2016, 08:13:04 PM »
LimeReport имеет возможность устанавливать соединение и выполнять SQL запросы на основе переменных. Процесс создания подключения и настройки источников данных показан в ролике https://youtu.be/zQL-uUjLzEg?t=50. При написании запроса можно использовать переменные отчета. 

serg_zep

  • Newbie
  • *
  • Posts: 3
    • View Profile
Re: Использование переменных
« Reply #2 on: August 05, 2016, 10:54:03 AM »
это я все просмотрел и понял что это есть у меня все равно не получается сделать
есть запрос
SELECT * FROM TABLE AS T WHERE T.CD_ID IN ('1007','1006') AND T.SELECTED = 4
если я его вставляю в SQL DATASOURCE все работает как надо.
Теперь я создаю Report variables: Name = FILTER1, VALUE =  '1007','1006'.
Открываю для редактирования свой запрос и изменяю его следующим образом
SELECT * FROM TABLE AS T WHERE T.CD_ID IN ($V{FILTER1}) AND T.SELECTED = 4

При попытке открытия (Кнопка "Priview") получаю следующее сообщения

---------------------------
Attention
---------------------------
ERROR:  invalid input syntax for integer: "'1007','1006'"
LINE 1: EXECUTE qpsqlpstmt_1d ('''1007'',''1006''')
                               ^
(22P02) QPSQL: Unable to create query
---------------------------
OK   
---------------------------

То есть что то я делаю не так но не могу понять что?

При этом если VALUE у FILTER1 заменить на 1007 все тоже работает

Arin Alex

  • Developer
  • Administrator
  • Hero Member
  • *****
  • Posts: 992
    • View Profile
Re: Использование переменных
« Reply #3 on: August 08, 2016, 04:29:10 PM »
Тут проблема с передачей списка значений для IN через переменую. Список из нескольких значений передать таким образом не получится.
Можно изменить запрос на следующий 
Code: [Select]
SELECT * FROM TABLE AS T WHERE T.CD_ID = ANY($V{FILTER1}) AND T.SELECTED = 4
и соответственно переменная Name = FILTER1, Value = {1007,1006}

serg_zep

  • Newbie
  • *
  • Posts: 3
    • View Profile
Re: Использование переменных
« Reply #4 on: August 09, 2016, 09:39:26 AM »
Все спасибо большое получилось.