Условие запроса.

1. Intercititude 26.03.20 17:36 Сейчас в теме
(19) Есть поле с условием в запросе, Значение это "Отсрочка платежа":

ВЫБОР
	КОГДА (Контрагенты.Код = "000001846"
			ИЛИ Контрагенты.Код = "УТ0007192"
			ИЛИ Контрагенты.Код = "УТ0006608"
			ИЛИ Контрагенты.Код = "УТ0008180")
			И НЕ РТУ.СвободныйТовар
		ТОГДА ВЫБОР
				КОГДА РТУ.ПрямаяДоставка
					ТОГДА Заказ.ОплатаНал
							И ВЫБОР
								КОГДА ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ИСТИНА
									ТОГДА ЛОЖЬ
								ИНАЧЕ ИСТИНА
							КОНЕЦ
				ИНАЧЕ ВЫБОР
						КОГДА РТУ.Самовывоз
								ИЛИ РТУ.Транзит
							ТОГДА ВЫБОР
									КОГДА ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ИСТИНА
										ТОГДА ЛОЖЬ
									ИНАЧЕ ИСТИНА
								КОНЕЦ
						ИНАЧЕ ЛОЖЬ
					КОНЕЦ
			КОНЕЦ
	ИНАЧЕ ЛОЖЬ
КОНЕЦ
Показать


Мне необходимо добавить после первого условия ещё одно, А именно Если Нал и НЕ Отсрочка платежа ТОГДА ИСТИНА

Делаю так,корректно ли это?:

ВЫБОР
	КОГДА (Контрагенты.Код = "000001846"
			ИЛИ Контрагенты.Код = "УТ0007192"
			ИЛИ Контрагенты.Код = "УТ0006608"
			ИЛИ Контрагенты.Код = "УТ0008180")
			И НЕ РТУ.СвободныйТовар
		ТОГДА ВЫБОР
				КОГДА РТУ.ПрямаяДоставка
					ТОГДА Заказ.ОплатаНал
							И ВЫБОР
								КОГДА ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ИСТИНА
									ТОГДА ЛОЖЬ
								ИНАЧЕ ИСТИНА
							КОНЕЦ
				ИНАЧЕ ВЫБОР
						КОГДА РТУ.Самовывоз
								ИЛИ РТУ.Транзит
							ТОГДА ВЫБОР
									КОГДА ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ИСТИНА
										ТОГДА ЛОЖЬ
									ИНАЧЕ ИСТИНА
								КОНЕЦ
						ИНАЧЕ ЛОЖЬ
					КОНЕЦ
			КОНЕЦ
	ИНАЧЕ ВЫБОР
			КОГДА Заказ.ОплатаНал
					И ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ЛОЖЬ
				ТОГДА ИСТИНА
			ИНАЧЕ ЛОЖЬ
		КОНЕЦ
КОНЕЦ
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
9. nomad_irk 72 26.03.20 20:42 Сейчас в теме +0.1 $m
(6) В таком случае вам нужна дополнительная ветка КОГДА

КОГДА Заказ.ОплатаНал
И ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ЛОЖЬ
ТОГДА ИСТИНА
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 72 26.03.20 17:48 Сейчас в теме
(1)чтобы ответить на ваш вопрос, необходимо знать логику работы всего алгоритма, а не только кусочка запроса.

Логика работы всего алгоритма известна только вам.
3. Intercititude 26.03.20 17:53 Сейчас в теме
(2) А что обьяснять логику,мне просто после условия с контрагентами надо Если Нал и НЕ Отсрочка платежа ТОГДА ИСТИНА

Ещё не привык работать с ВЫБОР КОГДА ТОГДА,поэтом уточняю у профессионалов.
4. nomad_irk 72 26.03.20 18:05 Сейчас в теме
(3)логика работы конструкции

Выбор Когда Тогда Иначе Конец

равнозначна конструкции

Если ИначеЕсли Иначе КонецЕсли

Если остальную логику не поломает тот факт, что при не выполнении условий в ветке Когда в поле строки таблицы будет фигурировать значение типа булево вместо Null, то вариант верный.

Если остальную логику это поломает, то перенесите дополнительное условие в дополнительную ветку Когда.
6. Intercititude 26.03.20 19:22 Сейчас в теме
(4) Утрирую свою конструкцию и переделаю её на Если Тогда.. :

 Если Контрагенты.Код = "000001846"...  Тогда
               Некое Условие
Иначе
Ложь


Мне же надо !:

 Если Контрагенты.Код = "000001846"...  Тогда
               Некое Условие
ИначеЕсли Нал и НЕ Отсрочка платежа ТОГДА 
       ИСТИНА 
Иначе
Ложь


Вот и всё. Подскажите пожалуйста.
9. nomad_irk 72 26.03.20 20:42 Сейчас в теме +0.1 $m
(6) В таком случае вам нужна дополнительная ветка КОГДА

КОГДА Заказ.ОплатаНал
И ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ЛОЖЬ
ТОГДА ИСТИНА
8. dhurricane 26.03.20 19:49 Сейчас в теме
(1) Да, так делать можно. Но можно попробовать записать еще короче:
ВЫБОР
    КОГДА (Контрагенты.Код = "000001846"
            ИЛИ Контрагенты.Код = "УТ0007192"
            ИЛИ Контрагенты.Код = "УТ0006608"
            ИЛИ Контрагенты.Код = "УТ0008180")
            И НЕ РТУ.СвободныйТовар
        ТОГДА ВЫБОР
                КОГДА РТУ.ПрямаяДоставка
                    ТОГДА Заказ.ОплатаНал И НЕ ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ)
                КОГДА РТУ.Самовывоз ИЛИ РТУ.Транзит
                    ТОГДА НЕ ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ)
                ИНАЧЕ ЛОЖЬ
            КОНЕЦ
    ИНАЧЕ 
            Заказ.ОплатаНал И НЕ ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ)
КОНЕЦ
Показать

В общем конструкцию "...Иначе Выбор Когда..." можно заменить на еще одно "...Когда..."
Intercititude; Fox-trot; +2 Ответить
11. Intercititude 27.03.20 09:35 Сейчас в теме
(8)Не совсем понял почему Вы сделали НЕ ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ). А именно "НЕ".

И как раз это Не ругается у меня.
13. dhurricane 27.03.20 10:03 Сейчас в теме
(11) Да, извините, я как-то не подумал про составной тип значений дополнительных свойств. Можно заменить на конструкцию:
ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ЛОЖЬ
14. Intercititude 27.03.20 14:26 Сейчас в теме
(13) Я имел ввиду, что в моей конструкции смыслосвая нагрузка другая,не такая:
ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ЛОЖЬ


А как раз это значение равно истине)
15. dhurricane 27.03.20 14:28 Сейчас в теме
(14) Вижу у Вас такую конструкцию:
ВЫБОР
   КОГДА ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ИСТИНА
      ТОГДА ЛОЖЬ
   ИНАЧЕ ИСТИНА
КОНЕЦ

Если я был достаточно внимателен, то она равносильна предложенной мной:
ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ЛОЖЬ
5. Sergex 58 26.03.20 18:08 Сейчас в теме
Ваш вариант не очень похож на рабочий.

Первое условие это - "ТОГДА ВЫБОР
КОГДА РТУ.ПрямаяДоставка" ?

Вообще в CASE разумно использовать логически связанные условия... у вас получается что то вроде
"Выбор КОГДА Рост = Большой
Тогда Хорошо
КОГДА Цвет = Зеленый
Тогда Хорошо
Иначе Плохо"
Такая запись эквивалентна условию ИЛИ для цвета и роста в одном КОГДА

В предложенном вами варианте доработки оператора CASE для РТУ.ПрямаяДоставка = Истина он в Иначе уже никогда не попадет
7. Intercititude 26.03.20 19:22 Сейчас в теме
(5)(4) Утрирую свою конструкцию и переделаю её на Если Тогда.. :

 Если Контрагенты.Код = "000001846"...  Тогда
               Некое Условие
Иначе
Ложь


Мне же надо !:

 Если Контрагенты.Код = "000001846"...  Тогда
               Некое Условие
ИначеЕсли Нал и НЕ Отсрочка платежа ТОГДА 
       ИСТИНА 
Иначе
Ложь


Вот и всё. Подскажите пожалуйста.
10. Sergex 58 27.03.20 04:14 Сейчас в теме
Можете попробовать просто соединить первое условие с новыми вводными:
ВЫБОР
КОГДА НЕ (Заказ.ОплатаНал
И ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ЛОЖЬ) И
((Контрагенты.Код = "000001846"
ИЛИ Контрагенты.Код = "УТ0007192"
ИЛИ Контрагенты.Код = "УТ0006608"
ИЛИ Контрагенты.Код = "УТ0008180")
И НЕ РТУ.СвободныйТовар)
ТОГДА ВЫБОР
КОГДА РТУ.ПрямаяДоставка
ТОГДА Заказ.ОплатаНал
И ВЫБОР
КОГДА ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ИСТИНА
ТОГДА ЛОЖЬ
ИНАЧЕ ИСТИНА
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА РТУ.Самовывоз
ИЛИ РТУ.Транзит
ТОГДА ВЫБОР
КОГДА ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ИСТИНА
ТОГДА ЛОЖЬ
ИНАЧЕ ИСТИНА
КОНЕЦ
ИНАЧЕ ЛОЖЬ
КОНЕЦ
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА Заказ.ОплатаНал
И ЕСТЬNULL(ЗначенияСвойствОбъектов.Значение, ЛОЖЬ) = ЛОЖЬ
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
КОНЕЦ
12. Intercititude 27.03.20 09:43 Сейчас в теме
(10) Что значит попробовать ? Сами то попытайтесь такое запихнуть,ошибку выдаст.
16. Sergex 58 29.03.20 08:55 Сейчас в теме
Вот в понятной вам форме:
Если НЕ( Нал и НЕ Отсрочка)
И ( платежаКонтрагенты.Код = "000001846"... )Тогда
Некое Условие
ИначеЕсли Нал и НЕ Отсрочка платежа ТОГДА
ИСТИНА
Иначе
Ложь

Добавьте в первое условие инверсное ваше дополнительное...

А в иначе прямое ваше дополнительное.

Смысл в том чтобы связать ваше доп условие с первым
Оставьте свое сообщение

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