Показать сообщение отдельно
Старый 10.06.2013, 12:17   #57  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Я не утверждал, что Query/QueryRun может генерить SQL-операторы update вместо select'а, однако, в Аксапте при обновлении записей в цикле (без использования update_recordset) принято в этом цикле выбирать записи на обновление (по аналогии с while select forupdate). Можно, конечно, в цикле их выбирать без указания, что они будут обновляться (по аналогии с while select), и потом либо перевыбирать на обновление, либо отрубать проверку, что запись была выбрана на обновление, но в общем случае надо понимать, зачем делать именно так, вместо того чтобы изначально просто выбирать записи на обновление и не усложнять код.А класс запускается изначально где, на сервере или на клиенте? И где он собственно использует запрос для выборки данных, на сервере или на клиенте? Если на сервере, то учитывают ли pack/unpack, что надо паковать запрос? Потому что без этого изменения, внесенные в критерии фильтрации запроса на клиенте, при возврате управления на сервер будут утеряны.
То есть, правильнее будет сделать update через query, а не обычным способом? То есть, должно быть какое-то условие обновления и если это условие выполняется - qbds.update(true) ? Никогда не применял раньше подобную констркцию и не сталкивался с динамическими фильтрами в принципе, посему и пишу здесь


В свойстве Run On стоит Called From.
В методе пакую запрос посредством
X++:
  return [#CurrentVersion,#CurrentList, queryrun.query().pack()];
и в unpack
X++:
 switch (version)
    {
        case #CurrentVersion:
            [version,#CurrentList] = packedClass;
           if (SysQuery::isPackedOk(queryCon))
                queryRun = new QueryRun(queryCon);
            else
                this.initQuery();
            break;
        default:
            return false;
    }