Имя: Пароль:
1C
1C 7.7
v7: Что-то с фильтром регистра
0 LOTOS2000
 
05.09.14
14:52
Не фильтруется регистр остатков. Где ошибка?

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "
    |Период с ВыбНачПериода по ВыбКонПериода;  
    |Товары = Регистр.Д.Товары;
    |Клиент = Регистр.Д.Клиенты;
    |Постав = Регистр.Д.Товары.Поставщик;
    |Кол    = Регистр.Д.Количество;
    |Функция ПрихКол  = Приход(Кол);
    |Функция РасхКол  = Расход(Кол);
    |Группировка Постав Без Групп;
    |";
    
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    
    РегД = СоздатьОбъект("Регистр.Д");
    
    Пока Запрос.Группировка(1) = 1 Цикл
        РегД.УстановитьЗначениеФильтра("Клиенты",Запрос.ЗначениеГруппировки(1),1);        
        
        РегД.ВыбратьДвижения(ВыбНачПериода,ВыбКонПериода);
        Пока РегД.ПолучитьДвижение() = 1 Цикл            
            Сообщить("А");        
        КонецЦикла;        
    КонецЦикла;
1 КонецЦикла
 
05.09.14
14:56
Запрос.Постав - а так?
2 КонецЦикла
 
05.09.14
14:56
Клиенты - это вот так измерение называется?
3 LOTOS2000
 
05.09.14
14:56
(1) Не помогло
4 LOTOS2000
 
05.09.14
14:57
(2) Тип справочник
5 КонецЦикла
 
05.09.14
14:59
В товаре не заполнен поставщик?
6 КонецЦикла
 
05.09.14
15:00
Запрос.Клиент - а так?
7 LOTOS2000
 
05.09.14
15:00
(5) Я вывалил запрос в ТЗ - поставщик присутствует.
8 LOTOS2000
 
05.09.14
15:01
(6) Ну так-то конечно замечательно :)
9 LOTOS2000
 
05.09.14
15:12
Дело в том, что Постав и Клиенты = один и тот же СПР.
Если выгрузить запрос в ТЗ, я получаю только ОДНУ колонку "Постав", а при таком коде:
Пока Запрос.Группировка(1) = 1 Цикл
    Сообщить(Запрос.Клиент);
КонецЦикла;
Получаю перебор всех клиентов от данных Постав(щиков)
10 LOTOS2000
 
05.09.14
15:27
Поясню снова - мне нужно из запроса вытащить "Постав" и воткнуть его в фильтр. В запросе "Постав" присутствует, но в фильтр никак не ложится. Бида :(
11 akaBrr
 
05.09.14
15:32
А смысл у регистра какой? Это остатки товаров или продажи?
12 akaBrr
 
05.09.14
15:33
+(11) судя по по приходу, остатки :)
13 akaBrr
 
05.09.14
15:35
Тогда в указанный период Постав не попали в Клиенты
14 palpetrovich
 
05.09.14
15:35
а группировка "через 3 точки" - это вообще комильфо?
15 akaBrr
 
05.09.14
15:37
(14) быстродействие товарища видно не интересует
16 palpetrovich
 
05.09.14
15:40
(15) тогда непонятно, должно работать. или автор чего-то недоговаривает :)
17 LOTOS2000
 
05.09.14
15:44
(13) В ТЗ запроса "Постав" присутствуют! :)
(14) Не важно какого (на сегодняшний день) цвета кошка, ловящая мышей :)
(16) не попадает в фильтр хоть застрелись.
18 КонецЦикла
 
05.09.14
15:53
(8) Ну так сам проверь совпадение типов теперь и далее, чего ванговать
19 palpetrovich
 
05.09.14
15:55
(17) бог с ним. с фильтром, так что получается?
Пока Запрос.Группировка(1) = 1 Цикл
Сообщить("Поставщик: "+Запрос.Постав);
20 LOTOS2000
 
05.09.14
15:57
(18) Тип един.
Забросил запрос в ТЗ, из ТЗ получаю "Постав", тыкаю в фильтр - выборка движений регистра не происходит. :(

(19) Так всё ОК  :)
21 LOTOS2000
 
05.09.14
15:58
(19) Меня именно процесс втыкания в фильтр заволновал
22 palpetrovich
 
05.09.14
15:59
(20) а так: Сообщить("Поставщик: "+Запрос.Постав+ "  "+ ТипЗначенияСтр(Запрос.Постав));
23 LOTOS2000
 
05.09.14
16:02
(22) Справочник
24 akaBrr
 
05.09.14
16:02
(17) Перефразирую: в указанный период поставщики не попадали в измерение Клиенты.
25 LOTOS2000
 
05.09.14
16:04
(24) В указанный период с измерением "Клиенты" и измерением "Товары" было движение. А "постав" - это не что иное, как реквизит элемента "Товары".
26 palpetrovich
 
05.09.14
16:06
я тут задумался а что это вообще за схема? Товар всегда только от одного поставщика? или для другого поствщика заводите ноый элемент номенклатуры?
27 КонецЦикла
 
05.09.14
16:06
(25) Теперь, внимание!
Где гарантия того, что клиент прошедший по регистру - это клиент в товаре?
Может в товарах нужно пошурудить, обновить там их?
28 palpetrovich
 
05.09.14
16:08
(27) думаю совсем необязательно Регистр.Д.Клиент = Регистр.Д.Товары.Поставщик
29 akaBrr
 
05.09.14
16:09
(27) я и пытаюсь это донести до ТС
30 LOTOS2000
 
05.09.14
16:10
(27) Вот пример:
измерение "Клиенты" - ООО Рога и копыта (им продали товар)
измерение "Товары" - Мороженое (от поставщика "ООО Вектор")
ресурс  "Количество" - 1 шт.

Теперь смотрим спр Товары - у элемента "Мороженое" есть рекв "Постав" (тип спр Клиенты) со значением ООО Вектор.
31 LOTOS2000
 
05.09.14
16:11
(28) в моём случае это один и тотже тип, но разные значения
32 LOTOS2000
 
05.09.14
16:11
В итоге мне нужно в фильтр воткнуть ООО Вектор.
33 palpetrovich
 
05.09.14
16:12
(30) так что, у всех товаров таки уникальные постащики?
34 LOTOS2000
 
05.09.14
16:13
(33) это влияет на данную проблему?
35 akaBrr
 
05.09.14
16:14
(30) сделай еще один шаг, ты почти у цели
36 LOTOS2000
 
05.09.14
16:15
(35) посмотри мой пост в (20) - скажи почему из ТЗ значение не попадает в фильтр?
37 palpetrovich
 
05.09.14
16:17
(34) нет, но интересно. Иеще интересно, сделай запрос типа
Вектор = ООО Вектор;
Клиент = Регистр.Д.Клиенты;
условие(Клиент = Вектор)
38 LOTOS2000
 
05.09.14
16:19
(37) поясни:
Вектор = ООО Вектор;
39 LOTOS2000
 
05.09.14
16:20
то есть, есть ли ООО Вектор в выборке?
40 akaBrr
 
05.09.14
16:20
(36)

измерение "Клиенты" - ООО Рога и копыта (им продали товар)
измерение "Товары" - Мороженое (от поставщика "ООО Вектор")
ресурс  "Количество" - 1 шт.

Вектор есть в измерении?
41 palpetrovich
 
05.09.14
16:20
(38) переменная Вектор = элементсправочник000Вектор
42 palpetrovich
 
05.09.14
16:22
(39) т.е присутсвовал-ли "ООО Вектор" вообще в измерении Клиент, по которому ты хочешь получить фильтр
43 LOTOS2000
 
05.09.14
16:22
(42) да есть!
44 palpetrovich
 
05.09.14
16:22
+42 за выбранный период
45 LOTOS2000
 
05.09.14
16:24
стоп.
есть только покупатель и товар
из выборки я чудесно получаю Вектора из товара.
46 LOTOS2000
 
05.09.14
16:25
иначе говоря, выполняется условие из поста (40)
47 LOTOS2000
 
05.09.14
16:25
Вектора в измерении нет!
48 palpetrovich
 
05.09.14
16:26
(46) иначе говоря, все правильно и никто не виноват :)
49 palpetrovich
 
05.09.14
16:28
+(48) поменяй в (0) строчку
РегД.ВыбратьДвижения(,ВыбКонПериода);
50 LOTOS2000
 
05.09.14
16:28
(49) а смысл?
51 palpetrovich
 
05.09.14
16:30
(50) та да, смысла нет. Честно говоря я не сильно понимаю и смысл отчета в (0) :)
52 LOTOS2000
 
05.09.14
16:31
(51) в двух словах: запросом получить список поставщиков за период, затем отобрать движения по ним.
53 palpetrovich
 
05.09.14
16:33
(52) дык, добавь в запрос
Док = Регистр.Д.ТекущийДокумент
и группировку по нему
54 LOTOS2000
 
05.09.14
16:36
(53) мне нужно именно через фильтр !  :)
просто такое желание :)
к запросу у меня нет претензий, я чудесно получаю ТЗ со значениями "Постав", но не могу понять, почему не происходит выборка регистра? Вот в чём проблема.
55 palpetrovich
 
05.09.14
16:37
(54) ну здра, я думал ты понял,  ну не было у тебя движений по измерению Клиент со значкением ООО Вектор
56 akaBrr
 
05.09.14
16:38
(54) это безнадежно, удаяюсь
57 LOTOS2000
 
05.09.14
16:40
Чёртова рекурсия! :)
Наверное это пятница, понял :)
58 КонецЦикла
 
05.09.14
16:51
(23) Ну так какого хрена втыкать в клиента поставщика?
Ставь нужные условия в запросе или иди к тому кто выдал задание и мучай его
59 КонецЦикла
 
05.09.14
16:52
В этом регистре нет измерения Поставщик?
60 LOTOS2000
 
05.09.14
16:58
(59) задача решена, сказывается усталость.
искал вектор там, где его быть не должно :)
61 КонецЦикла
 
05.09.14
16:59
Молодец

измерение "Клиенты" - ООО Рога и копыта (им продали товар)
измерение "Товары" - Мороженое (от поставщика "ООО Вектор")

Искать вектора сред рогов и копыт - это было феерично