16.03.2011, 17:44 | #1 |
Участник
|
Не работает публикация отчетов в CRM. Помогите!!!!
Столкнулся с такой проблемой, разработал в Visual Studio 2008 отчет, вот скрины:
Т.е. в Visual Studio 2008 когда нажимаешь на Run (Выполнить отчет) он срабатывает нормально. Buld-ится, и Deploy-ится нормально без ошибок и варнингов. Затем когда пытаюсь эту RDL-ку загрузить в CRM в отчеты, то при запуске этого же отчета из среды CRM появляется ошибка. Причем из среды CRM этот отчет я запускал из под системного администратора со всеми возможными ролями. Уже замучался в интернете ничего на эту тему нет, на вашем сайте тоже. Даже не знаю куда и копать. Помогите пожалуйста. RDL-ку прилагаю. Последний раз редактировалось Dicora; 16.03.2011 в 17:46. |
|
16.03.2011, 17:53 | #2 |
Moderator
|
1. Используйте представления, а не сами базы! Для каждого объекта CRM в базе есть фильтрованное представление Filtered<ObjectName> на которое есть права у пользователей системы и у учетных записей служб. Возможно ваша проблема в этом.
2. Деплоили отчет через интерфейс CRM или из студии? Деплоить нужно через интерфейс CRM, так как отчет подвергнется дополнительным модификациям, в частности система пере подключит источник данных.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
За это сообщение автора поблагодарили: Dicora (1). |
16.03.2011, 20:02 | #3 |
Чайный пьяница
|
Кроме написанного Артёмом добавлю, что при разработке отчётов под CRM нельзя использовать Shared Datasources, а необходимо использовать строку подключения к базе в теле отчёта.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Dicora (1). |
17.03.2011, 02:10 | #4 |
Участник
|
А у меня вопрос, допустим на все сущности которые созданы в среде CRM (системные и настраиваемые) имеют фильтрованные представления.
Но у меня ещё есть таблица Salesplan, SalesplanData и Salesfact - которые я создал через SQL вручную, сюда по расписанию подкачиваются данные из 1С-ки, соответственно эти таблицы не имеют ничего общего с сущностями CRM-а и как следствие не имеют фильтрованных представлений. Я могу обращаться к ним в SQL-запросе или нет? и что делать в случае если нельзя. Как сделать фильтрованное представление и как сделать права на видимость этого представления всем пользователям системы. Я в визуал студию после того как в дизайнере отчетов настроил внешний вид и написал SQL запрос - нажал Project -> Build, затем Project->Deploy, после чего сохранил это всё как Save As... (в виде RDL-файла) и затем зашел в CRM нажал создать отчет и выбрать существущий файл (выбрал RDL-файл) - сохранил, затем запустил - и появляется ошибка. А если этот же отчет в Visual Studio запустить (нажав на Run) - то отчет работает так как надо и сразу запускается. Ещё вопрос, что значит Shared Data Source? и как добавить строку подключения в тело запроса? Заранее спасибо! |
|
17.03.2011, 03:59 | #5 |
Консультант-джедай
|
Цитата:
Сообщение от Dicora
Но у меня ещё есть таблица Salesplan, SalesplanData и Salesfact - которые я создал через SQL вручную, сюда по расписанию подкачиваются данные из 1С-ки, соответственно эти таблицы не имеют ничего общего с сущностями CRM-а и как следствие не имеют фильтрованных представлений.
Я могу обращаться к ним в SQL-запросе или нет? X++: Grant Select ON dbo.YourTable TO [NT AUTHORITY\NETWORK SERVICE] GO Цитата:
Ещё вопрос, что значит Shared Data Source? и как добавить строку подключения в тело запроса?
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
|
За это сообщение автора поблагодарили: Dicora (1). |
17.03.2011, 10:22 | #6 |
Участник
|
Я сделал как Вы просили, добавил права на таблицы, я так понял это нужно было добавить туда где у меня запрос SQL?
X++: Grant Select ON dbo.Salesplan TO [NT AUTHORITY\NETWORK SERVICE] GO Grant Select ON dbo.SalesplanData TO [NT AUTHORITY\NETWORK SERVICE] GO Grant Select ON dbo.Salesfact TO [NT AUTHORITY\NETWORK SERVICE] GO Grant Select ON dbo.OpportunityBase TO [NT AUTHORITY\NETWORK SERVICE] GO Grant Select ON dbo.OpportunityExtensionBase TO [NT AUTHORITY\NETWORK SERVICE] GO Grant Select ON dbo.New_trendBase TO [NT AUTHORITY\NETWORK SERVICE] GO Grant Select ON dbo.New_trendExtensionBase TO [NT AUTHORITY\NETWORK SERVICE] GO Grant Select ON dbo.New_departmentBase TO [NT AUTHORITY\NETWORK SERVICE] GO Grant Select ON dbo.New_departmentExtensionBase TO [NT AUTHORITY\NETWORK SERVICE] GO Grant Select ON dbo.SystemUserBase TO [NT AUTHORITY\NETWORK SERVICE] GO declare @unix_time_now int select @unix_time_now = DATEDIFF(s, 'Jan 1 1970',GETUTCDATE()) declare @unix_time_start2 int declare @unix_time_end2 int declare @unix_time_start int declare @unix_time_end int declare @D datetime set @D = getdate() select @unix_time_start2 = DATEDIFF(s, 'Jan 1 1970',DateAdd( Year , DateDiff(Year , 0, @D) , 0) ) select @unix_time_end2 = DATEDIFF(s, 'Jan 1 1970',DateAdd( day, -1, DateAdd( Year , DateDiff(Year , 0, @D) +1, 0)) ) select @unix_time_start = DATEDIFF(s, '01.01.1970', @aStartDate ) select @unix_time_end = DATEDIFF(s, '01.01.1970', @aEndDate ) select new_departments.New_name as Company, COALESCE( (select Sum(Salesplan.Price) from Salesplan where Salesplan.ParentSalesplanId = (select SalesplanId from Salesplan where @unix_time_now BETWEEN DateStart AND DateEnd and ParentSalesplanId is NULL) and Salesplan.CreatedBy = trend.OwningUser) , 0) as PlanCompany, new_trend.New_Department as GroupName, COALESCE ( (select Sum(Salesplan.Price) from Salesplan where Salesplan.ParentSalesplanId = (select SalesplanId from Salesplan where @unix_time_now BETWEEN DateStart AND DateEnd and ParentSalesplanId is NULL) and Salesplan.ManagerId = new_trend.New_systemuser_new_trend) , 0) as PlanGroup, Coalesce ( ( select Sum(Salesfact.Price) from Salesfact, OpportunityExtensionBase, OpportunityBase, SystemUserBase where Salesfact.DateFact BETWEEN @unix_time_start AND @unix_time_end and Salesfact.AgreementCode = OpportunityExtensionBase.New_Agreement_Code and OpportunityBase.OpportunityId = OpportunityExtensionBase.OpportunityId and ( (OpportunityBase.OwningUser = new_trend.New_systemuser_new_trend and OpportunityBase.OwningUser = SystemUserBase.SystemUserId) or (OpportunityBase.OwningUser = SystemUserBase.SystemUserId and SystemUserBase.ParentSystemUserId = new_trend.New_systemuser_new_trend) ) ) , 0) as FactGroup, new_trend.New_name as Department, COALESCE ( (select Sum(SalesplanData.Price) from SalesplanData where SalesplanData.SalesplanId = (select SalesplanId from Salesplan where @unix_time_now BETWEEN DateStart AND DateEnd and ParentSalesplanId is NULL) and SalesplanData.DepartmentId = new_trend.New_trendId and SalesplanData.Period <> 5 and SalesplanData.Period is NOT NULL and SalesplanData.ProductstypeId is NOT NULL and SalesplanData.ManagerId is NOT NULL) , 0) as PlanDepartment, Coalesce ( ( select Sum(Salesfact.Price) from Salesfact, OpportunityExtensionBase, OpportunityBase, SystemUserBase where Salesfact.DateFact BETWEEN @unix_time_start AND @unix_time_end and Salesfact.AgreementCode = OpportunityExtensionBase.New_Agreement_Code and OpportunityBase.OpportunityId = OpportunityExtensionBase.OpportunityId and ( (OpportunityBase.OwningUser = new_trend.New_systemuser_new_trend and OpportunityBase.OwningUser = SystemUserBase.SystemUserId) or (OpportunityBase.OwningUser = SystemUserBase.SystemUserId and SystemUserBase.ParentSystemUserId = new_trend.New_systemuser_new_trend) ) ) , 0) as FactDepartment, new_trend.New_trendId as DepartmentId, new_trend.New_systemuser_new_trend as GroupUserId, new_departments.New_departmentId as CompanyId, Coalesce ( (select Sum(O.EstimatedValue_Base) as Sum from OpportunityBase as O, OpportunityExtensionBase as OBase where O.OpportunityId = OBase.OpportunityId and DATEDIFF(s, '01.01.1970 00:00:00', O.ModifiedOn) BETWEEN @unix_time_start and @unix_time_end and O.CloseProbability >= 80 and O.statecode = 0 and OBase.New_blid = new_trend.New_trendId ) ,0) as OpportunityClosedSum, Coalesce ( (select Sum(O.EstimatedValue_Base) as Sum from OpportunityBase as O, OpportunityExtensionBase as OBase where O.OpportunityId = OBase.OpportunityId and DATEDIFF(s, '01.01.1970 00:00:00', O.ModifiedOn) BETWEEN @unix_time_start and @unix_time_end and O.CloseProbability < 80 and O.CloseProbability >= @aProbability and O.statecode = 0 and OBase.New_blid = new_trend.New_trendId ) ,0) as OpportunityOpenSum from New_departmentExtensionBase as new_departments left outer join New_departmentBase as departments on departments.New_departmentId = new_departments.New_departmentId and departments.statecode = 0 left outer join New_trendExtensionBase as new_trend on new_trend.New_buid = departments.New_departmentId left outer join New_trendBase as trend on new_trend.New_trendId = trend.New_trendId and trend.statecode = 0 where trend.statecode is NOT NULL and departments.statecode is NOT NULL and new_departments.New_name NOT LIKE '%СНГ%' order by new_departments.New_name, new_trend.New_Department, new_trend.New_Name Но появляются ошибки. |
|
17.03.2011, 10:24 | #7 |
Участник
|
Также я удалил справа DataSource1.rds в Shared Data Source
|
|
17.03.2011, 10:29 | #8 |
Чайный пьяница
|
Этот запрос надо запустить один раз, чтобы дать права на таблицы и не более.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
17.03.2011, 10:35 | #9 |
Участник
|
а где его запустить в SQL-е? вручную???
|
|
17.03.2011, 10:46 | #10 |
Участник
|
Запустил эти запросы
GRANT Select и т.д. ко всем используемым таблицам в запросе которые я использую в SQL Management Studio единожды. затем сохранил отчет в Visual Studio и постандартной схеме выгрузил его в CRM. та же ошибка X++: .
"dsSalesPlanFact".
, |
|
17.03.2011, 11:02 | #11 |
Консультант-джедай
|
Включите подробные ошибки:
откройте Management Studio и подключитесь к экземпляру Reportig Services (не Database Engine) щелкните правой кнопкой по руту и выберите свойства, перейдите к Advsnced и включите EnableRemoteErrors. Полсе этого вместо Вы должны увидите вменяемое описание ошибки
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
17.03.2011, 12:09 | #12 |
Участник
|
Я уже гуглил эту тему и мне тоже писали о том чтобы я включил ошибки именно так как вы и сказали, но я может быть совсем тупой но у меня нету этой возможности в SQL Management Studio.
я ведь всё правильно сделал?? 1. Подключился к Reporting Services (не Database Engine) 2. Кликнул на Root-a (Кстати на папки которые внутри Home и другие тоже кликал - там возможностей ещё меньше в Properties), выбрал Properties и Advanced - там нету. |
|
17.03.2011, 12:57 | #13 |
Консультант-джедай
|
В 2005 они включаются по другому http://msdn.microsoft.com/en-us/libr...v=sql.90).aspx
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
17.03.2011, 14:32 | #14 |
Участник
|
Сделал как вы просили.
права включил Также включил EnableRemoteErrors, через строку Cmd. Затем снова опубликовал отчет, но ошибка появляется всё равно. |
|
17.03.2011, 14:45 | #15 |
Консультант-джедай
|
Под какой учеткой у Вас работает апликейшн пул сайта CRM?
И Вы писали что выбираете данные из нескольких таблиц. На другие таблицы не ругается?
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
17.03.2011, 17:06 | #16 |
Участник
|
Бинго! Ошибка решена!
Оказывается дать привилегии на Select пользователю NT AUTORITY\NETWORK SERVICE применительно к пользовательским таблицам (тем которые я создавал сам через MSSQL) нужно ещё дать привилегии всей базе целиком, а именно: причем не только по пользователю NT AUTORITY\NETWORK SERVICE, дать права на SELECT, но и по оставшимся другим 3-м пользователям (PrivReportGroup и т.д.) - тоже. |
|
17.03.2011, 19:59 | #17 |
Чайный пьяница
|
Проще и органичнее было создать необходимые кастомные объекты в CRM, импортировать данные из 1С в таблицы созданных объектов. Это решает все ваши проблемы с доступом к объектам базы
Плюс такого рода кастомизация - поддерживаемая, а ваша - ужасно ансапортная.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
|