Имя: Пароль:
1C
1C 7.7
v7: Запрос не работает фильтр по группам
, ,
0 andrew231
 
11.07.13
14:08
Добрый день! Не могу понять почему не работает фильтр в запросе? Причем он не работает только если выбираешь группу?

Текст запроса:

ТЗ=СоздатьОбъект("ТаблицаЗначений");
   Запрос=СоздатьОбъект("Запрос");
   ДатаНач=Дата1-40;
   ТекстЗапроса = "
       |Период с ДатаНач;";
   ТекстЗапроса = ТекстЗапроса +
       "    Без итогов;
       |Контрагент = Регистр.ЗаказыНаПоставку.Контрагент;
       |ЗаказНаПоставку = Регистр.ЗаказыНаПоставку.ЗаказНаПоставку;
       |ТМЦ = Регистр.ЗаказыНаПоставку.ТМЦ;
       |ТМЦЗаказа = Регистр.ЗаказыНаПоставку.ТМЦЗаказа;
       |ДатаПрихода = Регистр.ЗаказыНаПоставку.ДатаПрихода;
       |Количество = Регистр.ЗаказыНаПоставку.Количество;
       |Функция КвоЗ_НачОст = НачОст(Количество);
       |Функция КвоЗ_Приход = Приход(Количество);
       |Функция КвоЗ_Расход = Расход(Количество);
       |Функция КвоЗ_КонОст = КонОст(Количество);
       |Группировка Контрагент без групп без упорядочивания;
       |Группировка ЗаказНаПоставку без упорядочивания;
       |Группировка ТМЦ без групп без упорядочивания;
       |Группировка ТМЦЗаказа без групп без упорядочивания;
       |Группировка ДатаПрихода без упорядочивания;
       |Группировка Документ;
       |";
       
       
   //Условия    
   Если ПустоеЗначение(ВыбКонтрагент)=0 Тогда
       ТекстЗапроса = ТекстЗапроса + "
           |    Условие(Контрагент = ВыбКонтрагент );
           |    ";    
   КонецЕсли;
   //Условия    
   Если ПустоеЗначение(ВыбТМЦ)=0 Тогда
       ТекстЗапроса = ТекстЗапроса + "
           |    Условие(ТМЦЗаказа = ВыбТМЦ);
           |    ";
   КонецЕсли;      
   
   Если (ПустоеЗначение(Дата1)=0) И (ПустоеЗначение(Дата2)=0) Тогда
       ТекстЗапроса = ТекстЗапроса + "
           |    Условие((ДатаПрихода >=Дата1) И (ДатаПрихода <=Дата2));
           |    ";
   КонецЕсли;

   //Выполнить запрос    
   Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
       Сообщить("Запрос не выполнен!");
   КонецЕсли;
   
   Запрос.Выгрузить(ТЗ);
   Возврат ТЗ;
1 Darych
 
11.07.13
14:09
а че ты группе приравниваешь...
2 andrew231
 
11.07.13
14:10
(1) ну мне нужно вывести все ТМЦ в этой группе
3 vladko
 
11.07.13
14:11
для группы надо в условии использовать не "=", а "В"
4 andrew231
 
11.07.13
14:12
(3)  Условие(ТМЦЗаказа в ВыбТМЦ)?
5 Морозов Александр
 
11.07.13
14:12
группы не пишутся в регистры
6 vladko
 
11.07.13
14:12
(4) да, попробуй
7 Морозов Александр
 
11.07.13
14:12
(3) да прям...
8 andrew231
 
11.07.13
14:14
пробую...
9 vladko
 
11.07.13
14:14
Если ПустоеЗначение(ВыбТМЦ)=0 Тогда
Если ВыбТМЦ.ЭтоГруппа() = 1 Тогда
       ТекстЗапроса = ТекстЗапроса + "
           |    Условие(ТМЦЗаказа В ВыбТМЦ);
           |    ";
иначе
ТекстЗапроса = ТекстЗапроса + "
           |    Условие(ТМЦЗаказа = ВыбТМЦ);
           |    ";
КонецЕсли;
КонецЕсли;
10 andrew231
 
11.07.13
14:15
(9) спасибо ;) я уже написал. уже отчет формируется. тяжеленький он у меня получился.
11 andrew231
 
11.07.13
14:16
жду рез-тат
12 Морозов Александр
 
11.07.13
14:16
ниче не будет
13 1Сергей
 
11.07.13
14:16
(9) это лишнее
14 andrew231
 
11.07.13
14:17
(12) верно. как быть то?
15 vladko
 
11.07.13
14:18
по идее
ТекстЗапроса = ТекстЗапроса + "
           |    Условие(ТМЦЗаказа В ВыбТМЦ);
           |    ";
даже если не группа выбрана, то прокатывает
16 vladko
 
11.07.13
14:18
(14) он имел в виду (15)
17 andrew231
 
11.07.13
14:20
(15) и (9) не работает. не пойму почему?
18 andrew231
 
11.07.13
14:21
0 строк в результате запроса!
19 1Сергей
 
11.07.13
14:22
(18) значит нет данных удовлетворяющим условиям запроса
20 Darych
 
11.07.13
14:22
выбтмц
21 Морозов Александр
 
11.07.13
14:22
(15)  буква "в" в запросе предполагает что в данном случае "ВыбТМЦ" это подмножество значений... и просто проверяет есть ли "ТМЦЗаказа"  в этом списке... но никак не группу справочника
22 Морозов Александр
 
11.07.13
14:24
Если ПустоеЗначение(ВыбТМЦ)=0 Тогда
Если ВыбТМЦ.ЭтоГруппа() = 1 Тогда
       ТекстЗапроса = ТекстЗапроса + "
           |    Условие(ТМЦЗаказа.Родитель = ВыбТМЦ);
           |    ";
иначе
ТекстЗапроса = ТекстЗапроса + "
           |    Условие(ТМЦЗаказа = ВыбТМЦ);
           |    ";
КонецЕсли;
КонецЕсли;
23 Морозов Александр
 
11.07.13
14:25
и то если всего 1 уровень групп
24 1Сергей
 
11.07.13
14:25
(21) Да ты что??? А документацию читать не пробовал?
25 Морозов Александр
 
11.07.13
14:25
(24)да... и че там
26 Морозов Александр
 
11.07.13
14:25
?
27 viktor_vv
 
11.07.13
14:26
(21) Всю жизнь оно работало с иерархической проверкой вхождения, а тут вдруг бац, и нет.
28 Морозов Александр
 
11.07.13
14:26
ну хз..
29 viktor_vv
 
11.07.13
14:27
Если на принадлежность проверяется значение типа элемент справочника, то проверка выполняется с учетом его возможного вхождения в группу справочника.
30 andrew231
 
11.07.13
14:31
Группа1
НОМ1
НОМ2
Группа2
НОМ3
НОМ4
Группа3
 Ном4
 Ном5
 Ном6


Вот я выбираю группу 3 и не получаю ничего. Как получить:

ном4
ном5
ном6
31 viktor_vv
 
11.07.13
14:31
Автор, убери это условие,

      ТекстЗапроса = ТекстЗапроса + "
           |    Условие((ДатаПрихода >=Дата1) И (ДатаПрихода <=Дата2));
           |    ";


результат выводится ?
32 andrew231
 
11.07.13
14:31
ща...
33 andrew231
 
11.07.13
14:34
нет не выводится...
34 Морозов Александр
 
11.07.13
14:35
слушай точно...работает. чет забывать стал семерку
35 1Сергей
 
11.07.13
14:35
(33) другие условия отключи
36 1Сергей
 
11.07.13
14:36
имхается мне, что ты не там смотришь
37 viktor_vv
 
11.07.13
14:36
Значит ты выбираешь группу, по которой нет данных в регистре.

Убери "без групп" у ТМЦЗаказа и посмотри какие группы тебе выведет без условия по ТМЦ, их и выбирай.
38 andrew231
 
11.07.13
14:43
я приведу пример по (30) :

допустим я провел документ у которого в ТЧ ном4, ном5, ном6 - они все принадлежат группе "группа3"

Теперь мне нужно в отчете сделать фильтр ВыбТМЦ="Группа3" и отчет должен выдать

ном4
ном5
ном6

он ничего не выдает, но если я выбираю, например, ном4 - отчет выдает ном4.
39 andrew231
 
11.07.13
14:45
(38) в регистре ном4, ном5, ном6 записана...
40 viktor_vv
 
11.07.13
14:46
Ты не путаешь ТМЦ и ТМЦЗаказа ?
41 andrew231
 
11.07.13
14:46
нет!
42 viktor_vv
 
11.07.13
14:47
И это у тебя все измерения или может ТМЦЗаказа реквизит ?
43 1Сергей
 
11.07.13
14:49
(41) покажи текст обработки после внесения поправки.
И ещё. Мне кажется, что ты смотришь не там, где надо. Записываешь обработку в одном месте, а открываешь из другого, как вариант
44 viktor_vv
 
11.07.13
14:50
И это, а где ты смотришь результат ?
Вставь

   Запрос.Выгрузить(ТЗ);
ТЗ.ВыбратьСтроку() ;
   Возврат ТЗ;
45 viktor_vv
 
11.07.13
14:50
(43) +1.
46 Darych
 
11.07.13
14:51
(44) возврат-то как изврат?)
47 viktor_vv
 
11.07.13
14:52
(46) Ну это у него так было, может он вывод в другой процедуре делает, зачем через ТЗ не знаю.
48 andrew231
 
11.07.13
14:59
(42) Измерение
(43) Какой поправки, здесь много вариантов предложили. фильтры все я отключил, хотя и с ними все работало. Эта процедура формирует данные и возвращает ТЗ в процедуру которая их обрабатывает. Но что обрабатывать когда ТЗ.КоличествоСтрок()=0 в результате запроса? Проблема именно в том что запрос не тянет данные по указанному условию.

(44) результат смотрю в отладчике. 0 строк. структура ТЗ согласно запросу прорисовалась а данных нет.
49 1Сергей
 
11.07.13
15:01
тебе достаточно заменить один символ.

   Если ПустоеЗначение(ВыбТМЦ)=0 Тогда
       ТекстЗапроса = ТекстЗапроса + "
           //|    Условие(ТМЦЗаказа = ВыбТМЦ);
           |    Условие(ТМЦЗаказа В ВыбТМЦ);
           |    ";
   КонецЕсли;
50 Ёпрст
 
11.07.13
15:11
Покажи, как ты определяешь ВыбТМЦ в коде.
51 Ёпрст
 
11.07.13
15:11
Если че, .ТекущийЭлемент()
52 andrew231
 
11.07.13
15:13
(50) ВыбТМЦ - это элемент диалога ;)

(49) проблема решена! сам не знаю как (сделал так как в (49), хотя так я уже делал и оно не работало, странно) спасибо всем за помощь.

п.с. скорее всего проблема что то с датами не так, ну буду ковырять
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший