Есть необходимость настроить сортировку в выпадающем списке редактируемого реестра. 

 

На обычной странице мы решаем эту проблему через атрибут:

"State": {
              lookupListConfig: {
                orders: [{columnPath: "SortCode"}]
              }
            },

 

однако очевидно на детали это не отрабатывает.

 

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

Нравится

2 комментария
Лучший ответ

Если нужно сортировать список в колонке MyColumn по полю справочника SortCode, нужно описать такой метод в схеме детали

getGridRowViewModelConfig: function(config) {
                var result = this.callParent(arguments);
                if (result && result.rowConfig && result.rowConfig.MyColumn) {
                    result.rowConfig.MyColumn.lookupListConfig = {
                        orders: [{columnPath: "SortCode", direction: Terrasoft.OrderDirection.DESC}]
                    };
                }
                return result;
            },

 

 

 

Если нужно сортировать список в колонке MyColumn по полю справочника SortCode, нужно описать такой метод в схеме детали

getGridRowViewModelConfig: function(config) {
                var result = this.callParent(arguments);
                if (result && result.rowConfig && result.rowConfig.MyColumn) {
                    result.rowConfig.MyColumn.lookupListConfig = {
                        orders: [{columnPath: "SortCode", direction: Terrasoft.OrderDirection.DESC}]
                    };
                }
                return result;
            },

 

 

 

Вадим Курунов,

Спасибо!

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

На форуме есть много разных примеров, но ни один из них не заработал на нашей версии. Нужно, чтобы деталь представляла собой таблицу, колонки которой - это колонки объекта, к которому привязана деталь, а каждая строка - это объекты, связанные через деталь с редактируемой страницей (допустим, деталь счета на странице контактов, где каждая строка - это счет текущего контакта). Нужно, чтобы при нажатии на плюс возле названия детали, добавлялась строка, которую пользователь может заполнить. Сейчас при нажатии плюса открывается страница редактирования детали, а нужно, чтобы деталь редактировалась напрямую в Grid'e. 
Financial Services, v7.15

Нравится

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

опишите то как вы добавляете от создания объекта до создания детали, включая примеры кода

Dima Avdoshin,

Я создал объект, привязал его к детали, добавил деталь на страницу. В схему детали добавил следующий код:

define("Schema5Detail", ["ConfigurationGrid", "ConfigurationGridGenerator", "ConfigurationGridUtilities"], function() {
	return {
		entitySchemaName: "BankAccount",
		attributes: {
            "IsEditable": {
                dataValueType: Terrasoft.DataValueType.BOOLEAN,
                type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                value: true
            }
        },
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
            {
                "operation": "merge",
                "name": "DataGrid",
                "values": {
                    "className": "Terrasoft.ConfigurationGrid",
                    "generator": "ConfigurationGridGenerator.generatePartial",
                    "generateControlsConfig": { "bindTo": "generatActiveRowControlsConfig" },
                    "changeRow": { "bindTo": "changeRow" },
                    "unSelectRow": { "bindTo": "unSelectRow" },
                    "onGridClick": { "bindTo": "onGridClick" },
                    "activeRowActions": [
                        {
                            "className": "Terrasoft.Button",
                            "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "save",
                            "markerValue": "save",
                            "imageConfig": { "bindTo": "Resources.Images.SaveIcon" }
                        },
                        {
                            "className": "Terrasoft.Button",
                            "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "cancel",
                            "markerValue": "cancel",
                            "imageConfig": { "bindTo": "Resources.Images.CancelIcon" }
                        },
                        // {
                        //     "className": "Terrasoft.Button",
                        //     "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                        //     "tag": "remove",
                        //     "markerValue": "remove",
                        //     "imageConfig": { "bindTo": "Resources.Images.RemoveIcon" }
                        // },
                        {
                            "className": "Terrasoft.Button", // последняя кнопка в коде
                            "style": this.Terrasoft.controls.ButtonEnums.style.TRANSPARENT,
                            "tag": "card",
                            "markerValue": "card",
                            "imageConfig": { "bindTo": "Resources.Images.RemoveIcon" }
                        },
                    ],
                    "initActiveRowKeyMap": { "bindTo": "initActiveRowKeyMap" },
                    "activeRowAction": { "bindTo": "onActiveRowAction" },
                    "multiSelect": false
                }
            }
        ]/**SCHEMA_DIFF*/,
		methods: {},
		mixins: {
			ConfigurationGridUtilites: "Terrasoft.ConfigurationGridUtilities"
		}
	};
});

Но я не знаю, как определить, какие именно значения отобразить в гриде. Объект довольно большой, я хочу отобразить только необходимые поля с возможностью отображения карточки по нажатию на последнюю кнопку в коде. Не заполнив в реестре все необходимые поля, нельзя открыть карточку. Или я могу как-то сыгнорировать эту проверку?

Возьмите прекрасное дополнение с Marketplace и используйте готовые шаблоны https://marketplace.terrasoft.ru/template/templates-developing-custom-d…

Владимир Соколов,

большое спасибо, но, увы, это дополнение поддерживается только начиная с 7.16, а у меня установлена 7.15.
Нельзя как-то в коде настроить, в каком порядке отображать колонки объекта на гриде?

Гусейн Гулиев,

Вам проще будет обновиться до новой версии :-)

Гусейн Гулиев пишет:
это дополнение поддерживается только начиная с 7.16, а у меня установлена 7.15.

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

Ну, и даже с этим дополнением иногда нужно перекомпилировать и очистить Redis, чтобы заработало, как надо

Я отредактировал отображаемые колонки детали и сохранил для всех пользователей, но пользователи, открывшие страницу детали хоть раз до изменения, не увидели изменений, пришлось удалить деталь и добавить заново

Добрый день.

Вы можете посмотреть как это реализовано в базовой логике на странице редактирования заказа, деталь Продукты. При нажатии "три точки" -> добавить у нас добавляется строка, которую можно редактировать. 

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

Привет, коллеги,

 

возникла потребность отображать HTTP ссылку в текстовом поле детали с редактируемым реестром.
https://prnt.sc/1ybk46n

Видел похожее поведение в детали SupplyPaymentDetailV2. Там есть ссылки, но они ведут на карточку системы (при клике на справочное поле).
https://prnt.sc/1ybkk9v

Также наше пост на комъюнити, где обсуждается похожий вопрос
https://community.terrasoft.ru/questions/klikabelnye-ssylki-v-detali-s-redaktiruemym-reestrom

Подскажите, пожалуйста, куда копать, чтобы добиться того, чего мы хотим? 

Нравится

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

Дмитрий добрый день!

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

Для реализации можно использовать следующею статью или напрямую изменять дом дерево страницы.

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

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

Нравится

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

Добрый день.

 

На текущий момент данный функционал не реализован в базовой версии, его можно реализовать с помощью разработки.

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

 

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

Ivan Kuchma,

Такой вопрос, можно ли добавить уже созданную деталь просто на форму мини-карточки при помощи разработки? И обязательно ли создавать под это контейнер с полями tabs?

Глеб Макаров,

рекомендую обратить внимание на похожую тему  для миникарточки с детали, а также на статью о реализации сообщений между деталями через sandbox.
Детальнее работе с sandbox можете ознакомится в статье: https://academy.terrasoft.ua/docs/7-18/developer/front-end_development/…

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

Добрый день, коллеги!
При отрисовке реестра детали для булевых полей отображается значение Да / Нет.
Необходимо при загрузке реестра для булевых полей отображать чек-бокс.
Прошу помощи в решении данной задачи.
 

Нравится

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

Игорь, здравствуйте.

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

Ранее уже обсуждался подобный вопрос в посте:

https://community.terrasoft.ru/questions/ispolzovanie-checkboxov-v-deta…

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

Всем доброго дня.

Подскажите пожалуйста, как проще всего добавить номер по порядку при создании новой записи в детали через "+"? 

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

Нравится

2 комментария
Лучший ответ

Я делал автонумерацию через процесс на объекте. Триггер на срабатываение кода - после добавления записи или после удаления.

 

Код следующий, на сколько тут все хорошо не знаю, но вроде работает. Ручное переименование можно запретить, либо добавить "стрелочки" с перетаскиванием позиции вверх-вниз на клиенте.

 

using System.Linq;
 
public virtual void RunNumeration()
        {
            string parentEnityName = "UsrParent"; //Колонка с родителем, например Invoice для объекта InvoiceProduct
            var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, Entity.Schema.Name);
            var positionNumberColumn = esq.AddColumn("UsrPositionNumber").Name; //колонка с номером по порядку
            esq.AddAllSchemaColumns();
            if (parentEnityName.IsNotNullOrEmpty())
            {
                Guid parentEnityId = Entity.GetTypedColumnValue<Guid>(parentEnityName+"Id");
                if (parentEnityId != Guid.Empty)
                {
                    esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, parentEnityName, parentEnityId));
                    var entityProductsCollection = esq.GetEntityCollection(UserConnection)
		            .OrderBy(x => x.GetTypedColumnValue<int>(positionNumberColumn) == 0)
		            .ThenBy(x => x.GetTypedColumnValue<int>(positionNumberColumn));
		            int newNumber = 0;
		            foreach (var item in entityProductsCollection)
		            {
		                int number = item.GetTypedColumnValue<int>(positionNumberColumn);
		                newNumber++;
		                if (number != newNumber)
		                {
		                    item.SetColumnValue("UsrPositionNumber", newNumber);
		                    item.Save();
		                }
		            }
                }
            }
        }

 

Я делал автонумерацию через процесс на объекте. Триггер на срабатываение кода - после добавления записи или после удаления.

 

Код следующий, на сколько тут все хорошо не знаю, но вроде работает. Ручное переименование можно запретить, либо добавить "стрелочки" с перетаскиванием позиции вверх-вниз на клиенте.

 

using System.Linq;
 
public virtual void RunNumeration()
        {
            string parentEnityName = "UsrParent"; //Колонка с родителем, например Invoice для объекта InvoiceProduct
            var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, Entity.Schema.Name);
            var positionNumberColumn = esq.AddColumn("UsrPositionNumber").Name; //колонка с номером по порядку
            esq.AddAllSchemaColumns();
            if (parentEnityName.IsNotNullOrEmpty())
            {
                Guid parentEnityId = Entity.GetTypedColumnValue<Guid>(parentEnityName+"Id");
                if (parentEnityId != Guid.Empty)
                {
                    esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, parentEnityName, parentEnityId));
                    var entityProductsCollection = esq.GetEntityCollection(UserConnection)
		            .OrderBy(x => x.GetTypedColumnValue<int>(positionNumberColumn) == 0)
		            .ThenBy(x => x.GetTypedColumnValue<int>(positionNumberColumn));
		            int newNumber = 0;
		            foreach (var item in entityProductsCollection)
		            {
		                int number = item.GetTypedColumnValue<int>(positionNumberColumn);
		                newNumber++;
		                if (number != newNumber)
		                {
		                    item.SetColumnValue("UsrPositionNumber", newNumber);
		                    item.Save();
		                }
		            }
                }
            }
        }

 

Трефилов Павел Сергеевич, 

 

спасибо, отлично работает с вашим кодом)

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

Есть необходимость по галке в основной карточке делать деталь с редактируемым реестром(и) ТДЧ. 

Судя по публикациям здесь, в текущей версии бизнес-правилами это не реализуемо. 

В разработке на Creatio я недавно, поэтому творческие варианты решения данной задачи приходят со скрипом. На данный момент решение такое:

 

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

Или есть другие более удачные решения данной задачи? 

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

Нравится

1 комментарий
Лучший ответ

Если отвечать на вопрос, то с помощью механизма сообщений.

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

Если отвечать на вопрос, то с помощью механизма сообщений.

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

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

Необходимо выводить полное наименование из справочника в детали с редактируемом реестром. Значение в справочнике может быть слишком длинным и в ширину колонки не умещается. Увеличить ширину колонки уже не получится, ширина на максимуме. Подумал о решение со всплывающей подсказкой при наведении на справочник, которое будет выводить полное наименование из справочника. Как я могу это реализовать? И какие есть еще варианты решения моей проблемы?

Нравится

4 комментария
Лучший ответ

У меня есть решение, но не очень красивое, там идет изменение в DOM. Могу поделиться (ставим код на свой страх и риск). Как раз в соседнем посте идею для вендора создал с вопросом, как сделать красивее.

У меня есть решение, но не очень красивое, там идет изменение в DOM. Могу поделиться (ставим код на свой страх и риск). Как раз в соседнем посте идею для вендора создал с вопросом, как сделать красивее.

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

Владимир Соколов,

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

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

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

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

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

Нравится

2 комментария
addRecord: function() {
              	var defaultValues = this.get("DefaultValues");
 
              	this.console.log("Данные")
              	this.console.log(defaultValues);
			 	this.showInformationDialog("Select All not implemented yet...");
 
 
			// 	//this.callParent(arguments);
 
			 },

Случайно нашел, в дефолт валуис =) содержится необходимая нам информация , айди и представление

Dima Avdoshin,

Все правильно там оно и лежит. Можете еще вывести console.log(this); там в values и не только можно найти интересные значения.

Также можно самому дописывать значения в defaultValues в коде карточки на которой размещена деталь.

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

Добрый день всем!

Можно ли в детали с редактируемым реестром сделать возможность вывода значения в процентах? То есть в БД будет лежать значение 0.2. А выводиться будет 20% (со знаком процента).

Пока в голову только пришла идея с добавлением строкового значения в таблицу в БД, в которой будет лежать строка "20 %" и соответственно её выводом, но такое решение некрасивое

Нравится

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

Линар, наверное, так будет действительно проще. Ещё можно смотреть в сторону доработки схемы ConfigurationGridUtilities, отвечающей за такой реестр: добавления там проверки на конкретное поле конкретного объекта и преобразовании в нужный вид при открытии в функции generateActiveRowControlsConfig и при сохранении в saveDataRow. Вопрос модификации редактируемого реестра с другой целью описан тут.

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