Имя: Пароль:
1C
1С v8
Не понял как в запросе поймать пустая ссылка
0 Chameleon1980
 
12.03.14
12:49
Что-то не понял.
Выборка из Рег.Св. Цены номенклатуры.
Как в запросе через "выбор когда" полю проставить истина или ложь в зависимости от пустая ссылка или нет у записи РС. Поле в РС - "Способ расчета" цены - типа перечисление.
Важно как понять пустая там ссылка или нет.
Сейчса примерно так:

    ВЫБОР
        КОГДА ЦеныНоменклатурыСрезПоследних.СпособРасчетаЦены = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПустаяСсылка)
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК Поле1

не взлетает
1 ДенисЧ
 
12.03.14
12:52
еще на NULL проверь
2 Chameleon1980
 
12.03.14
12:53
Ну понятно. Запрос возвращает поле:

<пустая ссылка Перечисление ссылка: Способы расчета цены>
3 MaSSimo
 
12.03.14
12:55
есть NULL, не?
4 Ненавижу 1С
 
гуру
12.03.14
12:55
(1) и на Неопределено, даешь больше разных пустот!
5 H A D G E H O G s
 
12.03.14
12:56
(4) Дарю

КОГДА ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.СпособРасчетаЦены,НЕОПРЕДЕЛЕНО) В (НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПустаяСсылка))
6 Мыш
 
12.03.14
12:57
(0) Огласите текст запроса вместе с источником данных, пожалуйста!
7 shuhard
 
12.03.14
12:58
(5) ыыыыыыыыыыыыы
8 H A D G E H O G s
 
12.03.14
12:58
(7) Бывает и такое для составных полей.
9 ShoGUN
 
12.03.14
13:00
(8) Всё верно, такое уж пустое значение у 1с загадочное :)
10 H A D G E H O G s
 
12.03.14
13:01
(7) Ты тут ыыыыыыкаешь, а я вот красивый кусочек дал Ненавижу.

Опять таки - ДЛЯ составных полей таблицы (могущих иметь НЕОПРЕДЕЛЕНО, не выбран тип), участвующей в Соединении (могущей иметь null).

Естественно вариант должен иметь вид, примерно

ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.СпособРасчетаЦены,НЕОПРЕДЕЛЕНО) В (НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаЦены.ПустаяСсылка), ЗНАЧЕНИЕ(Перечисление.СпособыПересчетаЦены.ПустаяСсылка))
11 Ненавижу 1С
 
гуру
12.03.14
13:01
(10) проблему надо создать, чтобы потом ее героически решать ))
12 shuhard
 
12.03.14
13:02
(10) использовать В вместо ИЛИ не есть хорошо в силу неудобочитаемости запроса
13 H A D G E H O G s
 
12.03.14
13:02
(11) Никаких проблем нет. Это у тебя психологическое что-то.
14 H A D G E H O G s
 
12.03.14
13:02
(12) С чего бы это? Отлично читается.
15 ShoGUN
 
12.03.14
13:03
(12) Это предубеждение, нормально всё читается.
16 Ненавижу 1С
 
гуру
12.03.14
13:04
(13) да, главное не забывать, что если ты поле сделал составным, то будь добр во всех запросах измени пустую ссылку на неопределено, да и старые данные подправь (там же остались пустые ссылки)
костыль в (5) шикарен, спасибо
17 ShoGUN
 
12.03.14
13:06
Да ладно, haters gonna hate ;) В других местах тоже бывают прибабахи.
18 H A D G E H O G s
 
12.03.14
13:06
(16) "что если ты поле сделал составным"

В работающей системе данное событие - экстремально, редко и приводит к перелопачиванию кода, связанного с данным регистром/документом/и.т.д а такде тестированию.
19 Chameleon1980
 
12.03.14
13:06
Может это не имеет значения, но в данном случае поле не составное.
20 ShoGUN
 
12.03.14
13:07
(19) Имеет. Какой тип у поля?
21 Ненавижу 1С
 
гуру
12.03.14
13:07
(19) допускаю, но теплый ламповый NULL мне гораздо приятнее
22 ShoGUN
 
12.03.14
13:09
(21) Мне тёплый ламповый SQL-ный NULL всю малину недавно испоганил. Конкатенация строки с NULL-ом в MS SQL - NULL. Недавно на эти грабли наступил. Точней, грабли были комбинированные.
23 Ненавижу 1С
 
гуру
12.03.14
13:10
(22) это нормальное поведение теплого лампового SQL-ного NULL
24 shuhard
 
12.03.14
13:10
(14)
(15)
извращенцы
25 H A D G E H O G s
 
12.03.14
13:13
(24) Портяночник.
26 ShoGUN
 
12.03.14
13:15
(24) Батенька, это не вы пятиэтажные условия в коде пишете? ИЛИ всегда будет более многословным, чем В.
27 PR
 
12.03.14
13:15
(14) Хреново читается.
28 ShoGUN
 
12.03.14
13:16
(23) Я в курсе, что нормально поведение. Ненормальное поведение - у Entity в .NET, который вместо пустой строки пихает в поле NULL, если оно Nullable.
29 PR
 
12.03.14
13:17
(26) Зачем использовать язык 1С, если можно использовать С, да? Там в одну строчку кода можно полалгоритма запихнуть.
30 Ненавижу 1С
 
гуру
12.03.14
13:17
(27) нормально читается и гораздо проще когда там еще всякие И в перемешку
31 ShoGUN
 
12.03.14
13:18
(29) Если условие - тройное, то тоже через ИЛИ будешь делать? В глазах не зарябит?
32 PR
 
12.03.14
13:19
(30) Сомнительно
33 PR
 
12.03.14
13:19
(31) Да. Нет.
34 ShoGUN
 
12.03.14
13:19
Я не сторонник кода в стиле брейнфака, но многословность ничуть не лучше.
35 Ненавижу 1С
 
гуру
12.03.14
13:19
(32) ну это на любителя думаю
36 ShoGUN
 
12.03.14
13:20
(35) Именно. Но сразу извращенцами обзываются :)
37 fisher
 
12.03.14
13:55
(5) А что, ничо так... Особенно если поле вычисляемое.