Показать сообщение отдельно
Старый 10.06.2014, 17:00   #1  
Мартынов Дмитрий is offline
Мартынов Дмитрий
Участник
 
236 / 66 (3) ++++
Регистрация: 02.02.2004
Адрес: г. Москва
код в CIL и без
Хочу поделиться опытом связанным с 2012:

Был вот такой код
X++:
void test()
{
    Map     valList = new Map(Types::String, Types::Container);
    Real    value;
    ;
    valList.insert(value, conNull());
}
Ошибочка: объявили, что в мепе будет стринг, а пишем туда риал. Долго оставалась незамеченной, все работало как часы. Но как только собрали CIL она всплыла. Вот ведь... в циле работает так, а в аксапте иначе. Но если говорить серьезно, то разница есть и на вполне правильных конструкциях. В последнее время я попробовал работать с SysOperation вместо RunBaseBatch, а там все работает только через цил.

1. Прежде всего, это передача различных типов данных.
а) например, при работе с Net-сборками:

Без цила работает так

X++:
void test(CLRObject _obj)
{
    System.Collections.Hashtable        hash;
    ;
    hash = new System.Collections.Hashtable(_obj);
}
В циле требуется передавать объект правильного типа

X++:
void test(CLRObject _obj)
{
    System.Collections.Hashtable        hash;
    System.Collections.IDictionary      iDictionary;
    ;
    if ( #isDictionary )
    {
        iDictionary = _obj;
        hash = new System.Collections.Hashtable(iDictionary);
    }
}
б) выборка из таблицы select x; без цила возвращает объект того типа, который объявлен, а в циле возвращает объект дочерней таблицы (теперь у нас такие есть в Акс12).
в) Аналогично, надо внимательно относиться к классам дочерним и родительским, к передаче данных через контейнер, к использованию anytype и common и т.д.

2. insert_recordset без цила позволяет писать в таблицу константы (используя переменные правильного типа), в циле этот номер не проходит, приходится выполнять две операции, сначала используя insert_recordset прописать идентификаторы, а затем при помощи update_recordset прописать текстовые константы.

3. Метод внутри метода (вложенный): с ним нет проблем, кроме одной: если вложенный метод является рекурсивным, то цил даже отказывается компилиться

У меня пока все, может быть кто то еще с чем то подобным встречался ?

Последний раз редактировалось Мартынов Дмитрий; 10.06.2014 в 17:02. Причина: ня
За это сообщение автора поблагодарили: mazzy (2), Logger (3), Link (4), S.Kuskov (5), pedrozzz (1).