Страница 1 из 1

Как динамически сформировать пользовательский SQL отчет

Добавлено: 12 фев 2007, 11:16
Александр
Всем привет!
Делаю отчет на основе своего SQL допустим

Код: Выделить всё

 Select rw.id
  From lsdbo.object_reference_view rw,
          lsdbo.object_type_view tw
Where (rw.type_id = tw.id) 
            AND (tw.id = 100003181100000
            AND rw.id in
                (Select av.object_id
                   From lsdbo.attrib_value_view av,
                           lsdbo.value_string_view vv
                 Where av.value_id = vv.id and
                          av.attrib_id = -33 and
                          vv.attrib_id = -33 AND
                          vv.Value 
                              in('Руденко Марина Александровна',
                                  'Балашова Ксения Юрьевна',
                                  'Борзенкова Анна Владимировна',
                                  'Кудрявцева Наталья Валериевна',
                                  'Темнова Алла Сергеевна' )))
т.е. беру все объекты созданные людьми из списка in

Но дело в том что набор этих людей может быть произвольным и известен только перед запуском отчета.
В фильтры вставлять это не хочется (отчет будет слишком долгий)
Хочется из действия изменить текущий отчет на основе своего SQL

Кто нибудь делал?

Добавлено: 12 фев 2007, 16:03
Александр
К сожалению передать в секцию in перечисляемый тип строк или чисел (т.е. массив) через аргумент отчета не представляется возможным на текущий момент. Но это дело находится в разработке Лоции
а пока мы поступили просто и некрасиво - заменили in на OR
т.е.

Код: Выделить всё

vv.Value=:FIO_01
or vv.Value=:FIO_01
or vv.Value=:FIO_01
...
or vv.Value=:FIO_20
заведомо внеся избыточность в список возможных значений, т.к. реальное число строк списка отследить в запросе также не представляется возможным :?

или представляется? конечно хотелось бы свести кривость подхода к минимуму

Добавлено: 13 фев 2007, 13:56
Александр
вопрос решился с другой стороны

Код: Выделить всё

Select rw.id
          From lsdbo.object_reference_view rw,
               lsdbo.object_type_view tw
         Where (rw.type_id = tw.id) 
                 AND
               (tw.id = 100003181100000
                 AND rw.id in
                (Select av.object_id
                   From lsdbo.attrib_value_view av,
                        lsdbo.value_string_view vv
                  Where av.value_id = vv.id and
                        av.attrib_id = -33 and
                        vv.attrib_id = -33 AND
                        and CHARINDEX(vv.Value ,:mStr)>0 
но как сделать так чтобы отчет при запуске из действия выполнялся сразу (ведь аргумент определен)
а не выводил окно аргументов с предложением обновиться???

Добавлено: 14 фев 2007, 07:56
Anderyt
кажется, у меня получалось сделать то же самое примерно, но используя LIKE, хотя и в очень неожиданной форме :-) про charindex надо запомнить... это же примерно то же, что pos(), да?
а автоматический запуск - это решается. у отчета есть какие аргументы? вот эти же аргументы нужно передать из действия, в том же порядке... если уже так и сделано, а окно все равно показывается, то вроде нужно добавить в параметры функции для запуска отчета после имени отчета переменную a_object... звучит странно, ведь среди аргументов отчета нету объекта... но это работает ;-)