Имя: Пароль:
1C
1С v8
Настройка РЛС
,
0 Садовник
 
03.08.17
12:19
Подскажите как правильно настраивать РЛС по табличным частям. В типовых конфигурациях и описаниях на ИТС указано, что делается это через связь по ссылке ТЧ и ТекущейТаблицей, но объясню свой вопрос:

Я настраиваю запрет доступа по выбранным подразделениям. Т.е. если у пользователя стоит запрет на определенное подразделение (именно в использовании в конкретном документе, а не вообще), то он не должен ни ввести новый, ни исправить старый документ, если в нем было (будет) хоть в одной строке указано запретное подразделение.

При указанном способе происходит проверка не ТекущейТаблицы, а именно ССЫЛКИ на табличную часть. Если происходит ввод нового документа, то временная ссылка уже существует и РЛС отработает правильно. А вот при изменении существующего документа ограничения РЛС встраиваются в запрос на изменение (Update) к субд (мониторю профайлером). Т.е. изменения ссылки не происходит.

Получается, что пользователю запрещено отредактировать существующий документ с запрещенным подразделением (это хорошо). НО! Разрешается в существующем документе с разрешенными подразделениями поменять подразделение на запрещенное и провести. И в этом случае РЛС будет молчать.
1 Садовник
 
03.08.17
16:02
есть предложения?
2 Михаил Козлов
 
03.08.17
16:20
" НО! Разрешается в существующем документе с разрешенными подразделениями поменять подразделение на запрещенное" - дает выбрать запрещенное? РЛС на справочник подразделений стоит?
3 _Batoo
 
03.08.17
16:48
(2)

"(именно в использовании в конкретном документе, а не вообще)"

(0)

Добавь РЛС на Добавление, Изменение.
4 Садовник
 
04.08.17
07:24
(2) Вам правильно ответили в (3). На справочник полный доступ, т.к. эти подразделения пользователь может использовать в других документах.


(3) Так у меня и стоит РЛС на добавление и изменение, причем одинаковое. С добавлением все отлично, а вот с изменением нет. На чтение доступ полный.

P.S. Если вдруг это поможет делу, то могу привести код ограничения доступа.
5 DmitrO
 
04.08.17
09:13
>>Получается, что пользователю запрещено отредактировать существующий документ с запрещенным подразделением (это хорошо). НО! Разрешается в существующем документе с разрешенными подразделениями поменять подразделение на запрещенное и провести. И в этом случае РЛС будет молчать.

Что за домыслы?
При изменении проверка по РЛС делается дважды, до записи и после записи. Так что все будет будет работать правильно.
6 Садовник
 
04.08.17
09:30
(5) это не домыслы
В профайлере смотрел. При изменении объекта к субд отправляется только один запрос на update, в котором присутствует проверка ссылки и текущего объекта (#ТекущаяТаблица). Если настраивать подобное ограничение, но на реквизит шапки, там можно поставить условие ТекущаяТаблица.Подразделение - это как раз и будет проверка "Объекта", т.е. тех данных, которые будут "после записи".

Т.е. с реквизитом шапки все отлично работает: действует запрет и на изменение запрещенного документа и на установку в разрешенном документе запрещенного подразделения.
7 Dotoshin
 
04.08.17
09:43
(6) Ну а если не в профайлере смотреть, а в 1с? Ну то есть зайли под пользователем, у которого есть ограничение по подразделениям и попробовать выбрать в существующем документе "запрещенное" подразделение. Что при этом получится?
8 Dotoshin
 
04.08.17
09:43
зайли=зайти
9 Садовник
 
04.08.17
10:02
(7) так я и тестировал до того как полез в профайлер)) На выбор запрета нет, должно сработать при проведении (изменении). Но оно не работает.

На всякий случай приведу тексты запросов.
Ограничение по ТЧ (не работает как надо)

ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица
ГДЕ НЕ 1 В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    1
                ИЗ
                    Документ.ПлатежноеПоручениеИсходящее.РасшифровкаПлатежа КАК ТабличнаяЧастьДокумента ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователейКОбъектам КАК ПраваДоступаПользователейКОбъектам
                        ПО
                            ПраваДоступаПользователейКОбъектам.ОбъектДоступа = ТабличнаяЧастьДокумента.ЦентрЗатрат
                                И ПраваДоступаПользователейКОбъектам.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОграниченияПравДоступа.ПодразделенияПлатежныеДокументыЗапрет)
                                И ПраваДоступаПользователейКОбъектам.Пользователь В (&ГруппыТекущегоПользователя)
                                И ПраваДоступаПользователейКОбъектам.Чтение
                ГДЕ
                    ТекущаяТаблица.Ссылка = ТабличнаяЧастьДокумента.Ссылка)


Ограничение по шапке (все отлично работает).

ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПраваДоступаПользователейКОбъектам КАК ПраваДоступаПользователейКОбъектам
ПО
ПраваДоступаПользователейКОбъектам.ОбъектДоступа = ТекущаяТаблица.Подразделение
                                И ПраваДоступаПользователейКОбъектам.ОбластьДанных = ЗНАЧЕНИЕ(Перечисление.ОбластиДанныхОграниченияПравДоступа.ПодразделенияПлатежныеДокументыЗапрет)
                                И ПраваДоступаПользователейКОбъектам.Пользователь В (&ГруппыТекущегоПользователя)
                                И ПраваДоступаПользователейКОбъектам.Чтение
ГДЕ ПраваДоступаПользователейКОбъектам.ОбъектДоступа Есть Null
10 Садовник
 
04.08.17
10:05
(9) "Центр затрат" имеет составной тип, среди которых есть тип Справочник.Подразделения как и реквизит "Подразделение". Это на всякий случай сообщаю.
11 DmitrO
 
04.08.17
10:40
(6)если хотите сказать, что в момент записи шапки и проверки по РЛС ТЧ еще не записана и содержит старые данные, то это действительно так. Однако кроме запроса update, далее, после записи ТЧ еще идет запрос select, который и проверяет, только что записанный объект вцелом.

У меня в базе подобные ограничения работают как надо.
12 Садовник
 
04.08.17
10:43
(11) Можете прислать текст вашего ограничения?
Мне именно и хочется понять где у меня затык.
13 DmitrO
 
04.08.17
10:45
(9)>>И ПраваДоступаПользователейКОбъектам.Чтение

мы ведь вроде изменения проверяем?
14 Садовник
 
04.08.17
10:50
(13) Да, всё правильно. Просто для теста я решил привязаться именно к этому полю регистра сведений, т.к. ранее подобное же ограничение настраивал для чтения, чтобы убедиться, что оно работает. Суть же от этого не меняется.
15 DmitrO
 
04.08.17
11:22
(9)предлагаю поменять условие на такое:
ТекущаяТаблица ИЗ #ТекущаяТаблица КАК ТекущаяТаблица
ГДЕ 1 НЕ В
...
16 Садовник
 
04.08.17
12:35
(15) Не помогло(
Можете всё таки показать часть своего кода по ограничениям на ТЧ?
17 Mkamha
 
04.08.17
12:56
(16), на ограничение ТЧ в документах не получится сделать ограничение прав доступа красиво, чтобы пользователь не видел закрытые записи, а при записи объекта не было исключения на возможность изменения.
Как вариант: вместо табличной части документов - использовать регистр сведений, при открытии, считывать записи (считаются уже те, которые разрешены), при записи записывать измененные.
Этот вариант не для типовых конф.
18 Садовник
 
04.08.17
13:25
(17) а мне и не надо, чтобы еще и записи скрывались. Пусть смотрит всё.

Просто у нас один отдел не хочет, чтобы другой отдел исправлял документы так, что это может повлиять на подчиненные подразделения первого отдела.

А смотреть пожалуйста))

(11) Вы меня натолкнули на мысль по поводу select'a. Решил для простоты просто проверять запись документа (без проведения). Зашел в разрешенный документ и поменял подразделение.

Update отработал. Дальше пошло

DELETE FROM _Document402_VT9343
FROM
_Document402_VT9343 WITH(REPEATABLEREAD)
WHERE
_Document402_VT9343._Document402_IDRRef = 0x8aca441ea161d8bf11e777862b109596

INSERT INTO _Document402_VT9343 WITH(REPEATABLEREAD) VALUES(_Идентификаторы_)

INSERT INTO _Document402_VT9343 WITH(REPEATABLEREAD) VALUES(_Идентификаторы_)


Видимо замена значения (с разрешенного на запрещенное).

А потом несколько запросов по Select'у , но там нет упоминания о нужной мне ТЧ, т.е. как будто не проверяет больше.
19 Садовник
 
04.08.17
14:34
DmitrO, а вы уверены что в запросах select (после update), идет проверки только что записанного объекта?

Я там увидел только выборку полей шапки, где для ссылочных типов устанавливается связь с их таблицами (например с таблицей Справочник.Организации). И вот на эти таблицы в свою очередь накладываются ограничения, действующую именно на эту таблицу (РЛС к справочнику организации).

По анализу профайла накладывания ограничения на реквизит шапки документа, проверка и ссылки, и новых данных происходит в одном запросе - update.

Мне подсказали цитату из руководства разработчика :
?  Для операции изменения ограничению доступа к данным должен соответствовать объект как до изменения (чтобы объект был прочитан), так и после изменения (чтобы объект был записан).

Думаю это относится именно к проверке во время Update. Знающие люди пусть поправят.