СКД. Выбор поля в зависимости от использования НЕобязательного параметра

1. mitry 10 17.10.22 11:18 Сейчас в теме
Доброго времени суток, всем!

Имеем вот такой простой запрос в СКД:

ВЫБРАТЬ
        1 КАК Поле1,
        20 КАК Поле2
ПОМЕСТИТЬ вт
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
        ВЫБОР
                КОГДА &Флаг
                        ТОГДА вт.Поле1
                ИНАЧЕ вт.Поле2
        КОНЕЦ КАК ПолеИтоговое
ИЗ
        вт КАК вт
Показать


Он будет работать, если парамет "Флаг" - обязательный (Использование = Всегда).
А как переделать данный зпрос, чтобы он работал с НЕобязательным параметром "Флаг" (Использование = Авто)?
Скажем, условия те же, но если параметр Флаг не используется (галка не установлена), чтобы в "ПолеИтоговое" попадало значение из поля "Поле1".
По теме из базы знаний
Найденные решения
4. RustamZz 17.10.22 20:54 Сейчас в теме
(1)
ВЫБРАТЬ
	1 КАК Поле1,
	20 КАК Поле2
ПОМЕСТИТЬ вт
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1
	Вложенный.Поле1или2
ИЗ
	(ВЫБРАТЬ
		вт.Поле1 КАК Поле1или2
	ИЗ
		вт КАК вт
	{ГДЕ
		(&Флаг = ИСТИНА)}
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		вт.Поле2
	ИЗ
		вт КАК вт
	{ГДЕ
		(&Флаг = ЛОЖЬ)}) КАК Вложенный
Показать
8. SlavaKron 18.10.22 09:47 Сейчас в теме
(7) Правильный ответ был дан в (2). Можно, конечно, лепить запросы-уродцы:
ВЫБРАТЬ
	1 КАК Число
ПОМЕСТИТЬ Отбор
{ГДЕ &Флаг = ИСТИНА}

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	0
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	1 КАК Поле1,
	20 КАК Поле2
ПОМЕСТИТЬ ВТ
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ.Поле1 КАК ПолеИтоговое
ИЗ
	ВТ КАК ВТ ГДЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 Число ИЗ Отбор)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ВТ.Поле2
ИЗ
	ВТ КАК ВТ ГДЕ 0 В (ВЫБРАТЬ ПЕРВЫЕ 1 Число ИЗ Отбор)
Показать
11. VZyryanov 18.10.22 11:45 Сейчас в теме
Необязательный параметр Флаг.
В запросе используем другой параметр Флаг1, для которого задано выражение
ВЫБОР КОГДА &Флаг=НЕОПРЕДЕЛЕНО ТОГДА ЛОЖЬ ИНАЧЕ &Флаг КОНЕЦ
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Prikum 3 17.10.22 11:23 Сейчас в теме
(1)Обрабатывать ситуацию в "Прикомпоновкерезультата"
3. mitry 10 17.10.22 20:15 Сейчас в теме
(2)В прикомпановкерезультата - это да, там и чёрта лысова нарисовать можно. Хотелось бы знать (в целях саморазвития), можно ли без кодирования обойтись в данной ситуации? Может, как-то на закладке КомпоновкаДанных поиграться можно?
4. RustamZz 17.10.22 20:54 Сейчас в теме
(1)
ВЫБРАТЬ
	1 КАК Поле1,
	20 КАК Поле2
ПОМЕСТИТЬ вт
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1
	Вложенный.Поле1или2
ИЗ
	(ВЫБРАТЬ
		вт.Поле1 КАК Поле1или2
	ИЗ
		вт КАК вт
	{ГДЕ
		(&Флаг = ИСТИНА)}
	
	ОБЪЕДИНИТЬ ВСЕ
	
	ВЫБРАТЬ
		вт.Поле2
	ИЗ
		вт КАК вт
	{ГДЕ
		(&Флаг = ЛОЖЬ)}) КАК Вложенный
Показать
5. SlavaKron 17.10.22 21:08 Сейчас в теме
(4) Ну раз так, то {ГДЕ &Флаг = ЛОЖЬ} – лишнее.
6. RustamZz 17.10.22 21:11 Сейчас в теме
(5) Не понял. Почему? Да точно.
7. mitry 10 18.10.22 09:23 Сейчас в теме
(4) Спасибо за подсказку. Но хотелось бы универсальности в плане того, что в первой временной таблице может быть не одна строка, а несколько (изначально не известно, сколько). Как обойтись без команды ВЫБРАТЬ ПЕРВЫЕ ... ?
8. SlavaKron 18.10.22 09:47 Сейчас в теме
(7) Правильный ответ был дан в (2). Можно, конечно, лепить запросы-уродцы:
ВЫБРАТЬ
	1 КАК Число
ПОМЕСТИТЬ Отбор
{ГДЕ &Флаг = ИСТИНА}

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	0
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	1 КАК Поле1,
	20 КАК Поле2
ПОМЕСТИТЬ ВТ
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ.Поле1 КАК ПолеИтоговое
ИЗ
	ВТ КАК ВТ ГДЕ 1 В (ВЫБРАТЬ ПЕРВЫЕ 1 Число ИЗ Отбор)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ВТ.Поле2
ИЗ
	ВТ КАК ВТ ГДЕ 0 В (ВЫБРАТЬ ПЕРВЫЕ 1 Число ИЗ Отбор)
Показать
9. RustamZz 18.10.22 10:36 Сейчас в теме
(7) Идея таже. Немного похоже на то, что Слава предложил, но только на соединениях. Попробуйте додумать сами.
10. mitry 10 18.10.22 11:13 Сейчас в теме
11. VZyryanov 18.10.22 11:45 Сейчас в теме
Необязательный параметр Флаг.
В запросе используем другой параметр Флаг1, для которого задано выражение
ВЫБОР КОГДА &Флаг=НЕОПРЕДЕЛЕНО ТОГДА ЛОЖЬ ИНАЧЕ &Флаг КОНЕЦ
12. mitry 10 18.10.22 13:02 Сейчас в теме
13. mitry 10 18.10.22 13:25 Сейчас в теме
(11) Действительно, можно через дополнительный параметр. Только у меня не срабатывает условие "КОГДА &Флаг=НЕОПРЕДЕЛЕНО ТОГДА ЛОЖЬ". Если галки использования не установлено, то &Флаг1 не равен ЛОЖЬ, а равен НЕОПРЕДЕЛЕНО. То есть, получается, можно просто установить выражение параметра Флаг1: &Флаг. А в запросе использовать уже &Флаг1 и иметь ввиду, что он может принимать три значения: Да, Нет и НЕОПРЕДЕЛЕНО.

И в самом запросе выражения типа "Выбор Когда &Флаг1 Тогда" или "Выбор Когда НЕ &Флаг1 Тогда" не прокатят, нужно писать "Выбор Когда &Флаг1 = ИСТИНА Тогда" или "Выбор Когда &Флаг1 = ЛОЖЬ Тогда", соответственно.
Спасибо!
14. mitry 10 18.10.22 13:39 Сейчас в теме
(11) А если добавить ещё второй дополнительный параметр &Флаг2, то ему можно прописать выражение ВЫБОР КОГДА &Флаг1=НЕОПРЕДЕЛЕНО ТОГДА ЛОЖЬ ИНАЧЕ &Флаг1 КОНЕЦ . И он уже будет принимать значения Истина или Ложь. Вернее, добавить &Флаг и &Флаг1, в запросе использовать &Флаг2, а на форме - &Флаг.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот