Цитата:
Сообщение от
plumbum
Создайте мап такого типа:
X++:
new Map(Types::container, Types::container);
а ключ формируйте таким образом:
или вообще что хотите.
Вся прелесть в том, что Вам нет необходимости знать, сколько полей упаковано в контейнер, до начала обработки. А во время обработки Вы можете в зависимости от TableId из ключа вызвать нужный обработчик
Сделал почти так, только ключом выступает строка с преффиксом нужным, как вы ранее советовали
X++:
while(queryRun.next())
{
jour = queryRun.get(tablenum(JourListTrans_));
list = queryRun.get(tablenum(JourListTrans));
invoice = queryRun.get(tablenum(InvoiceInvent));
invent = queryRun.get(tablenum(InvoiceInvent));
listKey = "L#"+list.InternalSp + "#" + list.ItemId+"#"+int2str(tablenum(VendSpListTrans));
invoiceKey = "I#"+invoice.InternalSp + "#" + invoice.ItemId+"#"+int2str(tablenum(VendInvoiceTrans));
//check in vendSpListTrans
if(TotalMap.exists(listKey))
{
listCon = TotalMap.lookup(listKey);
listCon = conpoke(listCon,7,conpeek(listCon,7)+list.SumOfSpQty);
TotalMap.insert(listKey,listCon);
}
else
{
TotalMap.insert(listKey,[jour.IDSp, jour.SpDate, jour.RContractAccount,list.InternalSp, list.ItemId, list.SpUnit, list.SumOfSpQty]);
}
//check in VendInvoiceTrans
if(TotalMap.exists(invoiceKey))
{
invoiceCon = TotalMap.lookup(invoiceKey);
invoiceCon = conpoke(invoiceCon,3,conpeek(invoiceCon,3)+invoice.SumOfQty);
TotalMap.insert(invoiceKey,invoiceCon);
}
else
{
TotalMap.insert(invoiceKey,[invoice.ItemId, invoice.PurchUnit, invoice.SumOfQty, invoice.InternalSp, invent.UnitId]);
}
}
Насчёт ключа - контейнера - интересное решение, спасибо!