Имя: Пароль:
1C
1С v8
передача списка значений в запрос
Ø (Pro-tone 04.12.2012 09:44)
,
0 Alexey_AA
 
04.12.12
08:12
всем привет!
не могу разобраться, почему запрос отрабатывает только по первому значению списка значений?

   Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    ЮгрателЖурнал.Ссылка.ДатаНач,
       |    ЮгрателЖурнал.Ссылка.КрайнийСрок,
       |    ЮгрателЖурнал.Ссылка.НомерНаряда,
       |    ЮгрателЖурнал.Ссылка.АдресАбонента,
       |    ЮгрателЖурнал.Ссылка.ТипЗадания,
       |    ЮгрателЖурнал.Абонент.Ссылка,
       |    ЮгрателЖурнал.СтоимостьНаряда
       |ИЗ
       |    ЖурналДокументов.ЮгрателЖурнал КАК ЮгрателЖурнал
       |ГДЕ
       |    ЮгрателЖурнал.ВидОперации = &ВидОперации
       |    И ЮгрателЖурнал.ДатаКон >= &НачПериода
       |    И ЮгрателЖурнал.ДатаКон <= &КонПериода
       |    И ЮгрателЖурнал.ТипЗадания В(&ТипЗадания)
       |    И ЮгрателЖурнал.Состояние <> &Состояние";

   


   масТип= Новый СписокЗначений ();
   
       
   масТип.Добавить(справочники.франТипыЗаданий.НайтиПоНаименованию("Метро"));
   масТип.Добавить(справочники.франТипыЗаданий.НайтиПоНаименованию("IP"));
   масТип.Добавить(справочники.франТипыЗаданий.НайтиПоНаименованию("телефония"));
   масТип.Добавить(справочники.франТипыЗаданий.НайтиПоНаименованию("метро+телефония"));
   масТип.Добавить(справочники.франТипыЗаданий.НайтиПоНаименованию("IP+монтаж линии метро"));
   
   

   запрос.УстановитьПараметр("ТипЗадания",масТип);
1 ZanderZ
 
04.12.12
08:15
возможно остальные не удовлетворяют твоим условиям или не находит по наименованию...
2 Wobland
 
04.12.12
08:16
(0) вот такие вот условия, всё верно
3 Wobland
 
04.12.12
08:17
когда "метро+телефония" переименуют в "метро + телефония", что будешь делать?
4 Alexey_AA
 
04.12.12
08:17
то есть список значений верно передан?
5 Alexey_AA
 
04.12.12
08:18
(3) шеф заверил что не будет такого :)
6 Wobland
 
04.12.12
08:18
(5) это сильный аргумент
7 dclxvi
 
04.12.12
08:18
масТип= Новый СписокЗначений ();

Скобки зачем?
8 Живой Ископаемый
 
04.12.12
08:20
копрокод детектед
9 dclxvi
 
04.12.12
08:21
(8)  см (5)
10 kosts
 
04.12.12
08:21
Вот так в принципе грамотнее, наверное


Выбрать ссылка
Поместить ВТфранТипыЗаданий
из справочники.франТипыЗаданий как франТипыЗаданий
где <Условие>

;

ВЫБРАТЬ
       |    ЮгрателЖурнал.Ссылка.ДатаНач,
       |    ЮгрателЖурнал.Ссылка.КрайнийСрок,
       |    ЮгрателЖурнал.Ссылка.НомерНаряда,
       |    ЮгрателЖурнал.Ссылка.АдресАбонента,
       |    ЮгрателЖурнал.Ссылка.ТипЗадания,
       |    ЮгрателЖурнал.Абонент.Ссылка,
       |    ЮгрателЖурнал.СтоимостьНаряда
       |ИЗ
       |    ЖурналДокументов.ЮгрателЖурнал КАК ЮгрателЖурнал

внутреннее соединение ВТфранТипыЗаданий как ВТфранТипыЗаданий по ЮгрателЖурнал.ТипЗадания = ВТфранТипыЗаданий.Ссылка

       |ГДЕ
       |    ЮгрателЖурнал.ВидОперации = &ВидОперации
       |    И ЮгрателЖурнал.ДатаКон >= &НачПериода
       |    И ЮгрателЖурнал.ДатаКон <= &КонПериода
//////////        |    И ЮгрателЖурнал.ТипЗадания В(&ТипЗадания)
       |    И ЮгрателЖурнал.Состояние <> &Состояние";
11 Wobland
 
04.12.12
08:22
(10) что говорит шеф?
12 kosts
 
04.12.12
08:24
"метро+телефония" и "IP+монтаж линии метро" скорее всего говорит, что структура базы не очень правильная, но вам виднее (0)
13 Живой Ископаемый
 
04.12.12
08:25
2(9) в этом месте я смеюсь вам в лицо.
14 Alexey_AA
 
04.12.12
08:30
кароче надосроно за полчаса доделать, сделаю запрос и буду выбирать условием записи
15 Alexey_AA
 
04.12.12
08:31
*срочно :)
16 kosts
 
04.12.12
08:33
(14) Ну проверь, что элементы действительно находятся по наименованию.
17 kosts
 
04.12.12
08:33
И что за выбранный период нужные записи точно есть...
18 Wobland
 
04.12.12
08:33
(14) спроси потом, почему отрабатывает только по первому значению списка значений
19 kosts
 
04.12.12
08:37
ЮгрателЖурнал.Состояние <> &Состояние

Такая конструкция потенциально вредна. Вот добавит кто-то еще одно состояние в справочник и твой запрос вернет лишние записи...
20 Wobland
 
04.12.12
08:37
(19) а если это перечисление?
21 kosts
 
04.12.12
08:43
(20) Да, то же самое.
Нужно состояния конкретно задавать.

Пример.
Были состояния сотрудников: Болеет, Работает
Создали отчет "Вывести всех работающих". Пишем в запросе Состояние <> Болеет (т.е. работающие).
Позже добавили состояние "В отпуске", что стало с отчетом - стал выдавать лажу...
22 Wobland
 
04.12.12
08:48
(21) а вдруг нужен отчёт типа "все неработающие"? тут на месте смотреть надо. а в целом я с тобой согласен, конечно
23 Wobland
 
04.12.12
08:48
+(22) ну и перечисление за просто так не добавишь
24 olegves
 
04.12.12
09:23
(15) массив в качестве параметра запроса рулит
25 kosts
 
04.12.12
09:34
(24) Не помню, где уже, но то ли список, то ли массив не работал у меня при передаче в запрос.
Что-то одно из двух работало....
26 Cunni
 
04.12.12
09:35
(5) Он же украл консоль запросов и отладчик?
27 pessok
 
04.12.12
09:40
(25) массив точно работает, а СЗ я даже не пробовал, негуманно как-то
28 Alexey_AA
 
04.12.12
09:42
(24) пытался массивом,1с ругалась

вообщепроблема у меня оказалась надуманная, все работает. совсем вылетело из головы что у меня копия базы и много данных неактуальных