Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

не получается сделать запрос с условием, в котором участвует вычисляемое поле

не получается сделать запрос с условием, в котором участвует вычисляемое поле
Я
   alpha78
 
17.03.21 - 14:58
Здравствуйте, хочу выбрать из спр. ФизЛица людей возрастом меньше 55 лет
Выбираю фио, день рождения, создаю вычисляемое поле для возраста  - сегодняшний год - год рождения

Запрос.Текст = "ВЫБРАТЬ
                   |    ФизическиеЛица.Наименование КАК Наименование,
                   |    ФизическиеЛица.ДатаРождения,
                   |    ФизическиеЛица.Родитель,
                   |    (ГОД(&Сегодня) - ГОД(ФизическиеЛица.ДатаРождения) КАК Возраст
                   |ИЗ
                   |    Справочник.ФизическиеЛица КАК ФизическиеЛица
                   |ГДЕ
                   |    НЕ ФизическиеЛица.ЭтоГруппа
                   |    И ФизическиеЛица.Родитель <> &Пустой
                   |    И Возраст < 55
                   |
                   |УПОРЯДОЧИТЬ ПО
                   |    Наименование";


не получается сделать запрос с условием, в котором участвует вычисляемое поле

выдает ошибку - ПОЛЕ НЕ НАЙДЕНО ВОЗРАСТ
БРЕД ЧТО ОН ЧЕШЕТ, КОГДА ЕСТЬ ВЫЧИСЛЯЕМОЕ ПОЛЕ И В КОНСТРУКТОРЕ ЗАПРОСОВ ВО ВКЛАДКЕ ОБЪЕДИНЕНИЯ/ПСЕВДОНИМЫ Я ЕГО НАЗВАЛ Возраст
Подсобите что я не так делаю, спасибо!
   shuhard
 
1 - 17.03.21 - 15:00
(0) И  ФизическиеЛица.Возраст < 55
   alpha78
 
2 - 17.03.21 - 15:07
И  ФизическиеЛица.Возраст < 55
все равно ругается - поле не найдено - бред
   boozin
 
3 - 17.03.21 - 15:14
И  (ГОД(&Сегодня) - ГОД(ФизическиеЛица.ДатаРождения) < 55
   Simod
 
4 - 17.03.21 - 15:35
Рукалицо...
   youalex
 
5 - 17.03.21 - 15:39
Реальный порядок выполнения операторов в запросе (упрощенно, без соединений , ПЕРВЫЕ и РАЗЛИЧНЫЕ) :
1)ИЗ
2)ГДЕ
3)СГРУППИРОВАТЬ
4)ИМЕЮЩИЕ
4)ВЫБРАТЬ
5)УПОРЯДОЧИТЬ
Т.о. в операторе "ГДЕ" неизвестно, что у тебя там за синоним в  "ВЫБРАТЬ"
А вот в УПОРЯДОЧИТЬ - известно.
   Малыш Джон
 
6 - 17.03.21 - 15:39
(0)  "(ГОД(&Сегодня) - ГОД(ФизическиеЛица.ДатаРождения) КАК Возраст" - количество открывающих и закрывающих скобок посчитай
   Малыш Джон
 
7 - 17.03.21 - 15:41
+(6) ну и (3), да
   boozin
 
8 - 17.03.21 - 15:44
И  (ГОД(&Сегодня) - ГОД(ФизическиеЛица.ДатаРождения)) < 55
Скобку забыл
   youalex
 
9 - 17.03.21 - 15:46
(0) ну и вообще, для этого (ГОД(&Сегодня) - ГОД(ФизическиеЛица.ДатаРождения)
есть функция запроса РАЗНОСТЬДАТ
   Малыш Джон
 
10 - 17.03.21 - 15:58
(9) она довольно своеобразно работает: считает количество "переходов" между границами дат
"ВЫБРАТЬ РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2019, 12, 31),ДАТАВРЕМЯ(2021, 1, 1), ГОД)" выдаст 2, хотя по факту - 1 год и 1 день

и

"ВЫБРАТЬ РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2019, 01, 01),ДАТАВРЕМЯ(2021,12,31), ГОД)" выдаст тоже 2, хотя это 3 года без одного дня
   acht
 
11 - 17.03.21 - 16:11
(9) Вообще для этого передают параметром заранее расчитаную дату рождения. Такую, что все люди, родившиеся позже, имеют возраст меньше 55 лет. И волшебным образом и индексы начинают работать и запросы упрощаются...

А то понапишут тут своих формул.
   youalex
 
12 - 17.03.21 - 16:20
(10) да ты прав)
И (11) прав вдвойне)
   youalex
 
13 - 17.03.21 - 16:25
Про РазностьДат (не знал):
Эта функция возвращает количество пересеченных границ (целое число со знаком), указанных в аргументе datepart, за период времени, указанный в аргументах startdate и enddate.
https://docs.microsoft.com/ru-ru/sql/t-sql/functions/datediff-transact-sql?view=sql-server-ver15

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.