Имя: Пароль:
1C
1С v8
ЕстьNULL не работает
0 Trainee
 
18.02.12
11:14
Здравствуйте!
Помогите пожалуйста. Есть запрос:
Запрос.Текст ="ВЫБРАТЬ
   | ЕстьNULL(Справочник.Код,0) КАК Код,
   | Справочник.Наименование КАК Наименование,
   | Справочник." + ПолеСортировки + " КАК Реквизит
   |ИЗ
   |    Справочник." + ИмяСправочника + " КАК Справочник";

Если нет реквизита Код или наименование не работает (
Где ошибка?
(Пример: 8.2 ЗиК. Справочник "Занятия курсов обучения".)
1 ShoGUN
 
18.02.12
11:16
(0) >Если нет реквизита Код или наименование не работает (
И не должно работать...
2 Trainee
 
18.02.12
11:19
И совсем-совсем ничего нельзя сделать?
3 ShoGUN
 
18.02.12
11:21
(2) А что НУЖНО сделать? Начнём с этого.
4 Trainee
 
18.02.12
11:22
Нужно, соответственно, получить либо поле КОД, либо внятную замену.
Точно не нужно - вылет по ошибке ))
5 ShoGUN
 
18.02.12
11:25
(4) Если поля код нету, как его получить, вот задачка-то...
Разницу между отсутствием поля и отсутствием значения в поле понимаем вообще? Также рекомендую почитать, в каком случае в запросе 1с может возникать значение NULL. В этом запросе его в принципе быть не может.
6 Trainee
 
18.02.12
11:31
Этот этап уже пройден. Существует тема "склеить"
Сделать ВТ "Код","Наименование","Реквизит" и склеить?
Использовать ВЫБОР? Но что туда пихать опять же?

Что вообще нет вариантов?
7 ShoGUN
 
18.02.12
11:37
(6) Шеф, объясните задачу с самого начала. Что ваяем и зачем? Или просто учебным онанизмом занимаемся?
Под "склеить" подразумевается конкатенация строк? С этим не очень хорошо в 1С-ных запросах, но попробовать использовать обычный "+" никто не мешает, он работает, хоть и с оговорками.
8 Trainee
 
18.02.12
11:41
)) Учебный онанизм )) Стажер во франче, делать руками ничего не дают ))

Под "склеить" подразумевается скормить структуру таблицы, чтобы использовать ЕстьNull )
9 Живой Ископаемый
 
18.02.12
11:44
2(6) Нет, так не выйдет, если вы формируете запрос динамический, все равно на момент выполнения запроса все поля должны быть определены.. И если у справочника ПолеСортировки Нет кода, то выдаст ошибку...

Чтобы такого не случилось, вы должны еще на этапе динамическолго формирования текста запроса по метаданным или другим вам удобным способом выясняли есть ли в нужно справочнике поле код, и если нет, подставляли туда например 0 или ""
10 Азат
 
18.02.12
11:44
(8) ну получай сразу длину кода - перед запросом - из метаданных, если она равна 0, то и кода в запросе не будет
11 ShoGUN
 
18.02.12
11:45
(8) Если поля Код или Наименование нет в справочнике(длина равна 0) - то не заработает запрос с этим справочником. Вывод - проверяй, есть ли такое поле(через метаданные), за пределами запроса, и склеивай текст запроса нужным образом.
12 Живой Ископаемый
 
18.02.12
11:45
то есть проще говоря - нет в языке запросов механизма, позволяющего обработать ситуацию когда вы не знаете есть ли в нужной таблице поле или нет. Вы должны быть уверены что оно есть
13 Trainee
 
18.02.12
11:46
Спасибо ) Идея понятна )
14 ShoGUN
 
18.02.12
11:46
+(12) +1, хорошо выразил мысль :)
Закон Брукера: Даже маленькая практика стоит большой теории.