Цитата:
Сообщение от
plumbum
Два мапа нужно вам из-за того, что вы их в разных местах инициализируете, или для какого-то логического разделения элементов.
Ведь если вопрос только в инициализации, то можно выкрутиться и создать один мап. Передавайте общий мап как параметр в ваши методы и возвращайте его, как результат. Тогда сможете добавить нужные элементы в один мап в нескольких местах еще и от дубликатов избавитесь.
Ну а если честно, сколько элементов в сумме в двух мапах получается? Может стоит уже их просто перебрать

Разделяю скорее всего. У меня есть результирующий набор данных из Query(4 таблицы). 2 таблицы я пихаю в 1 мап по уникальному ключу(номенклатура+номер спецификации), вторые 2 таблицы я пихаю в другой мап по этому же ключу. Если ключ в мапе есть - я делаю суммирование кол-ва, иначе произвожу вставку в меп.
А по поводу метода с мапом в кач-ве параметра не совсем понял, если честно.
Данным методом я создаю своих 2 мапа
X++:
void FindSpecForClose()
{
//view variable ->
JourListTrans jour,list;
InvoiceInvent invoice,invent;
//<-
str listKey,
invoiceKey;
container listCon,
invoiceCon;
;
ListMap = new Map(Types::String, Types::Container);
InvoiceMap = new Map(Types::String, Types::Container);
//->add range in query by date
if(bydate)
queryRun.query().dataSourceNo(1).addRange(fieldnum(JourListTrans,SpDate)).value(strFmt('(SpDate <= %1)', date2strXpp(bydate)));
//<-
//info(queryRun.query().dataSourceNo(1).toString());
while(queryRun.next())
{
jour = queryRun.get(tablenum(JourListTrans));
list = queryRun.get(tablenum(JourListTrans));
invoice = queryRun.get(tablenum(InvoiceInvent));
invent = queryRun.get(tablenum(InvoiceInvent));
listKey = list.InternalSp + "#" + list.ItemId+"#"+tablenum(VendSpListTrans);
invoiceKey = invoice.InternalSp + "#" + invoice.ItemId+"#"+tablenum(VendInvoiceTrans);
//check in vendSpListTrans
if(ListMap.exists(listKey))
{
listCon = ListMap.lookup(listKey);
listCon = conpoke(listCon,7,conpeek(listCon,7)+list.SumOfSpQty);
listMap.insert(listKey,listCon);
}
else
{
listMap.insert(listKey,[jour.IDSp, jour.SpDate, jour.RContractAccount,list.InternalSp, list.ItemId, list.SpUnit, list.SumOfSpQty]);
}
//check in VendInvoiceTrans
if(InvoiceMap.exists(invoiceKey))
{
invoiceCon = invoiceMap.lookup(invoiceKey);
invoiceCon = conpoke(invoiceCon,3,conpeek(invoiceCon,3)+invoice.SumOfQty);
InvoiceMap.insert(invoiceKey,invoiceCon);
}
else
{
invoiceMap.insert(invoiceKey,[invoice.ItemId, invoice.PurchUnit, invoice.SumOfQty, invoice.InternalSp, invent.UnitId]);
}
}
}
Если есть какой-либо другой путь решения - я с удовольствием узнаю о нём. Сейчас пока что пришла идея лишь заменить мепы на общий контейнер