Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Условие по пустому реквизиту (число прочтений - 1990 )
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Условие по пустому реквизиту
24. Ноября 2010 :: 10:07
Печать  
Есть такой запрос:
Код
Выбрать все
ТекстЗапроса = "-- qryMaker:Отчет1.2009.11.12.11.40.20
	|Select
	|   Выборка.Склад  [Склад $Справочник.Склады]
	| , Выборка.Норма
	| , Выборка.СкладНорм  [СкладНорм $Справочник.Склады]
	| , Выборка.СкладОстатков  [СкладОстатков $Справочник.Склады]
	| , Выборка.Количество
	|From
	|(Select
	|   Склад = Case Остатки.Склад When :ПустойСклад Then
	|   Нормы.Склад --[Склад $Справочник.Склады]
	|   Else Остатки.Склад End
	| , Нормы.Склад СкладНорм
	| , Остатки.Склад СкладОстатков
	| , Нормы.Норма Норма
	| , Остатки.Количество Количество
	|From
	|(SELECT ОстаткиТМЦОстатки.Склад
	|	, Sum(ОстаткиТМЦОстатки.КоличествоОстаток) Количество
	|FROM $РегистрОстатки.ОстаткиТМЦ(,,
	|		(Номенклатура = :ВыбНом),
	|		(Склад, Номенклатура),) AS ОстаткиТМЦОстатки
	|GROUP BY ОстаткиТМЦОстатки.Склад) As Остатки
	| Full Outer Join (
	|Select $СпрСлОбщ.Склад Склад
	|, $СпрСлОбщ.НормаПодтоварки Норма
	|From $Справочник.СлужебныйОбщий As СпрСлОбщ
	|Where (СпрСлОбщ.ParentExt = :ВыбНом)) As Нормы On ((Нормы.Склад = Остатки.Склад)
	|								Or (Нормы.Склад Is Null)
	|								Or (Остатки.Склад Is Null))) As Выборка
	|Where (Выборка.Норма<>0) Or (Выборка.Количество<>0)
	|";
	рс.УстановитьТекстовыйПараметр("ВыбНом", ВыбНом);
	рс.УстановитьТекстовыйПараметр("ПустойСклад", ПолучитьПустоеЗначение("Справочник.Склады")); 


В условии:
Код
Выбрать все
	|   Склад = Case Остатки.Склад When :ПустойСклад Then
	|   Нормы.Склад --[Склад $Справочник.Склады]
	|   Else Остатки.Склад End 


первая часть никогда не срабатывает, несмотря на то, что там получается пустой склад.
ПустойИД и ПустойИД13 тоже не срабатывают.  Как это исправить?
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Условие по пустому реквизиту
Ответ #1 - 24. Ноября 2010 :: 10:44
Печать  
А чего, в регистре в измерении пустой склад может быть?

ЗЫ: заместо case, coalesce  используй..
да и подставлять пустое значение не нужно, нужно просто с ПустойИД сравнивать.
  
Наверх
 
IP записан
 
Boog
Junior Member
**
Отсутствует



Сообщений: 95
Местоположение: Винница
Зарегистрирован: 23. Февраля 2009
Пол: Мужской
Re: Условие по пустому реквизиту
Ответ #2 - 24. Ноября 2010 :: 14:25
Печать  
А что это за структура в Select: "Склад = case"? Это вообще как? Озадачен
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Условие по пустому реквизиту
Ответ #3 - 25. Ноября 2010 :: 02:47
Печать  
Boog писал(а) 24. Ноября 2010 :: 14:25:
А что это за структура в Select: "Склад = case"? Это вообще как? Озадачен

это стандарт языка sql ... например, можно почитать здесь
  
Наверх
 
IP записан
 
al_zzz
Senior Member
****
Отсутствует


1C++ ->

Сообщений: 361
Местоположение: Барнаул
Зарегистрирован: 05. Сентября 2009
Пол: Мужской
Re: Условие по пустому реквизиту
Ответ #4 - 25. Ноября 2010 :: 03:17
Печать  
Eprst писал(а) 24. Ноября 2010 :: 10:44:
А чего, в регистре в измерении пустой склад может быть?

ЗЫ: заместо case, coalesce  используй..
да и подставлять пустое значение не нужно, нужно просто с ПустойИД сравнивать.

Сoalesce помогло. При сравнении с ПустойИД, ПустойИД13 результат был тот же, что и при сравнении с пустым значением.
  

Каждая система проходит три стадии:&&1) Шумиха&&2) Неразбериха&&3) Поиск виновных (собственно, рабочий процесс)&&4) Наказание невиновных&&5) Награждение непричастных&& В.М. Глушков
Наверх
 
IP записан
 
Boog
Junior Member
**
Отсутствует



Сообщений: 95
Местоположение: Винница
Зарегистрирован: 23. Февраля 2009
Пол: Мужской
Re: Условие по пустому реквизиту
Ответ #5 - 25. Ноября 2010 :: 09:22
Печать  
Dmitry The Wing писал(а) 25. Ноября 2010 :: 02:47:
Boog писал(а) 24. Ноября 2010 :: 14:25:
А что это за структура в Select: "Склад = case"? Это вообще как? Озадачен

это стандарт языка sql ... например, можно почитать здесь

Я не про case, я про "="! Насколько я знаю сперва пишется значение, а потом псевдоним. А запись через "=" я вижу впервые.
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Условие по пустому реквизиту
Ответ #6 - 25. Ноября 2010 :: 18:55
Печать  
Boog писал(а) 25. Ноября 2010 :: 09:22:
Dmitry The Wing писал(а) 25. Ноября 2010 :: 02:47:
Boog писал(а) 24. Ноября 2010 :: 14:25:
А что это за структура в Select: "Склад = case"? Это вообще как? Озадачен

это стандарт языка sql ... например, можно почитать здесь

Я не про case, я про "="! Насколько я знаю сперва пишется значение, а потом псевдоним. А запись через "=" я вижу впервые.


Это MS до такого дошли а по стандартам ANSI (если не ошибаюсь) -  Выражение AS Псевдоним,
  
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Условие по пустому реквизиту
Ответ #7 - 26. Ноября 2010 :: 02:15
Печать  
pvase писал(а) 25. Ноября 2010 :: 18:55:
Это MS до такого дошли а по стандартам ANSI (если не ошибаюсь) -  Выражение AS Псевдоним,

Смысл тут вообще другой. case позволяет заменять значение по условию, причем ждесь псевдонимы?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Условие по пустому реквизиту
Ответ #8 - 26. Ноября 2010 :: 05:57
Печать  
Dmitry The Wing писал(а) 26. Ноября 2010 :: 02:15:
pvase писал(а) 25. Ноября 2010 :: 18:55:
Это MS до такого дошли а по стандартам ANSI (если не ошибаюсь) -  Выражение AS Псевдоним,

Смысл тут вообще другой. case позволяет заменять значение по условию, причем ждесь псевдонимы?


При том, что в начале идет Case , а потом  псевдоним этого поля, а не наеборот как у автора Псевдоним = Case
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать