Имя: Пароль:
1C
1С v8
Можно ли в запросе использовать результат функции
0 al_an77
 
16.07.16
11:01
Например в запросе есть строка
Выразить(ТЧ.ЦенаВал * &Курс Как Число(15,2)) как ЦенаРуб
Могу ли в следующей строке запроса обращаться к ценаруб?
Выразить(ценаруб * ТЧ.Количество как число(15,2))
Или придется в каждой строке целиком описывать расчет ценыруб?
1 В тылу врага
 
16.07.16
11:14
придется описывать
но не переживай, сервер БД очень умный и возможно оптимизирует
2 RomanYS
 
16.07.16
11:29
результат запроса во временную таблицу, а в следующем пакете делай с ценаруб что хочешь.
3 В тылу врага
 
16.07.16
11:36
(2) по-моему не стоит того
4 Фрэнки
 
16.07.16
11:45
(0) попробуй конструктором заставить сделать группировку по ЦенаРуб и он тебе покажет, как он это может делать на самом деле и ответит на твой вопрос.

(3) На все случаи не зарекайся. Пакетные запросы и создание виртуальных таблиц тоже имеют право на жизнь
5 Фрэнки
 
16.07.16
11:51
(0) лично я сделал бы отдельной таблицей расчет всех нужных полей, а уже затем выполнил какие-то операции над результирующей. Это если ЦенаРуб нужна в обращениях.
А если нужна перед обработкой результата, то и вычислять ее перед результатом, когда выборка уже определена со составу и осталось только посчитать.

Так и внешне логично, и оптимизатор тебе сюрпрайз не подкинет. Еще можно первую-вторую-промежуточную временную проиндексировать для ускорения соединений и пронести вычисленные данные по многим другим источникам (если их там действительно много и объемы выборки существенные).
6 Горогуля
 
16.07.16
12:03
а на зачем это округление в "следующей строке"?
7 В тылу врага
 
16.07.16
13:23
(4) не зарекаюсь, но они для того чтобы данные не выбирать повторно, а не для отказа от дублирования полей
8 bura_limon
 
16.07.16
20:04
(0) если скуль,то у него есть кэш вызова,если скуль отработал функцию,результат сохр.в кэше,следующий раз он не будет делать запрос снова,а вернет результат из кэша.