Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) как работает " IN (SELECT Val" (число прочтений - 4668 )
Evga
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 35
Зарегистрирован: 05. Мая 2011
как работает " IN (SELECT Val"
07. Июля 2011 :: 05:46
Печать  
в запросе надо написать отрицание условия
| WHERE (Модель Not IN (SELECT Val from #СписокИсключенийМоделей))

модель - это просто строка

Запрос.УложитьСписокОбъектов(СписокИсключений, "#СписокИсключенийМоделей");

СписокИсключений - список значений строк

так не работает, а очень хотелось бы.
Если возможность поставить в условие отрицание вхождения строки в список строк?
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: как работает " IN (SELECT Val"
Ответ #1 - 07. Июля 2011 :: 05:48
Печать  
С каких пор строка стала 1С-объектом?
  
Наверх
 
IP записан
 
Evga
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 35
Зарегистрирован: 05. Мая 2011
Re: как работает " IN (SELECT Val"
Ответ #2 - 07. Июля 2011 :: 06:04
Печать  
а как же быть со строками?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: как работает " IN (SELECT Val"
Ответ #3 - 07. Июля 2011 :: 06:33
Печать  
Либо руками составлять строку с условием, либо пихать во временную табличку другим запросом.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: как работает " IN (SELECT Val"
Ответ #4 - 07. Июля 2011 :: 07:27
Печать  
Evga писал(а) 07. Июля 2011 :: 06:04:
а как же быть со строками?

Может имеет смысл модели поместить в отдельный справочник
( чем длинее строки тем актуальнее это предложение)
и запрос строить уже на основании элементов справочника.
  
Наверх
 
IP записан
 
Evga
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 35
Зарегистрирован: 05. Мая 2011
Re: как работает " IN (SELECT Val"
Ответ #5 - 08. Июля 2011 :: 08:41
Печать  
да, со строками неудачно получилось. переделал на справочник.
  
Наверх
 
IP записан
 
Evga
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 35
Зарегистрирован: 05. Мая 2011
Re: как работает " IN (SELECT Val"
Ответ #6 - 21. Июля 2011 :: 06:35
Печать  
в условии
$ВозвратОтПокупателяСтроки.Товар not IN (SELECT $ВидСправочника36.Номенклатура + val from #СписокИсключенийТоваровВ)
потом делаю
Запрос.УложитьСписокОбъектов13(СписокИсключенийНоменклатуры, "#СписокИсключенийТоваровВ");
но если в СписокИсключенийНоменклатуры входят группы то не срабатывает условие. как это исправить можно?
  
Наверх
 
IP записан
 
Evga
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 35
Зарегистрирован: 05. Мая 2011
Re: как работает " IN (SELECT Val"
Ответ #7 - 21. Июля 2011 :: 07:14
Печать  
нашел, что УложитьСписокОбъектов13 не сработает с группами. тогда пишу
                                   ТаблицаИсключенийНоменклатуры=СоздатьОбъект("ТаблицаЗначений");
Запрос1 = СоздатьОбъект("ODBCRecordSet");
Запрос1.УложитьСписокОбъектов(СписокИсключенийНоменклатуры, "#vt1", "Номенклатура");
ТаблицаИсключенийНоменклатуры=Запрос1.ВыполнитьИнструкцию("Select val from #vt1");
СписокVT1 = СоздатьОбъект("СписокЗначений");
ТаблицаИсключенийНоменклатуры.Выгрузить(СписокVT1);
Запрос.УложитьСписокОбъектов13(СписокVT1, "#СписокИсключенийТоваровВ");
и что-то все равно не пашет
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: как работает " IN (SELECT Val"
Ответ #8 - 21. Июля 2011 :: 07:27
Печать  
Evga писал(а) 21. Июля 2011 :: 06:35:
в условии
$ВозвратОтПокупателяСтроки.Товар not IN (SELECT $ВидСправочника36.Номенклатура + val from #СписокИсключенийТоваровВ)
потом делаю
Запрос.УложитьСписокОбъектов13(СписокИсключенийНоменклатуры, "#СписокИсключенийТоваровВ");
но если в СписокИсключенийНоменклатуры входят группы то не срабатывает условие. как это исправить можно?


Если ты делаешь "УложитьСписокОбъектов13" - то зачем ты добавляешь $ВидСправочника36? В val уже должно быть ид13 объектов, если мне мой протез не врет...
  
Наверх
 
IP записан
 
Evga
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 35
Зарегистрирован: 05. Мая 2011
Re: как работает " IN (SELECT Val"
Ответ #9 - 21. Июля 2011 :: 07:32
Печать  
и так и так не работает
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: как работает " IN (SELECT Val"
Ответ #10 - 21. Июля 2011 :: 10:49
Печать  
Evga писал(а) 21. Июля 2011 :: 07:14:
нашел, что УложитьСписокОбъектов13 не сработает с группами. тогда пишу
                                   ТаблицаИсключенийНоменклатуры=СоздатьОбъект("ТаблицаЗначений");
Запрос1 = СоздатьОбъект("ODBCRecordSet");
Запрос1.УложитьСписокОбъектов(СписокИсключенийНоменклатуры, "#vt1", "Номенклатура");
ТаблицаИсключенийНоменклатуры=Запрос1.ВыполнитьИнструкцию("Select val from #vt1");
СписокVT1 = СоздатьОбъект("СписокЗначений");
ТаблицаИсключенийНоменклатуры.Выгрузить(СписокVT1);
Запрос.УложитьСписокОбъектов13(СписокVT1, "#СписокИсключенийТоваровВ");
и что-то все равно не пашет

1. Ты укладываешь товары в вт1 (при этом получаешь разворот групп), в результате в вт1 будет колонка в которой лежать ИД-шники товаров
2. Ты собираешь эти ИД-шники (напомню, в виде строки в 9 символов) обратно в Таблицу
3. Пытаешься эти 9-ти символьные строки уложить в #СписокИсключенийТоваровВ в виде 13-ти символов
Разумеется ничего хорошего у тебя не выходит
  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: как работает " IN (SELECT Val"
Ответ #11 - 21. Июля 2011 :: 10:51
Печать  
Должно работать, примерно, так:
Код
Выбрать все
Запрос1 = СоздатьОбъект("ODBCRecordSet");
Запрос1.УложитьСписокОбъектов(СписокИсключенийНоменклатуры, "#vt1", "Номенклатура");
$ВозвратОтПокупателяСтроки.Товар not IN (SELECT $ВидСправочника36.Номенклатура + val from #vt1) 

  
Наверх
ICQ  
IP записан
 
Evga
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 35
Зарегистрирован: 05. Мая 2011
Re: как работает " IN (SELECT Val"
Ответ #12 - 24. Июля 2012 :: 11:03
Печать  
подниму этот вопрос.
Почему этот запрос  работает:
SELECT Номенклатура.CODE Код
     , Номенклатура.DESCR Наименование
     , Подзапрос.КоличествоОстаток
FROM $Справочник.Номенклатура AS Номенклатура With (NOLOCK)
     LEFT OUTER JOIN (SELECT ПартииОстатки.МПЗ
                 , ПартииОстатки.КоличествоОстаток
           FROM $РегистрОстатки.Партии(:КонДата,,
                       (МПЗ = :ВыбНом~),
                       МПЗ,
                       Количество) AS ПартииОстатки) AS Подзапрос ON $ВидСправочника36.Номенклатура + Номенклатура.ID = Подзапрос.МПЗ
WHERE (Номенклатура.ISMARK = 0)
     AND (Номенклатура.ID  = :ВыбНом)


А вот этот не работает, количество пустое показывает.
SELECT Номенклатура.CODE Код
     , Номенклатура.DESCR Наименование
     , Подзапрос.КоличествоОстаток
FROM $Справочник.Номенклатура AS Номенклатура With (NOLOCK)
     LEFT OUTER JOIN (SELECT ПартииОстатки.МПЗ
                 , ПартииОстатки.КоличествоОстаток
           FROM $РегистрОстатки.Партии(:КонДата,,
                       (МПЗ = :ВыбНом~),
                       МПЗ,
                       Количество) AS ПартииОстатки) AS Подзапрос ON $ВидСправочника36.Номенклатура + Номенклатура.ID = Подзапрос.МПЗ
WHERE (Номенклатура.ISMARK = 0)
     AND (Номенклатура.ID  IN(SELECT val from #СписокМПЗ))

ВыбСписок - перечень номенклатуры.
Запрос.УложитьСписокОбъектов(ВыбСписок, "#СписокМПЗ", "Номенклатура");
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: как работает " IN (SELECT Val"
Ответ #13 - 24. Июля 2012 :: 11:52
Печать  
Если   :ВыбНом не в списке
то и не будет работать второй запрос.
вместо условия    (МПЗ = :ВыбНом~) надо
писать условие что МПЗ в твоем списке.
(синаксис вирт функций не помню поэтому запрос не напишу )
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: как работает " IN (SELECT Val"
Ответ #14 - 25. Июля 2012 :: 10:46
Печать  
По большому счету, условие в виртуальной таблице - влияет только на быстродействие, ибо она (виртуальная таблица) левым джойном приходит.
Результат выборки никак не изменится, будет ли у тебя условие по номенклатуре в подзапросе, или нет.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать