Показать сообщение отдельно
Старый 23.03.2010, 13:22   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Создаётся ощущение, что передача курсора на сервер не всегда происходит. Т.е. у сервера существует своя серверная версия курсора, которая, как оказывается, не всегда (или точнее не целиком) синхронизируется с клиенской. А именно не синхронизируется orig-часть курсора!
т.е. xTable.clear() - полностью стирает только клиенстскую версию, а на сервере курсор остаётся со старым orig.

Для эксперимента можно попробовать вручную стереть серверный orig
X++:
server static void serverClear(xTable _xTable)
{
    _xTable.clear();
}
X++:
...
    for(i = 1; i <= 5; i++)
    {
        xTable.clear();
        xTable::serverClear(xTable); // <<-----------

        xTable.Qty = i;

        diff = xTable::diff(xTable);

        info(strFmt("%1 %2", diff, xTable.Qty - xTable.orig().Qty));

        xTable.insert();
    }
результат:
0,00 1,00
2,00 2,00
3,00 3,00
4,00 4,00
5,00 5,00

P.S.: Проверил, в обратную сторону курсоры синхронизируются корректно. Т.е. clear(), вызванный на сервере стирает и клиенский orig() тоже.

Последний раз редактировалось S.Kuskov; 23.03.2010 в 13:48.
За это сообщение автора поблагодарили: Logger (4).