А можно ли в 7.x создать в деталях в карточке предустановленные фильтры? Например, в Истории отображаются счета, но хочется, чтобы была возможность увидеть неоплаченные счета. Или в Активностях увидеть невыполненные задачи и т.д.?
Аналогично, как в 3.x были GridView

Нравится

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

Приходит в голову только использовать View и детали на их основе.

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

используйте filterMethod (можно задать любой фильтр), но, конечно, для каждого "грида" надо делать свою деталь
посмотрите деталь Взаимосвязи в Контрагентах:

Relationships: {
					schemaName: "AccountRelationshipDetailV2",
					filterMethod: "relationshipDetailFilter",
					defaultValues: {
						AccountA: {
							masterColumn: "Id"
						}
					}
				}
Показать все комментарии

Добрый день !

Есть такой запрос:

var select = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "Equipment1C" });
select.isDistinct = true;
select.addColumn("OwnerCode1C");
select.addColumn("OwnerName");
select.addColumn("Account");
select.addColumn("AccountOrganizationChart");
select.addColumn("Contact");

var emptyStr = "";
select.filters.add("ownerCode1CFilter", Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.NOT_EQUAL, "OwnerCode1C", emptyStr, Terrasoft.DataValueType.TEXT));

условие where при этом не создается.
Если, например, написать

var emptyStr = "00057";
select.filters.add("ownerCode1CFilter", Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.NOT_EQUAL, "OwnerCode1C", emptyStr, Terrasoft.DataValueType.TEXT));

то работает.

Как создать фильтр для условия

OwnerCode1C > ''

?

Нравится

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

Здравствуйте!
Попробуйте такой фильтр

select.filters.add("ownerCode1CFilter", Terrasoft.createColumnIsNotNullFilter("OwnerCode1C"));

Спасибо, получилось.
В запросе такое условие получается

NOT [Equipment1C].[OwnerCode1C] = @P1

если кому-то интересно

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

Здравствуйте!
Возник вопрос в продолжение данной темы.
https://community.terrasoft.ru/forum/topic/11426

Во вложение постоянно попадает один и тот же счет. В чем может быть проблема? Похоже, что не накладывается фильтрация, или накладывается неверно.

Нравится

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

Здравствуйте, Александр!
Приведите, пожалуйста, фргменты кода, где передаются и накладываются фильтры, чтобы можно было быстро проанализировать и понять, в чем проблема.
Вы также можете самостоятельно провести анализ, воспользовавшись советом из темы http://www.community.terrasoft.ru/forum/topic/10810 .
текст запроса не обязательно логировать, его можно вывести в сам отчет в элемент "Текст" следующим образом:

ErrorLabel.Text = "error text";

Спасибо!

Здравствуйте, Андрей!
Я уже разобрался,неверно передавал фильтры. Спасибо!

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

Можно ли фильтр Ответственный из раздела Активностей (пояснение на картинке) создать в другом разделе? Как?

Нравится

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

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

Посмотрите пример в ActivitySectionV2 пакета NUI.

Думаю, Вам необходимо добавить на страницу раздела метод initFixedFiltersConfig:

				initFixedFiltersConfig: function() {
					var fixedFilterConfig = {
						entitySchema: this.entitySchema,
						filters: [
							{
								name: "Owner",
								caption:  this.get("Resources.Strings.OwnerFilterCaption"),
								columnName: "Owner",
								defValue: this.Terrasoft.SysValue.CURRENT_USER_CONTACT,
								dataValueType: this.Terrasoft.DataValueType.LOOKUP,
								filter: BaseFiltersGenerateModule.OwnerFilter,
								appendFilter: function(filterInfo) {
									var filter;
									if (filterInfo.value && filterInfo.value.length > 0) {
										filter = Terrasoft.createColumnInFilterWithParameters(
											"[ActivityParticipant:Activity].Participant",
											filterInfo.value);
									}
									return filter;
								}
							}
						]
					};
					this.set("FixedFilterConfig", fixedFilterConfig);
				}

И вызвать его на init'е:

...
this.initFixedFiltersConfig();
...

Единственное что, в Активностях он работает по участникам, Вам же надо просто по колонке Owner в объекте Вашего раздела.

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

Добрый день
Нужно отфильтровать поле справочника по фильтру "Сотрудник нашей компании"
Поле справочника находится в карточке.
Подскажите как это можно сделать... желательно через JS

Нравится

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

Здравствуйте, Николай!

Используйте предустановленный фильтр, который используется для фильтрации поля "Ответственный" во всех карточках:

{
type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,
name: 'Owner',
columnPath: 'Owner',
dataValueType: Terrasoft.DataValueType.LOOKUP,
visible: true,
filter: BaseFiltersGenerateModule.OwnerFilter
}

Сам фильтр описан в BaseFiltersGenerateModule:

function OwnerFilter() {
		return Terrasoft.createColumnIsNotNullFilter('[SysAdminUnit:Contact].Id');
	}

"Безродный Андрей" написал:

Здравствуйте, Николай!

Используйте предустановленный фильтр, который используется для фильтрации поля "Ответственный" во всех карточках:

{

type: Terrasoft.core.enums.ViewModelSchemaItem.ATTRIBUTE,

name: 'Owner',

columnPath: 'Owner',

dataValueType: Terrasoft.DataValueType.LOOKUP,

visible: true,

filter: BaseFiltersGenerateModule.OwnerFilter

}

Сам фильтр описан в BaseFiltersGenerateModule:

function OwnerFilter() {

                return Terrasoft.createColumnIsNotNullFilter('[SysAdminUnit:Contact].Id');

        }


данный код добавлять в methods или attributes?

В attributes.

В конфигурации есть множество примеров.

Для фильтрации справочного поля используйте пример, как на скриншоте ниже:

[URL=http://fastpic.ru/][IMG]http://i64.fastpic.ru/big/2014/1023/43/d0ec396d…]

"Безродный Андрей" написал:

В attributes.

В конфигурации есть множество примеров.

Для фильтрации справочного поля используйте пример, как на скриншоте ниже:


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

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

Добрый день!

Надо создать сложный фильтр такого типа:
Field1 == 'XX' AND ((Field2 == 'YY' AND Field3 == 'ZZ') OR (Field4 == 'QQ' AND Field5 == 'RR'))

Попытка построить вот такой фильтр, как на скриншоте, ничего не даёт.
Подскажите, пожалуйста, в чем здесь "фишка"?

Нравится

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

Есть возможность запрофайлить запрос в момент нажатия на кнопку "Применить"? Какой запрос идет в базу? Попробовал на версии 3.5.2.19 - всё ок:

WHERE((([tbl_Account].[PrimaryContactID] IN (@P1) AND
	(([tbl_Account].[AccountTypeID] IN (@P2) AND
	((LEN(LTRIM([tbl_Account].[Communication1])) <> 0) AND
	NOT [tbl_Account].[Communication1] IS NULL)) OR
	([tbl_Account].[AccountTypeID] IN (@P3) AND
	((LEN(LTRIM([tbl_Account].[Communication1])) <> 0) AND
	NOT [tbl_Account].[Communication1] IS NULL))))))

У нас версия 3.3.2.309.
Запрофайлил: запрос в БД идёт с неправильной группировкой.

WHERE((([tbl_Cashflow].[ManagerID] IN (@P1) AND
(([tbl_Cashflow].[StatusID] IN (@P2) AND
(((([tbl_Cashflow].[ClauseID] IN (@P3)))) OR
[tbl_Cashflow].[StatusID] IN (@P4)) AND
([tbl_Cashflow].[ClauseID] IN (@P5)))))))

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

Завтра на уровне технической поддержки проверим и сообщим Вам результат.

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

Проверили на версии 3.3.2.

Результат аналогичен Вашему.

В более поздних версиях этой проблемы уже нет.

Завтра на протяжении дня сообщу Вам возможные решения данного вопроса.

"Безродный Андрей" написал:

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

Проверили на версии 3.3.2.

Результат аналогичен Вашему.

В более поздних версиях этой проблемы уже нет.

Завтра на протяжении дня сообщу Вам возможные решения данного вопроса.

Спасибо, ждём.

Добрый день!

Уточнили информацию.

Действительно, данная ошибка имела место быть на всех версиях 3.3.2 и была исправлена в версии 3.4.

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

Соответственно единственный вариант решения проблемы - это обновление на новую версию.

Для версии 3.3.2 возможно выполнить лайт-переход на версию 3.4.1, но при этом Вам необходимы лицензии на продукт версии 3.4.1, согласовать добавление которых Вы можете с Вашим ответственным менеджером.

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

Есть запрос в котором нужно фильтровать данные по незаполненным полям в БД.
На форме фильтрации есть чекбоксы, при выбранном чексе будет включаться фильтн на is null.

var DatasetUSIList = ReportPreviewer.Report.Attributes('DatasetUSIList');
       
        for (var i = 0; i DatasetUSIList.length; i++) {
            var ReportDatasetUSI = DatasetUSIList[i];
            var ReportDataset = ReportPreviewer.DatasetByUSI(ReportDatasetUSI);
            ReportDataset.Close();
               
                ApplyDatasetFilter(ReportDataset, 'FromDate', FromDate, FromDateFilterEnabled);
                ApplyDatasetFilter(ReportDataset, 'ToDate', ToDate, ToDateFilterEnabled);
                                                                               
        var BranchIDs = edtBranchIDs.Tag.split(',');
                ApplyDatasetIncludeFilter(ReportDataset, 'BranchIDs', BranchIDs, BranchFilterEnabled);         
               
                var OwnerIDs = edtOwnerIDs.Tag.split(',');
                ApplyDatasetIncludeFilter(ReportDataset, 'OwnerIDs', OwnerIDs, OwnerFilterEnabled);              
               
                //Включение доп параметров
                if(Fields.IsChecked != false){
                        EnableDatasetFilters(ReportDataset, true, 'FieldsIDin');
        }
                //             
        }

Но в скрипте я его немогу включить. Подскажите что я делаю не так?

Нравится

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

Не понятно, т.е. код в скрипте отрабатывает, но фильтры в запрос не добавляются?

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

Не понятно, т.е. код в скрипте отрабатывает, но фильтры в запрос не добавляются?

С уважением,

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


Совершенно верно, так как параметры находятся в подзапросе, и как к ним добраться я не знаю!

Ну, значение параметра можно установить так:

SetParameterValue(myDataset.SelectQuery.Parameters, 'myParamName', 'myParamValue');

А включить фильтр в подзапросе можно либо сразу же в сервисе, либо вручную:

myDataset.SelectQuery.Items(0).Filters.ItemsByName('myFilter').IsEnabled = true;
Показать все комментарии

День добрый, коллеги!

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

Может кто сталкивался с данной проблемой?
Заранее спасибо.

Нравится

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

Какая используется версия бинарников?

Александр, добрый день.
Там, где работает, бинарники 3.3.2.210
А где нет - 3.3.2.43

Как я понимаю, всё дело в этом?

Денис,

да, исправления были внесены в новую версию бинарных файлов.

Вам необходимо обновить бинарные файлы.

По запросу в техническую поддержку (support@terrasoft.ru) мы можем предоставить Вам самую актуальную версию (на данный момент - 3.3.2.311).

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

Добрый день.

Хотелось бы узнать как можно отфильтровать Dataset по пустой строке. (т.е. строка не указана)
Напр. в таблице есть поле 'Number', тип - строка.
Казалось бы ApplyDatasetFilter(Dataset, 'Number', '', true) должно решить проблему, но нет. (false, null тоже не работают).

Также хотелось бы узнать как можно фильтровать по полю >, , >= и т.д. (по числовому полю)

Благодарю за помощь.

Нравится

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

Ваши вопросы решаются добавлением новых фильтров в сервис Select Query.

В первом случае нужно сделать отдельный фильтр типа "Is Null" для этой строки. Если она кроме Null может быть и "", то надо сделать ещё и фильтр сравнения со строкой (равной пустой строке) и оба фильтра связать условием "или".

Для больше и меньше аналогично, создаются фильтры сравнения и в них вместо равенства выбирается больше или меньше.

"Зверев Александр" написал:

Ваши вопросы решаются добавлением новых фильтров в сервис Select Query.

В первом случае нужно сделать отдельный фильтр типа "Is Null" для этой строки. Если она кроме Null может быть и "", то надо сделать ещё и фильтр сравнения со строкой (равной пустой строке) и оба фильтра связать условием "или".

Для больше и меньше аналогично, создаются фильтры сравнения и в них вместо равенства выбирается больше или меньше.

Понятно, а как мне их применить, когда необходимо? Они будут нужны в зависимость от определенных условий.

Если параметры заданы прямо в фильтре, то функцией EnableDatasetFilters.

"Зверев Александр" написал:

Если параметры заданы прямо в фильтре, то функцией EnableDatasetFilters.


А если их необходимо задать в коде?

Тогда SetParameterValue.

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

"Зверев Александр" написал:

Тогда SetParameterValue.

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


Спасибо за быстрый отклик, буду пробовать.

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

Требуется передать значения фильтров в отчет. Хотелось не перебирать операторы сравнения с помощью отладчика. В SDK нашел перечисление, вроде подходящее - Перечисление _DateTimeOperatorTypeEnum. Дай думаю проверю на нескольких данных. Поставил оператор сравнения в фильтре «Прошлый год». Получил в отладчике fbcMain.DataFieldsList.Items(0).CompareOperator = 17. И что имеем в SDK dotLastYear = 17, и dotLastYear = «В течение года до текущей даты». В связи с этим вопрос – а можно ли доверять так рекламируемому SDK. Кстати точный перевод Last Year это Прошлый год. Остальные значения можно определить только тупым перебором? (типы поля сравнения и к нему операторы сравнения).
Дальше оказалось еще интереснее. При исследовании (тупым перебором) установки для поля типа Справочник выяснилось, что при установке «Пусто», «Не пусто» и «Текущий контакт» окно выбора фильтров само сбрасывает установку на «Пусто» после формирования отчета и выяснить CompareOperator не представляется возможным! Уже боюсь копать дальше.

Пытаемся Строить отчет:

После нажатия ОК имеем:

Это нормально?

Нравится

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

Владимир, как устанавливаете значения для условий фильтрации окна?

Щелкаю левой кнопкой мышки по знаку и в низпадающем списке по "Не пусто". Поле этого по кнопке ОК. Есть другие варианты?

Другие варианты есть - на уровне скриптовой логики.
Проверяла на версиях 3.3.2 - 3.4.1, работает корректно.
На какой версии и сборке у Вас воспроизводится такое поведение (и уточните, пожалуйста, доп. информацию для воспроизведения)?

Версия 3.2.0.81

Уважаемая, Наталия, поделитесь как можно "на уровне скриптовой логики" узнать какой оператор установлен пользователем в фильтре. Буду очень признателен. (и конечно очень хочется узнать как можно этот самый оператор установить)

Попробовал на версии 3.4.0.50
fbcMain.DataFieldsList.Items(i).CompareOperator кроме "<>" все остальные ноль. Но хоть не сбрасывает. Хотя это мне не поможет, так как работаем на старой версии.

"Прищепа Владимир" написал:Уважаемая, Наталия, поделитесь как можно "на уровне скриптовой логики" узнать какой оператор установлен пользователем в фильтре. Буду очень признателен. (и конечно очень хочется узнать как можно этот самый оператор установить)

Владимир, смотрите в сторону скрипта wnd_ReportFiltersScript, функция LoadFilters (может быть полезной статья http://www.community.terrasoft.ru/forum/topic/7477)

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

Уважаемая, Наталия, а департамент разработки не может поделиться информацией как "на уровне скриптовой логики" узнать какой оператор установлен пользователем в фильтре. Буду очень признателен и Вам и департаменту разработки. (и, как обычно, очень хочется узнать как можно этот самый оператор установить)

Владимир, а Наталья дала вам ссылку с примером
А я добавлю ссылку на SDK
http://terrasoft.ru/sdk/index.html?frmname=topic&frmfile=MEMBEROVERVIEW…

"Бондарь Наталия" написал:Воспроизвела на версии 3.2.0 сбрасывание оператора сравнения - вопрос передан в департамент разработки.

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

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