|
v7: как работает " IN (SELECT Val" | ☑ | ||
---|---|---|---|---|
0
Evgenchik
07.07.11
✎
09:56
|
в запросе надо написать отрицание условия
| WHERE (Модель Not IN (SELECT Val from #СписокИсключенийМоделей)) модель - это просто строка Запрос.УложитьСписокОбъектов(СписокИсключений, "#СписокИсключенийМоделей"); СписокИсключений - список значений строк так не работает, а очень хотелось бы. Если возможность поставить в условие отрицание вхождения строки в список строк? |
|||
1
AeDen
07.07.11
✎
09:58
|
не может быть чтобы не работало
пробуй что ли значения не в СЗ закинуть, а в строку через точку с запятой |
|||
2
AeDen
07.07.11
✎
09:58
|
а вообще посмотри что выдает SELECT Val from #СписокИсключенийМоделей
|
|||
3
Admin_Net_1C
07.07.11
✎
09:58
|
попробуй
WHERE NOT (Модель IN (SELECT Val from #СписокИсключенийМоделей)) |
|||
4
el-gamberro
07.07.11
✎
10:01
|
(3) оригинально :)
|
|||
5
el-gamberro
07.07.11
✎
10:02
|
(0) а модель это тоже строка? напиши текст ошибки.
|
|||
6
Evgenchik
07.07.11
✎
10:07
|
вот такой код пусто выдает
Запрос1 = СоздатьОбъект("ODBCRecordSet"); ТекстЗапроса1=" | SELECT Val from #СписокИсключенийМоделей |"; СписокИсключений1 = СоздатьОбъект("СписокЗначений"); СписокИсключений1.ДобавитьЗначение("ййййй"); СписокИсключений1.ДобавитьЗначение("ццццц"); Запрос1.УложитьСписокОбъектов(СписокИсключений1, "#СписокИсключенийМоделей"); ТЗ1 = Запрос1.ВыполнитьИнструкцию(ТекстЗапроса1); ТЗ1.ВыбратьСтроки(); Пока ТЗ1.ПолучитьСтроку() = 1 Цикл Сообщить(""+ТЗ1.Val); КонецЦикла; |
|||
7
ДенисЧ
07.07.11
✎
10:08
|
УложитьСписокОбъектов() только справочники и документы укладывает.
|
|||
8
Evgenchik
07.07.11
✎
10:08
|
блин, а как со строками быть? есть способы?
|
|||
9
ДенисЧ
07.07.11
✎
10:09
|
(8) руками таблицу создать - не предлагать?
|
|||
10
ДенисЧ
07.07.11
✎
10:09
|
И наполнить её?
|
|||
11
Evgenchik
07.07.11
✎
10:13
|
таблицу в запросе прямо создать? или как?
|
|||
12
Mikeware
07.07.11
✎
10:14
|
(11) да хоть как
|
|||
13
nicxxx
07.07.11
✎
10:15
|
(9) а че, вариант, но можно проще (просто список констант):
SELECT FirstName, LastName, e.Title FROM HumanResources.Employee AS e JOIN Person.Contact AS c ON e.ContactID = c.ContactID WHERE e.Title IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant'); |
|||
14
acsent
07.07.11
✎
10:17
|
а зачем временная таблица?
|
|||
15
nicxxx
07.07.11
✎
10:18
|
ну чтобы сделать
WHERE NOT (Модель IN (SELECT Val from #СписокИсключенийМоделей)) |
|||
16
ДенисЧ
07.07.11
✎
10:20
|
(14) А если у тебя (у автора) динамически наполняемый список исключений?
|
|||
17
Evgenchik
07.07.11
✎
10:23
|
ну список не особо динамический, но длинный.
подскажите пожалуйста кодом, как сделать таблицу, чтобы использовать WHERE (Модель NOT IN (SELECT Val from #СписокИсключенийМоделей)) через такую конструкцию WHERE e.Title IN ('Design Engineer', 'Tool Designer', 'Marketing Assistant'); - работает |
|||
18
ДенисЧ
07.07.11
✎
10:25
|
(17)
стрЗапрос = " |IF EXISTS (select name from tempdb..sysobjects where id = OBJECT_ID('tempdb..#Vinovnye', 'U')) | DROP table #Vinovnye |"; Запрос1с.ВыполнитьИнструкцию(стрЗапрос); стрЗапрос = " |CREATE TABLE #Vinovnye (val char(9)) |"; Запрос1с.ВыполнитьИнструкцию(стрЗапрос); стрЗапрос = "INSERT INTO #Vinovnye (val) VALUES (:зн)"; Для сч = 1 По сзВиновные.РазмерСписка() Цикл Если сзВиновные.Пометка(сч) = 1 Тогда Запрос1с.УстановитьТекстовыйПараметр("зн", сзВиновные.ПолучитьЗначение(сч)); //Запрос1с.УстановитьТекстовыйПараметр("зн", СокрЛП(сзВиновные.ПолучитьЗначение(сч))); Запрос1с.ВыполнитьИнструкцию(стрЗапрос); КонецЕсли; КонецЦикла; |
|||
19
AeDen
07.07.11
✎
10:28
|
стр = "ййй; ццц;"
"where str not in @стр" как-то так попробовать не вариант? |
|||
20
Evgenchik
07.07.11
✎
10:40
|
(19) "получаемая строка превысит допустимые размеры" :)
|
|||
21
Ёпрст
07.07.11
✎
10:42
|
блин.. везде дублируют темы.
|
|||
22
Evgenchik
07.07.11
✎
10:45
|
(21) тут быстрее :)
|
|||
23
Evgenchik
07.07.11
✎
10:53
|
всем спасибо, все получилось!
|
|||
24
TeddySlaf
07.07.11
✎
11:06
|
(23) а как получилось, через какой вариант?
|
|||
25
Evgenchik
07.07.11
✎
11:16
|
через (18)
|
|||
26
Evgenchik
07.07.11
✎
11:16
|
+(25) со строками слишком длинная строка получалась
|
|||
27
Evgenchik
07.07.11
✎
15:49
|
оказалось, что если Модель - пустая строка то она тоже попадает в условие, а так не должно быть..
как сделать условие, чтобы если будет строка пустая то значение в запросе выводилось любое? |
|||
28
ДенисЧ
07.07.11
✎
15:52
|
Запрос правильно собирай...
|
|||
29
Evgenchik
07.07.11
✎
15:55
|
да вроде правильно все.
SELECT t.Контрагент [Контрагент $Справочник.Контрагенты] ,t.Товар [Товар $Справочник] ,t.ВидНоменклатуры [ВидыНоменклатуры $Справочник.ВидыНоменклатуры] ,NullIf(t.Документ_дата, '17530101') Документ_дата ,t.Модель Модель ... все это собирается из двух подзапросов. Как только ставлю условие WHERE (Модель Not IN (SELECT Val from #IsklModel)) то если модель - пустая строка - она не попадает в результат |
|||
30
Evgenchik
07.07.11
✎
15:56
|
NullIf(t.Модель, 'ПустаяМодель') Модель
- так не срабатывает |
|||
31
Evgenchik
07.07.11
✎
15:58
|
case when t.Модель='' then 'ПустаяМодель' else t.Модель end as Модель
и так не срабатывает |
|||
32
Evgenchik
07.07.11
✎
16:08
|
хелпппп
|
|||
33
Ёпрст
07.07.11
✎
16:09
|
SELECT Val from #IsklModel where val is not null
|
|||
34
Evgenchik
07.07.11
✎
16:15
|
но там нет пустых значений! не получается так..
|
|||
35
Ёпрст
07.07.11
✎
16:28
|
(34) ты в во временную табличку пустую строку пихаешь, или что ?
|
|||
36
Evgenchik
07.07.11
✎
16:53
|
во временной табличке
Запрос1с=СоздатьОбъект("ODBCRecordSet"); стрЗапрос = " |IF EXISTS (select name from tempdb..sysobjects where id = OBJECT_ID('tempdb..#IsklModel', 'U')) | DROP table #IsklModel |"; Запрос1с.ВыполнитьИнструкцию(стрЗапрос); стрЗапрос = " |CREATE TABLE #IsklModel (val char(55)) |"; Запрос1с.ВыполнитьИнструкцию(стрЗапрос); стрЗапрос = "INSERT INTO #IsklModel (val) VALUES (:зн)"; Для сч = 1 По СписокИсключений.РазмерСписка() Цикл Запрос1с.УстановитьТекстовыйПараметр("зн", СписокИсключений.ПолучитьЗначение(сч)); Запрос1с.ВыполнитьИнструкцию(стрЗапрос); КонецЦикла; ТекстЗапроса = ТекстЗапроса+" | WHERE (Модель Not IN (SELECT Val from #IsklModel where val is not null)) |"; похоже придется переделывать, чтобы был не список строк, а значений справочника.... |
|||
37
Mikeware
07.07.11
✎
17:00
|
(36) нахрена такие сложности?
генерируй имя временной таблицы автоматом, случайным образом - например, как GUID - и после завершения сеанса они дропнутся автоматически. |
|||
38
Evgenchik
21.07.11
✎
12:05
|
в условии
$ВозвратОтПокупателяСтроки.Товар not IN (SELECT val from #СписокИсключенийТоваровВ) потом делаю Запрос.УложитьСписокОбъектов13(СписокИсключенийНоменклатуры, "#СписокИсключенийТоваровВ"); но если в СписокИсключенийНоменклатуры входят группы то не срабатывает условие. как это исправить можно? нашел, что УложитьСписокОбъектов13 не сработает с группами. тогда пишу ТаблицаИсключенийНоменклатуры=СоздатьОбъект("ТаблицаЗначений"); Запрос1 = СоздатьОбъект("ODBCRecordSet"); Запрос1.УложитьСписокОбъектов(СписокИсключенийНоменклатуры, "#vt1", "Номенклатура"); ТаблицаИсключенийНоменклатуры=Запрос1.ВыполнитьИнструкцию("Select val from #vt1"); СписокVT1 = СоздатьОбъект("СписокЗначений"); ТаблицаИсключенийНоменклатуры.Выгрузить(СписокVT1); Запрос.УложитьСписокОбъектов13(СписокVT1, "#СписокИсключенийТоваровВ"); и что-то все равно не пашет |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |