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

Запрос, условие на вложенный запрос?

Запрос, условие на вложенный запрос?
Я
   pvase
 
01.07.19 - 17:53
Надо выбрать из последовательности все документы, которые следует перепровести для восстановления последовательности. Сделал следующий запрос:
ВЫБРАТЬ
    ПартионныйУчет.Регистратор КАК Регистратор,
    ПартионныйУчет.Период КАК Период,
    ПартионныйУчет.Организация КАК Организация,
    ПартионныйУчет.ПроведенВХронологическойПоследовательности КАК ПроведенВХронологическойПоследовательности,
    ПартионныйУчет.МоментВремени КАК МоментВремени
ИЗ
    Последовательность.ПартионныйУчет КАК ПартионныйУчет
ГДЕ ПартионныйУчет.Регистратор >=
    (
    ВЫБРАТЬ
        МАКСИМУМ(ПартионныйУчетГраницы.Регистратор) КАК Регистратор
    ИЗ
        Последовательность.ПартионныйУчет.Границы КАК ПартионныйУчетГраницы
    )

Но 1С-ка не хочет выполнять такой запрос, видимо ей не нравиться вложенный запрос в условии. Подскажите, что надо исправить, чтобы запрос заработал? Спасибо.
 
 
   wowik
 
1 - 01.07.19 - 18:03
(0) ГДЕ ПартионныйУчет.Регистратор >=  - так можно? почему не по дате отбор?
   palsergeich
 
2 - 01.07.19 - 18:03
(1) Можно
   Фрэнки
 
3 - 01.07.19 - 18:53
а "не хочет выполнять" - это как выглядит, более подробно можешь описать?
   breezee
 
4 - 01.07.19 - 19:03
(0) Сормируйте через временные таблицы
   vi0
 
5 - 01.07.19 - 19:43
внутренним соединением попробуй
   Сияющий в темноте
 
6 - 02.07.19 - 08:40
Вы хотите сравнить значение с результатом запроса,естественно,что вам говорят,что не могут,тае как 1с и не умеет понимать,что запрос может возвращать только одно значение(точнее,там ещн и Null может быть).
   pvase
 
7 - 02.07.19 - 09:05
Вот так запрос не выдает ошибок:
ВЫБРАТЬ
    ПоследовРегистрация.Регистратор КАК Регистратор,
    ПоследовРегистрация.Период КАК Период,
    ПоследовРегистрация.Организация КАК Организация,
    ПоследовРегистрация.ПроведенВХронологическойПоследовательности КАК ПроведенВХронологическойПоследовательности,
    ПоследовРегистрация.МоментВремени КАК МоментВремени
ИЗ Последовательность.ПартионныйУчет КАК ПоследовРегистрация
ГДЕ ПоследовРегистрация.Регистратор В 
(ВЫБРАТЬ ПоследовГраница.Регистратор ИЗ Последовательность.ПартионныйУчет.Границы КАК ПоследовГраница)

а вот так:
ВЫБРАТЬ
    ПоследовРегистрация.Регистратор КАК Регистратор,
    ПоследовРегистрация.Период КАК Период,
    ПоследовРегистрация.Организация КАК Организация,
    ПоследовРегистрация.ПроведенВХронологическойПоследовательности КАК ПроведенВХронологическойПоследовательности,
    ПоследовРегистрация.МоментВремени КАК МоментВремени
ИЗ Последовательность.ПартионныйУчет КАК ПоследовРегистрация
ГДЕ ПоследовРегистрация.Регистратор = 
(ВЫБРАТЬ МАКСИМУМ(ПоследовГраница.Регистратор) ИЗ Последовательность.ПартионныйУчет.Границы КАК ПоследовГраница)

уже выдает синтаксическую ошибку "Синтаксическая ошибка "ВЫБРАТЬ" (<<?>>ВЫБРАТЬ МАКСИМУМ(ПоследовГраница.Регистратор) ИЗ Последовательность.ПартионныйУчет.Границы КАК ПоследовГраница)"
   Rovan
 
8 - 02.07.19 - 09:15
   elCust
 
9 - 02.07.19 - 09:22
(7) ВЫБРАТЬ возвращает множество. Не думаю, что множество можно сравнивать со значением. Оператор "В" как раз читает выборку.
   pvase
 
10 - 02.07.19 - 09:45
(9) Все верно, но мне надо не "В" а ">=".
(8) Не то, сделать двумя запросами и передать параметр - понятно что можно, но хочется сделать одним запросом, а не как обычно бывает.
 
 Рекламное место пустует
   pvase
 
11 - 02.07.19 - 09:47
Я так понял, что 1С не хочет работать как SQL. Сделать через Join (соединение) - не придумал еще как, надо чтобы были выбраны все документы после границы последовательности, а через соединение как это сделать - пока не понял как это сделать.
   Фрэнки
 
12 - 02.07.19 - 09:53
(10) А тебе не кажется, что при выборке из существующих записей таблицы просто нельзя получить какой-то Регистратор, который будет больше, чем МАКСИМУМ ?
   pvase
 
13 - 02.07.19 - 11:07
(12) Нет, таблицы разные, во второй таблице только 1 запись в выборке. К тому же на чистом SQL такой запрос работает без проблем и правильно. Думаю, что проблема в том, что 1с не может понять что подзапрос может вернуть только одну запись, даже если вернет NULL, то для этого есть ЕстьNULL.
   vi0
 
14 - 02.07.19 - 12:20
(11) в чем сложность сделать соединение?
   wowik
 
15 - 02.07.19 - 12:54
(9) +1. автор не понимает что делает)
   vi0
 
16 - 02.07.19 - 19:14
(15) на самом деле, это не бессмысленно и зависит от языка
например, следующая конструкция является корректной в t-sql
SELECT *
FROM table1
WHERE column1 = (select 'b')

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