07.02.2011, 11:23 | #1 |
Участник
|
Получение кода виртуальной компании из SQL
При постройке отчетов в SSRS(обычных, без расширений AX2009) столкнулись с проблемой получения кода компании по которой надо делать выборку данных. Пользователь при запуске отчета указывает код реальной компании, но часть таблиц включены в виртуальные компании т.е. по сути нужна какая-то функция, которая по имени таблицы и коду компании которую указал пользователь вернет или тот же самый код, или код виртуальной компании.
Сейчас приходит в говову только создание новой таблицы с 3 полями - имя таблицы, код компании, код виртуальной компании и периодическое ее обновление джобом. может кто делал это более красиво? |
|
07.02.2011, 11:59 | #2 |
Участник
|
Существует системная таблица VirtualDataAreaList, которая содержит пары соответствия виртуальных и реальных компаний. Ее и можно использовать в запросах примерно таким образом.
tab1 - не виртуализирована tab2 - виртуализирована X++: select * from tab1 inner join tab2 on tab1.ID = tab2.ID -- -- and (tab1.dataAreaId = tab2.dataAreaId or exists(select 1 from VirtualDataAreaList vdal where vdal.virtualDataArea = tab2.dataAreaId and vdal.id = tab1.dataAreaId)) |
|
|
За это сообщение автора поблагодарили: trud (1). |
07.02.2011, 12:16 | #3 |
Administrator
|
Владимир, не усложняйте
trud, проблема известная, и Майкрософт даже писал о том, как её решать (примерно год назад). Вкратце: создайте View для таблиц, которые включены в виртуальную компанию, и используйте этот View в запросах. Подробности здесь: http://www.microsoft.com/downloads/e...c-802da5053a55
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
07.02.2011, 12:30 | #4 |
Участник
|
|
|
07.02.2011, 16:52 | #5 |
Administrator
|
Если Вас это так пугает, создайте view вообще для всех таблиц, которые используются в SSRS-запросах. Тогда никакие изменения в системе на работе отчётов не отразятся. Они будут работать вне зависимости от того, включена таблица в виртуальную компанию или нет.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
08.02.2011, 08:29 | #6 |
Участник
|
Добавление таблиц трансляции компании в запрос (в т.ч. и в виде вьюх) ухудшает план выполнения запросов. такой подход увеличивает и универсальность и время выполнения. Таблицы "завиртуаленные" для всех компаний лучше вообще "лишать" признака компании (SaveDataPerCompany = No).
|
|
08.02.2011, 11:25 | #7 |
Administrator
|
На счёт того, что это лучше - спорно. Всё-таки, от значительной части функциональности при этом отказываться приходится. Я бы это предложение сформулировал так: если возникают проблемы с производительностью, рассмотрите вариант с использованием SaveDataPerCompany = No вместо виртуальных компаний.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
08.02.2011, 11:36 | #8 |
Участник
|
Цитата:
Из известных мне минусов: 1. Могут быть проблемы с таблицами завязанными на Интеркомпани (они так же проявляются и при отсутствии лиц. ключа). 2. Большое кол-во "прямых SQL" запросов уже настроенных на работу с виртуальной компанией. Иногда лучше предотвратить возникновение проблемы, чем разбираться с ее последствиями |
|
08.02.2011, 12:27 | #9 |
Administrator
|
Извините, но поподробнее - в мануалах. Виртуальные компании сами по себе тоже являются полезной функциональностью.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
09.02.2011, 11:35 | #10 |
MCT
|
Кстати, а почему не используете, отчеты с расширением Dynamics Ax, там ведь можно делать достаточно расширяемые решения. Например
__________________
Axapta book for developer |
|