Имя: Пароль:
1C
1С v8
Параметр виртуальной таблицы
,
0 deathogre
 
14.10.14
14:02
Здравствуйте. Можно ли в параметр вирт. таблицы засадить проверку принадлежности элемента справочника определенной группе?

    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                |    ТоварыНаСкладахОстатки.Склад,
                |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
                |    ТоварыНаСкладахОстатки.Характеристика,
                |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоУпаковок,
                |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество
                |ИЗ
                |    РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад, Номенклатура.Ссылка В ИЕРАРХИИ (&ГруппаНоменклатуры)) КАК ТоварыНаСкладахОстатки
                |    ГДЕ ТоварыНаСкладахОстатки.КоличествоОстаток > 0";

Данный код не работает
1 Kuein
 
14.10.14
14:05
Настоятельно рекомендую переписать вот это "&Дата, Склад = &Склад, Номенклатура.Ссылка В ИЕРАРХИИ (&ГруппаНоменклатуры)" на
"&Дата, Склад = &Склад И Номенклатура.Ссылка В ИЕРАРХИИ (&ГруппаНоменклатуры)"
2 deathogre
 
14.10.14
14:14
Запрос заработал. Но принадлежность не проверяет.
3 Peltzer
 
14.10.14
14:28
А зачем Номенклатура.Ссылка?
4 Мыш
 
14.10.14
14:28
А почему "Номенклатура.Ссылка", а не "Номенклатура"?
5 Peltzer
 
14.10.14
14:28
(4) Синхронненько
6 deathogre
 
14.10.14
14:29
Переделал без ссылки, все равно не отбирает :(
7 ssh2QQ6
 
14.10.14
14:33
(6) см (1). Запрос с синтаксической ошибкой.
8 deathogre
 
14.10.14
14:34
Да я уже сделал как (1)
9 Peltzer
 
14.10.14
14:36
У меня в консоли нормально так отбирает. Проверь, что ты параметр нужный передаёшь
10 deathogre
 
14.10.14
14:38
Свойство    Значение    Тип
ГруппаНоменклатуры    Растения    СправочникСсылка.Номенклатура
11 deathogre
 
14.10.14
14:38
Свойство           Значение Тип
ГруппаНоменклатуры Растения СправочникСсылка.Номенклатура
12 deathogre
 
14.10.14
14:39
Вроде нормальный параметр
13 Мыш
 
14.10.14
14:40
Смутно помнится, что не рекомендуется в условия виртуальных таблиц ставить "В ИЕРАРХИИ".
14 Ненавижу 1С
 
гуру
14.10.14
14:43
а ты параметр точно в запрос передаешь?
15 Крошка Ру
 
14.10.14
14:43
(11) А что значит "не отбирает". Пустой запрос или наоборот попадает всё?
(13) В ИЕРАРХИИ - это в принципе зло, но иногда необходимое.
В данном случае оно ни при чем
16 Kuein
 
14.10.14
14:45
1. Убираем условие ГДЕ. Запускаем запрос, смотрим результат.
Если "все еще не отбирает"
2. Проверяем как передаем параметр в Запрос. Желательно показать код.
Если "все еще не отбирает"
3. Проверяем есть ли вообще хоть что-нибудь в группе "Растения".
17 palpetrovich
 
14.10.14
14:46
(0) а зачем это: "ГДЕ ТоварыНаСкладахОстатки.КоличествоОстаток > 0" ?
18 deathogre
 
14.10.14
14:47
(15) Попадает все
(16) Вот я как раз хотел избежать ГДЕ, так как написано что параметры вирт. таблицы быстрее работают.
19 Kuein
 
14.10.14
14:47
(13) Это вроде бы к производительности запроса. У ТС другая проблема.
20 palpetrovich
 
14.10.14
14:50
(18) параметры как определяешь?
скопируй это в кончсоль запросов, проверь
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Номенклатура,      
    ТоварыНаСкладахОстатки.КоличествоОстаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(
            &Дата,
            Склад = &Склад
                И Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры)) КАК ТоварыНаСкладахОстатки
21 hhhh
 
14.10.14
14:51
(18) ну, показывайте как обрабатываете результат запроса. и установку параметров.
22 Крошка Ру
 
14.10.14
14:51
(17) Ну может отрицательные есть
23 deathogre
 
14.10.14
14:51
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                |    ТоварыНаСкладахОстатки.Склад,
                |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
                |    ТоварыНаСкладахОстатки.Характеристика,
                |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоУпаковок,
                |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество
                |ИЗ
                |    РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад И Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры)) КАК ТоварыНаСкладахОстатки
                |    ГДЕ ТоварыНаСкладахОстатки.КоличествоОстаток > 0";

    Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
    Запрос.УстановитьПараметр("Дата", Объект.Дата);
    Запрос.УстановитьПараметр("Склад", Объект.Склад);

    Результат = Запрос.Выполнить().Выгрузить();
    Объект.Товары.Загрузить(Результат);
24 Kuein
 
14.10.14
14:53
(18) "ГДЕ" в условия виртуальной таблицы не передается. Совсем.

Как передается параметр в запрос? *И откуда берется значение &ГруппаНоменклатуры?* И не является ли оно справочником "Группа Номенклатуры"?

Рекомендация: попробуйте писать запросы через конструктор запросов. Ошибки из (1) легко можно было бы избежать.
25 deathogre
 
14.10.14
14:56
ГДЕ я в параметры сувать и не собирался.
ГруппаНоменклатуры это реквизит документа на форме с типом СправочникСсылка.Номенклатура
26 Kuein
 
14.10.14
14:56
(25) Форма управляемая?
27 deathogre
 
14.10.14
14:57
да
28 palpetrovich
 
14.10.14
15:02
(25) ГруппаНоменклатуры "реквизит документа на форме". точно реквизит или наФорме?
... почему Объект.Склад, а ГруппаНоменклатуры без Объект? :)
29 deathogre
 
14.10.14
15:03
ГруппаНоменклатуры просто лежит на форме :)
30 palpetrovich
 
14.10.14
15:08
(29) а где запрос выпоняется? если в фоме - нафик Объект? а если нет - то "ГруппаНоменклатуры" просто так не увидишь
31 hhhh
 
14.10.14
15:13
(30) не, похоже на правду.

(29) а это всё на клиенте или на сервере происходит?
32 deathogre
 
14.10.14
15:15
Короче в консоли запрос отработал правильно. Видать неправильный параметр все таки передается
33 hhhh
 
14.10.14
15:17
может

Объект.Товары.Загрузить(Результат);

не работает. или форму обновить надо.

посмотрите отладчиком поле Результат.
34 palpetrovich
 
14.10.14
15:22
(31) запутал :)
35 Ник второй
 
14.10.14
15:22
(13) Надо крестится когда кажется.
36 Ник второй
 
14.10.14
15:27
(30) Ты видимо не знаешь упр формы, там объект нужен
37 Ник второй
 
14.10.14
15:28
(31) Как ты себе представляешь работу запроса на клиенте?
38 ЯЧайник
 
14.10.14
15:29
Отладчиком проходил? У тебя точно ГруппаНоменклатуры принимает необходимое значение?
39 palpetrovich
 
14.10.14
15:34
(36)  (27) пропустил, но это в данном случае - неважно, важно что ГруппаНоменклатуры, скорее всего, не "доходит" в нужном виде :)
40 deathogre
 
14.10.14
15:34
Отладчиком смотрел. Там точно ГруппаНоменклатуры имеет значение группы номенклатуры.
41 deathogre
 
14.10.14
15:35
Интересно почему в консоли работает, а в доке нет. Опять загадки природы :)
42 Ник второй
 
14.10.14
15:35
(41) потому что разные параметры запросов или данных в таблицах.
43 1dvd
 
14.10.14
15:37
(40) >> Там точно ГруппаНоменклатуры имеет значение группы номенклатуры.

А должна быть просто номенклатура
44 deathogre
 
14.10.14
15:39
(43) Не понял
45 1dvd
 
14.10.14
15:40
(44) ГруппыНоменклатуры и Номенклатура - разные справочники
46 deathogre
 
14.10.14
15:41
А нет, я имел ввиду что я выбираю группу в справочнике Номенклатуры
47 Ник второй
 
14.10.14
15:42
(46) То есть ты открыл в отладчике запрос и в коллекции параметры установлена нужная номенклатура?

давай скриншот
48 hhhh
 
14.10.14
15:46
(46) попробуй тупо

ДокументОбъект = РеквизитФормыВЗначение("ОБъект");

Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                |    ТоварыНаСкладахОстатки.Склад,
                |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
                |    ТоварыНаСкладахОстатки.Характеристика,
                |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоУпаковок,
                |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество
                |ИЗ
                |    РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад И Номенклатура В ИЕРАРХИИ (&ГруппаНоменклатуры)) КАК ТоварыНаСкладахОстатки
                |    ГДЕ ТоварыНаСкладахОстатки.КоличествоОстаток > 0";

    Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
    Запрос.УстановитьПараметр("Дата", Объект.Дата);
    Запрос.УстановитьПараметр("Склад", Объект.Склад);

    Результат = Запрос.Выполнить().Выгрузить();
    

ДокументОбъект.Товары.Загрузить(Результат);
ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
49 deathogre
 
14.10.14
15:47
Только что выяснил. Короче лол, все работает правильно, когда происходит Объект.Товары.Загрузить(Результат), тогда грузятся лишние значение. Вот это поворот! :)
50 deathogre
 
14.10.14
15:47
*лишние значения
51 Ник второй
 
14.10.14
15:48
(49) Что значит грузятся лишние значения? то все правильно, то не правильно, не понятно. Выражайся яснее.
52 deathogre
 
14.10.14
15:49
То есть, запрос отрабатывает полностью правильно с отборами, но когда происходит загрузка в таб часть документа, то докидываются результаты, как будто запрос отработал без отборов
53 1dvd
 
14.10.14
15:50
(52) а.. ну это фантомные данные. Всё нормально. Поставь свечку в церкви и всё пройдёт
54 deathogre
 
14.10.14
15:52
ну это ваще же жесть какая то
55 deathogre
 
14.10.14
15:55
Опытным путем выяснил что это происходит, после ЭтаФорма.Прочитать()
56 deathogre
 
14.10.14
15:56
А как тогда обновить данные на форме?
57 deathogre
 
14.10.14
16:05
Всем спасибо за беспокойство :) Решил проблему так: Элементы.Товары.Обновить(). Правда прикол с ЭтаФорма.Прочитать() не понял.
58 Мыш
 
14.10.14
16:13
(35) "Креститься" надо писать с мягким знаком.