![]() |
#23 |
Участник
|
Цитата:
Сообщение от S.Kuskov
![]() Верно. Только с одной поправкой. Вычисления эти будут происходить не "во время", а "после" выборки очередной записи в буфер табличной переменной. Они [вычисления] непосредственно над этим выбранным буфером и будут происходить.
Narayana, невозможно do something запихнуть в текст SQL запроса. Query, как уже говорилось, не содержит обрабатываемые данные, Query хранит только текст запроса. У него не предусмотренно никаких методов постобработки данных, потому что никакие данные он не обрабатывает. Данные обрабатывает QueryRun. Query только описывает какие данные будут доступны QueryRun'у и к сожалению это описание не предусматривает даже декларативного описания вычисляемых полей, не говоря уже о возможности процедурного вычисления do something. Именно это ограничение я и имел в виду когда говорил о том что многие вещи "за один запрос" не решаются. Стандартных выхода (о которых вам уже в этой ветке не раз говорили) два: 1) либо максимально отсрочить окончательные расчёты и перенести их на сторону интерфейсной части (display-методы) 2) либо, если вычисление требуется не в конце, а в середине процесса сбора данных, создавать вспомогательные таблицы, в которые складировать промежуточный результат. А я попробовал сделать вот такой примерчик, дак, вроде бы, в нем удалось запихнуть вычисления внутрь запроса. Только почему-то результаты не сохраняются в поле баланса. Наверное какое-нибудь волшебное слово типа update() надо в правильное место поставить? X++: static void Job2(Args _args) { Query q; QueryRun qr; QueryBuildDatasource qbds1, qbds2; QueryBuildRange qbr; EmplCommissionWageEndBalance a; ; q = new Query(); qbds1 = q.addDataSource(tablenum(EmplCommissionWageEndBalance)); qr = new QueryRun(q); while(qr.next()) { a = qr.get(tableNum(EmplCommissionWageEndBalance)); a.EndBalanceMST = a.SumOfAmountMST_In - a.SumOfAmountMST_Out; print "сотр = ", a.EmplId, " сюда = ", a.SumOfAmountMST_In, " отсюда ", a.SumOfAmountMST_Out, " баланс ", a.EndBalanceMST; pause; } } Кажется, понятно, почему они вместо переменных для ссылки на таблицы используют системные номера таблиц. Как раз затем, чтобы обойти проблему с областью видимости таблицы...! Последний раз редактировалось Narayana; 13.11.2012 в 12:55. |
|
Теги |
query, архитектура, как правильно |
|
|