Как вы знаете для Microsoft Dynamics CRM можно создавать отчеты, которые будут доступны для определенных типов записей: контактов, организаций, заказов и др. Для это необходимо использовать фильтрованные представления в базе данных: FilteredContact, FilteredAccount … и указать в настройке отчета необходимые данные в пунктах: «Связанные типы записей» и «Отобразить в».

Например, такой запрос:

select name
from FilteredAccount CRMAF_FilteredAccount

будет трансформировать системой в запрос вида

select name
from FilteredAccount CRMAF_FilteredAccount
where CRMAF_FilteredAccount.accountid = '{0000000-0000-0000-0000-000000000000}'

т.е. идентификатор выбранной записи будет подставлен автоматически.

Проблема может возникнуть, когда в вашем отчете используется несколько DataSet. Почему-то идентификатор записи будет передаваться только в 1й DataSet, а в остальные нет. Поэтому если есть необходимость использовать полученный идентификатор в нескольких DataSet, то придется выполнить следующие шаги:

Читать полностью »

На досуге занимался отчетами и собрал несколько полезных примеров кода на T-SQL, которые можно использовать в отчетах для Microsoft Dynamics CRM 4.0.
1. Получение дня недели

 CASE DATEDIFF(DAY,0, createdon)%7
WHEN 0 THEN 'Понедельник'
WHEN 1 THEN 'Вторник'
WHEN 2 THEN 'Среда'
WHEN 3 THEN 'Четверг'
WHEN 4 THEN 'Пятница'
WHEN 5 THEN 'Суббота'
WHEN 6 THEN 'Воскресенье'
END as 'Дата, день недели'

2. Функция для получения списка фамилий контактов через точку с запятой. Параметры: guid организации.
Основную работу выполняет стандартная функция COALESCE, которая позволяет объединить строки через разделитель.

CREATE FUNCTION [dbo].[GetContactList](@AccountID varchar(40))
RETURNS varchar(max) AS
BEGIN
DECLARE @StringList varchar(max)
SELECT @StringList = COALESCE(@StringList + '; ', '') + c.fullname
from account a
left join contact c
	on c.parentcustomerid = @AccountID
IF @StringList IS NULL
SET @StringList = 'Нет контактов'
RETURN @StringList
END

Пример вызова:

[DB_Name].[dbo].[GetContactList](accountid) as 'Контакты'

Результат : Иванов; Петров; Сидоров

3. Конвертирование даты в формате дд.мм.гггг
3.1 T-SQL

(CONVERT(varchar(10),createdon, 104)

3.2 в SQL Server Business Intelligence Development Studio: Format(Parameters!startdate.Value,»dd.MM.yyyy»)

4. Форматирование поля типа money, float с разрядами
Format(Sum(Fields!Сумма.Value),»### ### ##0.0#»)

Прошлая небольшая подборка здесь: Полезные SQL-функции для использования в отчетах MS CRM

Давно задумывался о том, как получить значение picklist в отчет. Сразу решения не нашел и пользовался очень громоздкой и не гибкой конструкцией типа:

SELECT CASE picklist
    WHEN '1' THEN 'Перезвонить'
    WHEN '2' THEN 'Первая встреча'
    WHEN '3' THEN 'Встреча'
    END AS NextTask

Оказывается все гораздо проще – к имени пиклиста достаточно добавить name, как и с lookup. Т.е. вместо piclist написать picklistname
Плюс значения пиклистов хранятся в таблице StringMap, поэтому возможен и такой вариант

SELECT s.value
FROM AccountBase a
JOIN StringMap s
ON s.objecttypecode = 1
AND a.customertypecode = s.attributevalue
AND s.attributename = 'customertypecode'
WHERE a.accountid = <GUID>

Найдено здесь: http://axforum.info/forums/showthread.php?p=217586#post217586

В предыдущем посте описал, как можно работать с «Расширенным поиском» в MS CRM 3.0. Очень хороший инструмент, но все же задачи посложнее с его помощью решить не удастся.
Поэтому необходимо создавать отчеты с помощью Visual Studio. Для этого необходимо знать T-SQL, установить Visual Studio 2003 или 2005 (для MS CRM 3.0 рекомендуют VS 2003) и на сервер с MS CRM поставить Report Server (если такого еще нет).
Примечание: если ставить VS 2003 после установки MS CRM, то в выборе проектов нет Business Solution -> Report Project. Решение очень простое: необходимо переставить Report Server он идет вместе с диском CRM, укажите существующую базу или новую (не забудьте сделать backup)

Поехали: Читать полностью »


© 2009-2010 Microsoft Dynamics CRM | Авторы: Афендиков Константин и Головчан Екатерина |