Вопрос

Добрый день!

Есть Террасофт 3.3.2

Не понятно как вывести стандартную форму фильтрации для отчета FastReport и как указать в это форме по каким поля фильтровать

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

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

См., как сделано в стандартном отчёте «Взаиморасчеты», используемом в разделах «Контрагенты» и «Операции». Там есть карточка wnd_MutualSettlements, в её скрипте wnd_MutualSettlementsScript при нажатии «ОК» срабатывает код, где налагаются фильтры и запускается отчёт:

function btnOkOnClick(Control) {
	if (edtStartDate.IsNull || edtDueDate.IsNull) {
		ShowWarningDialog("Поле \"Дата с\" и \"дата по\" являются обязательным для заполнения");
		return false;
	}
	var StartDate = new Date(edtStartDate.Value);
	var DueDate = new Date(edtDueDate.Value);
	if (StartDate.getTime() > DueDate.getTime()) {
		ShowWarningDialog("Поле \"Дата с\" не может быть дольше поля \"дата по\"");
		return false;
	}
	StartDate.setHours(0, 0, 1);
	DueDate.setHours(23, 59, 59);
	edtMultiSelectOnChange(edtDebtorCreditor);
	var ds_AccountInMutualSettlements = 
		MutualSettlementsScript.ReportPreviewer.DatasetByUSI('ds_AccountInMutualSettlements');
	ds_AccountInMutualSettlements.Close();
	var ds_MutualSettlements = 
		MutualSettlementsScript.ReportPreviewer.DatasetByUSI('ds_MutualSettlements');
	ds_MutualSettlements.Close();
	EnableDatasetFilters(ds_AccountInMutualSettlements, false);
	EnableDatasetFilters(ds_AccountInMutualSettlements, true, 'IsActual');
	EnableDatasetFilters(ds_MutualSettlements, false);
	EnableDatasetFilters(ds_MutualSettlements, true, 'IsActual', 'DebtorCreditorID');
	MutualSettlementsScript.Report.Attributes('StartDate') = DateToStr(StartDate);
	MutualSettlementsScript.Report.Attributes('DueDate') = DateToStr(DueDate);
	ApplyDatasetFilter(ds_AccountInMutualSettlements, 'StartDate', 
		StartDate.getVarDate(), true);
	ApplyDatasetFilter(ds_AccountInMutualSettlements, 'DueDate', 
		DueDate.getVarDate(), true);
	ApplyDatasetFilter(ds_MutualSettlements, 'StartDate', 
		StartDate.getVarDate(), true);
	ApplyDatasetFilter(ds_MutualSettlements, 'DueDate', 
		DueDate.getVarDate(), true);
	if ((!!MutualSettlementsScript.DebtorCreditorIDs) &&
		('length' in MutualSettlementsScript.DebtorCreditorIDs) &&
		(MutualSettlementsScript.DebtorCreditorIDs.length > 0)) {
		ApplyDatasetIncludeFilter(ds_AccountInMutualSettlements, 
			'DebtorCreditorIDs', MutualSettlementsScript.DebtorCreditorIDs, true);
	}
	SendNotify(Self, MSG_OK);
}

Карточка указана в настройках записи в разделе «Отчёты».

На сколько я понял тут описана доработанная форма фильтрации,а имел ввиду стандартная которая формируется кнопкой "Установить фильтр" в окне FastReport. Форма с набором фильтров у меня сейчас формируется, отчет работает, но единственное что не работает это фильтрация записей отчета по выбранным фильтрам. Как передать в отчет параметры фильтрации?

Стандартно в 3.3.2 в окне FastReport нет такой кнопки «Установить фильтр»:

Это может быть доработка, без её анализа сложно сказать, что делаете не так.

Я имел ввиду кнопку "Установить фильтры" в меню редактора FastReport

Кнопка между Обновить и Выберите родительский отчет

 

Вот еще скриншоты и исходники

Посмотрите, как сделана фильтрация для обычных отчётов, вроде «Адресной книги контрагентов». Там в sq, по которой строится ds отчёта, предусмотрены соответствующие фильтры.

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

есть идеи в чем проблема?

 

На скриншоте окна фильтров их видно намного больше, чем Вы настроили в запросе.

Я настроил пока то что пытался фильтровать. Зачем настраивать дальше если даже то что настроено не работает?

Посмотрите в профайлере, какой запрос идёт в базу. Может, в sq не добавлено или добавлено не так это поле.

WHERE(NOT (([tbl_Task].[OwnerID] IN (@P1)))

что такое @P1?

проблема в NOT

буду смотреть как она появляется

 

Зверев Александр спасибо за Profiler

@P1 — параметр, там в конце запроса передают через запятую их значения.

не пойму передается NOT хотя в фильтре стоит "="

Возможно, закешировалось, попробуйте изменить туда-сюда и пересохранить схему.

помогло. спасибо

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

Добрый день!

Подскажите, может кто-то решал подобную задачу? Как в отчете (список) реализовать данные колонки (сколько времени обращение было в том или ином состоянии). 

 

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

1 комментарий
Лучший ответ

Вариантов много например так: создайте объект (по которой в дальнейшем можно и деталь сделать прикрепленную к обращению и отчет построить ) в которой будут колонки:

1) Id обращения (или сразу номер обращения для отчета)

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

2) время установки статуса

3) время закрытия статуса

Создайте БП который по смене статуса будет вносить корректировки в выше созданый объект. А по созданию обращения делать первую запись. Таким образом при переходе в согласование например смотрите какой статус был раньше (в обращениях была колонка - приведущий статус) и для объекта меняете время закрытия преведущего статуса для текущего обращения. И вносите время установки для текущего статуса. Как то так.

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

В итоге получите номер обращение, статус, время пребывания в статусе (по разнице 2х дат). Сгрупировать по номеру обращения и статусе, для случаев когда обращение пребывало в одном статусе несколько раз, те если например обращение несколько раз возвращают в работу то нужно групировать и  суммировать время пребывания в статусе. Линейную таблицу транспонировать к нужному вам виду (перевернуть).

И как вариант можно настроить журнал изменения на отслеживание изменения статуса обращения и оттуда дергать данные для отчета. Вместо журнала изменений можно использовать вариант с тригером в БД для тех же целей (логирование изминения статуса обращения).

 

 

 

 

Вариантов много например так: создайте объект (по которой в дальнейшем можно и деталь сделать прикрепленную к обращению и отчет построить ) в которой будут колонки:

1) Id обращения (или сразу номер обращения для отчета)

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

2) время установки статуса

3) время закрытия статуса

Создайте БП который по смене статуса будет вносить корректировки в выше созданый объект. А по созданию обращения делать первую запись. Таким образом при переходе в согласование например смотрите какой статус был раньше (в обращениях была колонка - приведущий статус) и для объекта меняете время закрытия преведущего статуса для текущего обращения. И вносите время установки для текущего статуса. Как то так.

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

В итоге получите номер обращение, статус, время пребывания в статусе (по разнице 2х дат). Сгрупировать по номеру обращения и статусе, для случаев когда обращение пребывало в одном статусе несколько раз, те если например обращение несколько раз возвращают в работу то нужно групировать и  суммировать время пребывания в статусе. Линейную таблицу транспонировать к нужному вам виду (перевернуть).

И как вариант можно настроить журнал изменения на отслеживание изменения статуса обращения и оттуда дергать данные для отчета. Вместо журнала изменений можно использовать вариант с тригером в БД для тех же целей (логирование изминения статуса обращения).

 

 

 

 

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

Доброго времени суток, коллеги.

Имеется TerrasoftCRM 3.3.2.245.

В отчетах FastReport я новичок, поэтому вопрос может показаться глупым: как настроить связь между двумя наборами данных? Свойство MasterDataset в наборе данных я нашел, а как указать состав полей по которым будет выполнятся связывание? По одинаковым именам полей в родительском и дочернем наборах данных связь по всей видимости тоже не устанавливается...

 

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

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

См. тут (у вопроса юбилей!cheeky) и тут.

Спасибо.

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

Здравствуйте!
Подскажите пожалуйста как реализовать возможность экспорта отчета FR в xlsx. Доступно только xls, хоть в программе и прописаны все версии офиса. По большей части нужно для автоматического формирования и сохранения отчета. Если указывать в названии файла расширение xlsx - файл создается, но не открывается (((( На скрине - пользовательский экспорт отчета в Microsoft Excel.
Версия ТС - 3.4.0.38.
Спасибо!

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

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

Светлана, используемый в Terrasoft движок FastReport является сторонним компонентом, влиять извне на его работу не всегда есть возможность. Если он не поддерживает сохранение в XLSX, то нельзя.

Можно попробовать следующие обходные решения:

  • Сохранять файл в XLS, потом отдельно конвертировать файлы с помощью Microsoft OFC.
  • Полностью переписать построение отчёта, вместо FastReport использовать чисто программное формирование при помощи COM-объекта Excel, там можно и XLSX.

"Зверев Александр" написал: Если он не поддерживает сохранение в XLSX, то нельзя.

Судя по форумам, вполне поддерживает. Возможно, вопрос в используемой версии в TS

Печально(( движок FR тоже ведь не заменить?
Спасибо!

В Terrasoft встроена конкретная версия движка. Возможно, по ссылке более новая.

Версия FR 4.10.18

А Владимир привёл ссылку на 5.5.9.

Менять встроенный движок нельзя.

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

добрый день!
"досталась" мне в наследство данная платформа, соглашалась на техническую поддрержку, но появилась потребность немного "усовершенствовать" работу коллег. Т.к. опыта работы с такими программами у меня нет - прошу помось и отвечать подробно, т.к. полный чайник я))))
Хотелось бы "залить" шаблон дилерского договора, и чтобы в нем при выборе клиента автоматически проставлялись данные занесенные в базу: нименования и реквизиты(инн, адрес и т.д.)
1. как прописать я более менее понимаю, что тут может быть строка - , ...Но как ее записать в добавляемые поля после соединения с ТерраСофтом,чтоб каждый раз руками не вводить (как в скриншоте)? или данные запросы не так делаются?
2. один такой созданный шаблон запроса у меня был,он связан с продажами. Т.е. клиент запрашивает КП,заполняем окно продажи,переходим к продаже продукта и он заполняет все строки(тот же скрин из программы). Как мне в данном случае тоже сделать такой переход к моему шаблону договора? Т.е. все данные у меня занесены в контакты - я нажимаю на фирму Василий Пупкин - перехожу к заполнить договор и у меня выгружается заполненный его реквизитами договор?

Спасибо,надеюсь на вашу помощь

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

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

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

На все Ваши вопросы есть ответ в этом видео: Интеграция с пакетом приложений MS Office

Павел,спасибо огромное!!! очень познавательно,а лучше наглядно видно. Пока остался один вопрос как связать отчет непосредственно с дилером, но думаю может пока буду реализовать запрос и отображение отчета сама приду к решению...будем пробовать

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

Подскажите пожалуйста, как можно добавить опцию "Перейти к" в контекстное меню отчета?

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

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

Здравствуйте, Юрий!

Если мы говорим об отчетах Fast Report, то о такой возможности нам не известно. Попробуйте уточнить о ней у разработчиков Fast Report.

Возможно, для реализации Вашей задачи Вам подойдет использование гиперссылок в Fast Report.
Якорь (anchor) – один из элементов системы гиперссылок, которая позволяет при щелчке на объекте готового отчета (в окне предварительного просмотра) перейти на элемент, связанный с этим объектом.
Якорь – это специальная метка, которая устанавливается методом Engine.AddAnchor. Якорь имеет имя, и ему соответствует номер страницы и позиция на странице. Перейти на якорь с указанным именем можно, поместив в свойство URL любого объекта отчета строку вида:
#ИмяЯкоря
или
#[ИмяЯкоря]
В последнем случае, при построении отчета FastReport раскроет выражение, находящееся в квадратных скобках.
При щелчке на этом объекте произойдет переход на то место отчета, где был добавлен якорь.
Якоря удобно использовать при построении раздела "Содержание" со ссылками на соответствующие разделы.

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

Нет, речь не идет об отчетах Fast Report. Речь идет об отчете, который унаследован из wnd_BaseReportWindow.

Уточните, пожалуйста, точное название используемой версии Terrasoft (можно посмотреть в свойствах файла TSClient.exe)?

Terrasoft 3.4.0.130

К сожалению, не могу найти в базовой конфигурации окно wnd_BaseReportWindow.

Возможно, Вы имели ввиду wnd_BaseReport?

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

Добрый день, коллеги! Подскажите, пожалуйста, есть ли в стандартных возможностях системы адаптировать выгрузку древовидного грида в Excel. Сейчас формат выгрузки представляет собой перечисление в строку всех записей грида по порядку независимо от уровня, а хотелось бы увидеть эту иерархию также в Excel. Если нет полноценной адаптации, то возможно вы можете подсказать, какие есть варианты выгрузки с сохранением структуры состоящей из 3-х уровней:
1 уровень (главный)-менеджер
2 уровень-клиент
3 уровень-направление

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

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

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

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

А в User query можно же задать подчиненные детали, а потом на их базе сделать Excel-отчет. И будут нужные вам уровни

Можно сделать через пользовательские запросы, но это будет не так просто.
Если бы был пример детали (скриншот), можно было более глубоко понять задачу и предложить оптимальный вариант решения.

Нам также подойдет вариант с разделением этих 3-х уровней на столбцы в Excel
но вопрос в том, как написать это кодом, исправив формат стандартной выгрузки лишь в одном разделе

менеджер клиент направление

"Кочев Антон Сергеевич" написал:с разделением этих 3-х уровней на столбцы

Из данного описания совсем непонятно, как у вас реализованы эти уровни.

На обучении разработке TS 3.x давали пример, как из TS создавать Excel-файл.

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

Добрый день,
по умолчанию fast report выводит данные в мастер дата бесконечно сверху вниз, как сделать чтобы он выводил бесконечно слева-направо ?

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

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

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

Это можно реализовать с помощью элемента управления Cross-tab object.

спасибо, попробую

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

Скажите, где в диаграмме fastreport в pie, сделать так, что бы не было наложение текста
график

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

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

Приветствую Вас!

у нас есть отчет "Звонки за период" типа Excel
Проблема в том что он выгружает разные данные за один и тот же период, если загружать отчет подряд несколько раз (все разы разные данные)

Посмотрели в профайлере какие запросы выполняются в момент создания отчета, картинку прикладываю

какая то не понятная логика там, начала top 10000 потом top 20000 и т.д. Зачем это делается?
есть предположение что данные где то кэшируется, поэтому результат в итоге не верный каждый раз.

Вопрос 1 : почему так происходит, и как этого избежать? (может быть отключить кеширование?)
Вопрос 2: можно ли как то поменять сам sql текст запроса который генерируется для отчета Excel. ?

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

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

Андрей, информации недостаточно, чтобы сказать что-то конкретное.

Что это за отчёт, по каким данным строится, стандартный он или самодельный?
Откуда в системе взялась таблица «tbl_Call_9ABFB7C1»? На стандартную не очень похожа.
В чём различие данных в разных запусках отчёта?

Да, и какая у Вас версия системы?

был лайт-переход с версии 3.3.2 на 3.4.1

"tbl_Call_9ABFB7C1" это псевдоним "[dbo].[tbl_Call]"

часть первого запроса из профайлера:
exec sp_executesql N'SELECT TOP 10000
[tbl_Call_9ABFB7C1].[CallNumber] AS [Col_0D6C9245],
[tbl_Call_9ABFB7C1].[PhoneNumber] AS [Col_8C1120A7],
[J0_tbl_ITService_CEE4647D].[Name] AS [Col_8497D798],
[J0_tbl_ITService_CEE4647D].[ID] AS [Col_8497D798ID],
[J1_tbl_Contact_C44A0EC8].[Name] AS [Col_3713C6C7],
[J1_tbl_Contact_C44A0EC8].[ID] AS [Col_3713C6C7ID],
[J3_tbl_ITService_CEE4647D].[Name] AS [Col_8C0C09B4],
[J3_tbl_ITService_CEE4647D].[ID] AS [Col_8C0C09B4ID],
[J2_tbl_ITServiceI_D7DD168A].[ID] AS [Col_D59DDC1B],
[J4_tbl_ITServiceC_8912228E].[Name] AS [Col_2BD3F2E3],
[J4_tbl_ITServiceC_8912228E].[ID] AS [Col_2BD3F2E3ID],
[J5_tbl_ITServiceP_26DC7F2F].[Name] AS [Col_36E2E264],
[J5_tbl_ITServiceP_26DC7F2F].[ID] AS [Col_36E2E264ID]
FROM
[dbo].[tbl_Call] AS [tbl_Call_9ABFB7C1] ....
.... и далее куча join'ов

Остальные такие же, отличается только количество TOP

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

Данные отличаются по количеству записей
например выгружаем звонки за прошлый месяц, получается 1360 записей,
сразу же делаем следующую выгрузку, получается 1425. И так каждый раз.

Причем если напрямую на сервере сделать последний запрос из профайлера (который select top 40000)
данные получаются корректные, т.е. как есть.

подозреваю, что именно из за того что делается несколько одинаковых запросов подряд (отличается только количество TOP), данные считаются неправильно, но может быть причина в другом.

Если это самостоятельно разработанный отчёт, то что-то определённое сказать сложно. Проверяйте его настройки, всё ли верно там заполнено. Проверьте свойства и отчёта, и запроса, по которому он строится. Вот инструкция, об Excel-отчётах на стр. 166, о запросах на стр. 182.

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