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

Пытаюсь реализовать сортировку справочного поля типа ENUM.

attributes: {
			"LeadType": {"isRequired": false},
			"Stage": {
				"lookupListConfig": {
					"filters": [
						function() {
							var filterGroup = Ext.create("Terrasoft.FilterGroup"), {
								sortProperty: "Number"
							});
							filterGroup.add("ActiveStage",
								Terrasoft.createColumnFilterWithParameter(
									Terrasoft.ComparisonType.EQUAL,
										"UsrShowInMiniPage", "1"));
							filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
							filterGroup.add("Sort",
								Terrasoft.createColumnFilterWithParameter(
									Terrasoft.ComparisonType.GREATER_OR_EQUAL,
										"Number", "0"));
							return filterGroup;
 
						}
					]
				}
			}
		},

Предположил, что sortProperty не срабатывает из-за отсутствия такой колонке в запросе, поэтому добавил еще одно условие, как все-таки правильно это сделать?

Нравится

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

А если вот так?

"Stage": {
	"lookupListConfig": {
		"filters": [
			function() {
				var filterGroup = Ext.create("Terrasoft.FilterGroup"), {
					sortProperty: "Number"
				});
				filterGroup.add("ActiveStage",
					Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.EQUAL,
							"UsrShowInMiniPage", "1"));
				filterGroup.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
				filterGroup.add("Sort",
					Terrasoft.createColumnFilterWithParameter(
						Terrasoft.ComparisonType.GREATER_OR_EQUAL,
							"Number", "0"));
				return filterGroup;
 
			}
		],
		"columns": ["Number"]
	}
}

 

Добрый день.

Добавьте свойство orders в lookupListConfig. К примеру:

"Owner": {

    lookupListConfig: {

        columns: ["Name"],

        orders: [

            {

                columnPath: "Name",

                direction: Terrasoft.OrderDirection.DESC

            }

        ]

    }

},

Терещук Сергей,

Сортировка таким образом не работает. Ни при указании колонки "Name", ни при какой-либо другой колонки. Direction также не влияет на порядок отображения

Варфоломеев Данила,

Сортировка также не работает, тем не менее, колонка "Number" добавляется в ответ от сервера

Проблема в том, что Террасофт запилил поддержку orders только в BasePageV2. Если у вас мини-карточка или какая-то другая карточка, которая не наследуется от BasePageV2, то сортировка работать не будет. Но всегда можно заместить родителя и реализовать в нем сортировку по аналогии с базовой карточкой

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

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

var defaultValues = [
    {
        name: "UseSeparatedPageHeader",
        value: true
    },
    {
        name: "Operation",
        value: ConfigurationEnums.CardStateV2.EDIT
    }
];
var stateObject = {
    isSeparateMode: true,
    schemaName: "BaseLookupConfigurationSection",
    entitySchemaName: "MyEntity",
    valuePairs: defaultValues,
    moduleId: "LookupSectionModule_BaseLookupConfigurationSection",
    operation: "open",
    isInChain: true
};
requestUrl = "LookupSectionModule/BaseLookupConfigurationSection";
this.sandbox.publish("PushHistoryState", {
     hash: requestUrl,
     stateObj: stateObject
});

 

Нравится

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

Добрый день. К сожалению, в данный момент в приложении не предусмотрено создание Стандартных фильтров(Фильтр - Добавить условие) из программного кода. Ответственной команде разработчиков ядра известно данное ограничение в приложении, и они планируют добавить новые возможности для работы с фильтрами в будущих релизах. Возможно, какую-то часть вашего кейса покроет использование быстрых фильтров по дате и/или ответственному - их можно задать программно в initFixedFiltersConfig. Пример такой реализации можно найти в ActivitySectionV2 из пакета NUI.

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

Здравствуйте!
Как добавить поле в стандартный справочник, например, справочник городов?

Нравится

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

Добавить в конфигурации замещающий объект, указав что замещаем Город (City), добавить нужные колонки, в разделе справочников, настроить колонки, выведя добавленные вами. Готово.

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

В дополнение рекомендую ознакомиться со статьей: https://academy.terrasoft.ru/documents/technic-sdk/7-9/dobavlenie-novog…

Я пытался создать замещающий клиентский модуль для справочника City. Сделал, как описано. Задать желаемое имя не удается. После сохранения имя становится LookupEditPage. Прописал исходный код с изменениями. Добавить модуль BusinessRuleModule в список зависимостей не удается, его нет в списке.

// В список зависимостей модуля добавить модуль BusinessRuleModule.
define("CityPageV2", [], function() {
return {
// Название схемы объекта страницы редактирования.
entitySchemaName: "City",
// Настройка визуализации дополнительного поля на странице редактирования.
diff: /**SCHEMA_DIFF*/[
// Метаданные для добавления поля [Место встречи].
{
// Тип операции — добавить.
"operation": "insert",
// Имя родительского элемента схемы, в котором размещается элемент.
"parentName": "Header",
// Имя параметра родительского элемента.
"propertyName": "items",
// Имя элемента схемы, над которым производится действие (название колонки).
"name": "UsrDistrict",
// Объект, свойства которого будут установлены либо объединены со свойствами элемента схемы.
"values": {
// Заголовок поля.
"caption": {"bindTo": "Resources.Strings.District"},
// Расположение поля.
"layout": {
// Номер столбца.
"column": 2,
// Номер строки.
"row": 5,
// Диапазон занимаемых столбцов.
"colSpan": 12,
// Диапазон занимаемых строк.
"rowSpan": 1
}
}
}
]/**SCHEMA_DIFF*/
};
});

Весь исходный код вышел в ошибки.

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

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

Почта: support@terrasoft.ru

Пытаюсь создать замещающий клиентский модуль для справочника CallTopic. Затрудняюсь с выбором родительской страницы. CallTopicPageV2 в списке нет. Указал Страницу редактирования базового справочника, но сохраняет под именем NUIBaseLookupEditPage.

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

BPMOnline - с самых давнишних версий по нынешний 7.10Меня все время немного задевал этот факт юзабилити-бага Когда в Справочниках при создании нового даже при выделении в дереве навигации пункта, он по факту будет добавлено в корень ("Все") и потом его оттуда надо перемещать, а еще предварительно найти т.к. там много элементов. В итоге имеем 4-5 лишних пользовательских действий, когда проблема скорее всего решается 1 строчкой кода. Проблема волнует и известна уже как минимум двоим :) пример Поправьте пожалуйста. При работе над проектами, создаем очень много справочников и системных настроек (там то же самое). Т.е. этот косяк реально отнимает по 15-20 минут итогового времени при первичном конфигурировании проекта, да и просто раздражает :)

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

Маленький lifehack - я создал динамическую группу Created on = today, чтобы их быстро найти

"Владимир Соколов" написал:Маленький lifehack - я создал динамическую группу Created on = today, чтобы их быстро найти

Ну вот нас уже как минимум трое :)
Вы даже lifehack придумали для сокращения действий с 4-х до 2-х :)

Проблема известна, причем давно. Согласен, очень неудобно и нелогично.

"Пащенко Александр Сергеевич" написал:Проблема известна, причем давно. Согласен, очень неудобно и нелогично.

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

"Владимир Соколов" написал:месте с баг-репортом высылать сумму продаж, которую можно получить, устранив этот баг

А есть какая-то эмпирическая занятная формула расчета такой, сферической в вакууме, суммы ? Поделитесь... очень нужно :)

"Севостьянов Илья Сергеевич" написал:А есть какая-то эмпирическая занятная формула расчета такой, сферической в вакууме, суммы ? Поделитесь... очень нужно :)

Да, если клиента достает баг очень сильно, то сумма равна CLV клиента :)

Илья, здравствуйте! Спасибо за обратную связь! Зарегистрировали ваше пожелание по развитию приложения.

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

Добрый день, подскажите пожалуйста как можно изменить типа отображения справочника в карточке “Взаимосвязи Контакта” с всплывающего окна на список в полях “является”.

!
В мастере деталей отсутствует возможность редактирования данных контейнеров.

!
Пробовали выставить список в полях “Тип взаимосвязи” и “Обратный тип взаимосвязи”, но не помогает, и при создании замещающей схемы объекта RelationType параметр "список" недоступен для изменения.

Нравится

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

Решение можно сделать только кодом, для этого заместите схему "BaseRelationshipDetailPageV2", следующим содержимым на уровне своего пользовательского пакета:

define("BaseRelationshipDetailPageV2", [], function() {
	return {
		entitySchemaName: "Relationship",
		attributes: {
		},
		details: /**SCHEMA_DETAILS*/ {} /**SCHEMA_DETAILS*/ ,
		messages: {
		},
		methods: {
		},
		diff: /**SCHEMA_DIFF*/ [
			{
				"operation": "merge",
				"name": "ReverseRelationType",
				"values": {
					"dataValueType": this.Terrasoft.DataValueType.ENUM
				}
			},
			{
				"operation": "merge",
				"name": "RelationTypePrimary",
				"values": {
					"dataValueType": this.Terrasoft.DataValueType.ENUM
				}
			}
		] /**SCHEMA_DIFF*/ ,
		rules: {},
		userCode: {}
	};
});

Спасибо, получилось :smile:

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

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

Это можно реализовать? Если да то желательно пример.
За ранее спасибо.

Нравится

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

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

За функционал печатных форм отвечает миксин PrintReportUtilities. Генерация коллекции печатных форм происходит в методах initCardPrintForms и initSectionPrintForms. События клика на печатных формах в секции и карточке редактирования обрабатываются в методах generateCardPrintForm и generateSectionPrintForm. Для изменения логики стандартных печатных форм необходимо заместить данные методы с добавлением пользовательской логики(фильтрации).

Как альтернативное решение, Вы можете добавить пользовательскую кнопку печати и при клике обращаться к вэб сервису напрямую. Реализацию обращения к вэб сервису для печати "Печатных форм", Вы можете посмотреть в методе generatePrintForm схемы PrintReportUtilities (NUI).

Также вопрос обсуждался здесь:
http://www.community.terrasoft.ru/forum/topic/11555.

"Мотков Илья" написал:

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

За функционал печатных форм отвечает миксин PrintReportUtilities. Генерация коллекции печатных форм происходит в методах initCardPrintForms и initSectionPrintForms. События клика на печатных формах в секции и карточке редактирования обрабатываются в методах generateCardPrintForm и generateSectionPrintForm. Для изменения логики стандартных печатных форм необходимо заместить данные методы с добавлением пользовательской логики(фильтрации).

Как альтернативное решение, Вы можете добавить пользовательскую кнопку печати и при клике обращаться к вэб сервису напрямую. Реализацию обращения к вэб сервису для печати "Печатных форм", Вы можете посмотреть в методе generatePrintForm схемы PrintReportUtilities (NUI).

Также вопрос обсуждался здесь:

http://www.community.terrasoft.ru/forum/topic/11555.

Прошу прощения, а не подскажите где это делать?

rules: {}
или
metods: {}

Добрый день, Максим!

Методы нужно добавить в methods, миксин подключить в mixins. Более подробно можете прочитать здесь: https://academy.terrasoft.ua/documents/technic-sdk/7-9/klientskie-shemy…

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

Доброго времени суток.
При выборе значений из справочников во всех разделах к названию приписывается “undefined”, к примеру:
!
В чем может быть проблема?

Нравится

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

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

Предоставьте, пожалуйста, результат выполнения запроса:

select ModuleHeader from SysModuleEntity
join SysSchema
on SysSchema.Uid = SysModuleEntity.SysEntitySchemaUId
join SysModule
on SysModule.SysModuleEntityId = SysModuleEntity.Id
where SysSchema.Name = 'Contact'
Список: Контакты

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

Данное поведение актуально для версии приложения 7.9.1.
В ближайших релизах оно будет устранено, а для указанной версии будет выпущен пакет исправлений.

Эта же ошибка проявляется в 7.11.1.

ВСЕ лукапы отображаются с "undefined" http://prntscr.com/hd8fxz.

Подскажите, как бороться?

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

Добрый день!

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

Нравится

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

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

Доступ к справочникам ограничивается системной операцией с кодом CanManageLookups. Для решения задачи необходимо предоставить доступ к этой операции для нужной роли.

Подробно с системными операциями можно ознакомиться по ссылке.

"Демьяник Алексей" написал:

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

Доступ к справочникам ограничивается системной операцией с кодом CanManageLookups. Для решения задачи необходимо предоставить доступ к этой операции для нужной роли.

Подробно с системными операциями можно ознакомиться по ссылке.

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

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

Добрый день.

Создала деталь с выбором из справочника [ConfigItemModel] (создавала на основе примера: создание детали...)
Для детали был создан объект [UsrModelCIInSupplies].
Возникли ошибки при вызове окна справочника

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

2 ошибка. Вы выборе данных, они не вставляются в объект [UsrModelCIInSupplies].
изображение 2

Сам код детали

define("UsrSchema5Detail", ["ConfigurationEnums"],
        function(enums) {
        return {
                entitySchemaName: "UsrModelCIInSupplies",
                attributes: {},
                messages: {},
                methods: {
                        //колонки выбираемые запросом
                        getGridDataColumns: function() {
                                return {
                                        "Id": {path: "Id"},
                                        "UsrConfigItemModel": {path: "UsrConfigItemModel"},
                                        "UsrConfigItemModel.Name": {path: "UsrConfigItemModel.Name"}
                                };
                        },
                        //конфигурирует и отображает модальное окно справочника
                        openUsrConfigItemModelLookup: function() {
                                //конфигурирует объект
                                var config = {
                        //название схемы объекта, записи которого будут отображены в справочнике
                                        entitySchemaName: "ConfigItemModel",
                                        //множественный выбор
                                        multiSelect: true,
                                        //колонки, которые будут отображены в справочнике
                                        columns: ["Name"]
                                };
                                var UsrConsumablesId = this.get("MasterRecordId");
                                if (this.Ext.isEmpty(UsrConsumablesId)) {
                                        return;
                                }
                                //экземпляр класса [EntitySchemaQuery]
                                var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
                                        //установка корневой схемы
                                        rootShemaName: this.entitySchemaName
                                });
                                //добовление колонки [Id]
                                esq.addColumn("Id");
                                //добавление колонки [id] из схемы [UsrConfigItemModel]
                                esq.addColumn("UsrConfigItemModel.Id", "UsrConfigItemModelId");
                                //Создание и добаление фильтров в коллекцию запроса
                                esq.filters.add("filterUsrConsumables",
                                this.Terrasoft.createColumnFilterWithParameter(
                                        this.Terrasoft.ComparisonType.EQUAL, "UsrConsumables", UsrConsumablesId));
                // Получение всей коллекции записей и отображение ее в модальном окне справочника.
                                esq.getEntityCollection(function(result) {
                                        var existsUsrConfigItemModelCollection = [];
                                        if (result.success) {
                                                result.collection.each(function(item) {
                                                        existsUsrConfigItemModelCollection.push(item.get("UsrConfigItemModelId"));
                                                });
                                        }
                                        // Добавление фильтра в конфигурационный объект.
                                        if (existsUsrConfigItemModelCollection.length > 0) {
                                                var existsFilter = this.Terrasoft.createColumnInFilterWithParameters("Id",
                                                        existsUsrConfigItemModelCollection);
                                                existsFilter.comparisonType = this.Terrasoft.ComparisonType.NOT_EQUAL;
                                                existsFilter.Name = "existsFilter";
                                                config.filters = existsFilter;
                                        }
                                        // Вызов модального окна справочника
                                        this.openLookup(config, this.addCallBack, this);
                                }, this);
                        },
                        //обработчик события сохранения страницы редактирвоания
                        onCardSaved: function() {
                                this.openUsrConfigItemModelLookup();
                        },
//открывает справочник МКЕ в случае если странца была редактирвоания РМ была ранее сохранена
                        addRecord: function() {
                                var masterCardState = this.sandbox.publish("GetCardState", null, [this.sandbox.id]);
                                var isNewRecord = (masterCardState.state === enums.CardStateV2.ADD ||
                                masterCardState.state === enums.CardStateV2.COPY);
                                if (isNewRecord === true) {
                                        var args = {
                                                isSilent: true,
                                                messageTags: [this.sandbox.id]
                                        };
                                        this.sandbox.publish("SaveRecord", args, [this.sandbox.id]);
                                        return;
                                }
                                this.openUsrConfigItemModelLookup();
                        },
                        //добавление выбранных продуктов
                        addCallBack: function(args) {
                                //экземпляр класса пакетного запроса BatchQuery
                                var bq = this.Ext.create("Terrasoft.BatchQuery");
                                var UsrConsumablesId = this.get("MasterRecordId");
                                //коллекция выбранных в справочнике данных
                                this.selectedRows = args.selectedRows.getItems();
                                //колекция, передаваемая в запрос
                                this.selectedItems = [];
                                // Копирование необходимых данных.
                                this.selectedRows.forEach(function(item) {
                                        item.UsrConsumablesId = UsrConsumablesId;
                                        item.UsrConfigItemModelId = item.values;
                                        bq.add(this.getUsrConfigItemModelInsertQuery(item));
                                        this.selectedItems.push(item.values);
                                }, this);
                                //выполнение пакетного запроса, если он не пустой
                                if (bq.queries.length) {
                                        this.showBodyMask.call(this);
                                        bq.execute(this.onUsrConfigItemModelInsert, this);
                                }
                        },
                        //возвращает запрос на добавление текущего объекта
                        getUsrConfigItemModelInsertQuery: function(item) {
                                var insert = Ext.create("Terrasoft.InsertQuery", {
                                        rootShemaName: this.entitySchemaName
                                });
                                insert.setParameterValue("UsrConsumables", item.UsrConsumablesId,
                                this.Terrasoft.DataValueType.GUID);
                                insert.setParameterValue("ConfigItemModel", item.UsrConfigItemModelId,
                                this.Terrasoft.DataValueType.GUID);
                                return insert;
                        },
                        //метод, вызываемый при добавлении записей в реестр детали
                        onUsrConfigItemModelInsert: function(response) {
                                this.hideBodyMask.call(this);
                                this.beforeLoadGridData();
                                var filterCollection = [];
                                response.queryResults.forEach(function(item) {
                                        filterCollection.push(item.id);
                                });
                                var esq = Ext.cteate("Terrasoft.EntitySchemaQuery", {
                                        rootShemaName: this.entitySchemaName
                                });
                                this.initQueryColumns(esq);
                                esq.filters.add("recordId",
                                Terrasoft.createColumnInFilterWithParameters("Id", filterCollection));
                                esq.getEntityCollection(function(response) {
                                        this.afterLoadGridData();
                                        if (response.success) {
                                                var responseCollection = response.collection;
                                                this.prepareResponseCollection(responseCollection);
                                                this.getGridData().loadAll(responseCollection);
                                        }
                                }, this);
                        },
                        //метод, вызываемый при удалении выбранных записей детали
                        deleteRecords: function() {
                                var selectedRows = this.getSelectedItems();
                                if (selectedRows.length > 0) {
                                        this.set("SelectedRows", selectedRows);
                                        this.callParent(arguments);
                                }
                        },
                        //скрыть пункт меню [Копировать]
                        getCopyRecordMenuItem: Terrasoft.emptyFn,
                        //скрыть пункт меню [Изменить]
                        getEditRecordMenuItem: Terrasoft.emptyFn,
                        //возвращает имя колонки по умолчанию для фильтра
                        getFilterDefaultColumnName: function() {
                                return "UsrConfigItemModel";
                        }
                },
                        // Массив модификаций.
                diff: /**SCHEMA_DIFF*/[
                                {
                                        // Тип операции — слияние.
                                        "operation": "merge",
                                        // Название элемента схемы, над которым производится действие.
                                        "name": "DataGrid",
                                // Объект, свойства которого будут объединены со свойствами элемента схемы.
                                        "values": {
                                                "rowDataItemMarkerColumnName": "UsrConfigItemModel"
                                        }
                                },
                                {
                                        // Тип операции — слияние.
                                        "operation": "merge",
                                        // Название элемента схемы, над которым производится действие.
                                        "name": "AddRecordButton",
                                // Объект, свойства которого будут объединены со свойствами элемента схемы.
                                        "values": {
                                                "visible": {"bindTo": "getToolsVisible"}
                                        }
                                }
                        ]/**SCHEMA_DIFF*/
                };
});

Задача стоит, сделать деталь такой же как, например: деталь [ConfItemUserDetail] в КЕ.

Версия продукта: service enterprise 7.8.2

Нравится

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

Где и как правильно поправить код?

Добрый вечер, Алеся.

Исходя из ошибки - у Вас неправильно строится запрос к базе данных в методе openUsrConfigItemModelLookup. На первом скриншоте явно видно, что запрос не был построен корректно. Проверьте правильность имен колонок, а также правильность связей. SDK.

Ошибка на втором скриншоте результат первой ошибки. Метод addCallBack получил не правильный параметр args и затем у несуществующего свойства selectedRows попытался вызвать метод forEach.

Добрый вечер.

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

// Получение всей коллекции записей и отображение ее в модальном окне справочника.
				esq.getEntityCollection(function(result) {
					var existsUsrConfigItemModelsCollection = [];
					if (result.success) {
						result.collection.each(function(item) {
							existsUsrConfigItemModelsCollection.push(item.get("UsrConfigItemModelId"));
						});
					}

изображение 1

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

В системе по умолчанию в типе колонки "Справочник" стоит максимальное значение 15. Нужно увеличить его до 40, как можно это сделать?

Нравится

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