Добрый день.
Нужно создать новый отчет.
Создал sq_ ds_ и fr_
Отчет запускается из реестра Контрагенты.
Нужно, что бы в отчет попадали только записи, которые отображаются в реестре. (например стоит фильтр, или записи из группы) У меня сейчас отображаются все существующие записи контрагентов.
В SQ_ поставил создал параментр AccountID и соответствующий фильтр сравнения
При подключении отчета в типе фильтрации стоит "Для всех записей" (правда проботвал и для выделенных)
Помогите пожалуйста решить проблему
Нравится
Добрый день!
Если я правильно понял ваш вопрос, то попробуйте сделать следующее.
1. В параметры sq_ добавить параметр ID с типом "Уникальный идентификатор".
2. В Фильтры добавить фильтр tbl_Account.ID = Параметр: ID (выключенный, т.е. со снятой галкой)
3. В Фильтры добавить Include Filter с кодом IDs и полем tbl_Account.ID (также выключенный).
4. В параметрах отчёта выбрать "Для выделенных записей"
Спасибо.
Сделал - не полуилось
;-(
Запрос довольно сложный с Union ALL
Аналогичный запрос как в истории в контрагентах
попробуйте поискать в конфигурации сервисы fr_ и посмотреть примеры. думаю там найдётся что-то похожее. сам обучался методом тыка :)
и ещё один нюанс. пробовали делать фаст репорты на базе запросов с union all. так вот то что было после union all не вытягивалось в отчёт, хотя в запросе все данные вытягивались. попробуйте сделать часть без union all и всё должно отработать
Поискал уже не нашел....
Вот что нашел...
В scr_BaseWorkSpace
} else { ApplySelectQueryFilter(SelectQuery, 'ReportID', ReportID, true); ApplySelectQueryIncludeFilter(SelectQuery, 'ValueIDs', FilterFieldValues, true); var ReportCustomTypesDataset = SelectQuery.Open(); MenuIsVisible = (!IsDatasetEmpty(ReportCustomTypesDataset)); ReportCustomTypesDataset.Close(); }
Есть два фильтра ReportID и ValeuesIDs
Правда я такие тоже создавал и ничего не получилось...
Хотелось бы понять, где запускается применение фильторов, прежде чем запустить отчет?
По крайней мере в версии 3.3.2 есть встроенный функционал, который позволяет с использованием описанного выше алгоритма получать данные для выделенных записей.
Если хотите попробовать события, то в главном окне отчёта в левом верхнем углу есть вкладка "События" и там есть событие "OnPrepare", в нём и можно будет применить фильтры к нужному selectquery
По одной выделенной записи у меня получилось....
А вот по нескольким не выходит...
Может вообще есть другой путь...
Задача следущая
Нужно выести отчет последнего "воздействия"
Все контрагенты разбиты на группы.
Каждый менеджер отвечает за свою группу
Нужен отчет, в котором быдет выводится все контрагенты из данной группы и будет указано для каждого дата последнего действия по нему (задача, заказ, звонок и т.д.)
Запрос аналогичен запросу в детали История.
В общих чертах можно сделать следующим образом:
1. Создать sq_ где главной таблицей сделать таблицу контактов (в вашем случае, та где расположены менеджеры).
2. В ней сделать Include Filter с названием, например, IDs.
3. Построить полностью структуру запроса.
4. Сделать окно предварительного выбора на базе wnd_BaseEdit, в котором будет лукап контрол с возможностью множественного выбора. Для удобства поле можно отфильтровать по нужному вам типу (например, где тип = "Менеджер").
5. К окну сделать скриптик, который будет передавать из этого онка фильтры в Include Filter запроса. Для этого надо расписать событие btnOKOnClick .
А дальше стандартно датасет и сам сервис fr_
Кирилл, здравствуйте!
"Хомутов Кирилл" написал:Запрос довольно сложный с Union ALL
А Вы эти фильтры (ИД и Идс) прописали везде в Юнионе, т.е. в каждом селекте?
Насчет
"Хомутов Кирилл" написал:Где можно посмотреть как запускаются эти отчеты?
то в скрипте scr_ReportUtils есть функция
function ShowSelectedRecordsReport(ReportCode, FilteredDatasetCode, GridDatasetIDs, FilterForm) { 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); var Select = GetSelectQueryPrimarySelect(ReportDataset.SelectQuery); var Filters = Select.Filters; Filter = GetSelectQueryFilterByCode(ReportDataset.SelectQuery, 'IDs'); if (!Assigned(Filter)) { Filter = Filters.CreateIncludeFilter(); Filter.Code = 'IDs'; Filters.Add(Filter); Filter.TestExpression = Filter.CreateFieldFilterExpression(); Filter.TestExpression.TableAlias = Select.FromTableAlias; Filter.TestExpression.Field = Select.FromTable.Fields.ItemsByName('ID'); } var Enabled = (GridDatasetIDs.length > 0); ApplyDatasetIncludeFilter(ReportDataset, 'IDs', GridDatasetIDs, Enabled); if (Assigned(FilterForm)) { SetAttribute(ReportPreviewer, 'FilterForm', FilterForm); SetAttribute(ReportPreviewer, 'ShowFilterForm', true); } ReportPreviewer.Build(); ReportPreviewer.Prepare(); ReportPreviewerComponent.DatasetByUSI(FilteredDatasetCode) = ReportDataset; }
в которую и передаются ИД выделенных записей для построения отчета.
Создавать для этих целей свое окно фильтрации, как описано в предыдущем посте... Не совсем правильно, учитывая, что можно использовать базовый функционал -- просто в Вашем случае нужно в нем разобраться. Можно сделать действительно новый запрос-датасет-отчет, используя как главную таблицу контактов (т.е. без юниона) -- но свое окно фильтрации не делать, а просто создать 2 фильтра -- ИД и Идс, и правильно указать настройки при регистрации отчета в системе.
И еще: у Вас точно в настройках отчета (в Клиенте, раздел Отчеты, Ваш отчет -- изменить свойства) указан тип фильтрации "для выделенных записей"?
Проблему решил
Собственно решение было здесь
http://www.community.terrasoft.ru/forum/topic/8069
Возникла другая проблема !!!!
Теперь при попытке выполнить отчет под не администраторским правами
Выдается ошибка
Разрешение SELECT запрещено для объекта "tbl_Incident", базы данных "TSCRM", схемы dbo. Ошибка открытия источника данных "ds_AccountLastHistory"
Таблица tbl_Incident последния среди всех Union
Принудительно в прямо в базе прописал разрешение на эту таблицу.
ругнулось так же на следущую tbl_Opportunity.
Но по таблице tbl_Opportunity у меня точно есть работающие отчеты, правда без использования Union.
Права естественно есть все, раздал еще на уровне все пользователи.
Помогите пожалуйста решить проблему.
скажите, а Вы случайно не используете кастом-колонки в запросе?
Просто для них нужно в писать не "tbl_", представления -- "vw_".
Подробнее -- в этом блоге.
Тоже с ними в свое время намучилась, только у меня, правда, оно не ругалось так, как у Вас -- просто не отображало некоторые записи, либо вообще ничего не отображало...
Если же ошибка не в этом -- возможно, все-таки права доступа, нужно разбираться...
Использую колонки константы
и Кастом фильтры.
Спасибо, буду разбираться.
Думал простой отчет, сделаю за час :-)))
Все !!!!!
Всем спасибо!!!!
Действительно, все как писала Ольга. (Огромное персональное СПАСИБО!!!)
Заменил в кастом фильтре tbl на vw (правда не везде ;-))) ) и заработало!!!!
Кирилл, рада была помочь))))
Представления везде и не нужно проставлять -- только те таблицы, которые администрируются по записям. Обычно это "основные" таблицы разделов: Контакты, Контрагенты, Договора, Продажи и т.п. А вот Справочники, например, НЕ администрируются по записям, поэтому их заменять на представления не надо.
Насчет ссылки, которую я дала -- она актуальна для администраторов системы, потому что для них по умолчанию доступны все записи, а представления могут делать "выборку", исходя из разданных прав -- и получится "нестыковка". поэтому нужно подменять "вв_" (представления) на "тбл_"(таблицы) перед открытием датасета, о чем и написано в том блоге.