14.09.2006, 07:48 | #1 |
Участник
|
фильтр CRMAF_ в отчетах
добрый день.
при разработке отчета в RSS для CRM необходимо использовать 2 набора данных, которые используют фильтр CRMAF_Filtered<EntityName>. первый датасет получает id объекта и передает его во второй, который, собственно, выводит всю необходимую информацию. вот примеры запросов наборов данных: 1. SELECT TOP 1 invoiceid FROM FilteredInvoice СRMAF_FilteredInvoice 2. SELECT invoicenumber, name FROM FilteredInvoice WHERE (invoiceid=@CRM_InvoiceID) @CRM_InvoiceID - скрытый параметр, который содержит id объекта. насколько я понял в результате должны быть выведены сведения по тому счету, из которого отчет был запущен. после размещения такого отчета через CRM при запуске выдается следующая ошибка An error has occurred during report processing. (rsProcessingAborted) Get Online Help Cannot set the command text for data set 'DataSet1'. (rsErrorSettingCommandText) Get Online Help Error during processing of the CommandText expression of dataset ‘DataSet1’. (rsQueryCommandTextProcessingError) Get Online Help DataSet1 - набор данных, где запрашивается id объекта. причем если в запросе убрать alias СRMAF_FilteredInvoice ошибки нет. но, естественно, отчет работает неверно, т.к. возвращаемый запросом id не соответствует id выбранному счету. причем если использовать подотчет все работает как и должно. вопрос: что это за ошибка? можно ли подробнее о префиксе CRMAF и как с ним работать? заранее благодарен. |
|
21.09.2006, 08:22 | #2 |
Участник
|
up ))
|
|
10.10.2006, 06:56 | #3 |
Участник
|
Нужно использовать:
DECLARE @SQL nVarchar(4000) 'SELECT TOP 1 invoiceid FROM ' & @СRM_FilteredInvoice EXECUTE(@SQL) Так должно получиться |
|
11.12.2006, 10:56 | #4 |
Участник
|
Цитата:
параметр @CRM_FilteredInvoice через CRM отрабатывается. и как мне теперь полученый id счета передать в качестве параметра в другой датасет? Ибо обратиться к этому полю в дизайнере отчета не могу, т.к. запрос составной. если бы было SET @SQL = 'SELECT TOP 1 invoiceid FROM FilteredSalesOrder' тогда дизайнер отчета к полю invoiceid обращается, а так нет. (( P.S.: извиняюсь за столь мгновенный ответ, тогда придумал другое решение, а вот сейчас опять эта проблемка всплыла Последний раз редактировалось kras; 12.12.2006 в 07:58. Причина: неверная формулировка |
|
15.12.2006, 07:35 | #5 |
Участник
|
Доброго!
Придумал решение для этой задачки. Только не улыбайтесь )) Вобщем в дизайнере отчетов объявляем параметр CRM_FilteredInvoice. При запуске отчета из карточки счета он будет содержать следующую строку: select invoice.* from FilteredInvoice as invoice where (invoice.invoiceid = N'{9E6B4647-077A-DB11-8591-00112F8E3A33}')Следовательно необходимо выдернуть этот GUID. создаем еще один параметр CRM_invid, значение которого по умолчанию будет =Mid(Parameters!CRM_FilteredInvoice.Value,StartIndex,38)т.о. вырезаем из строки id счета. теперь его можно использовать в других датасетах. НО есть один (хотя скорее всего больше) недостаток: когда пользователь изменяет фильтр по умолчанию, изменяется и значение параметра CRM_FilteredInvoice. Поэтому выдергивать GUID приведенным выше способом не рационально. необходимо реализовать поиск id в строке по шаблону. вот такая вот ерундовина. если у кого есть вариант попроще, напишите пожалуйста. Последний раз редактировалось kras; 15.12.2006 в 07:57. |
|
15.12.2006, 12:44 | #6 |
Участник
|
поиск GUID в строке (Visual Basic)
создаем в отчете функцию, которая будет искать в любой строке соответствие id: Public Function getGUID(strin As String) As Stringзатем значению параметра CRM_invid присваиваем: =Code.getGUID(Parameters!CRM_FilteredSalesOrder.Value) |
|