Имя: Пароль:
1C
1С v8
Помогите плиз с запросом
0 Avalone2010
 
20.01.15
17:10
Здравствуйте. Помогите пожалуйста с запросом.Есть таблицы:
Номенклатура(реквизиты: ГруппаДоступа)
ГруппыДоступа
Пользователи
ДоступПоГруппам(реквизиты: Пользователь. Табличные части: Группы доступаб реквизит ТЧ ГруппаДоступа).

Для номенклатуры задаются группы доступа. Например
Сандали детские - ГД:Обувь
Шпатлевка - ГД:Стройматериалы

В справочнике ГруппыДоступа создается элемент: У Петрова есть доступ к ГД Обувь, у Иванова к Стройматериалам, а для Сидорова ничего не задаем, значит у него доступ есть ко всему.
Подскажите с запросом который бы выводил:
Иванов-стройматериалы
Петров - Обувь
Сидоров - Стройматериалы
Сидоров - Обувь
1 vicof
 
20.01.15
17:12
Соединение таблиц плюс проверка на пустое значение в соединении
2 Avalone2010
 
20.01.15
17:15
(1) если не трудно можно поподробнее?
3 vicof
 
20.01.15
17:19
Полное соединение по группе доступа, выбор когда группазаполнена тогда пользователи.группа = группы.ссылка иначе истина конец.
4 Avalone2010
 
20.01.15
17:26
(3) Не понимаю, вы уж извините. Подскажите что здесь исправит что бы заработало(запрос привел как пример что бы понимать о каких таблицах идет речь):
ВЫБРАТЬ
    ГруппыДоступа.Ссылка
ИЗ
    Справочник.НастройкаRLS.ГруппыДоступаНоменклатуры КАК НастройкаRLSГруппыДоступаНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
        ПО (НастройкаRLSГруппыДоступаНоменклатуры.ГруппаДоступаНоменклатуры = ГруппыДоступа.Ссылка)
            И (НастройкаRLSГруппыДоступаНоменклатуры.Ссылка.Пользователь = &Пользователь
5 vicof
 
20.01.15
17:28
И где тут "Есть таблицы:
Номенклатура(реквизиты: ГруппаДоступа)
ГруппыДоступа
Пользователи
ДоступПоГруппам(реквизиты: Пользователь. Табличные части: Группы доступаб реквизит ТЧ ГруппаДоступа). "?
6 Avalone2010
 
20.01.15
17:33
ну примерно название давал :) Извините, в след раз давать как есть. Решил с помощью временных таблиц:
ВЫБРАТЬ
    НастройкаRLSГруппыДоступаНоменклатуры.ГруппаДоступаНоменклатуры
ИЗ
    Справочник.НастройкаRLS.ГруппыДоступаНоменклатуры КАК НастройкаRLSГруппыДоступаНоменклатуры
ГДЕ
    НастройкаRLSГруппыДоступаНоменклатуры.Ссылка.Пользователь = &Пользователь

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ГруппыДоступа.Ссылка
ИЗ
    Справочник.ГруппыДоступа КАК ГруппыДоступа
ГДЕ
    НЕ 1 В
                (ВЫБРАТЬ
                    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ НаличиеограничениеПрав.Ссылка) КАК Ссылка
                ИЗ
                    (ВЫБРАТЬ ПЕРВЫЕ 1
                        НастройкаRLS.Ссылка КАК Ссылка
                    ИЗ
                        Справочник.НастройкаRLS КАК НастройкаRLS
                    ГДЕ
                        НастройкаRLS.Пользователь = &Пользователь) КАК НаличиеограничениеПрав)
7 Avalone2010
 
20.01.15
17:37
(6) Да, этот запрос выбирает доступные для пользователя группы доступа, по этим группам дальше фильтруется номенклатура.
2 + 2 = 3.9999999999999999999999999999999...