Как использовать вместо Выбора объектов Отчет??

Здесь обсуждаем систему TDM/PDM/Workflow Lotsia PDM PLUS (PartY PLUS).
Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

да хоть сейчас :-)
меня некоторые наши пользователи уже давно донимают с одной просьбой.. у нас есть самописный модуль, который мы используем как помощника документооборота, там есть список юзеров, у которых есть невыполненные задачи, причем подсчитывается общее кол-во этих задач для каждого пользователя и отображается дата старта самой последней задачи... список этот виден только нескольким юзерам, в том числе Диспетчерам... по нему неплохо можно видеть, кто насколько, извинияюсь, "тупит" и как давно :-) но вдруг им понадобилось видеть в этом списке только "нужные" задачи, то есть те, которые НЕ относятся к офисному документообороту. кому то, кстати, хочется видеть наоборот только те, которые ОТНОСЯТСЯ к нему... было жутко лень залазить в исходники этого модуля, к тому же исходников последней версии не могу найти, а там было кое что принципиально изменено... и сделал этот список в отчете в Лоции. текст запроса такой:

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

select empl.id as 'ИД пользователя'
,empl.name as 'Пользователь'
,(select count(*)
    from 
    lsdbo.wf_mail_to mail_to
    join
    lsdbo.wf_mail mail
    on mail_to.mail_id = mail.id
    where mail_to.state <> 'C'
    and
    mail.sys_type = 'T'
    and
    mail_to.user_to_id = empl.id
    ) as 'Всего невыполненных задач'
,(select convert(nchar(10),min(mail_to.created),104)
    from 
    lsdbo.wf_mail_to mail_to
    join
    lsdbo.wf_mail mail
    on mail_to.mail_id = mail.id
    where mail_to.state <> 'C'
    and
    mail.sys_type = 'T'
    and
    mail_to.user_to_id = empl.id
    ) as 'Самая старая задача'
from
lsdbo.emplusers empl
join
lsdbo.wf_mail_to mail_to
on empl.id = mail_to.user_to_id
join 
lsdbo.wf_mail mail
on mail_to.mail_id = mail.id
join
lsdbo.wf_maps maps
on
mail.map_id = maps.id
where mail_to.state <> 'C'
and
mail.sys_type = 'T'
and
maps.description not like 'письмо%'
group by empl.id, empl.name
order by 'Всего невыполненных задач' desc
вроде работает...
в список НЕ попадают те задачи, которые относятся к картам, у которых в описании есть слово "письмо", это как раз карты по офисному докобороту...
Последний раз редактировалось Anderyt 17 окт 2006, 10:44, всего редактировалось 1 раз.
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

упс!
пока Теххелп или кто то еще не расстрелял меня, уточню важную деталь.
чтобы все было ровно, в приведенном запросе нужно дополнить ВСЕ НАЗВАНИЯ таблиц (КРОМЕ таблицы wf_maps) строчкой "_v". для таблицы wf_maps нужно добавить "_view". это нужно для того, чтобы запрос выполнялся не по таблицам, а по видам...
у юзеров иначе этот запрос не будет выполняться...
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

по поводу isobject_id (цитата из техподдержки)
Вопрос-... какое значение нужно добавить в заголовок чтобы появилась системная колонка эквивалентная isobject_id как в стандартном отчете?
Ответ-... В принципе любое, но чтобы имя было isobject_id. Например,

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

lsdbo.object_reference_view.id as isobject_id
одна проблема - когда Лоция компилирует SQL имя колонки получается
object_reference_view_isobject_id - и выйти на объект нельзя
но если вручную на полученном шаблоне изменить имя колонки на isobject_id - то действительно все работает. :wink:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

ух ты, точно, выходит на объект :-)
причем у меня даже скомпилировалось правильно, написал именно lsdbo.object_reference_view.id as isobject_id в запросе и в отчете появилась колонка isobject_id... я ее потом удалил, оставил только нужные колонки - из получившегося запроса можно попасть на объект, при этом самой колонки с ИД объекта даже не видно :-)
супер! :-)
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

еще немного к суперу от Лоции
для правильной компиляции можно попробовать
(lsdbo.object_reference_view.id) AS isobject_id
:lol:

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Аватара пользователя
Старик Крупский
Активный участник
Сообщения: 803
Зарегистрирован: 27 июл 2006, 22:17
Откуда: Москва

Сообщение Старик Крупский »

to Anderyt:
1.
> а вот насчет ускорения поиска.... хм... вряд ли... это дополнительная
> проверка все таки...
С одной стороны проверка, а с другой условие отбора. Какое из этих двух сработает раньше... :oops:
2.
> причем у меня даже скомпилировалось правильно, написал именно
> lsdbo.object_reference_view.id as isobject_id в запросе и в отчете
> появилась колонка isobject_id...
Насколько я знаю, если в запросах используется одна таблица, то компилироваться всегда будет правильно. А если больше одной, то нужно создавать определенность, заключая имя колонки в скобки.
Эксперментальным путем было выяснено, что определяющим является именно имя isobbect_id, т.е. можно сделать вычисляемое поле с таким именем и в него пихать все, что хочешь. Но если такого ИД в базе нет, то будет предложено окно выбора объекта :lol:
Аватара пользователя
Anderyt
Активный участник
Сообщения: 777
Зарегистрирован: 15 июл 2004, 13:15
Используемое ПО: Lotsia PDM PLUS
Откуда: Тюмень
Контактная информация:

Сообщение Anderyt »

в общем...
в ходе долгих исследований сложилось ощущение, что родные лоцовские запросы по выбору значений атрибутов, имеющие вид

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

 
 select av1.object_id 
 from
 lsdbo.attrib_value av1
 join
 lsdbo.value_string vs1
 on
 av1.value_id = vs1.id
 where
 av1.attrib_id = <ИД>
 and
 vs1.attrib_id = av1.attrib_id
 and
 vs1.value like '%'+'газпром'+'%'
 
выглядят так не зря. ранее вроде считалось, что делать дополнительную проверку vs1.attrib_id = av1.attrib_id или vs1.attrib_id = <ИД> нет необходимости, и что удаление этого фрагмента может повысить скорость выполнения за счет уменьшения числа проверок. оказалось совсем наоборот!
сравните план выполнения приведенного выше запроса вот с этим:

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

 
 select av1.object_id 
 from
 lsdbo.attrib_value av1
 join
 lsdbo.value_string vs1
 on
 av1.value_id = vs1.id
 where
 av1.attrib_id = <ИД>
 and
 vs1.value like '%'+'газпром'+'%'
  
появились загадочные блоки Parallelism, index seek сменились на index scan, общее число блоков (а это скорее всего примерно то же самое, что операции) так же увеличилось. более того, у некоторых блоков появились проценты стоимости. а ведь у оригинального запроса все стоимости были 0%!
использование НЕродного запроса способно привести к блокировкам БД, особенно при обращении к большим объемам данных, на родном запросе блокировок пока не было.
использование join, подзапроса или нескольких таблиц в секции from никак не изменяет план выполнения, думаю, здесь можно делать так, как кому удобнее.
а вот использовать как бы двойную проверку ИД атрибута (в таблицах attrib_value и value_xxx) очень рекомендую. неважно, в каком виде, можно vs1.attrib_id = av1.attrib_id, можно vs1.attrib_id = <ИД>
и это очень все меняет..
так что это все таки условие отбора, которое ускоряет поиск..
для осознания этого потребовалось всего 2 года ;-)
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Сообщение Александр »

Слава богу я не разбираясь в SQL все время лепил 'родные' запросы Лоции :wink: :wink: :wink: :wink:

Уфф... Пронесло... :wink: :wink:

ps
До встречи на конференции!

Софт - RicCRM<<LotsiaPDM(4.40)<<MsSQL(5/8)
Уровень администрирования - Альтернативный

Ответить