Имя: Пароль:
1C
1С v8
Ограничение на 256 таблиц.
0 palm1c
 
12.12.11
13:33
Добрый день.

Есть база УТП.
Есть пользователь с ограничением прав на уровне записей.
В справочнике Контрагенты он нажимает перейти - документы по контрагенту, и вываливается ошибка о том, что построенный запрос к субд использует больше 256 таблиц.

В конфигуратор не приглашает при этой ошибке. Значит, запрос строился платформой, как не?

В общем, вопрос такой: Где мне нужно оптимизировать запрос, (в роли, не?) и вообще, возможно ли это.

Спасибо.
1 palm1c
 
12.12.11
13:33
Извините за сумбурность.
2 kaiiii
 
12.12.11
13:35
Переходи на MS SQL Server 2008. Там нет ограничения на 256 таблиц.
3 palm1c
 
12.12.11
13:39
(2) Хочу победить без перехода (пока что).
4 palm1c
 
12.12.11
13:42
(2) Я передумал. Мне нужно рассмотреть все возможные варианты, и выбрать из них подходящий.
Вопрос: 1с 7.7 работает с 2008 SQL?
5 skunk
 
12.12.11
13:42
7.7 работает
6 NcSteel
 
12.12.11
13:43
Но с хитростями.
7 skunk
 
12.12.11
13:47
там все хитрости задать правильный вопрос гуглу

зы: вот только как утп из сабжа связана с клюшками
8 ice777
 
12.12.11
13:47
(4) переходи с 77 на 82. Чего уж мелочиться ;)
9 palm1c
 
12.12.11
13:57
В общем, баз на сервере крутится немало, есть и 7.7, есть и 8.2.

Насчет перехода - как раз в процессе.
Какое-то время крутиться будет и 7.7 и 8.2 параллельно.

Каким образом ещё решается проблема (0)?
10 Живой Ископаемый
 
12.12.11
13:59
для 8.2 используется одна СУБД, для 77 - другая.
11 palm1c
 
12.12.11
14:03
(10) Как вариант.

Вопрос вот в чем: решается ли вопрос не переходя на другую СУБД?
12 el-gamberro
 
12.12.11
14:04
(0) Проверь выборку и соединения в запросе по составным типам.
К примеру если ты выбираешь из регНакопления Регистратор а у него реквизит дата. то это равно значное соединению с таблцимаи всех документов которыми может быть регистратор. хотя в запросе это всего лишь Регистратор.Дата
13 palm1c
 
12.12.11
14:07
(12) Насколько я понимаю, нужно проверять всё это в шаблоне ограничений у роли и править шаблон.
14 palm1c
 
12.12.11
14:11
ТекущаяТаблица
ИЗ
   #ТекущаяТаблица КАК ТекущаяТаблица
       ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
           СоставГруппы.Ссылка КАК ГруппаПользователей
       ИЗ
           Справочник.ГруппыПользователей.ПользователиГруппы КАК СоставГруппы
       ГДЕ
           СоставГруппы.Пользователь = &ТекущийПользователь) КАК ГруппыПользователей
       ПО (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей)
ГДЕ
   (&ИспользоватьОграниченияПравДоступаНаУровнеЗаписей = ЛОЖЬ
           ИЛИ (НЕ 1 В
                   (ВЫБРАТЬ ПЕРВЫЕ 1
                       1 КАК ПолеОтбора
                   ИЗ
                       РегистрСведений.НазначениеВидовОбъектовДоступа КАК НазначениеВидовОбъектовДоступа
                   ГДЕ
                       НазначениеВидовОбъектовДоступа.ГруппаПользователей = ГруппыПользователей.ГруппаПользователей
                       И ВЫБОР
                           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)
                               ТОГДА ВЫБОР
                                       КОГДА (НЕ 1 В
                                                   (ВЫБРАТЬ ПЕРВЫЕ 1
                                                       1
                                                   ИЗ
                                                       РегистрСведений.ОбъектыДоступаДокументов КАК ОбъектыДоступаДокументов ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
                                                           ПО
                                                               НастройкиПравДоступаПользователей.ОбъектДоступа = ОбъектыДоступаДокументов.ОбъектДоступа
                                                                   И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Организации)
                                                                   И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей
                                                                       ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
                                                   ГДЕ
                                                       ОбъектыДоступаДокументов.ДокументСсылка = ТекущаяТаблица.Ссылка
                                                       И ОбъектыДоступаДокументов.ОбъектДоступа ССЫЛКА Справочник.Организации
                                                       И НастройкиПравДоступаПользователей.ОбластьДанных ЕСТЬ NULL ))
                                           ТОГДА ИСТИНА
                                       ИНАЧЕ ЛОЖЬ
                                   КОНЕЦ
                           КОГДА НазначениеВидовОбъектовДоступа.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
                               ТОГДА ВЫБОР
                                       КОГДА (НЕ 1 В
                                                   (ВЫБРАТЬ ПЕРВЫЕ 1
                                                       1
                                                   ИЗ
                                                       РегистрСведений.ОбъектыДоступаДокументов КАК ОбъектыДоступаДокументов ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
                                                           ПО
                                                               Контрагенты.Ссылка = ОбъектыДоступаДокументов.ОбъектДоступа ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиПравДоступаПользователей КАК НастройкиПравДоступаПользователей
                                                           ПО
                                                               НастройкиПравДоступаПользователей.ОбъектДоступа = Контрагенты.ГруппаДоступаККонтрагенту
                                                                   И НастройкиПравДоступаПользователей.ВидОбъектаДоступа = ЗНАЧЕНИЕ(Перечисление.ВидыОбъектовДоступа.Контрагенты)
                                                                   И (НастройкиПравДоступаПользователей.Пользователь = НазначениеВидовОбъектовДоступа.ГруппаПользователей
                                                                       ИЛИ НастройкиПравДоступаПользователей.Пользователь = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи))
                                                   ГДЕ
                                                       ОбъектыДоступаДокументов.ДокументСсылка = ТекущаяТаблица.Ссылка
                                                       И НастройкиПравДоступаПользователей.ОбластьДанных ЕСТЬ NULL ))
                                           ТОГДА ИСТИНА
                                       ИНАЧЕ ЛОЖЬ
                                   КОНЕЦ
                           ИНАЧЕ ИСТИНА
                       КОНЕЦ = ЛОЖЬ))
                       И НЕ ГруппыПользователей.ГруппаПользователей ЕСТЬ NULL)
15 palm1c
 
12.12.11
14:13
Вот один из шаблонов.
16 palm1c
 
12.12.11
14:15
(12) Запроса этого? Наверное нет.
Как я понял, платформа берет критерий отбора, генерит запрос, берет этот шаблон, соединяет их вместе и делает запрос к СУБД.

Поправьте меня, если я ошибаюсь.

Спасибо.
17 palm1c
 
12.12.11
14:16
То есть ошибка вылазит, когда уже открыта форма критерия отбора.
18 palm1c
 
12.12.11
14:29
Вверх
19 Axel2009
 
12.12.11
14:35
без перехода не победишь.
20 el-gamberro
 
12.12.11
14:42
НастройкиПравДоступаПользователей.ОбъектДоступа - вот тут скорее и есть эти 256 таблиц

ВЫБРАТЬ РАЗЛИЧНЫЕ
ТИПЗНАЧЕНИЯ(НастройкиПравДоступаПользователей.ОбъектДоступа)
ИЗ НастройкиПравДоступаПользователей

что показывает?
21 palm1c
 
12.12.11
15:36
(20) Нет. Организации, ГруппыДоступаККонтрагентам
22 palm1c
 
12.12.11
15:38
(19) Инфа 100%?
23 Vladal
 
12.12.11
15:42
RLS имеет свой запрос по объектам, который описан в роли.
Запрос из модуля объединяется с запросом роли и получается суммарно больше 256 таблиц.

Попробуйте изменить уровень доступа пользователя.
Если проблема только у него, а он имеет ограничение по RLS, то при отключении ограничений RLS проблема должна исчезнуть.
24 palm1c
 
12.12.11
16:31
(23) Так и есть, только это ограничение должно быть.

Всем спасибо.
Закон Брукера: Даже маленькая практика стоит большой теории.