Добрый день
Есть ли видео урок, как делать отчеты-диаграммы ?

Нравится

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

Может, это (где-то в середине ролика) поможет?
Также посмотрите другие ролики этого пользователя, особенно старые. В основном там 7.Х, но есть и 5.Х.

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

Здравствуйте коллеги. Подскажите пожалуйста как сделать так чтобы в выпадающем списке была фильтрация типа CONTAIN? а не START_WITH. CONTAIN работает только тогда, когда ввести знак % перед текстом. Возможно сделать поиск типа CONTAIN без знака %.
Возьмите во внимание что системная настройка Тип сравнения для строковых колонок = 1.
См фото.

Нравится

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

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

Системная настройка влияет только на быстрый поиск в разделе.

Для решения Вашего вопроса необходимо заместить схему LookupPageViewModuleGenerator. В данной схеме есть метод pushSelectFilters. Именно этот метод отвечает за тип поиска. В базовой версии тип поиска START_WITH. В замещающей схеме Вам необходимо заменить тип поиска на CONTAIN.

Важно! Данное изменение замедлит быстродействие системы, поскольку поиск "%запрос%" отрабатывает значительно медленнее, чем поиск "запрос%".

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

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

За поиск значения в выпадающем списке отвечает метод getLookUpQuery. У этого метода есть переменная Terrasoft.SysSetting.lookUpFilterType. По умолчанию его значение - START_WITH. Вам необходимо переопределить значение данной переменной на CONTAIN. Это можно сделать на init BasePageV2.

Работает. Большое спасибо!

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

Добрый день

Пытаюсь сделать отчет. При сохранении - выдало ошибку:

Нравится

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

Татьяна, а как Вы делали отчёт, по этой инструкции (стр. 524)?
Может, что-то не заполнили?

я делала по видеоинструкции (Город-Страна)

А что, напр., я могла не заполнить?

Татьяна, а можете дать ссылку на эту инструкцию?
Расскажите подробнее, что именно делали?
Вы создавали отчёт с нуля или правили уже существующий?
Сохраняли в файл или в базу?

Такое воспроизводится каждый раз на любом отчёте или только на одном конкретном?

Сделала все заново - получилось! но ошибка так и осталась непонятной...

Скажите, пжста, каким образом мне сделать выборку еще и по Состоянию активности (по прооисхождению Инцидента - уже сделано)?
Т.е. в отчете мне нужно сгруппировать Активности так:

Инцидент.Происхождение
Активность.Состояние
А здесь уже список активностей, попадающих под данную выборку

Заранее спасибо

И еще вопрос - как сделать отчет за заданный период ?

"TatianaM" написал:

Сделала все заново - получилось! но ошибка так и осталась непонятной...


Вероятно, какой-то случайный сбой.

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

По поводу периода, код на скриншоте очень похож на обычную работу с EntitySchemaQuery в системе.
Может, там и подойдёт обычное наложение фильтра методом CreateFilterWithParameters?

Да, лучше так:

Инцидент.Происхождение
Инцидент.Номер
здесь уже список активностей с типом Задача, привязанных с этому номеру Инцидента.

Только мне нужно суммировать трудозатраты (это поля в активностях) по конкретному номеру Инцидента. Не пойму, как сделать эти итоги.

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

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

Чтобы выглядело примерно так:

Происхождение - Е-мейл
Номер Инцидент 1
активность
активность
активность
активность
активность
Номер Инцидент 2
активность
активность
активность
Происхождение - Звонок
Номер Инцидент 3
активность
активность
активность
активность
активность
Номер Инцидент 4
активность
активность
активность

"По поводу периода, код на скриншоте очень похож на обычную работу с EntitySchemaQuery в системе".
- а как сделать так,чтобы период можно было выбрать, напр.:


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

Может, Вы хотите построить отчёт с деталью? См. стр. 525 по этой инструкции.

Да, я строю отчет с Деталью.
В инструкции на стр 527 написано:

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

- это где? потому что у меня что-то вывод активностей получается не связанным по группам.

По поводу выбора периода, в том отчёте, что Вы смотрите, есть 2 схемы:
Первая, «Статистика работы службы поддержки», редактируется в дизайнере отчётов.
Вторая, «Страница настройки отчета "Статистика работы Службы поддержки"», унаследована от «Базовая страница параметров отчета» и редактируется в браузере, как обычная страница.

Посмотрите в этом отчёте, как происходит взаимодействие отчёта и страницы и попробуйте аналогично.

ок, посмотрю

ок, посмотрю

ок, посмотрю

#14 TatianaM 17 ноября 2015 – 16:37
Да, я строю отчет с Деталью.
В инструкции на стр 527 написано:

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

- это где? потому что у меня что-то вывод активностей получается не связанным по группам.

Может, под признаком имеют в виду галочку в дереве на скриншоте выше?

это я поставила.

Подскажите пожалуйста, как на С# написать условие в скрипте отчета:
если в Инциденте поле "Происхождение" - такое-то, то далее выполняется вывод активностей.

Происхождение - Е-мейл
Номер Инцидент 1
активность
активность
активность
активность
активность

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

"Мария Ватулина" написал:

Татьяна, работа с отчётами описана в PDF-инструкции и видео-уроках, также в конфигурации можно посмотреть исходники уже существующих отчётов.

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


Мария ! а где их взять ?(

Кого, партнёров?
Есть страница, где они перечислены.

Мария уроки и инструкции по отчетам версии 5.2

Александр его делали.. только не понятно что там он не работает

У меня ссылка открывается.

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

Добрый день! Подскажите, пожалуйста, начинающему...
Были добавлены 3 новых поля на страницу case.
Создала замещающий модуль для страницы настройки и настроила правила отображения Поля1, если тип обращения = Жалоба. Но в итоге получаю, что поля никогда нет на странице (основа кода тут http://academy.terrasoft.ru/documents/?product=SDK&ver=7.6.0).

rules: {
        "UsrField11": {
        BindParametrVisibilePlaceByType: {
                ruleType: BusinessRuleModule.enums.RuleType.BINDPARAMETER,
                property: BusinessRuleModule.enums.Property.VISIBLE,
                conditions: [{
                leftExpression: {
                     type: BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                     attribute: "Category"
                                },
                        comparisonType: Terrasoft.ComparisonType.EQUAL,.
                        rightExpression: {
                                type: BusinessRuleModule.enums.ValueType.CONSTANT,
                                value: "1C9D7B67-9A81-41F8-89F5-B6BF69F821D6"
                        }
                }]
        }
}
},
                       

Нравится

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

Добрый день!
Подскажите, пожалуйста, как
1) очистить дату через элемент "Изменение данных" - то есть как обозначить пустую дату?
2) как сравнить в условии(условный поток) в бизнес-процессе дату с null (то есть проверить заполнена дата или нет)

Собственно, интересует вопрос как обозначить пустую дату? (незаполненную)
Например, строка - это string.Empty
а в случае даты?

Нравится

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

Дарья, добрый день!

На уровне приложения поле с типом DateTime является non-nullable. Т.е. установить значение null в элемент “Изменить данные” не получится.
Список доступных методов DateTime можно посмотреть в документации https://msdn.microsoft.com/en-us/library/system.datetime(v=vs.110).aspx
Если не указывать значение для поля с типом DateTime при создании записи в объекте – в базе данных будет установлено значение null.

а в условном потоке можно как-то проверить, заполнена дата или нет?

Если нельзя очистить дату с помощью элемента "Изменить данные", тогда как действовать? использовать элемент сценарий?

Здравствуйте, Дарья!

Для проверки заполнена дата или нет Вы можете в условном потоке сравнивать [#Параметр#] c минимальной датой (DateTime.MinValue).

Дата не заполнена, если [#Параметр#]<=(DateTime.MinValue).

Для очистки даты Вам нужно использовать задание-сценарий, т.к. элементом "Изменить данные" Вы сможете только задать значение DateTime.MinValue, которое соответствует 01.01.0001 (такое значение будет отображаться на странице редактирования/в реестре, что не очень красиво).

спасибо

Добрый день!
Использую такой код в сценарии для очищения даты
UserConnection userConnection = context.UserConnection;
var update = new Update(userConnection, "Case")
.Set("SolutionProvidedOn", new QueryParameter(null))
.Where("Id").IsEqual(new QueryParameter(RecordId));
update.Execute();
Возникает ошибка при исполнении процесса -
Ссылка на объект не указывает на экземпляр объекта.

Пробую использовать такой код в сценарии для очищения даты
UserConnection userConnection = context.UserConnection;
var update = new Update(userConnection, "Case")
.Set("SolutionProvidedOn", null)
.Where("Id").IsEqual(new QueryParameter(RecordId));
update.Execute();
При публикации объекта возникает ошибка

Как очистить дату с помощью элемента-сценарий?

Здравствуйте, Дарья!

Вы можете использовать CustomQuery.

var dr = new CustomQuery(UserConnection, String.Format(
"update case set SolutionProvidedOn = null where Id = 974ca9fc-c066-4a7a-ac65-7ec91a44a067")).ExecuteReader(dbExecutor);

При этом сам запрос Вам необходимо формировать отдельно (так как Id каждый раз будет новый).

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

Для объекта была создана деталь. Можно ли блокировать кнопку Добавить (или скрывать ее) в зависимости от определенного условия?

Нравится

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

Иван,

Есть 2 метода, которые можно переопределить getAddRecordButtonVisible и getAddRecordButtonEnabled.

Я бы на вашем месте управлял доступностью и переопределил метод getAddRecordButtonEnabled на странице детали.

        methods: {
            /**
             * Возвращает доступность кнопки добавления записи.
             * overriden
             * @returns {boolean}
             */
            getAddRecordButtonEnabled: function () {
                return (2 == 5);
            }
        },

Добрый день.

Скрытие кнопки можно реализовать следующим образом:
В схеме детали, в разделе diff, добавить следующее:

			{
				"operation": "remove",
				"name": "addRecordButton"
			}

Дмитрий, попробовал добавить метод на страницу детали, но кнопка по прежнему остается активной.

Юрий, такой подход, вероятно, не подойдет, потому что блокировать необходимо при некотором условии.

"Пажуков Иван Александрович" написал:            getAddRecordButtonEnabled: function () {
                return (2 == 5);
            }

Иван,

Можете скинуть скрипт страницы, на которую вы добавляете переопределение метода?

Дмитрий, могу скинуть.
pagescript.txt

Иван,

Вы изменяете страницу редактирования сущности "UsrNomMeterValues", а замещать метод нужно на странице детали данной сущности.

Поместил на страницу детали, результат тот же.
detailscript.txt

Иван, добрый день!

Во вложении пример замещающей схемы детали. Результат выглядит следующим образом:

disableaddbutton.txt

После сохранения схемы необходимо очистить кэш браузера.

А в какой момент эта кнопка будет блокироваться? При открытии страницы? Или при изменении условия во время редактирования/сохранения страницы?

Доброго.
При открытии страницы.

Добрый день!

Подскажите, а как нибудь можно сделать, чтобы допустим в контрагентах выводилась кнопка добавления, а например в контактах - нет для сервисных договоров при рабочее месте общее

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

/**
 * @inheritdoc Terrasoft.BaseManyToManyGridDetail#getSchemaInsertQuery
 * @overridden
 */
getSchemaInsertQuery: function() {
	var insert = this.callParent(arguments);
	var detailColumnName = this.get("DetailColumnName");
	if (detailColumnName) {
		var detailColumnType = detailColumnName === "Contact" ?
				ServiceDeskConstants.ServiceObjectType.Contact :
				ServiceDeskConstants.ServiceObjectType.Account;
		insert.setParameterValue("Type", detailColumnType,
			this.Terrasoft.DataValueType.GUID);
	}
	return insert;
},
 
/**
 * @inheritDoc Terrasoft.BaseGridDetailV2#getAddRecordButtonVisible
 * @overridden
 */
getAddRecordButtonVisible: function() {
	return !Terrasoft.isCurrentUserSsp() &amp;&amp; this.callParent(arguments);
},

 

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

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

 attributes: {
                "Order": {
                    lookupListConfig: {
                        columns: [
                            "Account.SxNAVCode", "SxShippingType.Code",
                            "Owner.SxNAVCode","SxContract.SxNAVCode",
                            "Date","Account.SxCFO.Code","Account.Id","Account.SxTradeChain.SxNAVCode", "Account.SxTradeChain.SxCFO.Code"
                            ,"Account.SxSalesOutletType","SxPaymentFormula","SxPaymentFormula.SxPaymentDelay","SxWarehouse.SxCode"
                        ]
                    }
                },

.........................................
//в секции rules
 "SxDesiredDiscount": {
                    "BindParameterEnabledToPaymentDelay": {
                        "ruleType": BusinessRuleModule.enums.RuleType.BINDPARAMETER,
                        "property": BusinessRuleModule.enums.Property.ENABLED,
                        "conditions": [
                            {
                                "leftExpression": {
                                    "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                                    "attribute": "Order.SxPaymentFormula.SxPaymentDelay"
                                    attributePath:""
                                },
                                "comparisonType": Terrasoft.ComparisonType.LESS,
                                "rightExpression": {
                                    "type": BusinessRuleModule.enums.ValueType.CONSTANT,
                                    "value": 45
                                }
                            }
                        ]
                    }
                },

в детали также добавлены колонки

getGridDataColumns: function() {
                var config = this.callParent(arguments);
                config["Order.Account"]= { path: "Order.Account" };
                config["Order.Date"]= { path: "Order.Date" };
                config["Order.SxPaymentFormula"]= { path: "Order.SxPaymentFormula" };
                config["Order.SxPaymentFormula.SxPaymentDelay"]= { path: "Order.SxPaymentFormula.SxPaymentDelay" };
                config["Order.Account.SxSalesOutletType"]= { path: "Order.Account.SxSalesOutletType" };
                return config;
            }

Проблема в том, что при добавлении требуемое значение при добавлении можно получить как:
this.get("Order")["SxPaymentFormula.SxPaymentDelay"]
а при изменении:
this.get("Order.SxPaymentFormula.SxPaymentDelay"));

Следовательно есть разница в работе правил.

Подскажите пожалуйста, как решить данную проблему? Как верно сформировать конфиг, чтоб он всегда был одинаковым?

Нравится

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

Александр, добрый день!

Попробуйте в leftExpression указать параметры attribute и attributePath так:

"attribute": "Order",
"attributePath":"SxPaymentFormula.SxPaymentDelay"

Я таким образом сразу пробовал. Не помогло. Все равно работает или при добавлении или при изменении.

Александр, самый простой способ - устанавливать значение атрибута в методе initEntity карточки детали. Примерно так:

initEntity: function(callback, scope) {
	this.callParent([function() {
		if (!this.get("Order.SxPaymentFormula.SxPaymentDelay")) {
			this.set("Order.SxPaymentFormula.SxPaymentDelay",
				this.get("Order") && this.get("Order")["SxPaymentFormula.SxPaymentDelay"]);
		}
		callback.call(scope || this);
	}, this]);
}

В бизнес-правиле в этом случае необходимо использовать только "attribute": "Order.SxPaymentFormula.SxPaymentDelay".

Олег, работает.
Спасибо за помощь!

Подскажите пожалуйста, пытаюсь добавить фильтрацию, одного поля по значению другого, в редактируемом реестре. - http://www.community.terrasoft.ru/forum/topic/15497

Тут рассматриваеться BINDPARAMETER, возможна ли работа правила FILTRATION?

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

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

подскажите, пожалуйста, как фильтровать значение поля детали по значению поля объекта, в котором деталь. У меня в продажах есть деталь Доп.соглашения,в которой есть поле-ссылка на Договор. Мне нужно фильтровать договора по полю Контрагент - показывать только те договора, которые принадлежат контрагенту текущей продажи.
Я создала карточку редактирования, прописала в ней бизнес правило со ссылкой на атрибут AccountId. Но не могу определить, когда заполнять этот атрибут. в момент, когда срабатывает initEntity в самой сущности Доп.соглашение еще не заполнено поле Продажа. а методы init, onEntityInizialized не срабатывают
Есть какой-то вариант, как я могу получить id текущей сущности(продажи), в которой находится деталь, из карточки редактирования детали (не из схемы детали, а из карточки)?

Добрый день, Любовь.

Насколько я понял Ваш кейс, вы пытаетесь добавить деталь, объект которой - Договор. Достаточно будет связать данную деталь с карточкой следующим образом - объект детали AccountId = объекта карточки AccountId.
Если же Вы пытаетесь добавить деталь, объект которой кастомный, и в нем просто присутствует поле Договор, то реализовать такую логику не получится. Действительно, init/onEntityInizialized при загрузке детали не срабатывают, они отработают только если Вы откроете объект детали на редактирование.

"Мотков Илья" написал:Если же Вы пытаетесь добавить деталь, объект которой кастомный, и в нем просто присутствует поле Договор, то реализовать такую логику не получится. Действительно, init/onEntityInizialized при загрузке детали не срабатывают, они отработают только если Вы откроете объект детали на редактирование.

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

Нет, отрабатывает только БизнесПравила, следовательно если через БП нет возможности реализовать такую логику, то нет, у вас не получится сделать ее с помощью вычисляемых атрибутов для РР.

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

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

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

Экспорт списка записей по дефолту сохраняет данные всего из нескольких полей. Как добавить другие?

Нравится

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

Виктор, добрый день!

В файл экспорта попадают поля, которые выведены в реестре раздела. Для решения задачи следует пейти в меню Вид - Настройка колонок, добавить интересующие поля.

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

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

Подскажите пожалуйста как узнать входит ли пользователь в определенную функциональную или организационную роль на клиенте и сервере.

Нравится

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

Здравствуйте.
В базе данных есть таблица SysUserInRole. Там содержится развязка вхождения пользователей в роли (поля SysUserID, SysRoleID). Сами пользователи и роли находятся в таблице SysAdminUnit.

Подскажите как добавить к стандартному полю Ответственный фильтрацию по определенной роли, использую SysUserInRole:

attributes: {
    "Owner": {
        dataValueType: Terrasoft.DataValueType.LOOKUP,
	lookupListConfig: { filters: [ function() {
		var filterGroup = Ext.create("Terrasoft.FilterGroup");
		filterGroup.add("IsPurchasingDepartment",
		Terrasoft.createColumnFilterWithParameter(
			Terrasoft.ComparisonType.EQUAL,
			"[SysUserInRole:SysUser:[SysAdminUnit:Contact].Id].SysRole",
			"eb2644b7-9647-440c-9a05-6318d8d9e3b2")); 
		return filterGroup;
		}]}
	}
}

При открытие появляется ошибка "Элемент коллекции с именем Id] не найден", насколько понял неправильно написано "[SysUserInRole:SysUser:[SysAdminUnit:Contact].Id].SysRole" использовал пример из SDK "Построение путей к колонкам относительно корневой схемы. 3) Колонка схемы по произвольному внешнему ключу"
с одной связью понятно, но для двух примера нет, подскажите как правильно построить путь, не получилось разобраться.

Такой уровень вложенности вероятно не получится сделать.
Попробуйте написать esq к таблице «SysAdminUnit» по условию «SysUserInRole» (join), и выберите из него Id этой самой «SysAdminUnit», прямо в функции фильтрации.
А полученный массив Id уже передайте через «createColumnInFilterWithParameters» как-то так:

define("AccountPageV2", ["AccountPageV2Resources", "GeneralDetails"],
function(resources, GeneralDetails) {
	return {
		entitySchemaName: "Account",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		attributes: {
			"Owner": {
				dataValueType: Terrasoft.DataValueType.LOOKUP,
				lookupListConfig: {
					filter: function() {
 
						// массив айди из SysAdminUnit, где-то тут напишите esq вместо него
						var idList = ["5CE92315-6128-44BE-A175-238EC6E3609F", "85C1DE5F-DD7E-4F8D-8F97-D3D8630A2C2F"];
 
						var filterGroup = new Terrasoft.createFilterGroup();
						var filterById = Terrasoft.createColumnInFilterWithParameters("[SysAdminUnit:Contact:Id].Id", idList);
						filterById.comparisonType = Terrasoft.ComparisonType.EQUAL;
						filterGroup.add("filterById", filterById);
 
						return filterGroup;
					}
				}
			}
		},
		methods: {},
		rules: {},
		userCode: {}
	};
});

Только вместо idList разумеется, будет результат esq.

Максим, ESQ на клиенте асинхронны, т.е. ваш вариант не подходит.
Сделал через представление, но все таки хотелось бы узнать наверняка возможен ли желаемый уровень вложенности.

Желаемый уровень вложенности невозможен. А асинхронность можно побороть пользуясь колбеками. Примеры использования колбеков в esq есть в типовых схемах.

Максим Шевченко пишет:

Желаемый уровень вложенности невозможен

То есть, никак не узнать, входит ли пользователь в функциональную роль опосредованно (наример, является руководителем сотрудника, у которого есть данная функциональная роль)?  

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

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

attributes: {
    "UsrBill": {
          lookupListConfig: {
                filters: [
                        function() {
                                var account = this.get("UsrContragent");
                                var filterGroup = this.Ext.create("Terrasoft.FilterGroup");
                                var left = [Invoice:AccountId]
                                filterGroup.add("UsrContragent",
                                        Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
                                        left,
                                        account.value));
                                return filterGroup;
                        }
                ]
        }
    }
}
}

Но никак не получается записать левое выражение.

Нравится

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

Иван,

Данную задачу можно решить через бизнес-правило rules с типом FILTRATION,

Либо:

attributes: {
    "UsrBill": {
        lookupListConfig: {
            filters: [
                function() {
                    var account = this.get("UsrContragent");
                    var filterGroup = this.Ext.create("Terrasoft.FilterGroup");
                    filterGroup.add("UsrContragent",
                        Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
                            "Account", // Указывается поле текущей сущности (в нашем случае Invoice)
                            account? account.value : Terrasoft.GUID_EMPTY));
                    return filterGroup;
                }
            ]
        }
    }
}

Огромное спасибо за помощь. Через правило, я так понял, должно выглядеть следующим образом:

rules: {
        "UsrBill": {
                "FiltrationInvoiceByAccount": {
                        "ruleType": BusinessRuleModule.enums.RuleType.FILTRATION,
                        "autocomplete": true,
                        "autoClean": true,
                        "baseAttributePatch": "Account",
                        "comparisonType": Terrasoft.ComparisonType.EQUAL,
                        "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                        "attribute": "Account"
                }
        }
}

Но мне немного не понятно, что указывается в атрибутах baseAttributePatch и attribute.

Думаю, что так:

rules: {
        "UsrBill": {
                "FiltrationInvoiceByAccount": {
                        "ruleType": BusinessRuleModule.enums.RuleType.FILTRATION,
                        "autocomplete": true,
                        "autoClean": true,
                        "baseAttributePatch": "Account",
                        "comparisonType": Terrasoft.ComparisonType.EQUAL,
                        "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                        "attribute": "UsrContragent"
                }
        }
}

attribute - Имя поля объекта по значению которого будем фильтровать (поле объекта вашей детали)
baseAttributePatch - Имя поля для связи из объекта соответствующего справочному поле UsrBill (объект Invoice)

Спасибо за разъяснения.

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