Имя: Пароль:
1C
 
Параметры запроса массив
0 yurii123
 
05.03.10
15:33
Как правильно указать параметры в запросе, понимаю что массив сравнивать со строкой и числом нельзя, но как правильно сравнить не пойму.


НСМс = Новый Массив;
   НаимМс = Новый Массив;
   НСМс.Добавить("5"); НСМс.Добавить("10"); НСМс.Добавить("15"); НСМс.Добавить("20"); НСМс.Добавить("25");
   НСМс.Добавить("30"); НСМс.Добавить("35"); НСМс.Добавить("40");
   НаимМс.Добавить("Документация"); НаимМс.Добавить("Комплексы"); НаимМс.Добавить("Комплексы");
   НаимМс.Добавить("Сборочные единицы"); НаимМс.Добавить("Детали"); НаимМс.Добавить("Стандартные изделия");
   НаимМс.Добавить("Прочие изделия"); НаимМс.Добавить("Материалы"); НаимМс.Добавить("Комплекты");
   
   ЗапросВыгрузки = Новый Запрос;
   Мен = Новый МенеджерВременныхТаблиц;
   ЗапросВыгрузки.МенеджерВременныхТаблиц = Мен;
   
   ЗапросВыгрузки.Текст =
   "ВЫБРАТЬ
   | *
   | Поместить ТабЗнач
   |ИЗ
   |   &ТС КАК ТС";
   
   ЗапросВыгрузки.УстановитьПараметр("ТС", ТС);
   ЗапросВыгрузки.Выполнить();
   
   ЗапросВыгрузки.Текст = "Выбрать
   |    ТабЗнач.НомерСекции,
   |    ТабЗнач.Наименование
   |ИЗ
   |    ТабЗнач КАК ТабЗнач
   |ГДЕ
   |    (ТабЗнач.НомерСекции = &Параметр) И (ТабЗнач.Наименование <> &ПарамНаименования)";
   ЗапросВыгрузки.УстановитьПараметр("ТС", ТС);
   ЗапросВыгрузки.УстановитьПараметр("Параметр", НСМс);
   ЗапросВыгрузки.УстановитьПараметр("ПарамНаименования", НаимМс);
   ТЗВыгрузки = ЗапросВыгрузки.Выполнить().Выгрузить();
1 73
 
05.03.10
15:35
В(&Параметр) ?
2 Futarkh
 
05.03.10
15:36
А что ты хочешь получить?
3 yurii123
 
05.03.10
15:37
Только нужные строки, согласно двум массивам
4 Futarkh
 
05.03.10
15:38
Может надо писать не "=" а "В"
5 yurii123
 
05.03.10
15:39
Беру то что есть в массиве, но значения в массиве есть не в каждой строке таблицы
6 Futarkh
 
05.03.10
15:39
И вообще, номерСекци у тебя что, строка чтоли?
7 yurii123
 
05.03.10
15:39
Число
8 73
 
05.03.10
15:40
А в массиве строки... Прикольно. И как оно работать будет?
9 yurii123
 
05.03.10
15:42
Не важно, переделаю на ТЗ. Вопрос остается открытым и после этого.
10 73
 
05.03.10
15:42
|ГДЕ
   |    (ТабЗнач.НомерСекции В(&Параметр() И (ТабЗнач.Наименование НЕ В(&ПарамНаименования))";

ЗЫ. Я так понял. И с типами в массиве разберись.
11 73
 
05.03.10
15:43
(9) Что неважно? В запросе 5 <> "5". И никто там преобразовывать не будет.
12 yurii123
 
05.03.10
15:44
Если условием это выглядит так

Если НаимМс = "Документация" ИЛИ НаимМс = "Комплексы" ... Тогда
13 73
 
05.03.10
15:47
В конфигураторе:
-Содержание справки
-1С Предприятие
 -Встроенный язык
  -Работа с запросами
   -Язык запросов
   -Условия в языке запросов
   -Логические выражения в языке запросов
14 Futarkh
 
05.03.10
15:47
(12) Тогда почему в запросе пишешь "<>" ????
15 Futarkh
 
05.03.10
15:50
Короче
НСМс = Новый Массив;
   НаимМс = Новый Массив;
   НСМс.Добавить(5); НСМс.Добавить(10); НСМс.Добавить(15); НСМс.Добавить(20); НСМс.Добавить(25);
   НСМс.Добавить(30); НСМс.Добавить(35); НСМс.Добавить(40);
   НаимМс.Добавить("Документация"); НаимМс.Добавить("Комплексы"); НаимМс.Добавить("Комплексы");
   НаимМс.Добавить("Сборочные единицы"); НаимМс.Добавить("Детали"); НаимМс.Добавить("Стандартные изделия");
   НаимМс.Добавить("Прочие изделия"); НаимМс.Добавить("Материалы"); НаимМс.Добавить("Комплекты");
   
   ЗапросВыгрузки = Новый Запрос;
   Мен = Новый МенеджерВременныхТаблиц;
   ЗапросВыгрузки.МенеджерВременныхТаблиц = Мен;
   
   ЗапросВыгрузки.Текст =
   "ВЫБРАТЬ
   | *
   | Поместить ТабЗнач
   |ИЗ
   |   &ТС КАК ТС";
   
   ЗапросВыгрузки.УстановитьПараметр("ТС", ТС);
   ЗапросВыгрузки.Выполнить();
   
   ЗапросВыгрузки.Текст = "Выбрать
   |    ТабЗнач.НомерСекции,
   |    ТабЗнач.Наименование
   |ИЗ
   |    ТабЗнач КАК ТабЗнач
   |ГДЕ
   |    (ТабЗнач.НомерСекции В (&Параметр)) И (ТабЗнач.Наименование В (&ПарамНаименования))";
   ЗапросВыгрузки.УстановитьПараметр("ТС", ТС);
   ЗапросВыгрузки.УстановитьПараметр("Параметр", НСМс);
   ЗапросВыгрузки.УстановитьПараметр("ПарамНаименования", НаимМс);
   ТЗВыгрузки = ЗапросВыгрузки.Выполнить().Выгрузить();
16 yurii123
 
05.03.10
15:51
Понял спасибо
17 yurii123
 
30.03.10
13:10
Теперь пишит это

{Форма.ФормаЗПСИ.Форма(688)}: Ошибка при вызове метода контекста (Выполнить): {(7, 62)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
(ТабЗнач.НомерСекции В(&Параметр)) И (ТабЗнач.Наименование <<?>>НЕ В(&ПарамНаименования))
   ТЗВыгрузки = ЗапросВыгрузки.Выполнить().Выгрузить();

ТабЗнач.Наименование Тип Строка  
ПарамНаименования  массив, а значения в массиве строка, че ему надо?
Есть правда ТабЗнач.Наименование пустые значения, может из-за этого.
Куда смотреть в запрос или в таблицу?
18 hhhh
 
30.03.10
13:18
(17) наверно, поленился типизировать колонки в таблице значений.
19 73
 
30.03.10
13:19
<ТабЗнач.Наименование Тип Строка   > - строка ограниченной или неограниченной длины?
20 Невский Александр
 
30.03.10
13:20
(17) И (НЕ ТабЗнач.Наименование В (&ПарамНаименования))
21 yurii123
 
30.03.10
13:21
Не ограниченной
22 73
 
30.03.10
13:23
(21) Ну вот и <нельзя сравнивать поля неограниченной длины> .

ТС - это что? (ТЧ, ТЗ...?)
23 yurii123
 
30.03.10
13:25
ТЗ, при создании, колонку ограничил до 50, такая же фигня
24 73
 
30.03.10
13:30
Покажи, как колонку создаешь.
25 yurii123
 
30.03.10
13:31
ТС.Колонки.Добавить("Наименование",ОписаниеТиповСтрока,,50);
26 73
 
30.03.10
13:32
(25) Ну и ОписаниеТиповСтрока...
Что ж по ложечке-то?
27 73
 
30.03.10
13:33
(26)+ Ты ограничил ширину, но никак не тип значения.
28 yurii123
 
30.03.10
13:33
ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка");
29 73
 
30.03.10
13:34
Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(50))
30 yurii123
 
30.03.10
13:37
к стати поменял НЕ местами

(НЕ ТабЗнач.Наименование В(&ПарамНаименования))

и ПарамНаименования стало значение "Массив" тип строка
а было значение Массив тип Массив
31 yurii123
 
30.03.10
13:39
Запрос заработал, спасибо, как быть с этим (30)
32 73
 
30.03.10
13:43
Имхо, пофиг где ты НЕ поставишь.
33 yurii123
 
30.03.10
13:44
спасибо
34 73
 
30.03.10
13:44
(32)+
Справка 1С:
Логические выражения в языке запросов
В языке запросов в операциях выбора и в условиях отборов используются логические выражения:

<Логическое выражение>

<Выражение> |
<Выражение> <Операция сравнения> <Выражение> |
<Выражение> [НЕ] В [ИЕРАРХИИ] ( <Список значений> | <Массив значений> ) |

............