Добрый день! Возник следующий вопрос:
Исходные данные
Есть таблица со следующими полям : AccountID, ContractID, CountMin , DataCall.
Задача заключается в том чтобы построить из этих данных таблицу вида
Наименование контрагента, Город контрагента, Номер договора, Дата звонка 1 , Дата звонка 2 .... Дата звонка n
и на пересечении даты и контрагента вставить сумму по минутам за данную дату. Уже мозг сломал не знаю как в XRM данную таблицу сделать. Cross отчет в фаст репорте не вывозит такое количество записей. Зависает наглухо. Помогите кто сталкивался
Нравится
Два варианта:
1) создать сервисы SelectQuery и Dataset, указать в нем только те колонки, которые нужны всегда (контрагент, договор и т.д.). Колонки с датой звонка создавать в SelectQuery перед его открытием (как Колонка с текстом SQL), в которой прописывать необходимый подзапрос. В Dataset над этим SelectQuery также надо добавлять колонки, типа IntegerField. Если данные надо вывести в гриде - аналогично создавать колонки в сервисе окна с гридом.
Следует учесть, что у сервера БД может быть ограничение на количество колонок в запросе (или таблиц).
2)создать сервис MemoryDataset, в котором перед открытием создавать требуемое количество колонок, а при заполнении - для каждого дополнительного поля вызывать запрос, который вычисляет количество. Будет работать медленнее чем первый вариант, но нет ограничений на количество колонок.
Валерий а можно немного по подробнее про первый вариант? плохо понял как это сделать?
Попробую схематично на примере. Допустим есть некоторый sq_Example и над ним ds_Example, в котором определены некоторые поля, которые всегда выбираются из базы. Также есть окно wnd_ExampleGridArea, в котором выводятся данные из этого датасета.
Тогда в окне, непосредственно перед открытием датасета, делаете примерно следующее:
// ссылки на объекты в окне var ds_Example = dlData.Dataset; var sq_Example = ds_Example.SelectQuery; var wnd_ExampleGridArea = Self; var DataGridView = wnd_ExampleGridArea.ComponentsByName('grdData').ActiveView; // допустим 1 и 2 января var d1 = new Date(2011, 0, 1); var d1 = new Date(2011, 0, 2); var a = new Array(d1, d2); // пройдемся по массиву с датами for (var i = 0; i < a.length; i++) { // создаем колонки в sq_ var alias = 'col' + i; var c = sq_Example.Items(0).Columns.CreateSQLTextColumn(); c.ColumnAlias = alias; // тут нужно корректный запрос, с использованием даты из массива: c.SQLText = '(select sum(aaa) from tbl_Minutes where () and () )'; sq_Example.Items(0).Columns.Add(c); var f = ds_Example.DataFields.CreateFloatDataField(); f.Name = alias; f.Caption = a[i]; ds_Example.DataFields.Add(f); var Column = wnd_ExampleGridArea.CreateComponent('DataGridColumn', DataGridView.Name + '_' + alias); Column.DataFieldName = f.Name; DataGridView.AddItem(Column); }
Это гениально!)все заработало!) Спасибо большое) Сейчас приведу в красивый вид и будет вообще здорово.:smile: