Как 'подогнать' данные к цепочке отчетов своим SQL

Здесь обсуждаем систему TDM/PDM/Workflow Lotsia PDM PLUS (PartY PLUS).
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

Как 'подогнать' данные к цепочке отчетов своим SQL

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

Никто не объяснит на примере как использовать свои SQL с тем или иным типом отчетов

Тип
1Выделенный объект - свои SQL использовать нельзя
2Объекты первого уровня - заготовка SQL по типу связи+экземпляр объекта+our_dummy???+SQL дополнительного отбора
3Все объекты - как и для первого уровня
4Вся база данных - или по условиям отчета или по экземпляру объекта+SQL дополнительного отбора
5Пользовательский - только свой SQL

Проблема: при запуске отчета с аргументами из действия в случае 5-го типа - первой открывается вскладка аргументы (где нужно нажать Обновить) в других типах отчетов этого эффекта не наблюдается

в своем SQL мне нужно работать с двумя таблицами

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

...
  From lsdbo.object_reference_view rw,
          lsdbo.object_type_view tw
...
и сам отчет должен выполняться сразу

5-й тип отчета не подходит (открывается окно Аргументы)
в остальных типах нет выборки по типу объекта

Никто не подскажет как выполнить свой 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 CHARINDEX(CAST(rw.author_id AS varchar(10)), :UserList)>0
типом отчета отличном от 5-го и что писать в секции дополнительного отбора параметров

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

Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

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

оказывается как сказала техподдержка, чтобы не выскакивало окно атрибуты - первым в списке атрибутов должен быть некий фиктивный атрибут с типом объект и произвольным значением (я поставил empty)
тогда все Ок.

Но все таки вопрос остается:
какой синтаксис нужно использовать для подгонки своих данных в отчет , что означает Select1 из help'a

кто нибудь пробовал?

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

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

Сообщение Anderyt »

видимо, необходимость вставки какого то объекта в запуск отчета продиктована особенностями функции... нужен аргумент-объект, и все тут, без него - никак... :-))

а с вопросом... хм... синтаксис для чего, для какого типа отчета? для пользовательского или для всех остальных?
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

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

ну допустим для всей базы данных все объекты
нам предлагают 'заготовку' sql

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

  SELECT lsdbo.object_reference_view.id,   
         lsdbo.object_reference_view.type_id  
    FROM lsdbo.object_reference_view   
что писать в дополнительном отборе
-просто продолжить секцию From и добавить Where?
-а что делать если мне нужно не 2 колонки а одна или четыре или вообще все? Написать в окне отбора свой запрос?

Кто из этих двух SQL выполняется первым и кто вложен и в кого или они сами по себе? :? или можно использовать конструкции типа

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

declare @p1 as varchar(256)
set @p1='...'
exec(...

В смысле использовать это окно как Query Analyzer :roll:

Ничего не понимаю :wink:

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

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

Сообщение Anderyt »

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

а вот КАКИЕ это будут объекты - можно как раз задать в условии отбора. причем основной запрос и дополнительный должны дополнять друг друга, они выполняются одновременно, точнее нет, это вообще ОДИН запрос.
просто у нас есть возможность дописать свои условия, которые будут подцеплены
в первой части обычно написано вот так:

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

  SELECT lsdbo.object_reference_view.id,   
         lsdbo.object_reference_view.type_id,   
         lsdbo.rep_part_item_view.part_id  
    FROM lsdbo.object_reference_view,   
         lsdbo.rep_part_item_view,   
         lsdbo.rep_part_view  
   WHERE ( lsdbo.rep_part_view.id = lsdbo.rep_part_item_view.part_id ) and  
         ( lsdbo.rep_part_item_view.object_type_id = lsdbo.object_reference_view.type_id ) and  
         ( ( lsdbo.rep_part_view.name_id = :adec_report_id ) )    
после WHERE идет по сути фильтрация по типу объекта.
а дальше можно написать продолжение этого WHERE, имея в виду, что наше условие будет сцеплено с имеющимся через AND
например, можно написать вот такое (реальный отчет с нашими атрибутами, так что работать "один в один" на других базах это вовсе не обязано):

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

(
(lsdbo.object_reference_view.id in 
	(
	select av.object_id
	from 
	lsdbo.attrib_value_view av
	, lsdbo.value_datetime_view vd
	where
	av.attrib_id = 100001197700058
	and
	av.value_id = vd.id
	and
	vd.value <getdate>= dateadd(day,-:days_back,getdate())
 	)
)  
or
lsdbo.object_reference_view.id not in 
	(
	select av.object_id
	from 
	lsdbo.attrib_value_view av
	where
	av.object_id = lsdbo.object_reference_view.id
	and
	av.attrib_id = 681153613001014
	)
)
and 
lsdbo.object_reference_view.id in 
	(
	select av.object_id
	from 
	lsdbo.attrib_value_view av
	where
	av.object_id = lsdbo.object_reference_view.id
	and
	av.attrib_id = 100000327400000
	)
вот..
этот большой запрос (из двух частей) возвращает в отчет набор ИД объектов. отчет после этого уже вытаскивает для них нужные атрибуты и применяет свой собственный фильтр.
лучше день потерять, потом за пять минут долететь!
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

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

через AND, - понятно, спасибо :wink:
и еще глупый вопрос - а что такое Select 1 ... из help'a
раздел
Дополнительные условия отбора в SQL :roll:

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

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

Сообщение Anderyt »

не мог сообразить, пока не попробовал этот запрос сделать :-))
этот запрос пишет "1" для каждой строки, которую возвращает запрос :-))))
попробуйте его сделать, поймете ;-)

но не знаю, я как то без EXISTS обхожусь...
лучше день потерять, потом за пять минут долететь!
Юрий
Активный участник
Сообщения: 239
Зарегистрирован: 13 янв 2005, 14:30
Используемое ПО: Lotsia PDM PLUS LT
Откуда: Украина, Донецк
Контактная информация:

Сообщение Юрий »

Самый оптимальный вариант что-бы в отчете использовать различные SQL запросы к базе, если они сложные - использование скриптов в отчете.
Этим способом можно избежать избыточную информацию, которая замедляет формирование отчета.
Нюанс заключается только в том, что столбцы отчета необходимо формировать самому.
Аватара пользователя
Александр
Активный участник
Сообщения: 1652
Зарегистрирован: 24 авг 2006, 08:06
Используемое ПО: Lotsia PDM PLUS
Откуда: 55.745578,37.665825

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

Но ведь скрипты запускаются после формирования отчета и не влияют на выборку или не так? :roll:

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

Юрий
Активный участник
Сообщения: 239
Зарегистрирован: 13 янв 2005, 14:30
Используемое ПО: Lotsia PDM PLUS LT
Откуда: Украина, Донецк
Контактная информация:

Сообщение Юрий »

Да. Я же и говорю формировать отчет самостоятельно в скрипте:
1. Очищаем отчет.
2. Делаем цыкл обработки массива результатов SQL запроса и в этом цыкле заполняем нашу форму.
3. Добавляем или просто применяем фильтры сортировки по вкусу.
Все отчет готов.
Юрий
Активный участник
Сообщения: 239
Зарегистрирован: 13 янв 2005, 14:30
Используемое ПО: Lotsia PDM PLUS LT
Откуда: Украина, Донецк
Контактная информация:

Сообщение Юрий »

Примерно так:
sub Main
dim id()
dim err, err1
set rst = CreateObject("ADODB.recordset")
redim id (LsRpt.RowCount()+1)

set con1 = LsGetADOConnect

for i = 1 to LsRpt.RowCount()
id(i) = LsRpt.GetItem(i,"isobject_id")
next

j1=1
call LsRpt.SetItem(j1,"col7","")
call LsRpt.SetItem(j1,"col8","")
call LsRpt.SetItem(j1,"col9","")
call LsRpt.SetItem(j1,"col10","")
call LsRpt.SetItem(j1,"col11","")
for j = 1 to i-1
'strcon = "select f.file_name, f.description, f.cd, st.description as bibl "
'strcon = strcon + "from lsdbo.file1 f left join lsdbo.storage st "
'strcon = strcon + "on f.storage_id = st.id where f.object_reference_id = " + cstr(id(j))

strcon = "select f.file_name, f.description, f.cd, st.description bibl, f.ws_id, cast( f.ws_id as char), f.cd "
strcon = strcon + "from (select storage_id, file_name, description, ws_id, cd from lsdbo.file1 fl "
strcon = strcon + " where fl.object_reference_id = "+cstr(id(j))+") f "
strcon = strcon + "left join lsdbo.storage st "
strcon = strcon + "on f.storage_id = st.id "
strcon = strcon + "left join LSDBO.CD_WSID ws on f.ws_id = ws.id "

strcon1 = "select obj.cd, cast(ws.id as char) from (select cd, ws_id from LSDBO.object_reference obj "
strcon1 = strcon1 + " where obj.id="+cstr(id(j))+")obj "
strcon1 = strcon1 + "left join LSDBO.CD_WSID ws on obj.ws_id = ws.id "

set rst = con1.Execute(strcon,err)
set rst1 = con1.Execute(strcon1,err1)
rst1.MoveFirst
mass = rst1.getrows
call LsRpt.SetItem(j1,"col10",mass(0,0))
call LsRpt.SetItem(j1,"col11",mass(1,0))

j1=j1+1
call LsRpt.SetItem(j1,"col7","")
call LsRpt.SetItem(j1,"col8","")
call LsRpt.SetItem(j1,"col9","")
if err = -1 then
rst.MoveFirst
mass = rst.getrows
for i1 = 0 to ubound(mass,2)
call LsRpt.InsertRow(j1)
call LsRpt.SetItem(j1,"col7",mass(0,i1))
call LsRpt.SetItem(j1,"col8",mass(1,i1))
call LsRpt.SetItem(j1,"col9",mass(3,i1))
call LsRpt.SetItem(j1,"col10",mass(2,i1))
call LsRpt.SetItem(j1,"col11",mass(5,i1))
call LsRpt.SetItem(j1,"col12",mass(6,i1))
j1=j1+1
next
end if
next

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

Сообщение Anderyt »

to Александр
хм... я тоже с такой проблемой столкнулся, как раз с отчетом 5-го типа, но подстановка переменной-объекта не спасает - все равно открывается вкладка Аргументы :-(
и как раз, такого эффекта нет у других отчетов, только у 5-го..

я был уверен, что все должно быть ок, если подставить переменную-объект, а тут - на тебе...

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

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

2 Anderyt
Так слушай, ставишь первым аргументом переменную типа объект с значением Empty и все, у меня сработало нормально

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

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

Сообщение Anderyt »

хм...
а теххелп сказал

Будем исправлять... Как только сделаем - сообщим.

и у меня не сработало с пустым объектом... хотя я может не так понял...
я сделал в действии еще одну переменную-объект Obj_empty, без всякого значения, поставил ее в функцию по запуску отчета - сейчас вообще функция не выполняется, выдает ошибку "значение объекта Obj_empty не установлено"
лучше день потерять, потом за пять минут долететь!
Юрий
Активный участник
Сообщения: 239
Зарегистрирован: 13 янв 2005, 14:30
Используемое ПО: Lotsia PDM PLUS LT
Откуда: Украина, Донецк
Контактная информация:

Сообщение Юрий »

В переменную нужно просто прилепить объект от фонаря и все.
Ответить