LimeReport Forum
General Category | Основное => Discussion | Обсуждение => Topic started by: Tux on November 24, 2025, 03:50:56 pm
-
Доброго времени суток!
Хотелось бы иметь управляемую функцию, которая возвращает строку, зависящую от входных данных. Допустим, функция принимает значение, которая внутри функции передается в WHILE x=параметр и, в результате формируется строка.
Наверняка, это можно сделать вручную, но, непонятно с чего начать.
С документацией тяжко. Допустим непонятно что делает вкладка Script. Возможно, что моя проблема решается где-то там.
-
Приветствую, совершено верно, на в кладке Script можно описать свои функции (язык JS) и потом использовать их в своем отчете. Можно поискать на форуме это довольно часто всплывавшая тема.
-
Оно, может и описано, но недостаточно понятно.
Допустим я написал скрипт
function reg_1(p, l)
{
s = $V{SerNo};
y = $V{Year};
res = ${ SELECT regul_1 FROM report_table WHERE page = p AND line = l AND serno=s AND year=y } ;
return res;
}
Чтобы потом использовать в ячейке, типа
$S{ reg_1(1,5) }
И получаю ошибку, что вполне ожидаемо.
Непонятна область видимости этой вкладки Script. Да и можно ли вообще вызывать такое, непонятно.
-
Хай!
Ошибка какая?
мне не нравится у тебя использование запроса внутри JS функции
я бы, пожалуй, определил DataSource, парамтеры запроса вытащил через переменные отчета...
ну, собственно, обычно в таких случаях именно так и делаю.
Проверь просто заомменть свой запрос и верни из ф-ии какое-то число
-
Дело не столько в ошибке, а в том, как вообще выполнить запрос и вернуть его результаты в переменную, например.
С DataSource понятно, что будет работать. Просто расписывать 100500 переменных не хочется. Тем более, что они будут отличаться незначительно. Функцией будет явно компактнее и быстрее.
-
в отчете никак, вроде бы
вообще - выполнить запрос в коде программы и передать переменную в отчет
-
Этих переменных, в моём варианте, должно быть 240 штук. Хотя, самих данных немного.
Не во всех же отчётах пишут 1 запрос и получают 50 строк. Потом другой запрос - ещё 50 строк. И так далее.
Подожду автора, может что подскажет...
-
ну никому, кроме тебя, пока не ясна постановка задачи :o)
но из JS доступ к самому соединению с БД кажется неосуществимым
но подождем Алекса, может что я упустил
могу в телегу ему крикнуть, чтоб заглянул...
-
ну никому, кроме тебя, пока не ясна постановка задачи :o)
Задача простая - калибровка прибора. Одно значение на одну калибровку. Отчёт был в бумажном виде, заполнялся вручную. Потом сделали программу автоматизации. Потом изменили отчёт. Потом перемешали строки. Обычное дело - вся разработка без какого либо ТЗ и документации. :D
-
Приветствую.
Я если честно не совсем понимаю логику этих действий :)
Можно заслать в меня отчет я его хоть гляну если там нет секретных данных ?
-
Можно заслать в меня отчет я его хоть гляну если там нет секретных данных ?
Отчёт обычный, особо секретных данных нет. Но, сам отчёт показать не могу - ДСП.
Запрос я показал- там хитрость в том, что в самой БД данные лежат не последовательно. Запросить единым запросом не выйдет. Можно взять и разложить по одному - но однотипных запросов много выходит.
Может можно как то из отчёта вызвать функцию из вызывающей его программы?
-
ну я наверное чего-то недогоняю все же...
но однотипные вопросы, определил датасорс, который параметры из переменных берет
в нужном месте задал переменные, сделал prepareDatasource (не помню точно, там нескольк овариантов, Алекс подскажит или я копну), забрал то, что в датасорсе лежит
как-то так вроде
-
ну я наверное чего-то недогоняю все же...
Вы, видимо, просто не работали в организациях, где нет ни ТЗ, ни документации, зато есть 100500 программистов, работающих над одной программой в разные интервалы времени. :)
Простая функция с аргументами в отчёте, выполняющая запрос к БД, решила бы мои проблемы - осталось только узнать, как именно это сделать.
-
Где мы только не работали :)
Если нужно запихать плюсовую функцию в лайму можно сделать следующее
class FuncManager: public QObject {
Q_OBJECT
public:
Q_INVOKABLE QString sayHello(const QString& name) {
return "Hello " + name;
}
};
report->scriptManager()->moveQObjectToScript(new FuncManager(),"MyFunc");
в отчете можно юзать
$S{MyFunc.sayHello("Tux")}