Недавно возникла задача изменить формат отображения дробных чисел в отчете MS Word. В текущей реализации, если дробное число не имеет десятых и сотых, оно преобразуется в целое. Например, число 10,00 будет выведены как 10.
Чтобы в отчете MS Word цифры отображались с двумя нулями после запятой (например, 10,00) необходимо следующим образом модифицировать базовый функционал:
1. Открыть сервис scr_UserReportCommon.
2. Найти функцию function GetDataFieldValueByFieldType(DataField). Изменить ее следующим образом:

function GetDataFieldValueByFieldType(DataField) {  
         var Result = '';
         var IsFinal = false;
         switch (DataField.FieldType) {
                   case dftInteger:
                            Result = DataField.ValAsInt;
                   break;
                   case dftFloat:
                            Result = DataField.ValAsFloat;                          
                            Result = Result.toString();
                            if (Result.indexOf (".") == -1){
                            Result = Result + ".00";                            
                            }  
                   break;
                   case dftEnum:
                            Result = DataField.DisplayValue;
                   break;
                   default:
                            Result = DataField.Value;
                   break;
         }
         return Result;
}

Нравится

Поделиться

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

Вашему вниманию предлагается первый видеоурок по созданию отчетов в BPMonline.

В первой части в процессе пошагового построения простого отчета рассматриваются следующие вопросы:

  • Основные элементы интерфейса дизайнера отчетов BPMonline
  • Определение схемы данных отчета
  • Разметка макета отчета
  • Форматирование элементов отчета
  • Группировки и сортировка
  • Итоги
  • Скрипты-обработчики событий отчета
  • Регистрация отчета в BPMonline

Продолжительность видеоурока - 30 мин.

Ссылка для скачивания видеоурока (Zip-архив, 81,7 Мб)

Нравится

Поделиться

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

А когда выйдет часть 2?

"Дмитрий Логвиненко" написал:Ссылка для скачивания видеоурока (Zip-архив, 81,7 Мб)

А где файл :)

"Заец Сергей Викторович" написал:
Дмитрий Логвиненко пишет:

Ссылка для скачивания видеоурока (Zip-архив, 81,7 Мб)

А где файл :)

Ссылка исправлена на работающую.

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

Нужно в отчете Word отобразить текущую дату. Нашел метод

Selection.InsertDateTime()

который принимает параметры. Собственно вопрос: какие нужно передать параметры, чтобы дата отобразилась в формате "13 июня 2012"?

Нравится

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

В целом формат команды при вызове (подробнее):

function InsertDateTime(
	 DateTimeFormat : Object, 
	 InsertAsField : Object, 
	 InsertAsFullWidth : Object, 
	 DateLanguage : Object, 
	 CalendarType : Object
);

Для указанного вами отображения попробуйте указать при вызове следующие параметры:
DateTimeFormat:="dd MMMM yyyy"
DateLanguage:=1049

Языки - 1049 для русского, 1058 для украинского, 1059 для белорусского

Попробуйте разобраться с описанием метода InsertDateTime()

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

Спасибо большое за помощь

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

Как реализовать в запросе сумму по разнице времени, при чем только для инцидентов по данному сервису, к примеру, в часах?

Это может быть полезным при формировании запроса для отчета FastReport.

Для этого можно использовать DATEDIFF. Пример запроса в MSSQL:

SELECT
        [tbl_Incident].[ID] AS [ID],
        [tbl_Incident].[IncidentNumber] AS [IncidentNumber],
        [tbl_Incident].[ActualDueDate] AS [ActualDueDate],
        [tbl_Incident].[Date] AS [Date],
        [tbl_Incident].[ITServiceID] AS [ITServiceID],
        [tbl_ITService].[Name] AS [ITServiceName],
         DATEDIFF(hh, [tbl_Incident].[CreatedOn], [tbl_Incident].[ActualDueDate]) AS [HoursDuration],
        (SELECT
                DATEDIFF(hh, [tbl_Incident2].[Date], [tbl_Incident2].[ActualDueDate]) AS [Time]
        FROM
                [dbo].[tbl_Incident] AS [tbl_Incident2]
        WHERE([tbl_Incident].[ITServiceID] = [tbl_Incident2].[ITServiceID])) AS [Sum]
FROM
        [dbo].[tbl_Incident] AS [tbl_Incident]
LEFT OUTER JOIN
        [dbo].[tbl_ITService] AS [tbl_ITService] ON [tbl_ITService].[ID] = [tbl_Incident].[ITServiceID]

Как реализовать подобный запрос в Terrasoft?

1. Создаем колонку подзапроса:

111

2. Указываем в блоке FROM колонки подзапроса таблицу, откуда выбираем, и алиас таблицы:

111

3. В блоке Select колонки подзапроса создаем новую колонку типа CustomSQLColumn

111

4. Настраиваем ее следующим образом:

111

5. В блоке WHERE колонки подзапроса создаем фильтр сравнения:

111

6. Фильтр настраиваем следующим образом:

111

7. В колонке Subquery указать суммирование:

111

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

Нравится

Поделиться

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

Всем добрый день. Мне нужно построить график, отображающий состояние задач по ответственному за определенный период. Он должен отображаться в основной закладке Графики раздела Задачи.Посмотрел обучающее видео http://www.training.terrasoft.ua/resources/video/741. По оси X должно быть количество, по оси Y - состояние задачи. Количество я реализовал. Типы тоже, но не совсем. Мне нужно, чтобы на гистограмме был отдельный столбец, который бы отображал просроченные задачи. Как это реализовать не знаю. Поскольку по оси X у меня состояния задач, а состояния задачи "Просрочена" я не создавал. Вопрос: можно ли создать такой доп.столбец, указать ему название "Просроченные", не добавляя новое состояние в таблицу tbl_TaskStatus (так как это необходимо только для графика, для самих задач это состояние не нужно выставлять) С графиками работаю впервые. Подскажите,пож-ста, какими средствами TS лучше реализовать. И еще вопрос: можно ли построив график(гистограмму) на основании FR отображать его в основной закладке "Графики" в разделе? Заранее спасибо!

Нравится

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

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

  1. Подобная задача решалась в теме Просроченные задачи
    Просьба ознакомится с темой, а так же с замечанием в последнем сообщении.
  2. График, созданный в FastReport, вы не сможете отображать на закладке Графики в разделе Задачи. Дополнительно о графиках в FastReport Вы можете ознакомиться, пройдя по ссылке

Спасибо! тему форума пункта 1 я уже читал. Тот график который Вы там описываете делается в Fast Report же?

Да, в FastReport, так как в пользовательском запросе в клиенте Terrasoft, нет возможности установить связи признака просроченной задачи

Дата Завершения < Текущая дата
И
(Статус задачи != Выполнена или Статус задачи != Отменена)

А возможно ли в FR построить график, который у меня в описании темы стоит? то есть чтобы для одного ответственного было по оси Y - количество задач, а по оси X - состояния задач = в работе, не начата, выполнена, отменена и + просроченные? (то есть 5 столбцов гистограммы чтобы было)

Антон, в SelectQuery мы можем добавить еще один запрос, через конструкцию Union. Во втором запросе мы будем считать количество просроченных задач.

SELECT
	[TaskStatus],
	[CountTask],
	[ContactName],
	[ContactID]
FROM
	(SELECT
	[tbl_TaskStatus].[Status] AS [TaskStatus],
	COUNT(CAST([tbl_Task].[ID] AS VARCHAR(38))) AS [CountTask],
	[tbl_Contact].[Name] AS [ContactName],
	[tbl_Contact].[ID] AS [ContactID]
FROM
	[dbo].[tbl_Task] AS [tbl_Task]
LEFT OUTER JOIN
	[dbo].[tbl_TaskStatus] AS [tbl_TaskStatus] ON [tbl_TaskStatus].[ID] = [tbl_Task].[StatusID]
LEFT OUTER JOIN
	[dbo].[tbl_Contact] AS [tbl_Contact] ON [tbl_Contact].[ID] = [tbl_Task].[OwnerID]
GROUP BY
	[tbl_TaskStatus].[Status],
	[tbl_Contact].[Name],
	[tbl_Contact].[ID]
UNION ALL
SELECT
	N'Просроченные задачи' AS [TaskStatus],
	COUNT(CAST([tbl_Task].[ID] AS VARCHAR(38))) AS [CountTask],
	[tbl_Contact].[Name] AS [ContactName],
	[tbl_Contact].[ID] AS [ContactID]
FROM
	[dbo].[tbl_Task] AS [tbl_Task]
LEFT OUTER JOIN
	[dbo].[tbl_Contact] AS [tbl_Contact] ON [tbl_Contact].[ID] = [tbl_Task].[OwnerID]
WHERE((NOT ([tbl_Task].[StatusID] = :StatusClosedID OR
	[tbl_Task].[StatusID] = :StatusCancelledID)) AND
	[tbl_Task].[DueDate] < getutcdate())
GROUP BY
	[tbl_Contact].[Name],
	[tbl_Contact].[ID]) AS [U]

В результате наш запрос будет выдавать следующий набор данных

В работе	5	Евгений Мирный	{59B9825D-A16D-48AF-9C20-4DF1100E4BD5}	
Выполнена	26	Евгений Мирный	{59B9825D-A16D-48AF-9C20-4DF1100E4BD5}	
Не начата	17	Евгений Мирный	{59B9825D-A16D-48AF-9C20-4DF1100E4BD5}	
Отменена	4	Евгений Мирный	{59B9825D-A16D-48AF-9C20-4DF1100E4BD5}	
Просроченные задачи	10	Евгений Мирный	{59B9825D-A16D-48AF-9C20-4DF1100E4BD5}	

Далее на основании SQ необходимо создать Dataset
2
3
4
5
После чего отчет FR (реализацию Вы можете посмотреть в прикрепленных файлах)
1
Настроить график можно следующим образом
6
Также необходимо настроить фильтр отчета, по отвественному
7
Все сервисы, используемые для ответа, в прикрепленных файлах.

Спасибо огромное за информацию и решение! Буду пробовать!

А фильтр за определенный период времени,чтоб задачи были на графике, как лучше реализовать? Добавить в фильтр отчета поля "Дата начала", "Дата завершения"?

Антон, проблема с окном фильтрацией встроенным в FastReport, в том что можно использовать только поля датасета, в данном случае, если вы вынесете поля [tbl_Task].[StartDate] и [tbl_Task].[DueDate] в Select по ним автоматически будет проходить группировка (они попадут в GROUP BY). Для решения задачи, необходимо добавить CompareFiltr'ы по [StartDate], [DueDate] по логике аналогичной клиентской, и параметры в SQ

([tbl_Task].[StartDate] < @P1 AND ([tbl_Task].[DueDate] >= @P2)

где @P1 datetime2(7),@P2 datetime2(7) конкретные даты ('2012-04-30 21:00:00','2012-03-31 21:00:00')
1
2
После чего создавать отдельное окно фильтрации для отчета, как это делается описано в блоге Передача параметра в отчет FastReport и фильтрация (прикрепленные файлы)
SQ с добавленными фильтрами StartDate,DueDate во вложении

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

А как сделать чтобы по оси Y разбиение не было таким мелким? чтобы отображались только целые числа

Алексей, а какого типа контрол нужно создавать в своем окне фильтрации для выбора Ответственного по задаче?(в стандартном окне при установке ответственного по задаче появляется MultiSelectWindow) В стандартном окне оно есть, а мне нужно его и в свое. Значит нужно создавать еще параметр для Ответственного, чтобы включать его для датасета отчета. Я правильно понимаю? Будут ли тут свои нюансы?

Антон, параметр и фильтр Ответственного уже создан, фильтр называется OwnerID, параметр ответственного ContactID
Если Вы хотите использовать фильтрацию по дате, следует использовать LookupControl, в этом случае будет использоваться wnd_SelectData, так как по факту Вам необходима одна запись. Нюансы описаны в моем блоге

По поводу первого вопроса, возможно свойство Chrat’a AxisValueFormat поможет решить задачу. В FastReport используется компонент TeeChart. Я не уверен что TeeChart поддерживает свойство кастомизации делений в Chart'ах. В общем случае можно пытаться в обработчике события Chart1OnBeforePrint отлавливать значения, и обнулять их если они не целые.

Мне нужен фильтр по дате и по ответственному, в своем окошке фильтрации. В sozdat_svoe_okno_filtracii_dlya_otcheta_2.doc для даты использ-ся DateTimeControl, зачем использовать
LookupControl?

По контролу Ответственный в моем окне фильтрации не совсем понял, по фильтрам понял, что они есть уже. А как в моем окне сделать так , чтобы wnd_SelectData можно было выбрать ответственного?

Где нах-ся свойство Chrat’a AxisValueFormat? не смог найти.

Алексей, спасибо за ответы!
[quote="Яворский Алексей"]

Если Вы хотите использовать фильтрацию по дате, следует использовать LookupControl, в этом случае будет использоваться wnd_SelectData, так как по факту Вам необходима одна запись.

Извините, ошибся, я имел в виду LookupControl для выбора отвественного, DateControl для передачи дат, StartDate и DueDate

Бывает) А свойство Chrat’a AxisValueFormat не знаете где устанавливается?

Антон, я имел в виду свойство 1.

"Яворский Алексей" написал:Я не уверен что TeeChart поддерживает свойство кастомизации делений в Chart'ах. В общем случае можно пытаться в обработчике события Chart1OnBeforePrint отлавливать значения, и обнулять их если они не целые.

Спасибо!Алексей,а можете на JScript'е написать код обработчика события Chart1OnBeforePrint?Не понимаю как обращаться к значениям оси Y

Антон, в документации Fastreport’a также на официальном форуме никаких примеров доступа к значениям в осях Chart’a.
Предлагаю обходное решение:
В свойствах Chart'a отключить автоматическое масштабирование
1
После чего вручную задать Минимум и Максимум для Chat'a
2
В итоге график будет выглядеть так
3

Спасибо Алексей!

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

Предлагаю для использования построитель сложных отчетов в Excel.

Задачи которые поставлены перед построителем:

  1. Уменьшить время на создания отчета в Excel. (Экономия времени приблизительно 50%.)
  2. Умение в точности повторять шаблон.
  3. Сделать программирование отчета в Excel сходным с программированием отчета в FastReport-е
  4. Дать пользователю возможность самостоятельно менять начертание отчета.
  5. Убрать из процесса разработки рутинную работу по созданию форматирования отчета.
  6. Добавить в отчет интерактивность.

Детальное описание настроек шаблона и как пользоваться построителем см. в прикрепленных файлах.

Примечания:

  1. Если вносились изменения в сервисы scr_ExcelUtils и scr_DateUtils их нужно соединить с текущими.
  2. scr_ReportScriptTemplate - шаблон скрипта с инструкциями для построения отчета.

Пример отчета:

Нравится

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

Исправлена ошибка при вычисленной адреса ячейки с несколькими буквами.

s.mulyava, в ваших сервисах есть доработка окна отчета wnd_ExcelReportEdit, где указывается по шаблону он или нет? Просто в теме http://www.community.terrasoft.ua/blogs/7302#comment-33615 эти доработки есть. Так как мне нужно строить отчет по шаблону, я импортировал сервисы из темы http://www.community.terrasoft.ua/blogs/7302#comment-33615, но так как мне было мало информации по ней, меня отправили на вашу тему) Я импортировал ваши сервисы, и у меня возникла проблема, которая указана в той же теме. В чем может быть дело?

Антон, насколько я понял, Вам не разобрались как прикрепить шаблон к Excel отчету по шаблону.
Для этого Вам необходимо:

1. Создайте новый отчет в разделе "Отчеты", заполните поля: "Название", "Запрос", "Отображать в разделе" и раскройте меню кнопки "Шаблон", нажмите "Изменить шаблон отчета"

1

2. Нажмите "Да" на предложение создать шаблон для отчета.

2

3. Отредактируйте шаблон, так как Вам нужно. На панели инструментов "Надстройки" нажав на кнопку "Вставить поле" Вы можете добавить в шаблон ссылки на данные, которые "вытягиваются" запросом для шаблона.

3

4. К примеру:

4

5. Сохраните шаблон. Нажмите кнопку "Связать с отчетом" и выберите из списка нужный Вам отчет:

5

6. Результат:

6

Спасибо,Дмитрий. Попробую!

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

Здравствуйте, Антон.

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

Уточните, пожалуйста, следующее: после того как Вы выполнили указанные мною выше действия, если нажать кнопку "Просмотр отчета" в разделе [Отчеты], генерируется ли отчет? Либо укажите ошибки которые возникают.

Спасибо.

После нажатия на кнопку просмотр отчета появл-ся окошко фильтрации, которое я создал в окне редактирования отчета, а потом сам отчет, но в нем не просматриваю моих настроек шаблона. Отсюда у меня вывод, что отчет не связан с шаблоном видимо. Не знаю, прав ли я. С шаблонами впервые работаю.

Антон, так как используется иной функционал построения отчетов чем тот который описан в этой теме, ответил Вам в теме по ссылке: http://www.community.terrasoft.ua/blogs/7302
Предлагаю перевести обсуждения вопроса в эту ветку.

Здравствуйте! Загрузила сервисы для создания печатной формы счета . Но почему то при выводе счета Террасофт зависает.

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

Здравствуйте, Марина.

В доработке используется довольно сложная логика построения отчета. Уточните пожалуйста, каким образом Вы строите отчет.
Также попробуйте открыть Excel вручную - возможно всплывает какое либо дополнительное окно, которое необходимо закрыть, чтобы иметь возможность работы с документом. Т.к. окно Excel не отображается, скорее всего Terrasoft и подвисает, ожидая закрытия этого окна.
Также хочу отметить, что в данный момент этот функционал не предназначен для пользователя.

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

Делаю как описано в файле ("Описание построителя отчетов").

Создала запрос для отчета. В отчетах (Terrasoft) выбрала Excel. В шаблоне 2 листа, на одном сам шаблон, на другом - разбивка.

Открыла файл с шаблоном, в нем документ (не выведенный отчет), заполнилось только номер счета и дата, а все что ниже осталось вот в таком виде:

...
Плательщик:        <#Деталь 1>.<Клиент>
Грузополучатель: <#Деталь 1>.<Клиент>
...

Здравствуйте, Марина.

На сколько мне известно в данной доработке не используется следующий формат вывода данных в отчет:

Плательщик:        <#Деталь 1>.<Клиент>
Грузополучатель: <#Деталь 1>.<Клиент>

здесь используется датасет, как источник данных

[ds_Account].[OfficialAccountName]

Остальное - либо базовый функционал, либо иная доработка.

"Олейник Дмитрий" написал:

Здравствуйте, Марина.

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

Также попробуйте открыть Excel вручную - возможно всплывает какое либо дополнительное окно, которое необходимо закрыть, чтобы иметь возможность работы с документом. Т.к. окно Excel не отображается, скорее всего Terrasoft и подвисает, ожидая закрытия этого окна.

Также хочу отметить, что в данный момент этот функционал не предназначен для пользователя.

С уважением,

Олейник Дмитрий

Эксперт 3-й линии поддержки


То есть, табличку(данные с детали) не получится вывести?

Здравствуйте, Антон.

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

Добрый день, Дмитрий

Вопрос по сервису scr_MacroParser: для него USI = Contracts\Reports\Plan-fact incoming CA\scr_MacroParser.
это значит что только этот сервис нужно загружать в созданный пользователем отчет?
а все остальные сервисы в соответствии с их USI ?

C уважением, Олег

Здравствуйте, Олег.

К сожалению, эта утилита написана один из участников сообщества, и официально она не тестировалась и не поддерживается. Вся информация, которая есть у нас - лишь инструкция от автора. Более того, этот функционал не предназначен для пользователя и может быть использован, если у Вас есть базовые знания языка программирования JScript, конфигурации Террасофт и отладчика.
Подробнее, к сожалению, не могу Вас проконсультировать.

Но по сути: не имеет значения, в какой папке находится сервис. Поиск сервиса идет лишь по названию сервиса: к примеру Scr_MacroParser. Полный путь система определяет самостоятельно.

Как

"Олейник Дмитрий" написал:

Здравствуйте, Олег.

К сожалению, эта утилита написана один из участников сообщества, и официально она не тестировалась и не поддерживается. Вся информация, которая есть у нас - лишь инструкция от автора. Более того, этот функционал не предназначен для пользователя и может быть использован, если у Вас есть базовые знания языка программирования JScript, конфигурации Террасофт и отладчика.

Подробнее, к сожалению, не могу Вас проконсультировать.

Но по сути: не имеет значения, в какой папке находится сервис. Поиск сервиса идет лишь по названию сервиса: к примеру Scr_MacroParser. Полный путь система определяет самостоятельно.

С уважением,

Олейник Дмитрий

Эксперт 3-й линии поддержки

Получается этот сервис привязан к Contracts (Договора). Верно?

Как я понял, сборка этих сервисов обеспечивает включение в отчет Деталь (которая через обратные связи) в виде таблицы из n строк данных.
Вы можете подсказать как это обеспечить?

С уважением, Олег

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

[function()] – используется в тех случаях, когда невозможно составить корректный оператор JScript-та. Название функции должно совпадать с названием функции, которая попадает в зону видимости scr_MacroParser 

Здраствуйте, Дмитрий! Я загрузила все скрипты из прилагающегося архива, но в клиентской части не появилась возможность редактирования. Версия TS XRM Distribution 3.4.0

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

К сожалению, мы не поддерживаем данный функционал, т.к. он был реализован одним из пользователей сообщества, поэтому постичь логику его работы сторонним пользователям достаточно сложно. Все что могу Вам предложить - это попробовать снова, на чистой БД Террасофт, плюс дополнительно внимательно изучить инструкцию от автора.

Также, если это покрывает Вашу задачу, рекомендую Вам воспользоваться другим, уже проверенным на практике и протестированным решением:
http://www.community.terrasoft.ua/blogs/7302

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

Задача: Есть отчет, появляется окно выбора даты, выбираем дату, данные в отчете FastReport фильтруются по этой дате.

Пусть у нас есть таблица с данными tbl_frDate

SELECT * FROM tbl_frDate

1
И мы хотим создать отчет FastReport отфильтровав данные по дате, для этого мы создали SQ для получения данных
2

3

4

5

6

Параметр MyDate, мы используем для фильтрации, его и будем передавать в отчет

На основании sq создаем Dataset ds_frDate:
7

Создаем отчет FR, подключаем созданные Dataset
8
В самом дизайнере FR, для тестирования положим несколько Memo (предварительно добавив Master Data в дизайнер)

9
Далее, добавим обработчик события на OnPreview созданного нами отчета (fr_frDate)
10

Дату правильно всего передавать в атрибуты самого отчета ReportPreviewer.Report
В событии fr_frDateOnPrepare мы еще не видим данные с окна фильтрации,а вот в fr_frDateOnPreview видим,

function fr_frDateOnPreview(ReportPreviewer) {
 var DatasetNameStr = "ds_frDate"; //датасет в котором мы хотим делать фильтр по дате (необходимо помнить о том, что у отчета может быть несколько датасетов)
 var str = ReportPreviewer.DatasetUSIList.CommaText; //в строчке ReportPreviewer.DatasetUSIList.CommaText передаются USI датасетов, через запятую
 var ReportDatasetUSI =  str.substr(str.indexOf(DatasetNameStr), DatasetNameStr.length);
 var Dataset = ReportPreviewer.DatasetByUSI(ReportDatasetUSI);

                var val = GetAttribute(ReportPreviewer.Report,'TestDate');
                ApplyDatasetFilter(Dataset, 'MyDate', val, true);
}

Саму переменную, мы также можем получить в FastReport объявив ее следующим образом
11

12

Кстати, в самом дизайнере можем проверять значение следующим образом

[IIF(TSDataset1."MyDate"> TestDate>,TSDataset1."MyDate">,'')]

Как прикрепить окно фильтрации к отчету описано в инструкции Создать свое окно фильтрации для отчета.doc

В самом окне фильтрации параметр передаем так:

//-----------------------------------------------------------------------------
// wnd_FilterWindowTestScript
//-----------------------------------------------------------------------------

function SaveDatePeriod() {
        var ReportPreviewer = Self.Attributes('ReportPreviewer');
                ReportPreviewer.Report.Attributes('TestDate')  = edtDate.Value;
}  


function btnCancelOnClick(Control) {
         Self.Close();
}    


function btnOKOnClick(Control) {
                SaveDatePeriod();      
                SendNotify(Self, MSG_OK);
}

Все сервисы в архиве

Нравится

Поделиться

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

Добрый день!

Подскажите пожалуйста, как решить проблему:

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

Что меня смущает и поправьте пожалуйста, если я не прав:
1) Я не могу использовать для построения отчета датасет, который базируется на запросе с параметрами. Т.к. как передать из FR параметры в запрос я не нашел. Какой выход - писать кастомный запрос в самом FR?
2) Допустим, я создам датасет, который будет выбирать все данные независимо от дат. Но когда я жму кнопку "Установить фильтры" то я не могу задать там фильтр >= и =. Вопрос - эти фильтры работают только для текстовых полей?
3) Насколько я понимаю, функционал запуска по расписанию придется решать как то так:
создавать форму, на которой ничего не будет, в обработчике OnPrepare например писать скрипт который сформирует отчет и потом разошлет пользователям а затем закроет форму. Потом в Scheduled Tasks создавать задачу, которая будет по расписанию запускать террасофт с параметром - кодом окна.

Буду благодарен за любые комментарии/решения/предложения и тем более примеры :)
Спасибо.

Нравится

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

Реализовать отчет FastReport, в котором записи фильтруются по диапазону дат Вы можете двумя способами: создать собственное окно фильтрации, в котором пользователь будет выбирать период фильтрации; использовать встроенное окно фильтрации FastReport.
В качестве примера для создания отчета с собственным окном фильтрации можно использовать отчеты "Анализ конкурентов" (fr_OpportunitiesCompetitors), "Отчет по продажам" (fr_ReportOpportunitiesSalesCycleAnalisys) с окном фильтрации wnd_ServiceDeskDateFilter. Также во вложении прилагаю для ознакомления файл, в котором описан принцип создания окна фильтрации для отчета.

"komgbu" написал:2) Допустим, я создам датасет, который будет выбирать все данные независимо от дат. Но когда я жму кнопку "Установить фильтры" то я не могу задать там фильтр >= и <=. Вопрос - эти фильтры работают только для текстовых полей?

Встроенное окно фильтрации FastReport позволяет устанавливать фильтры >= и <= для полей с типом "Дата/время", "Целое число", "Дробное число":
http://www.community.terrasoft.ru/system/files/1_12.png

Здравствуйте,
По поводу 1) и 2) вопроса, предлагаю вам почитать в теме http://www.community.terrasoft.ru/blogs/7286
если, что либо не понятно, опишу более подробно
3) Как вариант можно создать и так,
1
На сколько я понял, под Scheduled Tasks вы имеете ввиду Task Scheduler Windows'а

Наталия, Алексей, спасибо!

Да, под Scheduled Tasks я имел ввиду планировщик Windows.

Добрый день!

Не подскажете, как для кастомного окна фильтрации переопределить заголовок (не разваливая стандартный скрипт, который автоматически присваивает названия типа: "имя_сервиса (Просмотр)")?

Форма стандартной фильтрации конечно... не айс...

Спасибо!

Здравствуйте,
Скрипт scr_BaseFastReportPreviewScript

function PrepareReport(AWindow) {
	CheckAttribute(AWindow, 'Report');
	frpMain.Report = GetAttribute(AWindow, 'Report');
	var FiltersCaption = frpMain.Report.Caption + " (Фильтры)";
	var PreviewCaption = frpMain.Report.Caption + " (Просмотр)";
	frpMain.PrepareReport();
	Self.WindowCaption = PreviewCaption;
	if (IsAttributeExists(AWindow, 'ShowFilterForm'))
...

Строчка формирует название

var PreviewCaption = frpMain.Report.Caption + " (Просмотр)"; 

присваиваем значение,

Self.WindowCaption = PreviewCaption;

можете в этом моменте проверять с каким отчетом вы работаете

if (ExtractUSICodeEx(frpMain.Report.USI)=='fr_ReportContactTasks')
{
...
}

и формировать нужное вам значение заголовка окна

Алексей,

Спасибо за подробные разъяснения.
Т.е. без изменения в этом стандартном скрипте переопределить заголовок окна не получится... жаль...

Еще один вопрос, если можно:

По поводу разграничения прав доступа к отчету.

1) Я так понимаю, через какие-то настройки прав определенной группе пользователей дать на отчет нельзя, и придется все реализовывать программно?

2) Если запрос отчета выбирает данные из таблиц/полей недоступных пользователю, они будут пустыми в отчете?

Спасибо!

1) Права доступа к отчету вы можете настроить в детали [Доступ]
1
где указать необходимые вам группы пользователей
2) Поля на которые нет доступа у пользователя отображается не будут

"komgbu" написал:когда я жму кнопку "Установить фильтры"

Подскажите, пожалуйста, где эта кнопка. Как подключить встроенное окно фильтрации FastReport?

Здравствуйте,
Нажатие кнопки (выделено красным) в Terrasoft Administrator, вызовет окно на которое показывает стрелка на рисунке
1

Спасибо! Выручили.

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

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

1. Появляется только на одном компьютере;
2. Под всеми пользователями;
3. Для любого отчета Word/Excel;

Решить проблему можно только путем активации отладчика: необходимо выяснить, на какой строке программа вылетает. Если это это строка finally - значит, проблема где-то в блоке try, и его нужно последовательно пройти отладчиком, каждую строку проверяя watch'ем.

В моем случае проблемной строкой оказалась следующая:

Result = GetIsMSOfficeApplicationIstalledViaRegistry(MSOfficeApplicationName);

Это системная функция обращения к реестру. Остановка отладчика на этой строке говорит о том, что проблема в операционной системе, а именно - в службах работы реестра.

Чтобы устранить проблему, нужно перезапустить либо переустановить системные службы Windows. Это можно сделать через консоль (Пуск - Выполнить - cmd)

Перезапустить:

net stop winmgmt
cd /d %windir%\system32\wbem
for %i in (*.dll) do RegSvr32 -s %i
for %i in (*.exe) do %i /RegServer
net start winmgmt

Переустановить:

rundll32.exe setupapi,InstallHinfSection WBEM 132 %windir%\inf\wbemoc.inf

После переустановки системных служб реестра Windows проверка инсталляции офиса проходит корректно и отчет выгружается.

Отдельное спасибо Евгению Лобову за сотрудничество в решении проблемы.

Нравится

Поделиться

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

Еще как вариант, просто снести ветку в реестре, например того же самого Excel.
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Options\DefSheets -> именно этот параметр
P.S. Мне например помогло!

Ценное наблюдение. Павел, благодарю.

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

Здравствуйте. Такая проблема, на терминале при выгрузке отчета из XRM появляется ошибка - "the following error
access violation at address"
До этого было, что ошибка доступа к папке bin. Раздал доступ для пользователей, теперь вот эта ошибка..(

Нравится

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

Сообщите, пожалуйста, воспроизводится ли данная ошибка под администратором?
Также сообщите, пожалуйста, версию бинарных файлов.

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

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

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