Имя: Пароль:
1C
1С v8
прикольный вылет SQL на простом запросе
,
0 vde69
 
15.11.11
12:37
платформа (8.2.13.202)

   "ВЫБРАТЬ
   |   ВложенныйЗапрос.Сотрудник КАК Сотрудник,
   |   ВложенныйЗапрос.ШтатнаяЕдиница КАК ШтатнаяЕдиница,
   |   ВЫБОР
   |       КОГДА &ПоказыватьОклад = ИСТИНА
   |           ТОГДА ЕСТЬNULL(ВложенныйЗапрос.СотрудникОклад, 0)
   |       ИНАЧЕ 0
   |   КОНЕЦ КАК СотрудникОклад
   |ИЗ т1 КАК ВложенныйЗапрос
   |
   |УПОРЯДОЧИТЬ ПО
   |   Сотрудник,
   |   СотрудникОклад";


если параметр &ПоказыватьОклад установить в ЛОЖЬ - валится скуль
Microsoft OLE DB Provider for SQL Server: Обнаружено константное выражение в списке ORDER BY, позиция 8.
HRESULT=80040E14, SQLSrvr: SQLSTATE=42000, state=1, Severity=10, native=408, line=94


интересно по чему нельзя сортировать по константе?
1 Ненавижу 1С
 
гуру
15.11.11
12:42
а так?


"ВЫБРАТЬ
   |   ВложенныйЗапрос.Сотрудник КАК Сотрудник,
   |   ВложенныйЗапрос.ШтатнаяЕдиница КАК ШтатнаяЕдиница,
   |   ВЫБОР
   |       КОГДА &ПоказыватьОклад = ИСТИНА
   |           ТОГДА ЕСТЬNULL(ВложенныйЗапрос.СотрудникОклад, 0)
   |       ИНАЧЕ 1
   |   КОНЕЦ КАК СотрудникОклад
   |ИЗ т1 КАК ВложенныйЗапрос
   |
   |УПОРЯДОЧИТЬ ПО
   |   Сотрудник,
   |   СотрудникОклад";
2 vde69
 
15.11.11
12:45
(1) то-же, ругается на сортировку по сумме
3 Кириллка
 
15.11.11
12:46
Алиасы добавь.
4 Ненавижу 1С
 
гуру
15.11.11
12:48
и наконец

"ВЫБРАТЬ
   |   ВложенныйЗапрос.Сотрудник КАК Сотрудник,
   |   ВложенныйЗапрос.ШтатнаяЕдиница КАК ШтатнаяЕдиница,
   |   ВЫБОР
   |       КОГДА &ПоказыватьОклад = ИСТИНА
   |           ТОГДА ЕСТЬNULL(ВложенныйЗапрос.СотрудникОклад, 0)
   |       ИНАЧЕ 1
   |   КОНЕЦ КАК СотрудникОклад
   |ИЗ т1 КАК ВложенныйЗапрос
   |
   |УПОРЯДОЧИТЬ ПО
   |   1,
   |   3";
5 aleks-id
 
15.11.11
12:49
>>КОГДА &ПоказыватьОклад = ИСТИНА
я за это программистов бью линейкой по рукам
6 Кириллка
 
15.11.11
12:50
(5)себе по голове линейкой не забывай.
7 zladenuw
 
15.11.11
12:51
(5,6) лучше булавкой колоть. что бы такие мысли не посещали.
8 vde69
 
15.11.11
12:52
(5) обьясни почему?

(4) самое интересное, что у соседа этот запрос работает :) вероятно это настройки скуля?
9 aleks-id
 
15.11.11
12:54
(8) потому что в &ПоказыватьОклад у тебя уже булево!
и правильно писать КОГДА &ПоказыватьОклад
10 Ненавижу 1С
 
гуру
15.11.11
12:54
(8) скули разные? а по версиям?
11 shuhard
 
15.11.11
12:55
(8)http://msdn.microsoft.com/ru-ru/library/cc645611.aspx

может дело в отсутствии SP ?
12 vde69
 
15.11.11
12:55
(9) кто сказал, что булево? там может быть например "Неопределено"
13 Ненавижу 1С
 
гуру
15.11.11
12:55
(12) ага, ты еще про NULL напиши
14 aleks-id
 
15.11.11
12:56
(12) и чо? если Неопределено - будет ЛОЖЬ
15 vde69
 
15.11.11
12:56
(10) скуль филически один, базы разные
16 vde69
 
15.11.11
12:57
филически = физически

прикольная описка
17 shuhard
 
15.11.11
12:57
(15) и вот ответ:
10091717  Константное выражение в УПОРЯДОЧИТЬ ПО
Проблема:
В клиент-серверном варианте информационной базы с использованием СУБД MSSQL Server при выполнении запроса, содержащего выражение с константным условием в операции ВЫБОР может происходить ошибка

Ошибка СУБД:
Microsoft OLE DB Provider for SQL Server:
Обнаружено константное выражение в списке ORDER BY, позиция 1.

и аварийное завершение работы программы.
Дата публикации: 2011-10-27
18 shuhard
 
15.11.11
12:57
19 vde69
 
15.11.11
12:59
(17) у меня 13 версия, значит у меня ошибка более древняя :) и не профиксеная
20 СвинТуз
 
15.11.11
13:00
(13)
вы будете смеяться , но есть смутные сомнения что на этом оно и валится ... на NULL

з.ы.
почему пижонам платят большие деньги? ))))
21 Ненавижу 1С
 
гуру
15.11.11
13:00
(20) а где там NULL?
22 СвинТуз
 
15.11.11
13:02
Надо написать Насипову
я видимо нашел 14-ю ошибку

(21)
ну Вы же любите задачки повышенной сложности?
23 hhhh
 
15.11.11
13:02
но ПоказыватьОклад = ИСТИНА по любому правильнее. Потому что надежнее.
24 shuhard
 
15.11.11
13:02
(19) а у соседа какая 1С стоит ?
25 vde69
 
15.11.11
13:03
(24) та-же, работаем с одной конфой через хранилище
26 СвинТуз
 
15.11.11
13:04
(23)
1с тестировали не нубы
27 Кириллка
 
15.11.11
13:05
ВЫБРАТЬ
   ТочноВложенныйЗапрос.Сотрудник КАК Сотрудник,
   ТочноВложенныйЗапрос.ШтатнаяЕдиница КАК ШтатнаяЕдиница,
   ТочноВложенныйЗапрос.СотрудникОклад КАК СотрудникОклад
ИЗ (
   ВЫБРАТЬ
       ВложенныйЗапрос.Сотрудник КАК Сотрудник,
       ВложенныйЗапрос.ШтатнаяЕдиница КАК ШтатнаяЕдиница,
       ВЫБОР
           КОГДА &ПоказыватьОклад = ИСТИНА
               ТОГДА ЕСТЬNULL(ВложенныйЗапрос.СотрудникОклад, 0)
           ИНАЧЕ 0
       КОНЕЦ КАК СотрудникОклад
   ИЗ т1 КАК ВложенныйЗапрос
) КАК ТочноВложенныйЗапрос
УПОРЯДОЧИТЬ ПО
   ТочноВложенныйЗапрос.Сотрудник,
   ТочноВложенныйЗапрос.СотрудникОклад
28 catena
 
15.11.11
13:06
(14)Не-а, ошибку дает при неопределено.
29 shuhard
 
15.11.11
13:06
(25) поднял бы ты ТЖ и профайлер и посмотрел,что за запрос
30 СвинТуз
 
15.11.11
13:07
(21)
хотя наверное мудрю )))
31 vde69
 
15.11.11
13:07
ну я сделал проще :)

   |УПОРЯДОЧИТЬ ПО
   |   Сотрудник,
   |   СотрудникСтатус " + ?(ПоказыватьОклад,", СотрудникОклад", "");  // при отсутствии данных по окладу сортировка вылетает на сервере
32 Ненавижу 1С
 
гуру
15.11.11
13:09
(31) а как же построитель?
они же заклюют щас
33 СвинТуз
 
15.11.11
13:10
тип значения у СотрудникОклад какой?
34 СвинТуз
 
15.11.11
13:10
составной?
35 СвинТуз
 
15.11.11
13:11
получали из двух таблиц объединенением?

union all
36 СвинТуз
 
15.11.11
13:12
или из таблицы значений пришел?
37 shuhard
 
15.11.11
13:14
(31) респект
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.