Вопрос

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

У меня такой же вопрос

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

Эта логика реализована во встроенном БП объекта «Продукт в продаже» (OpportunityProductInterest). Там в обработчике событий сохранения и удаления записей в объекте детали запускается функция CalckOpportunityAmount с кодом:

var oppotrunityAmountSelect = new Select(UserConnection)
	.Column("Amount")
	.From("OpportunityProductInterest")
	.Where("OpportunityId").IsEqual(Column.Parameter(opportunityId)) as Select;
double opportunityAmount = 0.0;
using (var dbExecutor = UserConnection.EnsureDBConnection()) {
	using (IDataReader dr = oppotrunityAmountSelect.ExecuteReader(dbExecutor)) {
		while (dr.Read()) {
			if(!dr.IsDBNull(0)){
				opportunityAmount += (double)UserConnection.DBTypeConverter.DBValueToDecimal(dr[0]);
			}
		}
	}
}
var update = new Update(UserConnection, "Opportunity")
		.Set("Amount", Column.Parameter(opportunityAmount))
		.Where("Id").IsEqual(Column.Parameter(opportunityId));
	update.Execute();

 

Зверев Александр, 

Спасибо. Нашел - получилось что бы в поле записывалась сумма, но я так понимаю должно быть еще сообщение которое заставляет страницу обновляться (или точнее поле на фронте). Не нахожу таких сообщений в OpportunityPageV2 и наверно с БП объекта тот что отправляет

У страницы OpportunityPageV2 есть много версий в разных пакетах.

Зверев Александр,

Я смотрел сразу через дебагер в chrome, что бы видеть все версии сразу

Не оно ли:

details: /**SCHEMA_DETAILS*/{
...
OpportunityProduct: {
	schemaName: "OpportunityProductDetailV2",
	filter: {
		masterColumn: "Id",
		detailColumn: "Opportunity"
	},
	subscriber: {methodName: "onOpportunityProductChanged"}
},
...
methods: {
 
/**
 * Reloads current record.
 * @private
 */
onOpportunityProductChanged: function() {
	this.loadEntity(this.get("Id"));
	this.sendSaveCardModuleResponse(this);
},

 

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

Добрый день!

Подскажите пожалуйста, как сделать так, чтобы при отсутствии записей в детали сворачивала бы ее?

Прикрепленные файлы

У меня такой же вопрос

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

Установите значение class для вашей детали в значение class="ts-controlgroup detail grid-detail ts-controlgroup-collapsed", можно сделать через DOM

Установите значение class для вашей детали в значение class="ts-controlgroup detail grid-detail ts-controlgroup-collapsed", можно сделать через DOM

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

Добрый день,

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

Спасибо!

Одобрена
1 комментарий

Антон, здравствуйте!

Ваше пожелание зафиксировали.

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

Для решения вашей задачи вам необходимо:

1) В таб добавить контейнер, в котором разместить грид.
2) В гриде (пункт 1) расположить 2 контейнера.
3) В контейнеры из пункта 2 разместить детали.

Пример кода:

                     {
                        "operation": "insert",
                        "parentName": "ActivityParticipantTab",
                        "name": "DetailsContainer",
                        "propertyName": "items",
                        "values": {
                            "itemType": Terrasoft.ViewItemType.CONTAINER,
                            "items": [],
                            "id": "DetailsContainer",
                            "selectors": {"wrapEl": "#DetailsContainer"}
                    }
                },
                {    
                    "operation": "insert",
                    "name": "DetailsGridContainer",
                    "parentName": "DetailsContainer",
                    "propertyName": "items",
                    "values": {
                        "id": "DetailsGridContainer",
                        "selectors": {"wrapEl": "#DetailsGridContainer"},
                        "itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
                        "classes": {
                            "wrapClassName": ["DetailsGridContainer"]
                        },
                        "items": [],
                        "markerValue": "DetailsGridContainer",
                        "collapseEmptyRow": false
                    }
                },
                {
                        "operation": "insert",
                        "parentName": "DetailsGridContainer",
                        "propertyName": "items",
                        "name": "DetailsContainer1",
                        "values": {
                            "itemType": Terrasoft.ViewItemType.CONTAINER,
                            "items": [],
                            "id": "DetailsContainer1",
                            "selectors": {"wrapEl": "#DetailsContainer1"},
                            "layout": { "column": 0, "row": 0, "colSpan": 12 },

                        }
                },
                {
                    "operation": "insert",
                    "parentName": "DetailsGridContainer",
                    "propertyName": "items",
                    "name": "DetailsContainer2",
                     "values": {
                        "itemType": Terrasoft.ViewItemType.CONTAINER,
                        "items": [],
                        "id": "DetailsContainer2",
                        "selectors": {"wrapEl": "#DetailsContainer2"},
                        "layout": { "column": 12, "row": 0, "colSpan": 12 },
                    }
                },

                {
                    "operation": "insert",
                    "parentName": "DetailsContainer2",
                    "propertyName": "items",
                    "name": "ActivityParticipant",
                    "values": {
                        "itemType": Terrasoft.ViewItemType.DETAIL
                    }
                },

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

Пытался создать деталь через мастер и его глюкануло. В итоге деталь создалась, а страница редактирования - нет.

Саму страницу я, понятно, могу создать руками. 

Вопрос - куда чего прописать, чтобы эта страница отрывалась? Раздела для этого объекта нет и не предусмотрено.

Если подробно - я расширил AccountFile своими полями и решил сделать свою деталь с дополнительными пунктами меню. С деталью всё ок, но она не открывает страницу, точнее страница не создалась. Я создал ее руками и попытался сделать 

UPDATE SysModuleEdit
SET CardSchemaUId = 'D0CF937D-7640-4FF0-B237-DB679B4EADDB',
	ActionKindCaption = N'Добавить',
	ActionKindName = 'AccountFilePage',
	PageCaption = N'Страница файла и ссылки контрагента',
	UseModuleDetails = 1
WHERE 'E6C25453-049E-429B-84CD-DA894DA7E826' = [SysModuleEntityId]

но без толку.

'D0CF937D-7640-4FF0-B237-DB679B4EADDB' - моя страница.

У меня такой же вопрос

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

Всегда помогал скрипт отсюда. П5.

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

к сожалению, не помогает. У меня по сути так и было в таблицах уже.

Проблему решил, напишу, может кому-то еще поможет. 

1. Да, инструкцию Данилы надо выполнить

2. Как выяснилось, с предыдущей версии в базовой логике добавили новый хардкод, он решается отменой оного следующим кодом 

getEditRecordButtonEnabled: function() {
	return this.isSingleSelected();
},
 
getOpenCardConfig: function() {
	var config = this.callParent(arguments);
	config.schemaName = "AccountFilePage";
	return config;
},

После чего нужная страница открывается!

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

Как в карточку контакта добавить Продукт. Цель - при открытии Истории контакта, чтобы было видно, какие продукты им покупались. (при добавлении детали - в итоге она не отображается.... возможно, неверные привязки "Колонка детали" и "Колонка объекта"?...

У меня такой же вопрос

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

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

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

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

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

Аналогия - xml data source в Report Server'e, под которым может лежать всё что угодно. Я, например, вызывал 1С и мержил данные с SQL'ем.

Круто же?

Одобрена
2 комментария

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

Передали Ваше пожелание аналитикам продукта для рассмотрения такой реализации. 
Спасибо за помощь в развитии функционала!

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

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

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

1. Можно ли использовать для детали filterMethod, как в основной версии, или каким-либо образом использовать произвольный фильтр, а не только по колонке родительской страницы?

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

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

У меня такой же вопрос

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

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

1. Для деталей можно указывать фильтры, используя метод configure() соотв. sdk-класса:

 

Terrasoft.sdk.Details.configure("Contact", "ActivityDetailV2StandartDetail", {
   filters: Ext.create("Terrasoft.Filter", {
      type: Terrasoft.FilterTypes.Group,
      subfilters: [
         Ext.create("Terrasoft.Filter", {
            compareType: Terrasoft.ComparisonTypes.NotEqual,
            property: "Type",
            value: Terrasoft.GUID.ActivityTypeEmail
         })
      ]
   })
});

2. В целом, изменение режима работы детали делается так:

Terrasoft.sdk.Details.setChangeModes("Contact", "ActivityDetailV2StandartDetail", [Terrasoft.ChangeModes.Read]);

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

 

getChangeModeOperations: function() {
   var detailConfig = this.getDetailConfig();
   if (detailConfig) {
      var parentRecord = detailConfig.parentRecord;
      if (parentRecord.get("IsNonActualEmail") === false) {
         return {
            canCreate: false,
            canUpdate: false,
            canDelete: false
         };
      }
   }
   return this.callParent(arguments);
}
Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Добрый день. Подскажите, пожалуйста. Создала новую страницу активности

1. В детали "Участники активности" не знаю что выбрать в колонке детали и колонке объекта. Пробовала разные варианты - не получается.

2. Во всех активностях есть вкладка "Файлы и примечания". Что выбрать в детали "Файлы и ссылки Активности"?

и как добавить пункт "Примечания"?

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

У меня такой же вопрос

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

1) я обычно делаю таким образом:

2) Добавление детали . Примечание ,кажется это группа полей "Примечание"+ текстовое поле,у которого скрыт заголовок. Или же надо посмотреть, как кодом прописать добавление примечания на страницу.

Пример со страницы активности(ActivityPageV2, пакет UIv2).  Для текстового поля "Примечания". Обратите внимание  на controlConfig и images. 

{
                    "operation": "insert",
                    "parentName": "ActivityNotesControlGroup",
                    "propertyName": "items",
                    "name": "Notes",
                    "values": {
                        "contentType": Terrasoft.ContentType.RICH_TEXT,
                        "layout": {"column": 0, "row": 0, "colSpan": 24},
                        "labelConfig": {
                            "visible": false
                        },
                        "controlConfig": {
                            "imageLoaded": {
                                "bindTo": "insertImagesToNotes"
                            },
                            "images": {
                                "bindTo": "NotesImagesCollection"
                            }
                        }
                    }
                }

 

Матвеева Светлана,

Спасибо, попробую!

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

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

У меня такой же вопрос

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

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

Уточните, пожалуйста, какая у вас бизнес-задача? Какую валидацию вы хотите настроить?

Есть деталь "График платежей", в ней нужно сделать поле "Вариант оплаты" обязательным для заполнения. Реализовать с помощью настройки колонок в объекте детали нельзя, т.к к этому объекту привязана другая деталь.

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

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

https://academy.terrasoft.ru/documents/technic-sdk/7-8/biznes-pravila-i…

https://academy.terrasoft.ru/documents/technic-sdk/7-8/pravilo-bindpara…

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

Виталий Красный,

вы что плохо читаете? вам человек написал, что нужна валидация на ГРИД детали, а не на страницу редактирования. Он же пишет, что валидация для ПОЛЯ не подходит

Демьяник Алексей,

что непонятного, зачем вы переспрашиваете? там же написано на ГРИД детали, значит для детали с реестром. Это тот случай, когда в вашей документации ничего нет по этому поводу. Никакой информации как валидировать детали с реестром нет.

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

В продукте sales enterprice 7.8 при добавлении записей на деталь Предложения нужно убрать возможность выбора типа Предложения. Сейчас эта возможность реализована в базовом функционале, так как в кастомном разделе Предложения есть несколько страниц редактирования.

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

У меня такой же вопрос

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

Вопрос в том, как внести в изменения в меню, которое генерируется методом getEditPages.
Метода getEditPages мы не нашли - хотя по сути понятно, что он делает, это просто получение списка типов.

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

Проблема ещё в том, что getEditPages используется во многих методах, поэтому также интересует вопрос, как этот метод правильно переопределить, чтобы это не повлияло на другие процессы?

Сопутствующий вопрос, который может помочь решить данную задачу - как вообще удалить из списка типов лишний пункт?

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