Помогите с запросом, пожалуйста

1. Гость 06.03.21 17:39
Здравствуйте, дорогие форумчане. Мне в запросе нужны пары условий. Я написал, но это не работает. Помогите, пожалуйста.

ВЫБОР
    КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) <> 0
        ТОГДА ВЫБОР
                КОГДА ОстаткиЗаказовКлиента.ЗаказаноОстаток = КоличествоТоваровИтог.Количество
                    ТОГДА 1
                КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) = 0
                    ТОГДА -1
                ИНАЧЕ 0
            КОНЕЦ
КОНЕЦ
Показать


*КоличествоТоваровИтог.Количество - это количество товара в заказе клиента.
Нужен такой результат:
1 - Товар полностью не отгружен,
2 - Отгружена часть товара,
3 - Товар полностью отгружен.


У меня почему то у всех документов заказа результат 0. Помогите, пожалуйста
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. besica 06.03.21 18:29 Сейчас в теме
Слишком мало данных по запросу, как выглядит полный запрос?
3. Гость 06.03.21 18:35
ВЫБРАТЬ
	ДокументЗаказКлиента.Ссылка КАК Ссылка,
	ДокументЗаказКлиента.Менеджер КАК Менеджер,
	ДокументЗаказКлиента.Партнер КАК Партнер,
	ДокументЗаказКлиента.Номер КАК Номер,
	ДокументЗаказКлиента.Дата КАК Дата,
	ДокументЗаказКлиента.Подразделение КАК Подразделение,
	ДокументЗаказКлиента.АдресДоставки КАК АдресДоставки,
	ВЫБОР
		КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) = 0
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ КАК Отгружено,
	КоличествоТоваровИтог.Количество КАК КоличествоИтог,
	ВЫБОР
		КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) <> 0
			ТОГДА ВЫБОР
					КОГДА ОстаткиЗаказовКлиента.ЗаказаноОстаток = КоличествоТоваровИтог.Количество
						ТОГДА 1
					КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) = 0
						ТОГДА -1
					ИНАЧЕ 0
				КОНЕЦ
	КОНЕЦ КАК ПризнакОтгруженности
ИЗ
	Документ.ЗаказКлиента КАК ДокументЗаказКлиента
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			СУММА(ЗаказыКлиентовОстатки.ЗаказаноОстаток) КАК ЗаказаноОстаток,
			ЗаказыКлиентовОстатки.ЗаказКлиента КАК ЗаказКлиента
		ИЗ
			РегистрНакопления.ЗаказыКлиентов.Остатки КАК ЗаказыКлиентовОстатки
		
		СГРУППИРОВАТЬ ПО
			ЗаказыКлиентовОстатки.ЗаказКлиента) КАК ОстаткиЗаказовКлиента
		ПО ДокументЗаказКлиента.Ссылка = ОстаткиЗаказовКлиента.ЗаказКлиента
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			СУММА(ЗаказКлиентаТовары.Количество) КАК Количество,
			ЗаказКлиентаТовары.Ссылка КАК СсылкаЗаказ
		ИЗ
			Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
		
		СГРУППИРОВАТЬ ПО
			ЗаказКлиентаТовары.Ссылка) КАК КоличествоТоваровИтог
		ПО ДокументЗаказКлиента.Ссылка = КоличествоТоваровИтог.СсылкаЗаказ
ГДЕ
	ДокументЗаказКлиента.Проведен = ИСТИНА
	И ДокументЗаказКлиента.Товары.Склад В(&Склады)
	И ДокументЗаказКлиента.Дата МЕЖДУ &ДатаНачала И &ДатаКонец
Показать
10. spacecraft 06.03.21 20:36 Сейчас в теме
(3)
ВЫБОР
КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) <> 0
ТОГДА ВЫБОР
КОГДА ОстаткиЗаказовКлиента.ЗаказаноОстаток = КоличествоТоваровИтог.Количество
ТОГДА 1
КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) = 0
ТОГДА -1
ИНАЧЕ 0
КОНЕЦ
КОНЕЦ КАК ПризнакОтгруженности


В секцию "КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) = 0" никогда не попадете, так как выше отсекаете ее: "КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) <> 0"
11. Гость 06.03.21 20:49
(10) А как это можно правильно исправить?
13. spacecraft 06.03.21 21:24 Сейчас в теме
(11) вместо этого:
ВЫБОР
    КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) <> 0
        ТОГДА ВЫБОР
                КОГДА ОстаткиЗаказовКлиента.ЗаказаноОстаток = КоличествоТоваровИтог.Количество
                    ТОГДА 1
                КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) = 0
                    ТОГДА -1
                ИНАЧЕ 0
            КОНЕЦ
КОНЕЦ
Показать

можно сделать так:
ВЫБОР
                КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) = 0
                    ТОГДА -1
                КОГДА ОстаткиЗаказовКлиента.ЗаказаноОстаток = ЕСТЬNULL(КоличествоТоваровИтог.Количество,0)
                    ТОГДА 1
                ИНАЧЕ 0

КОНЕЦ
Показать


Но тут еще нужны более подробные условия задачи.
4. besica 06.03.21 19:08 Сейчас в теме
ОстаткиЗаказовКлиента.ЗаказаноОстаток и КоличествоТоваровИтог.Количество - в этом запросе правильную цифру показывают?
5. Гость 06.03.21 19:11
(4) Да, все правильно. Нужно просто додумать момент с ЕСТЬNULL
6. spec8s 829 06.03.21 19:27 Сейчас в теме
Как-то условие не понятно написано, я бы так переписал
ВЫБОР
    КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) = КоличествоТоваровИтог.Количество ТОГДА 1 //Не отгружен полностью
	КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) = 0 ТОГДА -1 // Отгружен весь
    ИНАЧЕ 0 // Частично отгружен
КОНЕЦ
8. Гость 06.03.21 19:34
(6)
ВЫБОР
КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) = КоличествоТоваровИтог.Количество ТОГДА 1 //Не отгружен полностью
КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) = 0 ТОГДА -1 // Отгружен весь
ИНАЧЕ 0 // Частично отгружен
КОНЕЦ


В таком случае у всех заказов тоже признак отгруженности 0
7. besica 06.03.21 19:27 Сейчас в теме
На вскидку

ВЫБОР
КОГДА ОстаткиЗаказовКлиента.ЗаказаноОстаток не Есть NULL
ТОГДА ВЫБОР
КОГДА ОстаткиЗаказовКлиента.ЗаказаноОстаток = КоличествоТоваровИтог.Количество
ТОГДА 1 // полностью не отгружен
Иначе Выбор
КОГДА ОстаткиЗаказовКлиента.ЗаказаноОстаток = 0
ТОГДА 3 // полностью отгружен
ИНАЧЕ 2
Конец
Иначе // а тут вообще в регистре данных нет а заказ есть
КОНЕЦ
9. Гость 06.03.21 19:40
(7)
ВЫБОР
КОГДА ОстаткиЗаказовКлиента.ЗаказаноОстаток не Есть NULL
ТОГДА ВЫБОР
КОГДА ОстаткиЗаказовКлиента.ЗаказаноОстаток = КоличествоТоваровИтог.Количество
ТОГДА 1 // полностью не отгружен
Иначе Выбор
КОГДА ОстаткиЗаказовКлиента.ЗаказаноОстаток = 0
ТОГДА 3 // полностью отгружен
ИНАЧЕ 2
Конец
Иначе // а тут вообще в регистре данных нет а заказ есть
КОНЕЦ


Ожидается выражение "ТОГДА"
КОГДА ОстаткиЗаказовКлиента.ЗаказаноОстаток <<?>>НЕ ЕСТЬ NULL
12. Гость 06.03.21 21:07
Я исправил, вот так:

ВЫБОР
	КОГДА ЕСТЬNULL(ОстаткиЗаказовКлиента.ЗаказаноОстаток, 0) <> 0
		ТОГДА ВЫБОР
				КОГДА ОстаткиЗаказовКлиента.ЗаказаноОстаток = КоличествоТоваровИтог.Количество
					ТОГДА 1
				ИНАЧЕ 0
			КОНЕЦ
	ИНАЧЕ -1
КОНЕЦ
Показать
Внимание! Не забывайте отмечать решение на ваш вопрос, если оно найдено. Это повысит ваш рейтинг на форуме.
Оставьте свое сообщение

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