Вопрос

Как сделать состав продуктов (например, услуги и материалы для нее)

Задача в общем типовая - есть продаваемые услуги и товары, которые нужны при оказании услуги (по сути еще и склад).

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

Напрямую, сделать реестр продуктов в разделе Продукт не получается. 

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

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

Нравится

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

Ну подходов может быть несколько как вариант в объект продукт добавить признак является услуга (булевый) и вывести в реестре этот признак. Добавить деталь с добавлением из справочника "продукты в услуге" по которой добавлять к продукту (у которого является услугой = 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;

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