Добрый день. У меня есть такое задание. Есть деталь продукт в накладной, где содержится продукт и его количество. Но там может быть дубляж продукта от разного контрагента. И есть деталь балы, где нужно просуммировать все количество по каждому из продуктов(то есть или вставить новую запись или проапдейтить существующую). Для этого я написал на объекте первой детали такой код на событие после сохранения:
var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "CHProductInTaxInvoice");
EntitySchemaQueryColumn product = esq.AddColumn("CHProduct");
EntitySchemaQueryColumn amount = esq.AddColumn("CHAmount");
amount.SummaryType = AggregationType.Sum;
//product.SummaryType = AggregationType.Sum;
Entity summaryEntity = esq.GetSummaryEntity(UserConnection);
//set params
var manager = UserConnection.EntitySchemaManager.GetInstanceByName("CHPoints");
var app = manager.CreateEntity(UserConnection);
app.SetDefColumnValues();
app.SetColumnValue("CHProduct", summaryEntity.GetTypedColumnValue(product.Name));
app.SetColumnValue("CHAmount", summaryEntity.GetTypedColumnValue(amount.Name));
app.Save(false);
У меня выдает ошибку, что колонка "CHProduct" не найдена. Хотя она точно есть на нужных объектах. Подскажите, пожалуйста, как решить данную проблему. Заранее благодарен
Нравится
Вадим, а где именно выдаёт, что не найдена? При работе с первой схемой или со второй?
Может, действительно в CHPoints нет таких числовых колонок?
А чтобы убедиться, что дело точно не в первой схеме, можно не читать прямо из summaryEntity, а записать результат в две числовые переменные и затем брать из них.
Можно поинтересоваться как вы хотите сложить колонки Lookup типа? (я так понимаю CHProduct - это справочник, ссылка на продукты)
Плюс, колонки CHProduct нет на уровне esq. Есть CHProductId и CHProductName (ну или свои аналогичные, смотря какие поля указаны в объекте)
Подозреваю, что во второй схеме они обе числовые. А как он считает в первой — неясно. Может, там надо не сумму, а количество?
Варфоломеев Данила,
Хочу написать через esq что типа агрегатной функции в sql. Пока не понимаю, как правильно вызвать нужную агрегирующую колонку, особенно если она типа справочник.
Зверев Александр,
Продукт это просто название, которое выбирается из справочника. в первой детали может быть несколько продуктов. Мне фактически нужно взять все продукты из этой детали из одинаковым именем и подбить сумму по каждому продукту, а потом записать во вторую деталь
Можно прямо написать нужный Select с колонками количества и суммы без всяких ESQ. А затем вычитать из него значения и писать через ESQ во второй объект.
Вот пример работы с классом Select. Как делать колонки с Count и Sum, есть тут.