Имя: Пароль:
1C
1С v8
Проверка на вхождение значения в таблицу
0 MAPATNK2
 
naïve
19.02.20
10:21
УПП 1.3
Прошу прощения за название, не знал как правильно написать. Суть в чем. Есть справочник пользователей.
Внутри есть таблица "Доступные склады". Хочу в подписке на событие проверять входит дли склад документа в список доступных складов для пользователя.
Но в чем проблема, у пользователя в таблице "Доступные склады" могут быть как и сами склады, так и папки. А ещё с логикой у меня проблемы. Написал простой запрос.
    Запрос = новый запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ПользователиДоступныеСклады.Склад
    |ИЗ
    |    Справочник.Пользователи.ДоступныеСклады КАК ПользователиДоступныеСклады
    |ГДЕ
    |    ПользователиДоступныеСклады.Склад В ИЕРАРХИИ(&СкладДокумента)
    |    И ПользователиДоступныеСклады.Ссылка = &ПользовСсылка";
    Запрос.УстановитьПараметр("СкладДокумента",Источник.Склад);
    Запрос.УстановитьПараметр("ПользовСсылка",ПользовательСсылка);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();

Но суть в том, что мне нужно проверять не вхождение складов пользователя в склад документа, а наоборот. Можете помочь с запросом. Допереть не могу.
1 MAPATNK2
 
naïve
19.02.20
10:25
Я хотел выгрузить во временную таблицу - таблицу справочника пользователи "Доступные склады", далее проверять склад документа на вхождение... но понял, что столкнулся с такой же проблемой. XD. Т.е. я понимаю, как мне проверить входят ли элементы таблицы "Доступные склады" в "Склад документа", а наоборот - Не понимаю....
2 dezss
 
19.02.20
10:26
Так в чем проблема?
&СкладДокумента В ИЕРАРХИИ(ПользователиДоступныеСклады.Склад)
3 MAPATNK2
 
naïve
19.02.20
10:28
(2) Не понял? Так разве можно? XD. Ну если можно, то проблема решена. Вы пример случайно не могли бы привести?
4 vicof
 
19.02.20
10:28
тебе ужепривели
5 MAPATNK2
 
naïve
19.02.20
10:29
(2) (4) У меня выдает ошибку
6 vicof
 
19.02.20
10:31
(5) исправь
7 MAPATNK2
 
naïve
19.02.20
10:31
(6) Неверные параметры "В ИЕРАРХИИ"
&СкладДокумента В ИЕРАРХИИ(ПользователиДоступныеСклады.Склад)
8 pechkin
 
19.02.20
10:35
сначала нужно развернуть все папки. есть разные способы.
ннапример выгрузить все занчения в массив и сдлать запрос по справочнику В ИЕРАРХИИ массив
9 MAPATNK2
 
naïve
19.02.20
10:38
(8) Т.е. способ выше не рабочий? Только раскрытием?
10 pechkin
 
19.02.20
10:39
ну сам же видишь что не рабочий
11 MAPATNK2
 
naïve
19.02.20
10:40
(10) Понял, спасибо, буду пробовать так.
12 MAPATNK2
 
naïve
19.02.20
11:29
(10) Спасибо за совет. Сделал так. работает отлично.

ТекушийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
    ПользовательСсылка = Справочники.Пользователи.НайтиПоКоду(СокрЛП(ТекушийПользователь));
    Таб = новый Массив;
    Таб = ПользовательСсылка.ДоступныеСклады.Выгрузить(,"Склад");
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Склады.Ссылка КАК Склад
    |ИЗ
    |    Справочник.Склады КАК Склады
    |ГДЕ
    |    Склады.Ссылка В ИЕРАРХИИ(&ТаблицаСкладов)
    |    И Склады.ЭтоГруппа = ЛОЖЬ
    |    И Склады.Ссылка = &СкладДокумента";
    Запрос.УстановитьПараметр("ТаблицаСкладов",Таб);
    Запрос.УстановитьПараметр("СкладДокумента",Источник.Склад);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
13 NeoVision
 
19.02.20
12:18
(0)
а так не проще?:
Запрос.Текст =
        "ВЫБРАТЬ
        |    &Склад
        |ИЗ
        |    Справочник.Пользователи КАК Пользователи
        |ГДЕ
        |    Пользователи.ДоступныеСклады.Склад = &Склад
        |    И Пользователи.Ссылка = &Пользователь";
14 dezss
 
19.02.20
12:18
Прикольно. Не знал, что так нельзя. Сам не пробовал.
(12) Тогда лучше заменить
Склады.Ссылка В ИЕРАРХИИ(&ТаблицаСкладов)
На что-то вроде
Склады.Ссылка В ИЕРАРХИИ(ВЫБРАТЬ
        ПользователиДоступныеСклады.Склад
    ИЗ
        Справочник.Пользователи.ДоступныеСклады КАК ПользователиДоступныеСклады
    ГДЕ
        ПользователиДоступныеСклады.Ссылка = &ПользовСсылка)
Что за один запрос к базе все отрабатывало. А то это ж подписка. Лучше б оптимизировать.
15 dezss
 
19.02.20
12:18
(13) В (0) написано, что там могут быть группы.
16 pechkin
 
19.02.20
12:20
(14) ветку не читал, срсзу писал?
17 dezss
 
19.02.20
12:36
(16) С чего так решил?
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.