На форуме есть много разных примеров, но ни один из них не заработал на нашей версии. Нужно, чтобы деталь представляла собой таблицу, колонки которой - это колонки объекта, к которому привязана деталь, а каждая строка - это объекты, связанные через деталь с редактируемой страницей (допустим, деталь счета на странице контактов, где каждая строка - это счет текущего контакта). Нужно, чтобы при нажатии на плюс возле названия детали, добавлялась строка, которую пользователь может заполнить. Сейчас при нажатии плюса открывается страница редактирования детали, а нужно, чтобы деталь редактировалась напрямую в 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 комментарий

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

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

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

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

Доброго времени суток. Имею пробелму. Нужно в преднастроенной странице в деталь карты поставить кнопку для активной записи детали. Кнопку "Заблокировать карту"

Изображение удалено.

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

Нравится

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

Ислам, добрый день!

Реализация в этом примере рабочая.

Обратите внимание, что код нужно добавлять в "Схема детали: "Название вашей детали"" (так она будет отображатся в конфигурации).

Привожу пример своей реализации:

define("Schemae4042f8dDetail", [], function() {
	return {
		entitySchemaName: "NewTestDetail",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
        "operation": "merge",
        "name": "DataGrid",
        "values": {
                "activeRowAction": {"bindTo": "onActiveRowAction"},
                "activeRowActions": [
                        {
                                "className": "Terrasoft.Button",
                                "style":this.Terrasoft.controls.ButtonEnums.style.BLUE,
                                "markerValue": "myButtonAction",
                                "tag": "myAction",
                                "caption": "MyButton"
                        }
                ]
        }
}
		]/**SCHEMA_DIFF*/,
		methods: {
			onActiveRowAction: function(buttonTag, primaryColumnValue) {
                if (buttonTag === "myAction") {
                        // весь код ниже можно убрать, он демонстрирует, что значения
                        // primaryColumnValue и activeRowId равны
                        var activeRow = this.getActiveRow();
                        var activeRowId = activeRow.get("Id");
                        console.log(primaryColumnValue);
                        console.log(activeRowId);
                        // дальше Ваша реализация
                }
        },
		}
	};
});

 

У меня таким образом

В DIFF

 

		"operation": "merge",
        "name": "DataGrid",
        "values": {
                "activeRowAction": {"bindTo": "onActiveRowAction"},
                // "onButtoClick": {"bindTo": "Alert"},
                "activeRowActions": [
                        {
                                "className": "Terrasoft.Button",
                                "style":this.Terrasoft.controls.ButtonEnums.style.GREEN,
                                "markerValue": "myButtonAction",
                                "tag": "Delete",
                                "caption": "Delete",
 
                        }
                ]
        }



И не забыть добавить в LocalizableString

"Delete"



В методах

 

			onActiveRowAction: function(buttonTag, primaryColumnValue) {
                if (buttonTag === "Delete") {
                          this.Delete();  // нужная функция
 			                }
        },

 

 

Oleg, у меня с таким же способом не срабаытывает почему-то( Все так же как вы описали, но не появляется кнопка.

Oleg,

 

И не забыть добавить в LocalizableString

"Delete" 

Не достаточно того, что вы написали в Caption название? Я вот этот пункт не сделал, не добавлял в LocalizableString.

Добавить комментарий

Ислам Ибрагимжанов,

Попробуйте :)

 

Не срабатывает, прощу помочь. Кто сталкивался ?

Oleg,

не отработало.

Ислам, добрый день!

Реализация в этом примере рабочая.

Обратите внимание, что код нужно добавлять в "Схема детали: "Название вашей детали"" (так она будет отображатся в конфигурации).

Привожу пример своей реализации:

define("Schemae4042f8dDetail", [], function() {
	return {
		entitySchemaName: "NewTestDetail",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[
			{
        "operation": "merge",
        "name": "DataGrid",
        "values": {
                "activeRowAction": {"bindTo": "onActiveRowAction"},
                "activeRowActions": [
                        {
                                "className": "Terrasoft.Button",
                                "style":this.Terrasoft.controls.ButtonEnums.style.BLUE,
                                "markerValue": "myButtonAction",
                                "tag": "myAction",
                                "caption": "MyButton"
                        }
                ]
        }
}
		]/**SCHEMA_DIFF*/,
		methods: {
			onActiveRowAction: function(buttonTag, primaryColumnValue) {
                if (buttonTag === "myAction") {
                        // весь код ниже можно убрать, он демонстрирует, что значения
                        // primaryColumnValue и activeRowId равны
                        var activeRow = this.getActiveRow();
                        var activeRowId = activeRow.get("Id");
                        console.log(primaryColumnValue);
                        console.log(activeRowId);
                        // дальше Ваша реализация
                }
        },
		}
	};
});

 

Дима Вовченко,

Благодарю, так все понятней.

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

Приветствую!

 

Интересует следующий вопрос: возможно ли реализовать автоматическое заполнение детали/деталей на записи при массовом импорте данных в раздел из Excel без указания в шаблоне полей детали.

 

Условный пример: У меня имеется раздел Контакты, на записи Контакта имеется деталь Навыки (деталь с редактируемым реестром).

В данной детали всегда должно быть n-количество записей с условно такими полями:

НаименованиеНавыка (string), Включен (bool), УровеньВладения (lookup)



Сами записи (заполнены только наименования, остальное пусто):

Навык1

Навык2

Навык 3

 

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

Нравится

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

Добрый день, Ирина.

 

Вашу задачу можно решить несколькими вариантами:

1) написать sql-запрос, который вставит нужные данные во все детали для загруженных записей. Такой запрос нужно запустить после импорта;

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

2) импортом из Excel. Подготовить файл с данными, в котором каждая строка будет содержать название навыка и поле-ссылку, идентифицирующую родительскую запись. Таким образом, если у Вас 3 навыка и 2 записи в родительской таблице, то в этом файле должно быть 6 строк по 3 навыка на каждую родительскую запись.

Добрый день, Ирина.

 

Вашу задачу можно решить несколькими вариантами:

1) написать sql-запрос, который вставит нужные данные во все детали для загруженных записей. Такой запрос нужно запустить после импорта;

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

2) импортом из Excel. Подготовить файл с данными, в котором каждая строка будет содержать название навыка и поле-ссылку, идентифицирующую родительскую запись. Таким образом, если у Вас 3 навыка и 2 записи в родительской таблице, то в этом файле должно быть 6 строк по 3 навыка на каждую родительскую запись.

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

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

Нравится

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

Добрый день.

 

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

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

 

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

Ivan Kuchma,

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

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

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

Детальнее работе с sandbox можете ознакомится в статье: https://academy.terrasoft.ua/docs/7-18/developer/front-end_development/…

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

Есть раздел, в нем деталь. Как запретить добавление детали в зависимости от значения поля раздела? Вот здесь описано как сделать на клиенте а здесь как на сервере, но не могу понять как достучаться до конкретного элемента раздела где отображается деталь и надо сделать запрет, как получить значения поля в контексте BaseGridDetailV2 или во встроенном БП процеса?

Нравится

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

В baseGridDetail поищите что-то вроде this.sandbox.publish("GetColumnsValues", ...

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

 

В целом работа с песочницей описана здесь.

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

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

Согласно описанию тут:

https://community.terrasoft.ru/articles/nastroika-znacenii-polei-detali…

Можно установить значения по умолчанию для новых записей, заимствуя их из текущей карточки:

        "defaultValues": {
            "UsrContract": {//колонка детали
                "masterColumn": "Id"//колонка основной записи (Важно! добавление id тоже нужно прописать (если связь не по id, а иначе - ориентироваться на блок "filter":))
            },
            "Account": {//колонка детали
                "masterColumn": "Account"//колонка основной записи
            },
            "UsrProject": {//колонка детали
                "masterColumn": "UsrProject"//колонка основной записи
            }
        }

Можно ли передать здесь другие значения? какие можно? Прошу пример синтаксиса.

Если же нет, то подскажите пожалуйста как передать доп. значения полей при нажатии кнопки создания в детали(примеры).

 

Нравится

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

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

'masterColumn' - это название атрибута.

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

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

Также передавать данные можно через sandbox. Подробнее посмотрите в статье на Академии.

У вас пример уже полноценный. Хотите добавить например связь с Продуктом (при наличии), То пишите

 

"defaultValues": {
            "Product": {//колонка на вашей детали (в объекте)
                "masterColumn": "Product"//колонка из основной записи 
            }
        }

Литвинко Павел,

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

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

'masterColumn' - это название атрибута.

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

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

Также передавать данные можно через sandbox. Подробнее посмотрите в статье на Академии.

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

Всем привет, подскажите как правильно добавить деталь Активности для нового раздела?

Нравится

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

в активности создать справочное поле нового раздела. и по стандартному добавить активность указав связь id нового раздела - справочное поле нового раздела из активности

Dima Avdoshin,

Дмитрий спасибо!

Можно редактировать имеющуюся активность или нужно замещающий объект создавать?

Ещё один легкий способ. Если в новом разделе нужна ActionsDashboard и кейсы, то добавляя кейс, сразу же добавляются нужные поля в активности

Сергей Рогов,

замещающий, потому что вам же нужно как то связь указать с активностью

Dima Avdoshin,

Спасибо!

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

Спасибо за такой вариант, на нём и остановился

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

При выведении в Итоги виджета "список" данных объекта, созданного на основе View, в Списке  иногда отображаются дублирующиеся записи. Но при экспорте в excel такие дубли отсутствуют. Есть подозрение, что такое поведение связано как-то с пагинацией.  Такая же ситуация происходит если делать на основе такого объекта деталь.

Кто-нибудь сталкивался с подобным?

Ниже пример схемы View используемый для объекта

CREATE VIEW [dbo].[VwTest] AS

SELECT

    NEWID() as Id

    ,GETDATE() as CreatedOn

    ,(SELECT Id FROM Contact WHERE Id='BE80A149-0089-4311-A775-CA6CD8937E2B') as CreatedById

    ,GETDATE() as ModifiedOn

    ,(SELECT Id FROM Contact WHERE Id='BE80A149-0089-4311-A775-CA6CD8937E2B') as ModifiedById

    ,0 as ProcessListeners

    ,Id as ContactId

    ,Age

FROM Contact

WHERE Age>30

 

 

 

Нравится

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

Добрый день!

Прошу уточнить следующую информацию:

1. Полную версию приложения

2. Данное поведение наблюдается с одним объектом, или воспроизводится вне зависимости от объекта?

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

 

Спасибо!

Роман Казекин,

 1. Версия Sale Ent 7.16.3

2. Данное поведение характерно для всех объектов созданных на основе view.

3.

- Создал View ( как описано выше)

-  в управление конфигурацией создал объект с названием View

- включил checkbox Поведение - Представление в базе данных

4. Вывод объекта в Итогах в виде Списка

Евгений Кобзарь,

 

Уточните, пожалуйста, по какому полю Вы определяете записи, как дубли?

Также прошу посмотреть Select, который приходит детали. Есть ли там одинаковые записи?

Роман Казекин,

По полю Контакт. Select с View выбирает только 1 запись. Но в таблице/списке показывает несколько. Как правило происходит такое когда нажимаешь кнопку Показать больше. См. скриншот

Евгений Кобзарь,

 

Проверьте значение колонки ContactId, если там разные значения для записей, которые дублируются, то это значит что у Вас есть дубли в контактах. То есть это разные записи с одинаковыми данными.

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

 

https://academy.terrasoft.ru/docs/user/bazis_platformy/dannye/dubli/poi…

Роман Казекин,

 

Дублей нет. На скриншоте видно, что ссылки на эти записи формируются идентичные (на основе одного Id). Мне кажется что проблема все же в offsetе и order by (по Id).  При нажатии показать больше идет повторный запрос к View у которого НЕ статический  ID (newid()). Если это так? То каким образом можно и как правильно во view создать этот ID.

Добрый день

Евгений, это абсолютно объяснимое поведение View при использовании Fetch next. Вы же получаете записи пачками, а каждая пачка имеет свои Id и сортировка может вам выдать "дубль"

Как правильно? Просто используейте Id из основного объекта. Вы же выбираете из Contact, так берите его Id вместо генерации newid()

 

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

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

Изображение удалено.

Нравится

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

В схеме детали прописать метод:



            initDetailOptions: function() {

                this.set("RowCount", 1000);

                this.callParent(arguments);

            },

В схеме детали прописать метод:



            initDetailOptions: function() {

                this.set("RowCount", 1000);

                this.callParent(arguments);

            },

спасибо, работает!

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