1. Intercititude 26.03.20 17:36 Сейчас в теме

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

(19) Есть поле с условием в запросе, Значение это "Отсрочка платежа":

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


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

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

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

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

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

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

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

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

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

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

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

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


Мне же надо !:

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


Вот и всё. Подскажите пожалуйста.
9. nomad_irk 48 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 50 26.03.20 18:08 Сейчас в теме
Ваш вариант не очень похож на рабочий.

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

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

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

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


Мне же надо !:

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


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

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

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

Смысл в том чтобы связать ваше доп условие с первым
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Программист 1С
Новосибирск
зарплата от 30 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Специалист внедрения и сопровождения 1С
Москва
зарплата от 80 000 руб.
Полный день