Как сделать состав продуктов (например, услуги и материалы для нее)
Задача в общем типовая - есть продаваемые услуги и товары, которые нужны при оказании услуги (по сути еще и склад).
Хочется вести все в одном каталоге продуктов, а в составе услуги указывать набор товаров/материалов. При этом в заказе/счете должна быть только услуга с ценой продажи клиенту, а не ее состав с себестоимостью материалов/товаров.
Напрямую, сделать реестр продуктов в разделе Продукт не получается.
Какой типовой подход может быть, наверняка задача распространенная у многих? Не хочется велосипед придумывать;
Заранее спасибо!
Нравится
Ну подходов может быть несколько как вариант в объект продукт добавить признак является услуга (булевый) и вывести в реестре этот признак. Добавить деталь с добавлением из справочника "продукты в услуге" по которой добавлять к продукту (у которого является услугой = true) продукты (у которого является услугой = false)
Эту же деталь вывести на страницу редактирования продукта.
При добавлении услугу продукта пересчитывать в БП общую стоимость услугу (или себестоимость продуктов которые в нее входят), которая и пойдет в счет или заказ
При этом счет или заказ формировать по продуктам которые и является услугами, при этом формирование счета/заказа не придется переделывать!
Ну подходов может быть несколько как вариант в объект продукт добавить признак является услуга (булевый) и вывести в реестре этот признак. Добавить деталь с добавлением из справочника "продукты в услуге" по которой добавлять к продукту (у которого является услугой = true) продукты (у которого является услугой = false)
Эту же деталь вывести на страницу редактирования продукта.
При добавлении услугу продукта пересчитывать в БП общую стоимость услугу (или себестоимость продуктов которые в нее входят), которая и пойдет в счет или заказ
При этом счет или заказ формировать по продуктам которые и является услугами, при этом формирование счета/заказа не придется переделывать!
Спасибо, так и буду делать. Подскажите, а как в счете делается расчет цены на основе выбранных продуктов? Это БП какой-то? Хотелось бы посмотреть пример. Если самому делать бизнес процесс - его привязывать к детали (те при добавлении позиции в детали запускать процессс пересчета) или как-то под другому лучше реализовать? Не хотелось бы на грабли наступать))
SERGEY PIMINOV,
Нужно что-то вроде такого кода писать (ниже) или можно как-то визуально процесс сделать для расчета суммы итоговой по суммам из детали?
UpdateInvoiceAmount(UserConnection);
/*var entitySchemaManager = this.UserConnection.GetSchemaManager("EntitySchemaManager") as EntitySchemaManager;
EntitySchemaQuery invoiceProductEntitySchemaQuery = new EntitySchemaQuery(entitySchemaManager, "InvoiceProduct");
var invoiceIdColumn = invoiceProductEntitySchemaQuery.AddColumn("Invoice");
var primaryAmountColumn = invoiceProductEntitySchemaQuery.AddColumn(invoiceProductEntitySchemaQuery.CreateAggregationFunction(AggregationTypeStrict.Sum, "PrimaryTotalAmount"));
var amountColumn = invoiceProductEntitySchemaQuery.AddColumn(invoiceProductEntitySchemaQuery.CreateAggregationFunction(AggregationTypeStrict.Sum, "TotalAmount"));
var filters = invoiceProductEntitySchemaQuery.Filters;
var invoiceId = this.Entity.GetTypedColumnValue<Guid>("InvoiceId");
filters.Add(invoiceProductEntitySchemaQuery.CreateFilterWithParameters(FilterComparisonType.Equal, "Invoice", invoiceId));
var entityCollection = invoiceProductEntitySchemaQuery.GetEntityCollection(this.UserConnection);
var invoice = new Invoice(this.UserConnection);
invoice.FetchFromDB(invoiceId);
decimal PrimarySumTotalAmount = 0;
decimal SumTotalAmount = 0;
var discountPercent = invoice.GetTypedColumnValue<decimal>("DiscountPercent");
decimal totalAmount = 0;
decimal PrimaryTotalAmount = 0;
decimal discountAmount = 0;
if (entityCollection.Count > 0) {
PrimarySumTotalAmount = entityCollection[0].GetTypedColumnValue<decimal>(primaryAmountColumn.Name);
SumTotalAmount = entityCollection[0].GetTypedColumnValue<decimal>(amountColumn.Name);
totalAmount = SumTotalAmount;
PrimaryTotalAmount = PrimarySumTotalAmount;
discountAmount = invoice.GetTypedColumnValue<decimal>("DiscountAmount");
if (discountPercent != 0) {
discountAmount = Multiply(Division(SumTotalAmount, 100), discountPercent);
totalAmount = SumTotalAmount - Multiply(Division(SumTotalAmount, 100), discountPercent);
PrimaryTotalAmount = PrimarySumTotalAmount - Multiply(Division(PrimarySumTotalAmount, 100), discountPercent);
} else {
if (discountAmount != 0) {
totalAmount = SumTotalAmount - discountAmount;
discountPercent = Division(Multiply(discountAmount, 100), SumTotalAmount);
PrimaryTotalAmount = PrimarySumTotalAmount - Multiply(Division(PrimarySumTotalAmount, 100), discountPercent);
}
}
}
var update = new Update(context.UserConnection, "Invoice")
.Set("PrimaryAmount",Column.Parameter(PrimarySumTotalAmount))
.Set("Amount",Column.Parameter(SumTotalAmount))
.Set("DiscountAmount",Column.Parameter(discountAmount))
.Set("DiscountPercent",Column.Parameter(discountPercent))
.Set("TotalAmount",Column.Parameter(totalAmount))
.Set("PrimaryTotalAmount",Column.Parameter(PrimaryTotalAmount))
.Where("Id").IsEqual(Column.Parameter(invoiceId)) as Update;
update.Execute();*/
return true;