Имя: Пароль:
1C
1С v8
Помогите с запросом
0 scalalaz
 
18.01.12
11:20
Пишу запрос для поиска пропущенных чисел в последовательности (на примере кодов справочника). Запрос следующий:

ВЫБРАТЬ
   Таблица1.Код - 1 КАК Поле1
ИЗ
   (ВЫБРАТЬ
       Номенклатура1.Код КАК Код
   ИЗ
       Справочник.Номенклатура1 КАК Номенклатура1) КАК Таблица1
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
           Номенклатура1.Код КАК Код
       ИЗ
           Справочник.Номенклатура1 КАК Номенклатура1) КАК Таблица2
       ПО (Таблица1.Код = Таблица2.Код + 1)
ГДЕ
   Таблица2.Код IS NULL
   И Таблица1.Код - 1 >= (ВЫБРАТЬ минимум(Номенклатура1.Код) ИЗ Справочник.Номенклатура1 КАК Номенклатура1)

В данном запросе вылетает синтаксическая ошибка на условие

Таблица1.Код - 1 >= (ВЫБРАТЬ минимум(Номенклатура1.Код) ИЗ Справочник.Номенклатура1 КАК Номенклатура1)

Не пойму что не так в этом условии.
1 mikecool
 
18.01.12
11:22
так нельзя, если юзаешь подзапрос в условии, то сравнение может быть только В
2 Amiralnar
 
18.01.12
11:24
Префиксов не бывает?
3 Ненавижу 1С
 
гуру
18.01.12
11:29
Код это строка
4 Kashemir
 
18.01.12
11:29
(0) В SQL такое можно, но в 1С подзапросы ограничены условием В, как указано в (1)
5 Kashemir
 
18.01.12
11:30
(3) Кто сказал что обязательно строка ?
6 scalalaz
 
18.01.12
11:33
(1) (4) - ясно, спасибо
(3) (5) - у меня код число - справочник создан специально для тестового примера
7 Kashemir
 
18.01.12
11:34
(6) Можешь использовать для задачи другой метод - получить диапазон всех чисел от и до и к нему присоединить по коду элементы, где NULL там и пропущено.
8 Ненавижу 1С
 
гуру
18.01.12
11:34
(6) ага "число", а все равно строка ))
9 Kashemir
 
18.01.12
11:35
(8) Любопытный взгляд на число.
10 scalalaz
 
18.01.12
11:38
(7) как получить диапазон чисел (от минимального кода до максимального) запросом?
11 Ненавижу 1С
 
гуру
18.01.12
11:40
(9) как-то не интересовался )) однако...
просто в 7.7 он все равно строкой был
12 scalalaz
 
18.01.12
11:41
(7) Видел что то подобное в базе знаний. Но по моему там запрос не универсальный и не привязан к конкретной последовательности.
13 Kashemir
 
18.01.12
11:44
(12) Да где-то там есть. Запрос вполне универсален хоть и непрезентабелен - нужно лишь определится с максимальным значением.
14 Kashemir
 
18.01.12
11:47
15 rs_trade
 
18.01.12
11:48
(10) нужна таблица чисел. хотя бы от 0 до 9
16 Kashemir
 
18.01.12
11:59
Вот еще вариант решения. Возвращает интервалы с пропущенными числами
ВЫБРАТЬ
   ВложенныйЗапрос.Код,
   ВложенныйЗапрос.СледующийКод
ИЗ
   (ВЫБРАТЬ
       Номенклатура.Код КАК Код,
       МИНИМУМ(Номенклатура1.Код) КАК СледующийКод
   ИЗ
       Справочник.Номенклатура КАК Номенклатура
           ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура1
           ПО Номенклатура.Код < Номенклатура1.Код
   
   СГРУППИРОВАТЬ ПО
       Номенклатура.Код) КАК ВложенныйЗапрос
ГДЕ
   (НЕ ВложенныйЗапрос.Код + 1 = ВложенныйЗапрос.СледующийКод)
           И (НЕ ВложенныйЗапрос.СледующийКод ЕСТЬ NULL )