Как работает "Сумма по продуктам" в продаже?

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

Нравится

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);
},

 

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