Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) В выборку не попадают элементы с пустым реквизитом (число прочтений - 4157 )
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
В выборку не попадают элементы с пустым реквизитом
29. Сентября 2010 :: 12:27
Печать  
В справочнике Контрагенты есть реквизит Область
В запросе необходимо получить обороты по всем покупателям кроме тех у кого реквизит Область из списка значений СписокОбластей (в запросе #ГруппаО), в результате в результирующую ТЗ попадают все контрагенты согласно условию, кроме тех у которых реквизит Область пустой

Как получить обороты по таким контрагентам?

подозреваю, что неправильно условие запроса

| WHERE 
| Not $Спр2.Область IN (SELECT Val FROM #ГруппаО)
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: В выборку не попадают элементы с пустым реквизитом
Ответ #1 - 29. Сентября 2010 :: 12:30
Печать  
not in
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: В выборку не попадают элементы с пустым реквизитом
Ответ #2 - 29. Сентября 2010 :: 12:47
Печать  
тот же самый результат

вот весь запрос

Код
Выбрать все
		ТекстЗапроса = "
		|SELECT
		| t.ПозицияДокумента as ПозицияДокумента,
		| t.Область [Область $Справочник.Область],
		| t.Док as [Док $Документ],
		| t.Док_вид as Док_вид,
		//|	t.ДатаДок as ДатаДок,
		//| t.КодТ as КодТ,
		//| t.Номенклатура as [Номенклатура $Справочник.Номенклатура],
		//| t.ПолнНаименованиеТ as ПолнНаименованиеТ,
		//| t.ЕдИзм as [ЕдИзм $Справочник.Единицы],
		//| t.Контраген as [Контраген $Справочник.Контрагенты],
		//| t.КодК  as КодК,
		//| t.Адрес as Адрес,
		| t.Количество  as Количество,
		| t.Сумма as Сумма
		//|	t.Менеджер as [Менеджер $Справочник.Пользователи],
		//| $ПоследнееЗначение.Номенклатура.Цена(t.Номенклатура, t.ДатаДок) Цена,
		//| t.ПолнНаименованиеК as ПолнНаименованиеК
		|FROM (
		|SELECT
		| Рег.ПозицияДокумента,
		| Журн.IDDOC Док,
		| Журн.IDDocDef as Док_вид,
		| $Спр2.Область Область,
		//|	CAST(LEFT(Журн.Date_Time_IDDoc, 8) as DateTime) as ДатаДок,
		//| $Спр.Артикул as КодТ,
		//| Рег.Номенклатура as Номенклатура,
		//| $Спр.ПолнНаименование  as ПолнНаименованиеТ,
		//| Рег.ЕдИзм as ЕдИзм,
		//| Рег.Покупатель as Контраген,
		//| Спр1.Code  as КодК,
		//| $Спр1.ФактАдрес  as Адрес,
		| Рег.КоличествоОборот  as Количество,
		| Рег.СуммаОборот  as Сумма
		//|	COALESCE($Док.Менеджер, $Док1.Менеджер,$Док2.Менеджер) as Менеджер,
		//| Спр1.Descr  as ПолнНаименованиеК
		|FROM
		| $РегистрОбороты.Расход(:НачДата,:КонДата~,Документ,
		|					  INNER JOIN $Справочник.Номенклатура Спр(nolock) on Спр.[id] = Номенклатура
		|					  INNER JOIN $Справочник.ГруппыНоменклатуры Спр2(nolock) on Спр2.[id] = $Спр.Группа
		|					  ,
		|					  $Спр.Группа IN (SELECT Val FROM #ГруппаН) and
		|					  КодОперации =:КодОпер,
		|					 (Номенклатура,ЕдИзм,Покупатель), (Количество,Сумма)) as Рег
		| INNER JOIN $Справочник.Номенклатура Спр(nolock) on Спр.[id] = Рег.Номенклатура
		| INNER JOIN $Справочник.Контрагенты Спр1(nolock) on Спр1.[id] = Рег.Покупатель
		| LEFT JOIN $Справочник.Районы Спр2(nolock) on Спр2.[id] = $Спр1.Район
		| INNER JOIN _1SJourn  Журн(nolock) on Журн.[IDDOC] = right(Рег.ПозицияДокумента, 9)
		| LEFT JOIN $Документ.РасходнаяНакладная as Док(nolock) ON Док.IDDoc = Журн.[IDDOC]
		| LEFT JOIN $Документ.РасходнаяНакладнаяДляРозницы as Док2(nolock) ON Док2.IDDoc = Журн.[IDDOC]
		| LEFT JOIN $Документ.ТовЧек_Накладная as Док1(nolock) ON Док1.IDDoc = Журн.[IDDOC]
		| WHERE  Not (Журн.IDDocDef = 2344) and Not (Журн.IDDocDef = 2335) and Not (Журн.IDDocDef = 3670)
		|";
		Если СписокОбластей.РазмерСписка()>0 Тогда
			ТекстЗапроса=ТекстЗапроса+
			"
			|and ($Спр2.Область Not IN (SELECT Val FROM #ГруппаО))
			|";
		КонецЕсли	;
		ТекстЗапроса=ТекстЗапроса+
		"
		|) as t
		|";
		Если ПоВсем=0 Тогда
			ТекстЗапроса=ТекстЗапроса+
			"
			| WHERE t.менеджер IN (SELECT Val FROM #Группа)
			|";
		КонецЕсли	;
		ТекстЗапроса=ТекстЗапроса+
		"
		| Order By t.ПозицияДокумента
		|";

 

  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: В выборку не попадают элементы с пустым реквизитом
Ответ #3 - 29. Сентября 2010 :: 13:04
Печать  
всё правильно, у тебя же Left join
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: В выборку не попадают элементы с пустым реквизитом
Ответ #4 - 29. Сентября 2010 :: 13:13
Печать  
подскажи какой JOIN должен быть?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: В выборку не попадают элементы с пустым реквизитом
Ответ #5 - 29. Сентября 2010 :: 13:15
Печать  
в твоём запросе иннер

INNER JOIN $Справочник.Районы
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: В выборку не попадают элементы с пустым реквизитом
Ответ #6 - 29. Сентября 2010 :: 13:17
Печать  
Пробовал , тот же результат
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: В выборку не попадают элементы с пустым реквизитом
Ответ #7 - 29. Сентября 2010 :: 13:20
Печать  
#ГруппаО - это что ?
как добавляешь ?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: В выборку не попадают элементы с пустым реквизитом
Ответ #8 - 29. Сентября 2010 :: 13:54
Печать  
dimm73 писал(а) 29. Сентября 2010 :: 12:27:
В справочнике Контрагенты есть реквизит Область
В запросе необходимо получить обороты по всем покупателям кроме тех у кого реквизит Область из списка значений СписокОбластей (в запросе #ГруппаО), в результате в результирующую ТЗ попадают все контрагенты согласно условию, кроме тех у которых реквизит Область пустой

Как получить обороты по таким контрагентам?

подозреваю, что неправильно условие запроса

| WHERE  
| Not $Спр2.Область IN (SELECT Val FROM #ГруппаО)

во временную  таблицу #ГруппаО добавь значение '     0   '
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: В выборку не попадают элементы с пустым реквизитом
Ответ #9 - 30. Сентября 2010 :: 05:37
Печать  
Eprst писал(а) 29. Сентября 2010 :: 13:20:
#ГруппаО - это что ?
как добавляешь ?


Код
Выбрать все
		RS.УстановитьТекстовыйПараметр("НачДата", Дата1);
		RS.УстановитьТекстовыйПараметр("КонДата", Дата2);
		RS.УстановитьТекстовыйПараметр("ПустоеЗначениеОбл", ПолучитьПустоеЗначение("Справочник.Область"));
		RS.УложитьСписокОбъектов(СпМенеджеров2, "#Группа", "Пользователи");
		RS.УложитьСписокОбъектов(ГруппаТоваров, "#ГруппаН", "ГруппыНоменклатуры");
		RS.УложитьСписокОбъектов(СписокОбластей, "#ГруппаО", "Область");
		RS.УстановитьТекстовыйПараметр("КодОпер", Перечисление.КодыОпераций.Продажа);
		ТЗ1 = RS.ВыполнитьИнструкцию(ТекстЗапроса);
 



Где СписокОбластей - список значений, который пользователь может пополнять интерактивно
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: В выборку не попадают элементы с пустым реквизитом
Ответ #10 - 30. Сентября 2010 :: 05:44
Печать  
Z1 писал(а) 29. Сентября 2010 :: 13:54:
dimm73 писал(а) 29. Сентября 2010 :: 12:27:
В справочнике Контрагенты есть реквизит Область
В запросе необходимо получить обороты по всем покупателям кроме тех у кого реквизит Область из списка значений СписокОбластей (в запросе #ГруппаО), в результате в результирующую ТЗ попадают все контрагенты согласно условию, кроме тех у которых реквизит Область пустой

Как получить обороты по таким контрагентам?

подозреваю, что неправильно условие запроса

| WHERE  
| Not $Спр2.Область IN (SELECT Val FROM #ГруппаО)

во временную  таблицу #ГруппаО добавь значение '     0   '



Мне как раз нужны обороты по таким контрагентам.
Но хорошо я попробовал, добавлял так
СписокОбластей.ДобавитьЗначение(ПолучитьПустоеЗначение("Справочник.Область"));      

результат такой же
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: В выборку не попадают элементы с пустым реквизитом
Ответ #11 - 30. Сентября 2010 :: 05:47
Печать  
Вообще забавный запрос.
Зачем тебе куча присоединенных таблиц шапок документов ?

+ неафига тебе цеплять табличку журнала документов ?, когда при периодичности Документ, в ВТ и так есть и вид документа и сам документ, как
Рег.ВидДокумента  + часть из  Рег.ПозицияДокумента
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: В выборку не попадают элементы с пустым реквизитом
Ответ #12 - 30. Сентября 2010 :: 06:02
Печать  
Это наследие прототипа запроса, где наоборот отбирались обороты по списку областей с детализацией по номенклатуре и документу , притом , что не все виды документов двигающие регистр должны били попадать в выборку.
Периодичность  можно убрать, здесь она уже не нужна, но думаю это ничего не изменит, сейчас попробую
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: В выборку не попадают элементы с пустым реквизитом
Ответ #13 - 30. Сентября 2010 :: 06:17
Печать  
Да и конструкцию
and ($Спр2.Область Not IN (SELECT Val FROM #ГруппаО))

можно заменить на
Код
Выбрать все
and NOT EXISTS( select *  from  #ГруппаО as O where O.VAl =$Спр2.Область) 



  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: В выборку не попадают элементы с пустым реквизитом
Ответ #14 - 30. Сентября 2010 :: 06:23
Печать  
Eprst писал(а) 30. Сентября 2010 :: 06:17:
Да и конструкцию
and ($Спр2.Область Not IN (SELECT Val FROM #ГруппаО))

можно заменить на
Код
Выбрать все
and NOT EXISTS( select *  from  #ГруппаО as O where O.VAl =$Спр2.Область) 






Не помогло
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать