Показать сообщение отдельно
Старый 08.08.2007, 22:53   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
эммм... не очень понимаю, почему вы отвергаете подход Ивана с курсором... Другого-то все равно ничего нет, если упираться именно во встроенный SQL.

Оператор select на встроенном SQL выбирает по одной записи (он не выбирает набор, как обычный SQL, который можно сразу всем набором куда-то передать дальше). Для прохода по всем записям, удовлетворяющим условиям where или join'ам, после первого select'a используется оператор next до тех пор, пока не кончится набор записей, либо вместо select сразу используется конструкция while select. В любом случае записи выбираются друг за другом в некотором цикле. Поэтому у вас должен быть этот самый "зазор" между записями, в течение которого вы и сможете сосчитать все свои функции от дат (какие-то полезные функции дат вроде есть в классе Global).

Я далек от мысли, что у вас написан какой-то свой движок, который в качестве параметра съедает строку на внутреннем SQL и возвращает обратно сразу весь набор, скрывая цикл в себе так, что вы не можете никак вмешаться в его выполнение со своими дополнительными вычислениями.

В любом случае никаких вычислений (агрегаты, получаемые при помощи group by, не в счет), а также вызовов функций во встроенном select делать нельзя по определению. Ведь выбираемая из реальной таблицы запись помещается в переменную типа запись той же структуры, что и сама таблица. Поэтому при выполнении оператора select A, B from Table1 значения из полей A и B очередной записи таблицы будут помещены в поля A и B табличной переменной Table1. Аксапта не даст вам выполнить оператор select A, B, A+B from Table1, потому что у табличной переменной Table1 нет ячейки для хранения выражения A+B.