24.10.2008, 10:57 | #1 |
Участник
|
Помещение временной таблицы в Map
Собственно сабж...Требуется хранить в структуре Map временные таблицы. Просто так ее туда не положить, однако обходной путь вроде бы нашелся. Создал класс обертку
X++: class TmpTable4CollectionStruct { Common common; } void new(Common _common) { ; //common.setTmp(); common = _common; } Common getCommon() { ; return common; } X++: static void Test(Args _args) { LedgerTable ledgerTable; LedgerTable tmpLedgerTable; LedgerTable tmpLedgerTableFromMap; Map map = new Map(Types::Integer, Types::Class); TmpTable4CollectionStruct struct, struct2; int i; ; tmpLedgerTable.setTmp(); while select ledgerTable order by AccountNum { buf2buf(ledgerTable, tmpLedgerTable); tmpLedgerTable.insert(); i++; if (i > 10) break; } info("Tmp"); while select tmpLedgerTable info(strfmt("%1 -> %2", tmpLedgerTable.AccountNum, tmpLedgerTable.AccountName)); struct = new TmpTable4CollectionStruct(tmpLedgerTable); map.insert(1, struct); struct2 = map.lookup(1); // tmpLedgerTableFromMap.setTmp(); tmpLedgerTableFromMap = struct2.getCommon(); info("FromMap"); while select tmpLedgerTableFromMap info(strfmt("%1 -> %2", tmpLedgerTableFromMap.AccountNum, tmpLedgerTableFromMap.AccountName)); } p.s. DAX 4 |
|
24.10.2008, 11:14 | #2 |
Боец
|
можно через контейнер:
buf2Con(Common common), con2Buf(container c, Common common) |
|
24.10.2008, 11:14 | #3 |
Ищущий знания...
|
вот быстренько наваял пример:
X++: static void test(Args _args) { InventTable inventTable, inventTableMap; Map map = new Map(Types::Integer, Types::Record); MapEnumerator enumerator; ; select inventTable where inventTable.dm_deleted == NoYes::No; map.insert(inventTable.RecId, inventTable); enumerator = map.getEnumerator(); while(enumerator.moveNext()) { inventTableMap = enumerator.currentValue(); } info(inventTableMap.ItemId); }
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
24.10.2008, 11:18 | #4 |
Злыдни
|
|
|
24.10.2008, 11:20 | #5 |
Участник
|
|
|
24.10.2008, 11:23 | #6 |
Участник
|
|
|
24.10.2008, 11:24 | #7 |
Злыдни
|
Ну, например, как lev написал. Или вот так
X++: Map map = new Map(extendedTypeId2Type(typeId(RefRecId)),types::Record); TmpFrmVirtual tmp; MapEnumerator me; ; tmp.clear(); tmp.ItemId = "1"; tmp.Qty = 1.00; tmp.insert(); tmp.clear(); tmp.ItemId = "2"; tmp.Qty = 2.00; tmp.insert(); tmp.clear(); tmp.ItemId = "3"; tmp.Qty = 3.00; tmp.insert(); while select tmp map.insert(tmp.RecId,tmp); me = map.getEnumerator(); while (me.moveNext()) { tmp = me.currentValue(); info(strFmt("%1 %2",tmp.ItemId,tmp.Qty)); } |
|
24.10.2008, 11:27 | #8 |
Злыдни
|
|
|
24.10.2008, 11:30 | #9 |
Участник
|
Цитата:
Сообщение от Yprit
Ну, например, как lev написал. Или вот так
X++: Map map = new Map(extendedTypeId2Type(typeId(RefRecId)),types::Record); TmpFrmVirtual tmp; MapEnumerator me; ; tmp.clear(); tmp.ItemId = "1"; tmp.Qty = 1.00; tmp.insert(); tmp.clear(); tmp.ItemId = "2"; tmp.Qty = 2.00; tmp.insert(); tmp.clear(); tmp.ItemId = "3"; tmp.Qty = 3.00; tmp.insert(); while select tmp map.insert(tmp.RecId,tmp); me = map.getEnumerator(); while (me.moveNext()) { tmp = me.currentValue(); info(strFmt("%1 %2",tmp.ItemId,tmp.Qty)); } |
|
24.10.2008, 16:40 | #10 |
Участник
|
Простите за оффтоп, но это жуткое извращение - временную таблицу в Map, так еще и всю!
|
|
24.10.2008, 16:51 | #11 |
Banned
|
Отнюдь. Как передать временную таблицу с клиента на сервер или с сервера на клиент? Как сохранить параметры чего-либо в SysLastValue, если параметры организованы во временной таблице?
|
|
24.10.2008, 17:26 | #12 |
Участник
|
Цитата:
X++: final class ReportRun extends ObjectRun { InventDimParm inventDimParm; #define.CurrentVersion(6) #localmacro.CurrentList ... totalAccount, inventDimParm #endmacro } public container pack() { return [#CurrentVersion, #CurrentList] ; } |
|
24.10.2008, 17:32 | #13 |
Участник
|
Цитата:
X++: protected boolean canSwapBetweenCS() { return false; } |
|
24.10.2008, 18:39 | #14 |
Banned
|
|
|
24.10.2008, 19:59 | #15 |
Участник
|
|
|
24.10.2008, 20:00 | #16 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Lemming (1). |
25.10.2008, 12:41 | #17 |
Участник
|
|
|
29.10.2008, 21:40 | #18 |
Administrator
|
Цитата:
1. При необходимости программно скопировать запись в постоянной таблице - данный метод просто спозиционирует переменную таблицы на ту же запись - т.е следующая конструкция только "откопирует" курсор, при этом RecId не будет равен нулю (что логично, но не всегда удобно): X++: LedgerTable fromLedgerTable, toLedgerTable;
;
select fromLedgerTable;
toLedgerTable.data(fromLedgerTable); X++: LedgerTable fromLedgerTable, toLedgerTable; ; changecompany ('dax') { select fromLedgerTable; changecompany ('nav') { toLedgerTable.data(fromLedgerTable); toLedgerTable.insert(); // Будет создана запись в компании dax } }
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 29.10.2008 в 21:53. |
|
|
За это сообщение автора поблагодарили: ZVV (1), Logger (5), mayk (1), AP-1055D (1). |
20.04.2009, 00:01 | #19 |
Участник
|
Пришлось реализовать задачу с временной таблицей в Map.
В контейнер и Map можно сохранить только Record. Копия строки в таблице, но не само строку (обновить ее нельзя, если извлечь из Маp, сначала ее надо найти в таблице). Без обертки не как, кроме класса можно использовать класс формы. Пакуем очевидно класс - обертку. Лично пришлось решать как обычно не стандартную задачу. На каждом этапе сложно алгоритма нужно было сохранять промежуточную таблицу. Создаю класс с временной таблице - пишу на каждом этапе. На выходе меню со списком этапов. Кнопка по текущему курсору открывает форму с нужны экземпляром сохраненной темповой таблицы со контентом из Map. |
|
19.10.2017, 11:58 | #20 |
Снова балуюсь косаптой :)
|
X++: static void msk_testStruct(Args _args) { struct val; Map map = new map(Types::Integer, Types::Class); MapEnumerator enum; int i; struct setCar(int modelYear, str Carbrand) { struct myCar; ; myCar = new struct ("int ModelYear; str Carbrand"); mycar.value ("ModelYear", modelYear); mycar.value ("Carbrand", carbrand); return mycar; } ; map.insert(1, setCar(2000, "BMW")); map.insert(2, setCar(2005, "Mersedes")); enum = map.getEnumerator(); while (enum.moveNext()) { i = enum.currentKey(); val = enum.currentValue(); info(strFmt("N = %1, Year = %2, Brand = %3", i, val.value("ModelYear"), val.value("Carbrand"))); } }
__________________
Бесты и регарды! |
|
Теги |
map, временная таблица, клиент-сервер |
|
|