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

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

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

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