Показать сообщение отдельно
Старый 27.07.2009, 08:41   #10  
SRF is offline
SRF
Участник
MCBMSS
Axapta Retail User
 
376 / 562 (19) +++++++
Регистрация: 08.08.2007
Записей в блоге: 1
Цитата:
Сообщение от Logger Посмотреть сообщение
... Есть какой нибудь нормальный способ ?
Наиболее логичным способом помещения record в контейнер, как мне кажется является вариант, предложенный DSPIC, использование функций
container buf2Con(Common common) и static void con2Buf(container c, Common common), по всей видимости они для этого и предназначены

Цитата:
Сообщение от DSPIC Посмотреть сообщение
Есть 2 отличные функции у класса Global:
container buf2Con(Common common)
static void con2Buf(container c, Common common)
...

X++:
static void dspic(Args _args)
{
    CustTable custTable;
    container conCustTable;
    ;
 
    select firstonly custTable;
 
    conCustTable = buf2con(custTable);
 
    changecompany ("DAT")
    {
        con2buf(conCustTable, custTable);
 
        info (strfmt("%1", custTable.dataAreaId));
    }
}
Однако стоить помнить, что функция Global \ container buf2Con(Common common) в версиях AX 3.0(возможно только в некоторых, проверял на AX 3.0 SP 2, AX 3.0 SP 3 CU 1) не работает(выпадает эксепшен), если у табличных переменных есть поля-массивы(т.е. выше описанный job работать не будет )

Также в случае использования одной табличной переменной и функции xRecord.company(...) можно получить реальную компанию(однако, если в changeCompany("dat") вместо CustTable, использовать CustTable2, то в обоих случаях будет выведено "dat")

X++:
static void srf_test(Args _args)
{
    CustTable   custTable;
    Container   conCustTable;
    ;
 
    select firstOnly custTable;
 
    conCustTable = [custTable];
 
    changecompany("dat")
    {
        custTable.clear();
        custTable.data(conpeek(conCustTable, 1));
 
        info(custTable.dataAreaId);
        info(custTable.company());
    }
}
__________________
Sergey Nefedov
За это сообщение автора поблагодарили: Logger (2).