Добрый день. Возникла проблема с фильтром отчета в разделе. В запросе прописан фильтр пользователя, запрос прикреплен к отчету типа Excel. А при выборе отчета в разделе, фильтр не всплывает, выдается сразу отчет в Excel, естественно не фильтрованный. В чем может быть проблема?

Нравится

1 комментарий

Фильтр будет отображаться только в том случае, если отчет строится по всем записям.
Проверьте чему установлено свойство "Тип фильтрации" отчета.

Показать все комментарии

Здравствуйте,

подскажите, пожалуйста, как увеличить разрядность числа в отчете печатной формы договора Word? Например, в таблице продуктов отчета поле количество с двумя нулями, необходимо сделать 3. В самом запросе для отчета разрядность 4, в детали продукты тоже 4.

Заранее благодарен.

Нравится

3 комментария

Добрый день!

В таком случае будет логично увеличить именно размер поля. Увеличьте точность поля в tbl_Contract и ds_Contract.

количество разрядов после запятой в запросе (а значит и в отчете) настраивается тут

точность

Спасибо, за ответы

Показать все комментарии

Здравствуйте. Есть ли в террасофте какие-нибудь инструменты для подсчёта итогов?
Например, мне нужно сгруппировать оборудование по типу + районам и вывести количество. Где это делается? Я пока создал вручную view, и сделал на основе его таблицу в TS (+select query, +dataset, +grid).
Может, есть более удобные инструменты?

Нравится

14 комментариев

Добрый день!

Если используете версию 3.2 и выше, то это возможно через пользовательские запросы.
Нужно перейти в раздел [Запросы], добавить новый, выбрать таблицу и необходимые поля вытянуть в область построения.
Для колонок также доступны итоги и группировки.
Также запрос может быть отображен в виде отдельной детали. В таком случае, просто установите соответствующую опцию в свойствах запроса (карточке). Данный функционал подробно описан в руководствах пользователя.

Здравствуйте Ринат!

Клиентское приложение Terrasoft позволяет настроить раздел "Итоги". То есть на основании пользовательского запроса представить нужную информацию в виде реестра записей.
Для настройки перейдите в раздел "Настройка итогов" меню "Инструменты" и нажмите кнопку "Добавить".
1
Далее следует ввести заголовок и добавить блок "Реестр запросов". Ввести название и выбрать либо добавить новый пользовательский запрос, на основании которого будут формироваться итоги.
2
В случае создания нового запроса, следует выбрать раздел либо справочник для построения запроса, и добавить требуемые поля во вкладку "Данные". При необходимости, на вкладке "Фильтр" можно также добавить фильтры для запроса.
3
После этого сохраняем запрос, сохраняем страницу итогов и перезагружаем клиентское приложение Terrasoft.
В результате, в разделе "Итоги" появится вкладка с настроенным итогом. Также существует возможность для реестра записей отобразить итоговое количество/сумму.
45

На основании созданного пользовательского запроса, кроме реестра записей, можно построить различные виды графиков, которые могут отображаться на той же странице итогов.

Спасибо, а можно как-нибудь группировать данные по районам?
Мне нужно количество оборудования по каждому району. Или составлять для каждого района запрос с фильтром?

В запрос нужно вытянуть колонку с наименованием района (справочник), колонку для подсчета количества. Далее в построителе запросов изменяете колонку количества через меню "Изменить", там в свойствах можно указать "Группировать как".

Ринат, в случае, если Вам нужны только итоговые цифры по каждому району, их можно вывести в виде графика либо отдельного реестра.

Если Вам нужно просто сгруппировать реестр реузльтатов по отдельным районам, можно сделать это в запросе реестра, как порекомендовала Татьяна.

Спасибо за ответы, а если мне нужно ещё и по типу оборудования сгруппировать?
Т.е. должна получиться таблица:
район | количество оборудования 1-го типа | количество оборудования 2-го типа | количество оборудования 3-го типа | количество оборудования 4-го типа

Ринат, запросы допускают группировку по нескольким колонкам.

В случае, если районы и типы оборудования у Вас статичны и не меняются, можно реализовать их прямо в соответствующем разделе, создав фильтры и представления, либо фильтры + динамические группы.

У меня получается так:
запрос
Как 1 колонку фильтровать по типу ONT, а вторую по OADM?
И типы оборудования, и районы достаточно часто добавляются :(

Ринат, уточните, пожалуйста, Вам необходимо отcортировать или отфильтровать колонки?

Сортировка возможна по нескольким значениям, фильтровать по нескольким значениям можно только весь запрос, а не отдельные колонки.

Анна,
Нужно отфильтровать.
Понятно, спасибо, буду делать view.

И снова здравствуйте.
Можно ли "Итоги" выводить по умолчанию? Без нажатия Ctrl+U?

Отображения поля "итогов" сохраняется в профиле. То есть, если Вы один раз вывели итоги, то зайдя заново в программу они у Вас будут отображаться.
В противном случае стоит проверить UseProfile.

Ринат, для того, чтобы включить вывод итогов по умолчанию, необходимо в карточке грида установить свойство IsSummaryVisible в true

01

и указать тип итогов для той колонки, в которой их нужно выводить:

01

Спасибо! Разобрался.

Показать все комментарии

Добрый день! Возник следующий вопрос:
Исходные данные
Есть таблица со следующими полям : AccountID, ContractID, CountMin , DataCall.
Задача заключается в том чтобы построить из этих данных таблицу вида
Наименование контрагента, Город контрагента, Номер договора, Дата звонка 1 , Дата звонка 2 .... Дата звонка n
и на пересечении даты и контрагента вставить сумму по минутам за данную дату. Уже мозг сломал не знаю как в XRM данную таблицу сделать. Cross отчет в фаст репорте не вывозит такое количество записей. Зависает наглухо. Помогите кто сталкивался

Нравится

5 комментариев

Два варианта:
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:

Показать все комментарии

Здравствуйте, не понятно почему, но при экспорте из отчета FastReport в Excel появляются дублирующиеся строки. При выполнении запроса дубли не появляются. Вот запрос

SELECT
        [tbl_Contract].[ContractNumber] AS [ContractNumber],
        [tbl_Contract].[CentrIncomeID] AS [CentrIncomeID],
        (SELECT TOP 1
                [tbl_AccountCommunication].[Number] AS [Number]
        FROM
                [dbo].[tbl_AccountCommunication] AS [tbl_AccountCommunication]
        WHERE([tbl_AccountCommunication].[CommunicationTypeID] IN ('C224AC38-E26F-4460-900C-3FE12F61CF21') AND
                [tbl_AccountCommunication].[AccountID] = [tbl_Contract].[CustomerID])) AS [MailNumber],
        [tbl_Contract].[DetalisationSend] AS [DetalisationSend],
        [tbl_Contract].[ContractTypeID] AS [ContractTypeID],
        [tbl_Contract].[SubAgentID] AS [SubAgentID]
FROM
        [dbo].[tbl_Invoice] AS [tbl_Invoice]
LEFT OUTER JOIN
        [dbo].[tbl_Contract] AS [tbl_Contract] ON [tbl_Contract].[ID] = [tbl_Invoice].[ContractID]
WHERE([tbl_Contract].[ContractTypeID] = 'ED7FD7B2-46A7-4583-8FB4-37356272EB8A' AND
         ((MONTH(InvoiceDate) = MONTH(DATEADD(MONTH, -1, GETDATE())) AND YEAR(InvoiceDate) = YEAR(DATEADD(MONTH, -1, GETDATE()))) OR
(MONTH(InvoiceDate) = MONTH(GETDATE()) AND YEAR(InvoiceDate) = YEAR(GETDATE()))))
ORDER BY ContractNumber

Нравится

2 комментария

Да, есть такой глюк. У меня есть подозрения что это происходит при подкачке данных. Т.е. по умолчанию данные выгружаются партиями по 20 шт. поэтому, когда грузится следующая партия происходит дублирование данных. Я это решил следующим образом. В sq_ и у датасета в ФастРепорте FetchRecordsCount ставлю 99999, больше ФастРепорт не позволяет.

Евгений, спасибо!) Получилось!)

Показать все комментарии

Здравствуйте.

Подскажите как обратиться в fastreport к общему итогу в объекте Cross-Tab object?
В этом объекте на основе созданного запроса по разделу Операции выводятся операции по статьям в разрезе доходов и расходов, а также сгруппированные по неделям.
При формировании отчета пользователь задает начальный остаток по кассе. А в итоге хотелось бы получить расчетное сальдо (введенный остаток + общий итог в объекте Cross-tab) и тоже его вывести в отчет.

Нравится

1 комментарий

Виктория, по Вашему вопросу нашёл эту ссылку. Возможно, она поможет или хотя бы натолкнёт на мысль. Обратите внимание на методы IsGrandTotalRow и IsGrandTotalColumn.

Показать все комментарии

При попытки удалить пользовательские отчеты Word выдает ошибку:
"Не удалено 1 из 1 записей
Нет возможности:1
Связанные записи могут существовать в следующих таблицах:
Отчет в группе (tbl_ReportInGroup)
Права доступа к отчетам (tbl_ReportRight)"

Нравится

3 комментария

Проверьте в Terrasoft Administrator, установлены ли для связей FReportRightRecordID таблицы tbl_ReportRight и FReportInGroupReportID таблицы tbl_ReportInGroup признаки "Каскадная связь". Попробуйте снять эти галочки, установить заново и пересохранить таблицы. После этого перезапустите программу Terrasoft и попытайтесь удалить отчёт.

Если это не решит проблему, перед удалением отчёта запустите профайлер, попробуйте удалить отчёт, скопируйте из профайлера запрос на удаление, который при этом отправляется на сервер, и попробуйте выполнить его средствами СУБД. Если отчёт не удаляется из-за связанных записей, возникнет сообщение о том, в какой таблице находится запись, связанная с отчётом. В зависимости от таблицы нужно будет либо удалить из неё все записи, связанные с отчетом, либо обнулить значения в поле связи.

Спасибо. помогло №1)

Насколько я помню такие ошибки (удаления) пишутся в лог. Достаточно туда посмотреть, чтобы понять какие таблицы содержат ссылки.

Показать все комментарии

Доброго времени суток!

Подскажите, пожалуйста, как правильно реализовать такое действие при разработке отчета в разделе Операции:
дать возможность пользователю при открытии отчета заполнять данные об остатках по всем кассам, потом передать эти данные в отчет (основное "тело" отчета - это кросс-таблица в разрезе по кассам), и вывести результаты, которые равны "Итоги по каждой кассе + введенные остатки по кассам"

Заранее спасибо.

Нравится

2 комментария

Виктория, посмотрите на реализацию базовых отчётов, которые используют окно фильтрации, отличное от wnd_ReportFilters. Например, отчёт "Анализ конкурентов", который использует в качестве окна фильтрации wnd_ReportOpportunitiesDateFilter. По аналогии с этим отчётом, Вы можете создать собственное окно фильтрации, в обработчике btnOKOnClick которого запускать формирование отчёта, предварительно передав ему все необходимые параметры.

Значения из окна фильтрации отчёту можно передать, например, так:

	// получаем значения из датасета окна фильтрации
	var Dataset = dlData.Dataset;
	var FromDate = Dataset.Values('From');
	var ToDate = Dataset.Values('To');
 
	// включаем фильтры датасета (если необходимо)
	var ReportDatasetUSI = <USI датасета>;
	var ReportDataset =	ReportPreviewer.DatasetByUSI(ReportDatasetUSI);
	ApplyDatasetFilter(ReportDataset, 'FromDate', FromDate,
			FromDateFilterEnabled);
	ApplyDatasetFilter(ReportDataset, 'ToDate', ToDate,
			ToDateFilterEnabled);
 
	// передаём параметры в сервис отчёта
	ReportPreviewer.Report.Attributes('FromDate') = FromDate;
	ReportPreviewer.Report.Attributes('ToDate') = ToDate;

В форме отчёта к этим параметрам можно обратиться так: [FromDate]

Спасибо за ответ. Попробую так и сделать

Показать все комментарии

Всем привет.

Собственно, вопрос в заголовке. Поиск показал, что есть решение для отчетов в Word, а вот о Fast Report я не нашел ни слова. Наверняка должно быть решение.

Спасибо.

Нравится

7 комментариев

Должен помочь поиск по функции ShowSingleRecordReport

Спасибо, Сергей!

Не могу понять, что мешает системе включить фильтр по ID:

	var OrderID = dlData.Dataset.Values('ID');
	var Report = Services.GetNewItemByUSI(ReportCode);
	var ReportPreviewer = Services.GetNewItemByUSI('wnd_BaseFastReportPreview');
	var ReportPreviewerComponent = ReportPreviewer.Attributes('ReportPreviewer');
	var ReportDataset = Services.GetNewItemByUSI(FilteredDatasetCode);
	SetAttribute(ReportPreviewer, 'Report', Report);
	ApplyDatasetFilter(ReportDataset, 'ID', OrderID, true);
	ReportPreviewer.Build();
	ReportPreviewer.Prepare();
	ReportPreviewerComponent.DatasetByUSI(FilteredDatasetCode) = ReportDataset;

То есть, получаю отчёт по первой записи в датасете вместо нужной, запрос в профайлере ловлю без условий выборки. ID перед включением фильтра правильный. Отчёт в системе зарегистрирован.

Отчётов у меня несколько типов и, что удивительно, на одном из них вызов отчета из скрипта замечательно работает, включая фильтр. Найти какие-то отличия этого отчета от остальных не удалось.

Версия клиента 3.2.043. Обряд с бубном провожу по инструкции. :D

Сергей, можно уточнить: в основном запросе Вашего отчёта главная таблица - это таблица раздела, или другая? Если второе, попробуйте переписать запрос таким образом, чтобы главной таблицей запроса была таблица раздела. Например, для раздела "Контакты":

select ... 
from tbl_Contact 
  left outer join tbl_ContactAddress...

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Да, главная таблица — таблица раздела, tbl_Opportunity.

Я так понимаю, Вы написали свою функцию для вызова отчёта? Возможно, результат её работы перекрывается базовым функционалом. Для установления причины проблемы необходима дополнительная информация: откуда и каким образом вызывается отчёт. Возможно, понадобятся сервисы отчёта либо удалённый доступ для анализа проблемы, если это возможно.

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Да. На форму wnd_OpportunitiesGridArea добавлена кнопка с таким кодом:

function btnPrintOnClick(Control) {
	var ReportCode = 'fr_buyNaturalPersonOther';
	var FilteredDatasetCode = 'ds_buyNaturalPersonOther';
	var OrderID = dlData.Dataset.Values('ID');
	var Report = Services.GetNewItemByUSI(ReportCode);
	var ReportPreviewer = Services.GetNewItemByUSI('wnd_BaseFastReportPreview');
	var ReportPreviewerComponent = ReportPreviewer.Attributes('ReportPreviewer');
	var ReportDataset = Services.GetNewItemByUSI(FilteredDatasetCode);
	SetAttribute(ReportPreviewer, 'Report', Report);
	ApplyDatasetFilter(ReportDataset, 'ID', OrderID, true);
	ReportPreviewer.Build();
	ReportPreviewer.Prepare();
	ReportPreviewerComponent.DatasetByUSI(FilteredDatasetCode) = ReportDataset;
}

Сервисы отчета в аттаче.

Сергей, не удалось воспроизвести описанную Вами проблему. Пытался воспроизвести на бинарных файлах версии 3.2.0.43 - отчёт всегда строится по нужной записи реестра, независимо от того, вызывается ли он из карточки редактирования или же напрямую из раздела (кстати говоря, если отчёт должен вызываться только из карточки редактирования, нет необходимости регистрировать его в системе). Единственное, что могу сказать, - в предоставленном Вами коде названия сервисов fr_buyNaturalPersonOther и ds_buyNaturalPersonOther, в то же время в предоставленных Вами сервисах те же названия - fr_BuyNaturalPersonOther и ds_BuyNaturalPersonOther. Возможно, в этом проблема?

Олег Лабьяк,
разработчик,
3-я линия Службы поддержки Terrasoft.

Показать все комментарии

Создал отчет в экселе на основании таблицы документ. Перенес туда всего 5 полей - Заголовок, Дата, Ответственный, Номер и Состояние

Решил сделать фильтр пользователя - в настройках выбрал чтобы можно было выбирать документы в заданный промежуток времени. В Итоге, какие бы значения для даты я не выбирал, когда создаю отчет, всегда выпадает полный список документов... То бишь фильтр вообще не работает.. Подскажите плиз, в чем тут может быть дело??

Нравится

5 комментариев

Евгений, если используете версию 3.3.0, то попробуйте загрузить в конфигурацию сервис, который прикреплен к сообщению, перезапустить Terrasoft и проверить работу.

Ага, заработало. Спасибо, Татьяна.
А почему тогда этот сервис не шел с нашей конфигурацией? Он был недавно исправлен?

Евгений, у Вас (я так вижу) Terrasoft Press? Какая сборка?

--
www.it-sfera.com.ua

"Виталий Ковалишин aka samael" написал:Евгений, у Вас (я так вижу) Terrasoft Press? Какая сборка?

3.3.0.61 Да, Press

Спасибо, загрузим исправления в базовую версию.

--
www.it-sfera.com.ua

Показать все комментарии