У меня есть отчет, который вызывается много раз, но я хочу, чтобы порядок каждый раз менялся.
Как я могу изменить «порядок по» в зависимости от переменной.
Например
report print_label()
If is_reprint
then
order by rpt.item_code, rpt.description
else
order by rpt.description, rpt.item_code
end if
Я попытался передать переменную при вызове отчета:
let scratch = "rpt.item_code, rpt.description"
start print_label(scratch)
И в отчете я сделал:
order by scratch
Но это не сработало ... Есть другие предложения ?? Спасибо!
3 ответа
Вы можете использовать приготовить:
let query_txt="select ... "
If is_reprint then
let query_txt=query_txt clipped, " order by rpt.item_code,
rpt.description"
else
let query_txt=query_txt clipped, " order by rpt.description,
rpt.item_code"
end if
prepare statement1 from query_txt
declare cursor_name cursor for statement1
А теперь запустите отчет, используйте foreach и т. Д. И т. Д.
P.S. Вы должны определить query_txt как char, достаточно длинный для всего текста.
Техника, которую я использовал для этого типа проблем, похожа на
REPORT report_name(x)
DEFINE x RECORD
param1,param2, ..., paramN ...,
sort_method ...,
data ...
END RECORD
ORDER [EXTERNAL] BY x.param1, x.param2, ..., x.paramN
BEFORE GROUP OF x.param1
CASE
WHEN x.sort_method ...
PRINT ...
WHEN x.sort_method ...
PRINT ...
END CASE
BEFORE GROUP OF x.param2
# similar technique as above
...
BEFORE GROUP OF x.paramN
# similar technique as above
ON EVERY ROW
PRINT ...
AFTER GROUP OF x.paramN
# similar technique as above
...
AFTER GROUP OF x.param2
# similar technique as above
AFTER GROUP OF x.param1
# similar technique as above
... а затем в 4gl, который вызывает ОТЧЕТ, заполните x.param1, x.param2, ..., x.paramN желаемыми параметрами, используемыми для сортировки, например
CASE x.sort_method
WHEN "product,branch"
LET x.param1 = x.data.product_code
LET x.param2 = x.data.branch_code
WHEN "branch,product"
LET x.param1 = x.data.branch_code
LET x.param2 = x.data.product_code
END CASE
OUTPUT TO REPORT report_name(x.*)
Итак, согласно моему примеру, это метод, который я видел и использовал для таких вещей, как биржевые отчеты. Менеджер склада / филиала / магазина хочет видеть вещи, заказанные по складу / филиалу / магазину, а затем по продукту / артикулу / номенклатуре, в то время как менеджер по продукту хочет видеть вещи, заказанные по продукту / артикулу / номенклатуре, а затем складу / филиалу / магазин. Больше аналитических отчетов с большим количеством потенциальных параметров можно сделать, используя ту же технику. Я думаю, что запись, которую я видел, - 6. Так что в этом случае гораздо лучше с одним отчетом, охватывающим все 6! = 720 потенциальных комбинаций, чем писать отдельный отчет для каждой возможной комбинации заказов.
Вероятно, похоже на вариант 1 Джонатана, хотя у меня нет таких же оговорок относительно сложности. Я не припомню, чтобы на рецензировании кода кто-то из моих младших разработчиков ошибался. Фактически, если отчет достаточно общий, вы обнаружите, что не нужно его слишком часто трогать.
Вы можете иметь оператор case в предложении order by следующим образом:
order by
case
when 1 = 1 then
rpt.item_code, rpt.description
else
rpt.description, rpt.item_code
end
Похожие вопросы
Новые вопросы
informix
Informix - это объектно-реляционная СУБД на основе SQL, OLTP / OLAP, NoSQL, разработанная IBM. Этот тег подходит для вопросов о любом из продуктов с Informix в названии продукта.