Имя: Пароль:
1C
1С v8
Ошибка при удалении элемента справочника
0 Коротков
 
13.08.16
09:35
Если в конфигурации существует регистр сведений с ведущим измерением с типом ЛюбаяСсылка или СправочникСсылка, то для удаления любого элемента любого справочника нужны права на редактирование этого регистра.

Иначе ругается на "Недостаточно прав".

Это баг или фича?
1 Горогуля
 
13.08.16
09:36
так надо
2 Коротков
 
13.08.16
09:36
Зачем?
3 wertyu
 
13.08.16
09:39
чтобы битых ссылок не было
4 RomanYS
 
13.08.16
09:39
(0) редактирование? прав на запись точно не достаточно?
5 Горогуля
 
13.08.16
09:40
(2) для того, чтобы удаление элемента справочника влекло за собой удаление соответствующих записей регистра, Ватсон
6 Коротков
 
13.08.16
09:43
В регистре нет записей вообще. Никаких.
Причем здесь битые ссылки?
7 wertyu
 
13.08.16
09:43
(6) ну и что?
8 Коротков
 
13.08.16
09:44
(4) Наверное и на изменение достаточно, не проверял
9 wertyu
 
13.08.16
09:45
(8) и итоги, если периодический
10 Коротков
 
13.08.16
09:48
(7) Нелогично и избыточно. Если бы существовали записи регистра с измерениями, ссылающимися на удаляемый элемент справочник, то подобное ограничение по правам выглядело бы вполне оправданным.
11 RomanYS
 
13.08.16
09:52
(10) А как узнать, есть ли записи, если у тебя прав нет?
12 wertyu
 
13.08.16
09:52
(10) как раз логично, и вообще зачем давать права на интерактивное удаление?
13 Коротков
 
13.08.16
09:56
(11) Ну на чтение регистра права могут быть. Какое отношение вообще это имеет к вопросу?

(12) Права на интерактивное удаление конечно не нужны в большинстве случаев, согласен. Вопрос был чисто теоретический, почему-то раньше не сталкивался с таким поведением.

Т.е. это все таки не баг, а фича, хоть и с малопонятной мне логикой.
14 RomanYS
 
13.08.16
10:01
(13) всё здесь логично.

При необходимости есть способы обойти эти ограничения: привилегированный режим, режим загрузки.
15 Коротков
 
13.08.16
10:07
(14) Нелогично. Зачем проверять права на запись в таблицу регистра, если фактически апдейта этой таблицы не произойдет?
16 Горогуля
 
13.08.16
10:10
(15) а зачем проверять, произойдёт или не произойдёт?
17 Коротков
 
13.08.16
10:13
(16) Ну если апдейта таблицы регистра не будет, то и права на этот регистр проверять незачем -> можно спокойно удалять элемент справочника.
18 Коротков
 
13.08.16
10:13
Так было бы логичней
19 Коротков
 
13.08.16
10:14
Налицо избыточное ограничение
20 Горогуля
 
13.08.16
10:15
(17) представь себе 800 регистров, в каждом по 200 ведущих измерений типа ссылка на твой справочник...
21 Коротков
 
13.08.16
10:16
(20) Утрируешь, в реальности такие конифгурации не встречаются
22 Горогуля
 
13.08.16
10:18
(21) утрирую. в педагогических целях
23 Коротков
 
13.08.16
10:20
Т.е., как я понимаю, девелоперы 1С исходили из того, что "проверять на запись долго, давайте сперва тупо проверим по правам и запретим, если что"
24 Горогуля
 
13.08.16
10:21
у девелоперов и спроси. я б разбираться не стал, что там в базе уже понаписано
25 Коротков
 
13.08.16
10:26
Забавно, что хотя процедуры ПередЗаписью и ПриЗаписи модуля набора записей такого регистра при удалении элемента справочника не вызываются - тем не менее, модуль компилируется.
Т.е., если в модуль засунуть синтаксический мусор, то при попытке удалении элемента справочника система ругается и тупо завершает работу.
26 RomanYS
 
13.08.16
10:28
(23) я так понимаю, идёт тупая перезапись пустого набора. На этом у тебя и вылетает. Чтения и проверок не происходит.
27 Коротков
 
13.08.16
10:28
(26) Нет записи набора, проверял
28 RomanYS
 
13.08.16
10:31
(27) а я проверил, у меня передЗаписью остановилось (8.3.6)
29 Коротков
 
13.08.16
10:35
(28) Любопытно, я тестил на 8.3.8.1747.

Проверю еще раз.
30 Коротков
 
13.08.16
10:40
Нет, на ПередЗаписью не останавливается
31 Горогуля
 
13.08.16
10:46
до удаления: https://i.imgur.com/ScI3my8.png
после: https://i.imgur.com/XlNinKH.png
модуль НЗ:
Процедура ПередЗаписью(Отказ, Замещение)
    Сообщить("да!");
КонецПроцедуры
32 Горогуля
 
13.08.16
10:47
1С:Предприятие 8.3 (8.3.8.1747)
33 RomanYS
 
13.08.16
10:50
34 Коротков
 
13.08.16
10:57
Ага, понял в чем разница. Вы УДАЛЯЕТЕ элемент справочника, т.е. права на запись регистра есть. А я ПЫТАЮСЬ удалить без прав на регистр - в этом случае модуль набора записей хоть и компилируется, но не вызывается.
35 Горогуля
 
13.08.16
10:58
а чего там вызывать без прав?
36 Коротков
 
13.08.16
11:06
Все, теперь уложилось в голове. Действительно, независимо от наличия записей в регистре, ссылающихся на на наш справочник, запись набора происходит в любом случае. Отсюда и трабла с правами.

Только, имхо, это ведь совсем неправильно. Зачем в данном случае записывать пустой набор? Только лишний оверхед.
37 Mauser
 
13.08.16
11:45
(36) Потому что, чтобы узнать что писать не надо - надо прочитать. Что тоже оверхед, так как удаление существующих данных происходит куда чаще, чем несуществующих.