Вопрос

Добрый день!
Подскажите, пожалуйста, почему не высчитывается сумма по столбцу?
В MasterData вывожу итоговую сумму столбца DetailData.
[SUM([ds_RD07_AP_ProjectManHour."EstimatedManHour"], DetailData2)]

У меня такой же вопрос

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

Оказалось, по какой-то причине, нельзя вывести итоги в МasterData. В Footer они вывелись.

Для корректного вычисления необходимо написать скрипт:
[SUM([<ds_RD07_AP_ProjectManHour."EstimatedManHour">], DetailData2)]

Ссылка на документацию Fast Report по агрегатным функциям: Aggregate functions

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте, при формировании отчета FastReports, некоторые записи в отчете дублируются, некоторые отсутствуют, тогда как в фильтре у данного пользователя записи отображаются корректно. с Чем может быть связан данный сбой?
Terrasoft XRM 3.3.2.252

У меня такой же вопрос

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

Здравствуйте.
Что за отчет? Базовый (коробочный)?

дублируются записи в отчетах со сквозной нумерацией. с Чем может быть связан данный сбой?
Terrasoft XRM 3.3.2.252

Татьяна, вероятно некорректно настроен запрос на построение отчета.

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

Скажите, что именно отобразилось не так? А ещё можно попробовать импортировать в PDF или BMP и уже их печатать.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!

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

У меня такой же вопрос

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

Здравствуйте, Людмила!

Видео-уроки по построению отчетов FastReport отсутствуют, но есть несколько подробных инструкций с примерами.

Прикрепляю их к сообщению.

Спасибо большое!

Добрый день. А где бы эти прикрепленные инструкции найти?

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день, всем!

Помогите пожалуйста с отчетом FastReport в терраcсофте.
Создал новый Dataset с помощью команды TS_Dataset.
В свойствах этого Dataset в USI указал уже ранее созданный Dataset.

Нажимаю Предпросмотр отчета, ругается вот так:


The following error(s) have occured:
Информация по сервису '' не найдена

Нажимаю ОК, еще раз ругается:


The following error(s) have occured:
Dataset "Наименование другого ранее созданного Dataset" does not exist

С FastReport отчетами сталкиваюсь в первый раз. Можете подсказать где я не так настроил ?

У меня такой же вопрос

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

Указания USI датасета в свойствах элемента данных достаточно. Проверяйте сам датасет, убедитесь, что сохранили, он рабочий и т.п.
Если самостоятельно не разберетесь, выложите сюда сервисы датасета и отчета.

Приведите код программы как вы Инициализируете Датасет, какие фильтры накладываете и как (если они есть) и как его открываете и передаете в Отчет ФастРепорт. Приведите данный пример своего кода пожалуйста.

Добрый день, всем!

ок, спасибо!

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте!
Помогите, пожалуйста, разобраться почему у пользователей не отображаются отчеты.
Создан FastReport отчет, корректно отображает данные под SYSDBA, настройки Доступа выставлены, но пользователи не видят его.
В чем может быть проблема?

У меня такой же вопрос

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

Евгения Аркадьевна, проверьте есть ли у пользователей права доступа на чтение группы таблиц [Отчеты].
Попробуйте удалить права доступа, а затем их повторно назначить.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

При создании отчета в Fast Report использую ADO подключение.
Но при добавлении фильтра в отчет возникает ошибка
"Объект TSObjectLibrary.ADODataset не поддерживает интерфейс IDBDataset"

Прошу помочь.

У меня такой же вопрос

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

Евгения, по скриншоту видно, что Вы пытаетесь добавить поле из ADODataset во встроенное окно фильтрации отчета FastReport.
Ошибка возникает в результате того, что Filter Builder не может работать с ADODataset (так как к нему нельзя построить SQL запрос).

Наталия, спасибо за ответ.
Я поняла, что добавить фильтацию через Filter Builder к полю ADODataset с этом случае нельзя.

Из темы http://www.community.terrasoft.ua/forum/topic/6590 было создано собственное окно фильтации. Но в моем случае при запуске отчета с собственным окном фильтрации возникает ошибка :

"Невозможно редактировать сервис 'Offerings\General\Main Grid\fr_FastReport'. Объект TSObjectLibrary.ADODataset ({5119679C-DF62-4F33-ABD8-CD2BA96A64EA}) не поддерживает интерфейс IDBDataset ({B77D78C1-40FD-4A5A-9592-DC0A6072AA3B}) «Call Stack»"

Вопрос - Как же тогда сделать фильтрацию?!

Поскольку ADODataset возвращает уже готовые данные, фильтровать его для отчета можно одним из двух способов:
1. Создать в ADODataset набор параметров, в которые будут передаваться значения из окна фильтрации.
При нажатии на кнопку "Ок" заполнять параметры и открывать ADODataset:

var dsSource = Services.GetSingleItemByUSI('ads_Test');
SetParameterValue(dsSource.Parameters, 'pIndex', IndexValue);
dsSource.Open();

2. При нажатии на кнопку "Ок" получить экземпляр MemoryDataset, передать через атрибуты в MemoryDataset значения полей окна фильтрации и ADODataset.
В событии OnDatasetAfterOpen MemoryDataset открывать ADODataset, выполнять прохождение по всем его записям и в случае, если запись соответствует значению поля окна фильтрации, заполнять MemoryDataset. В отчете FastReport уже будет не ADODataset, а MemoryDataset.

Спасибо за ответ.
Наталия, прошу вас написать еще подробнее, если можете, то со скриншотами, пожалуйста.

Евгения, какой из способов описать подробнее?

С MemoryDataset.

Рассмотрим последовательно:
1. В теле функции обработки события нажатия на кнопку "Ок" окна фильтрации реализовать:

- считывание значений полей окна фильтрации:

var CashAccountID = edtCashAccount.Value;
var CurrencyID = edtCurrency.Value;

- получение экземпляра MemoryDataset:

var dsReport = frpMain.DatasetByUSI('mds_CashBreak');

- передача через атрибуты в MemoryDataset значения полей окна фильтрации:

dsReport.Attributes('CashAccountID') = CashAccountID;
dsReport.Attributes('CurrencyID') = CurrencyID;

2. У MemoryDataset следует создать обработчик события OnDatasetAfterOpen, в теле функции которого реализовать:

- считывание значений полей окна фильтрации:

var CashAccountID = Dataset.Attributes('CashAccountID');
var CurrencyID = Dataset.Attributes('CurrencyID');

- заполнение MemoryDataset, см. http://www.community.terrasoft.ua/forum/topic/5397

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день!
Возможен ли вариант отчета, в котором клиент сам выбирает, какие поля должны быть в таблице. Например, для контрагента/-ов пользователь выбирает в таблице должны отображаться полное название, контактное лицо и адрес контрагента, и в отчете в таблице отображаются лишь эти поля именно в этом порядке. Если это реально, то в какую сторону вообще копать, чтобы организовать подобную гибкость?

У меня такой же вопрос

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

Здравствуйте, Константин!

В коробочной версии такой вариант не предусмотрен.

Сделать подобную функциональность можно попробовать программно при помощи механизма вертикальных бэндов. Алгоритм следующий:

1. Создаем окно фильтрации для отчета.
2. Окно динамически фильтруется в зависимости от выбранной таблицы;
3. В отчете формируются столбцы в зависимости от информации, переданной окном фильтрации.

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

Спасибо, Анна, за вариант решения задачи, но при этом сразу появляются еще вопросы:

  • для того, чтобы получить названия колонок таблицы, нужно обращаться к tbl_Service, но при этом вся xml-информация хранится в виде набора символов в 16тиричной системе. Есть ли функции конвертации в читабельный вид и парсинга xml?
  • каким образом в самом FastReport организовать связь и вывод информации из датасетов, если они формируются динамически из создаваемых в скрипте SelectQuery?

"Constantine" написал:для того, чтобы получить названия колонок таблицы, нужно обращаться к tbl_Service, но при этом вся xml-информация хранится в виде набора символов в 16тиричной системе. Есть ли функции конвертации в читабельный вид и парсинга xml?

Константин, получить запрос в читабельном виде можно по заголовку (USI) запроса следующей конструкцией:

var Query = Services.GetSingleItemByUSI('sq_Query');

В результате Вы получите структурированный объект запроса, где можно будет посмотреть, например, колонки запроса, фильтры, SQL-текст запроса и другое:

sq


каким образом в самом FastReport организовать связь и вывод информации из датасетов, если они формируются динамически из создаваемых в скрипте SelectQuery?

Если формирование датасетов происходит до вывода отчета FastReport, тогда датасеты будут подтягиваться автоматически.

Для вывода колоннок в отчет необходимо будет написать соответствующий программный код на Delphi во вкладке Code компонента Fast Report.

реализация подобной функциональности рассмотрена по следующей ссылке: http://www.fast-report.com/ru/documentation/frhelp/postroen_otcheta_kod…

Полезная ссылка по теме: http://www.community.terrasoft.ua/forum/topic/1630

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте! Мне нужно в своем окне фильтрации иметь такой фильтр по дате:
1

По дате понятно.

И по ответственному c появляющимся окошком выбора MultiSelectData. Мое окно будет наследником от wnd_BaseEdit? Какой фильтр для ответственных должен быть создан в sq моего отчета, чтобы туда я передавал ID выбранных контактов?

У меня такой же вопрос

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

Здравствуйте Антон,
В случае с встроенным в FastReport окном фильтрации, используется FilterBuilder, который и дает возможность использовать условия "больше или равно", и "меньше или равно".
В случае с сервисом окна, вы можете создать перечисление, где Вы бы описали возможные операции (>,<,>=,<=) в EnumControl выбирать нужную операцию, а в SQ активировать уже необходимый Compare фильтр с соответствующей логической операцией сравнения дат
В случае с выбором нескольких ответственных, в SQ необходимо использовать фильтр типа "IN", и передавать в качестве параметров ID выбранных контактов

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте.
Есть такой вопрос: При создании отчета fast report используется стандартное окно фильтрации, в котором отображаются фильтры Старт. Дата, Кон.Дата, Документ, Тип Документа. Тип Документа выставлен по умолчанию в fr_ReportSheduleOfWork.
Требуется автоматически подставлять в фильтр Документ текущий документ из грида. Делать отчет по выделенным записям нельзя, т.к. необходимо выбирать даты, а так окно фильтрации не появляется.
Вопрос в том, можно ли сделать это без собственного окна фильтрации?
Заранее благодарен.

У меня такой же вопрос

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

Здравствуйте, Иван Александрович.
Для того, чтобы реализовать возможность автоматически подставлять в фильтр "Документ" базового окна фильтрации отчета FastReport текущий документ из реестра записей, необходимо внести следующие дополнения в базовые скрипты:
1. Скрипт scr_ReportUtils. В функцию function ReportMenuItemExecute(ActionMenuItem, GridDataset, DataGrid, WorkspaceName) добавить строки кода (выделено жирным):

function ReportMenuItemExecute(ActionMenuItem, GridDataset, DataGrid, WorkspaceName) {
...................
} else {
var Report = Services.GetNewItemByUSI(ReportCode);
var FilterFormCode = Dataset.ValAsStr('FilterFormCode');
if (FilterFormCode) {
var FilterForm = Services.GetNewItemByUSI(FilterFormCode);
SetAttribute(FilterForm, 'ReportDatasetUSI',
FilteredDatasetCode);
SetAttribute(FilterForm, 'SelectedIDs', SelectedIDs);
}
//For Document//
var SelectedName = GetDatasetFieldValueByID(GridDataset.USI, SelectedIDs[0], 'Title');
SetAttribute(Report, 'SelectedID', SelectedIDs[0]);
SetAttribute(Report, 'SelectedName', SelectedName);
//For Document//

ShowReport(Report, FilterForm);
}
break;
}
} finally {
Dataset.Close();
}
}

2. Скрипт wnd_ReportFiltersScript. В конец функции function LoadFilters(Window), как отображено ниже, добавить код, реализующий установку значения фильтра в окне фильтрации:

function LoadFilters(Window) {
................
XMLStorage.LoadFromText(FiltersXML, ForceEncoding);
fbcMain.DataFieldsList.Deserialize(XMLStorage.RootNode);
}
//For Document//
var ReportCode = System.ExtractUSICode(ReportFilters.FastReport.USI);
if (ReportCode == 'fr_ReportName') {
var FieldName = GetAttribute(ReportFilters.FastReport, 'SelectedName');
var FieldID = GetAttribute(ReportFilters.FastReport, 'SelectedID');
fbcMain.DataFieldsList.Items(0).DisplayValue = FieldName;
fbcMain.DataFieldsList.Items(0).Value = FieldID;
fbcMain.DataFieldsList.Items(0).DisplayFieldValues.Clear();
fbcMain.DataFieldsList.Items(0).DisplayFieldValues.Add(FieldName);
fbcMain.DataFieldsList.Items(0).Values.Clear();
fbcMain.DataFieldsList.Items(0).Values.Add(FieldID);
fbcMain.DataFieldsList.Items(0).ValueNotSet = false;
}
//For Document//

}

Где в fbcMain.DataFieldsList.Items(0) содержится первый по порядку элемент в форме фильтрации, в fbcMain.DataFieldsList.Items(1) - второй и т.д

Получилось! Огромное вам спасибо, Наталия!

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Есть задача сделать в разделе Счета в меню Отчеты печатную форму в Fast Report, но не для документа в реестре(счета) а для документа в Детали Накладные, на котором установлен курсор. Как бы вот "ухватить" ИД накладной из детали и передать его в датасет, который я создам для этого отчета для фильтрации этой записи.

У меня такой же вопрос

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

Window.ComponentsByName('[имя контейнера окна реестра детали]').Window.ComponentsByName('grdData').SelectedIDs;

SelectedIDs

Получилось вот так
var SelectedID = Self.ComponentsByName('wndOfferingMovementDetail').Window.
ComponentsByName('grdData').SelectedIDs.CommaText;

Войдите или зарегистрируйтесь, чтобы комментировать