#0
by fantomrik
Доброй ночи! То ли не понимаю, то ли пишу не так синтаксис... Есть 3 адреса у физ лица, (проживания,прописка, информирование) Мне нужно выбрать первый который заполнен из трех в этом же порядке. Отдельными ВТ получаю все 3 значения далее пытаюсь так ВЫБОР КОГДА ФИОиАдрес1.Адрес ЕСТЬ NULL ТОГДА ФИОиАдрес2.Адрес КОГДА ФИОиАдрес2.Адрес ЕСТЬ NULL если заполены 1ый и 2ой то все ок, а если они пусты но заполнен 3ий - все равно null получаю. Что не так делаю?
#4
by Jaap Vduul
ВЫБОР КОГДА НЕ ФИОиАдрес1.Адрес ЕСТЬ NULL ТОГДА ФИОиАдрес1.Адрес КОГДА НЕ ФИОиАдрес2.Адрес ЕСТЬ NULL или
#5
by Нуф-Нуф
ВЫБОР КОГДА ФИОиАдрес1.Адрес ЕСТЬ NULL ТОГДА ФИОиАдрес2.Адрес КОГДА ФИОиАдрес2.Адрес ЕСТЬ NULL ТОГДА ФИОиАдрес3.Адрес КОГДА ФИОиАдрес3.Адрес ЕСТЬ NULL
#6
by Пират
ВЫБОР КОГДА ФИОиАдрес1.Адрес ЕСТЬ NULL ИНАЧЕ ВЫБОР КОГДА ФИОиАдрес2.Адрес ЕСТЬ NULL КОНЕЦ
#9
by Пират
вообще, вот эта фигня типа КОГДА ФИОиАдрес1.Адрес ЕСТЬ NULL КОГДА ФИОиАдрес1.Адрес ЕСТЬ NULL КОГДА ФИОиАдрес1.Адрес ЕСТЬ NULL КОГДА ФИОиАдрес1.Адрес ЕСТЬ NULL КОГДА ФИОиАдрес1.Адрес ЕСТЬ NULL КОГДА ФИОиАдрес1.Адрес ЕСТЬ NULL работает не оптимально как с точки зрения запроса - проверяются все условия, прежде чем принимается решение. Пиши вложенные фигни ВЫбор Когда Тогда Иначе Конец
#11
by Jaap Vduul
>>проверяются все условия, прежде чем принимается решение По-крайней мере, при использовании в качестве СУБД sql server это не так. Вычисление выполняется последовательно, но прекращается после первого же истинного условия.
#12
by Пират
ничего оно не прекращается В такой конструкции будет ВЫБОР (ПЕРВАЯ ПРОВЕРКА)КОГДА ФИОиАдрес1.Адрес ЕСТЬ NULL ТОГДА ФИОиАдрес2.Адрес (ВТОРАЯ ПРОВЕРКА)КОГДА ФИОиАдрес2.Адрес ЕСТЬ NULL КОНЕЦ
#13
by Пират
Чтобы не было проверок всех условий на истинность, надо писать так Выбор Когда Выбор Когда Тогда Иначе Конец Тогда Иначе Конец
#15
by Jaap Vduul
"Вы, Шариков, чепуху говорите и возмутительнее всего то, что говорите ее безапелляционно и уверенно."
#16
by Пират
Дядя, ну логически подумай. ВЫБОР (ПЕРВАЯ ПРОВЕРКА)КОГДА ФИОиАдрес1.Адрес ЕСТЬ NULL ТОГДА ФИОиАдрес2.Адрес (ВТОРАЯ ПРОВЕРКА)КОГДА ФИОиАдрес2.Адрес ЕСТЬ NULL Если ПЕРВАЯ ПРОВЕРКА будет ИСТИНА, один фиг выполнится ВТОРАЯ ПРОВЕРКА и если она тоже будет ИСТИНА, то присвоится значение ФИОиАдрес3.Адрес, а не ФИОиАдрес2.Адрес как ты по своей доброте душевной ожидаешь
#17
by Пират
Ты у себя на скуле напиши вот так Выбор Когда 1=1 Тогда 1 Когда 2=2 Тогда 2 Когда 3=3 Тогда 3 Иначе 4 Конец И посмотри, что тебе скуль вернет.
#20
by Пират
ВЫБОР КОГДА ФИОиАдрес1.Адрес ЕСТЬ NULL ТОГДА Выбор КОГДА ФИОиАдрес2.Адрес ЕСТЬ NULL Тогда ФИОиАдрес3.Адрес Иначе ФИОиАдрес2.Адрес Конец ИНАЧЕ "НЕТУ НИМУЯ АДРЕСОВ" КОНЕЦ так должно сработать, инфа 100%
#22
by fantomrik
Спасибо, так работает. Это оптимальный способ выбора в этой ситуации? просто для себя интересно, нужно учится правильно писать стараться
#25
by Jaap Vduul
Как раз вложенный ВЫБОР не является оптимальным, его нужно избегать по возможности.
#28
by fantomrik
вспомнилось.. у нас сотрудник работал, он рассказывал, пока работал в др конторе у них было так в отделе: спор зашел, забились, проверили (не понял только как в виду своей неопытности) замером производительности и проигравший сразу идет к автомату за шоколадкой победителю :)
#29
by Jaap Vduul
В данном случае выражение не очень сложное, поэтому разница между линейным и вложенным case будет практически незаметна. То что на sql server вычисляется только до первого истинного условия можно в первоисточнике почитать: Линейный кейс и читается проще и выполняется быстрее.
#30
by Jaap Vduul
+29 Кстати, если, например, в выражении ВЫБОР используются бухгалтерские субконто (т.е. составные типы), то уже даже на первом уровне вложенности очень легко поймать ошибку оптимизатора "an expression services limit has been reached".
#31
by Волчара2010
да чувак, ты прав. Так и работает. Никому на слово верить нельзя: сдавал тест и бородатый руководитель убедил меня, что проверяются все условия, если нет уровней вложенности. Все врут и надо верить только своим глазам и литературе.
#33
by Starhan
очевидно же 2 первых услвоия не выполняются поэтому берется адрес1, где как раз нулл.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Есть ли в 1С-ине конструкция подобная case ... switch
- как в запросе конструкцию описать если тогда иначеесли тогда иначе конецесли
- СКД: Как заставить СКД правильно считать итоги при исп. конструкции "Выбор когда тогда"?
- Многоуровневая вложенность именованных областей табличного документа
- ВычислитьВыражениеСГруппировкойМассив() - многоуровневая структура
- Оператор ВЫБОР КОГДА ТОГДА в запросе построителя отчета.
- Многоуровневая нумерация в СКД
- В запросе. Выбор когда тогда иначе конец )))
В этой группе 1С
- v7: Не отображается документ в общем журнале при выборе по "контрагенту"
- v7: Как в документе программно переставить строку ТЧ на нужную позицию?
- УТ 10.3 Автоматический подбор серии/партии
- Управляемые формы. Выделить строку таблицы значений.
- Пароль Администратора информационной базы на севере 1С 8.2???
- v7: Открыть список документов по заданному контрагенту
- как в запросе проверить или параметр это группа ?
- СКД Расчет итогов при отборе по во вложенной группировке
- Замена одной номенклатуры на другую
- Две базы УТ 11 Розница 1.0. Изменили Отчет о розничных продажах в УТ.
- Работа с группой колонок в таблице управляемой формы
- Оплаты по платежным картам из отчет о розничных продажах не попадают в патент
- суфд + 1с
- Свертка и корректировка записей регистров. Вопрос по удалению ссылок.
- Переход с 77 УСН на 8.3 помогите!
- Выбор системы электронного документооборота, базы знаний ...
- Настройка RDP 1С
- Как склеить в СКД периодическую таблицу с обычной
- Попытка использования несуществующего или неиспользуемого объекта
- Ошибка при загрузки web клиента