LimeReport Forum
General Category | Основное => Discussion | Обсуждение => Topic started by: serg_zep 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'
Но ничего не получилось. Возможно ли это вообще сделать.
-
LimeReport имеет возможность устанавливать соединение и выполнять SQL запросы на основе переменных. Процесс создания подключения и настройки источников данных показан в ролике https://youtu.be/zQL-uUjLzEg?t=50. При написании запроса можно использовать переменные отчета.
-
это я все просмотрел и понял что это есть у меня все равно не получается сделать
есть запрос
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 все тоже работает
-
Тут проблема с передачей списка значений для IN через переменую. Список из нескольких значений передать таким образом не получится.
Можно изменить запрос на следующий
SELECT * FROM TABLE AS T WHERE T.CD_ID = ANY($V{FILTER1}) AND T.SELECTED = 4
и соответственно переменная Name = FILTER1, Value = {1007,1006}
-
Все спасибо большое получилось.