1) Добрый день! Написал запрос для отчета. Запрос имеет следующий вид.

SELECT
        [tbl_Contact].[Name] AS [ContactName],
        [tbl_Contact].[ID] AS [ContactID],
        (SELECT
                COUNT(*) AS [CountIncident]
        FROM
                [tbl_Incident] AS [tbl_Incident]
        WHERE
                ([tbl_Incident].[OwnerID] = [tbl_Contact].[ID] AND
                [tbl_Incident].[StatusID] = :StatusID AND
                [tbl_Incident].[ActualStart] BETWEEN :FromDate AND :ToDate)) AS [CountIncident],
        (SELECT
                COUNT(*) AS [CompleteIncident]
        FROM
                [tbl_Incident] AS [tbl_Incident]
        WHERE
                ([tbl_Incident].[OwnerID] = [tbl_Contact].[ID] AND
                [tbl_Incident].[StatusID] = :CompleteID AND
                [tbl_Incident].[ActualStart] BETWEEN :FromDate AND :ToDate)) AS [CompleteIncident],
        (SELECT
                COUNT(*) AS [NewIncident]
        FROM
                [tbl_Incident] AS [tbl_Incident]
        WHERE
                ([tbl_Incident].[OwnerID] = [tbl_Contact].[ID] AND
                [tbl_Incident].[StatusID] = :NewID AND
                [tbl_Incident].[ActualStart] BETWEEN :FromDate AND :ToDate)) AS [NewIncident],
        (SELECT
                COUNT(*) AS [TaskCount]
        FROM
                [tbl_Task] AS [tbl_Task]
        WHERE
                ([tbl_Task].[OwnerID] = [tbl_Contact].[ID] AND
                [tbl_Task].[StatusID] = :TaskCancel AND
                [tbl_Task].[ActualStartDate] BETWEEN :FromDate AND :ToDate)) AS [TaskCancel],
        (SELECT
                COUNT(*) AS [TaskCount]
        FROM
                [tbl_Task] AS [tbl_Task]
        WHERE
                ([tbl_Task].[OwnerID] = [tbl_Contact].[ID] AND
                [tbl_Task].[StatusID] = :TaskFinish AND
                [tbl_Task].[ActualStartDate] BETWEEN :FromDate AND :ToDate)) AS [TaskFinish],
        (SELECT
                COUNT(*) AS [TaskCount]
        FROM
                [tbl_Task] AS [tbl_Task]
        WHERE
                ([tbl_Task].[OwnerID] = [tbl_Contact].[ID] AND
                [tbl_Task].[StatusID] = :TaskOpen AND
                [tbl_Task].[ActualStartDate] BETWEEN :FromDate AND :ToDate)) AS [TaskOpen],
        (SELECT
                COUNT(*) AS [TaskCount]
        FROM
                [tbl_Task] AS [tbl_Task]
        WHERE
                ([tbl_Task].[OwnerID] = [tbl_Contact].[ID] AND
                [tbl_Task].[StatusID] = :TaskWork AND
                [tbl_Task].[ActualStartDate] BETWEEN :FromDate AND :ToDate)) AS [TaskWork],
        :FromDate AS [FromDate],
        :ToDate AS [ToDate],
        [tbl_Incident].[ID] AS [ID]
FROM
        [tbl_Contact] AS [tbl_Contact]
LEFT OUTER JOIN
        [tbl_Incident] AS [tbl_Incident] ON [tbl_Incident].[ContactID] = [tbl_Contact].[ID]

Отчет выбирает инциденты по статусу инцидента для сотрудника.
Фильтр стандартный т.е тот который создается средствами FastReport. В нем 3 поля Сотрудник. Дата начала. Дата окончания.
Подскажите можно ли как то подтянуть дату заданную в фильтре и подставить ее в данный запрос в параметр :FromDate или :ToDate что бы он сформировался с учетом заданной в фильтре даты.

2)Есть еще небольшой второй вопросик. Связанный с тем что когда я задаю дату прописывая в параметр sq_. Работает только через тере(01-01-2010), а не через точку (01.01.2010) как я делал раньше. С чем это связано?

Нравится

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

В Вашем случае, думаю, без собственной формы фильтрации не обойтись. Во вложении к сообщению находится пример реализации собственного окна для того, чтобы дата, выбранная в окне подставлялась в отчете вместо даты накладной.
Касательно второго вопроса, то скорее всего у Вас изменились региональные настройки, а именно формат отображения краткой даты на 01-01-2010 вместо 01.01.2010.

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

"itmaster_muh" написал:Какие у вас хорошие доки. А где можно их почитать не по конкретным вопросам, а в целях собственного развития?

Спасибо!:)

Обращайтесь в Support и мы предоставим Вам необходимую информацию в виде инструкций, алгоритмов и т.д.

Просто укажите интересующую Вас тему!:smile:

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

Зачастую при построении бизнес-процесса необходимо огранизовать передачу параметров из диаграммы в элементы, из одного элемента в другой.
В версии 3.3 появился очень удобный функционал, который делает это автоматически и избавляет от необходимости прописывать передачу параметров вручную.
Итак, для того, чтобы передать параметры в бизнес-процессе, необходимо выполнить следующее:
1. Открываем сервис диаграммы. В свойствах диаграммы выбираем Parameters. В появившемся окне создаем параметр диаграммы, например DocumentID. Сохраняем изменения.
2. В том случае если бизнес-процесс состоит из задач, то необходимо также создать этот параметр и для задач. Для этого открываем сервис wa_TaskAction. В свойствах этого действия также есть Parameters. Выбираем это свойство, в появившемся окне добавляем параметр DocumentID для действия задачи. Сохраняем изменения.
3. Далее возвращаемся в диаграмму процесса. Нажимаем на кнопку "Связи параметров". В появившемся окне нужно связать параметр диаграммы и параметр элементов.
Визуально окно разделено на три части. В верхней находятся параметры диаграммы. В нижней левой части перечень всех элементов процесса, в нижней центральной части - параметры каждого из элементов. Так вот, выделяем задачу слева, выбираем параметр задачи DocumentID, нажимаем на кнопку "Изменить". В окне выбираем опцию "Параметр диаграммы" и указываем DocumentID.
Аналогичным образом связываем параметры с каждой задачей.
Сохраняем изменения.
И все...

Желаю удачи!

С уважением,
Мельникова Екатерина

Нравится

Поделиться

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

В приложении Terrasoft CRM есть возможность изменить стандартные графики: оси, параметры осей, их визуальное отображение.
Для этого необходимо сделать видимой кнопку amiSettings на закладке невизуальных компонент сервиса wnd_GraphDetail (присвоить свойству IsVisible = true). После сохранения внесенных изменения, перезапуска приложения Terrasoft CRM, на закладке "Графики" в любом из реестров отобразится кнопка "Свойства". Нажав на нее Вы увидите окно со множеством опций, предназначенных для редактирования графиков в системе.

Желаю удачи!

С уважением,
Мельникова Екатерина

Нравится

Поделиться

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

Спасибо!

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

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

Terrasoft X15 3.2.1.14

Создала вот такой запрос с групповым фильтром:

SELECT
        [tbl_Screen].[ID] AS [ID],
        [tbl_Screen].[CreatedOn] AS [CreatedOn],
        [tbl_Screen].[CreatedByID] AS [CreatedByID],
        [CreatedBy].[Name] AS [CreatedByName],
        [tbl_Screen].[ModifiedOn] AS [ModifiedOn],
        [tbl_Screen].[ModifiedByID] AS [ModifiedByID],
        [ModifiedBy].[Name] AS [ModifiedByName],
        [tbl_Screen].[Name] AS [Name],
        [tbl_Screen].[ScreenStatusID] AS [ScreenStatusID],
        [ScreenStatus].[STATUS] AS [ScreenStatusName],
        [tbl_Screen].[ScreenOnOffID] AS [ScreenOnOffID],
        [ScreenOnOff].[ScreenOnOff] AS [ScreenOnOffName],
        [tbl_Screen].[RoutionDiscID] AS [RoutionDiscID],
        [RoutineDisconnection].[Name] AS [RoutionDiscName],
        [tbl_Screen].[ScreenPath] AS [ScreenPath],
        [tbl_Screen].[StartRoutineDisconnection] AS [StartRoutineDisconnection],
        [tbl_Screen].[EndRoutineDisconnection] AS [EndRoutineDisconnection],
        CAST(CONVERT(VARCHAR(8), [tbl_Screen].[DeletedOnDate], 112) AS DATETIME) AS [DeletedOnDate],
        [tbl_Screen].[TurnOnDate] AS [TurnOnDate]
FROM
        [dbo].[tbl_Screen] AS [tbl_Screen]
LEFT OUTER JOIN
        [dbo].[tbl_Contact] AS [CreatedBy] ON [CreatedBy].[ID] = [tbl_Screen].[CreatedByID]
LEFT OUTER JOIN
        [dbo].[tbl_Contact] AS [ModifiedBy] ON [ModifiedBy].[ID] = [tbl_Screen].[ModifiedByID]
LEFT OUTER JOIN
        [dbo].[tbl_Resolution] AS [Resolution] ON [Resolution].[ID] = [tbl_Screen].[ResolutionID]
LEFT OUTER JOIN
        [dbo].[tbl_ScreenType] AS [Type] ON [Type].[ID] = [tbl_Screen].[TypeID]
LEFT OUTER JOIN
        [dbo].[tbl_ScreenStatus] AS [ScreenStatus] ON [ScreenStatus].[ID] = [tbl_Screen].[ScreenStatusID]
LEFT OUTER JOIN
        [dbo].[tbl_ScreenOnOff] AS [ScreenOnOff] ON [ScreenOnOff].[ID] = [tbl_Screen].[ScreenOnOffID]
LEFT OUTER JOIN
        [dbo].[tbl_RoutineDisconnection] AS [RoutineDisconnection] ON [RoutineDisconnection].[ID] = [tbl_Screen].[RoutionDiscID]
WHERE((([tbl_Screen].[ScreenStatusID] = :StatusIDIsntWorking AND
        NOT [tbl_Screen].[TurnOnDate] = :TimeIsNull) OR
        [tbl_Screen].[ScreenStatusID] = :StatusIDWorking OR
        ([tbl_Screen].[ScreenStatusID] = :StatusIDDeleting AND
        NOT [tbl_Screen].[DeletedOnDate] = :TimeIsNull) OR
        [tbl_Screen].[ScreenStatusID] = :StatusIDNoConnection))
ORDER BY
        8 ASC

Для всех параметров заданы значения и нет необходимости передавать их из кода.
1)Как можно включить этот фильтр в коде без передачи значений параметров?

2) NOT [tbl_Screen].[TurnOnDate] = :TimeIsNull
Здесь поле время не должно быть пустым - это условие запроса, какое значение должно быть задано параметру? Его просто оставить пустым?

Спасибо!

Нравится

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

Обычно используются функции (скрипта scr_DB) ApplyDatasetFilter(...) - ApplySelectQueryFilter(...) - EnableSelectQueryFilters(...) - EnableFilters(...).
Посмотрите, какую из них Вам удобнее всего будет использовать.

я знаю, что используют эти функции. Дело в том, что функции Apply требуют ParameterValue, если указывать null, то выскакиевает ошибка. А функции Enable просто включают фильтр, но запросы в базу не отправляют.
Если у меня в сервисе sq уже указаны значения для параметров, как мне их использовать? Как вызывать функцию ApplyDatasetFilter не указывая значения параметра? Как включить группу фильтров (у каждого фильтра свой параметр с уже заданным значением)?

Все правильно:
Включите фильтры с помощью EnableSelectQueryFilters(...) или EnableFilters(...) Значение параметров там не требуется.

Запросы в базу пойдут при обновлении набора данных Dataset.Open() или SelectQuery.Execute().
Если Вы установили фильтры (любым способом), это не значит что запрос автоматически будет выполняться :)

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

Я могу и ошибаться, но, по-моему, нужно писать NOT [tbl_Screen].[TurnOnDate] IS NULL, потому что (NULL = NULL) = false

Да, верно. На тот момент я не тот фильтр использовала.

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