Имя: Пароль:
1C
1С v8
Удаление своих записей регистра сведений
0 kogotaz
 
04.05.26
16:12
На всякий случай: конфигурация нетиповая, УФ.

Есть регистр сведений, регистратору не подчинен. Доступ к записям разграничивается RLS. Пишу серверную процедуру, которая вызывается пользователем. Суть - чтобы пользователь удалил все "свои" записи (которые ему доступны).

Код такой, и вроде бы работает:

Выборка = РегистрыСведений.НазваниеРегистраСведений.Выбрать();
Пока Выборка.Следующий() Цикл
    Выборка.ПолучитьМенеджерЗаписи().Удалить();
КонецЦикла;

Но работает только в случае, если в регистре нет "чужих" записей. Если же есть:

Ошибка при вызове метода контекста (Следующий)
Причина: У пользователя недостаточно прав на исполнение операции над базой данных.
1 Radion
 
04.05.26
16:15
(0) может через запрос проще "ВЫБРАТЬ РАЗРЕШЕННЫЕ"
2 X Leshiy
 
04.05.26
16:15
(1) Опередил)
3 paramedic
 
04.05.26
16:16
Делайте выборку запросом с инструкцией РАЗРЕШЕННЫЕ (более правильно)
Ну или обертывайте удаление в Попытку (по тупому).
4 kogotaz
 
04.05.26
16:28
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ РегистрСведений.НазваниеРегистраСведений";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    Выборка.ПолучитьМенеджерЗаписи().Удалить();
КонецЦикла;

Метод объекта не обнаружен (ПолучитьМенеджерЗаписи)
5 kogotaz
 
04.05.26
16:36
Что тут вместо менеджера записи использовать?
6 paramedic
 
04.05.26
16:36
(4) Естественно. Откуда в выборке запроса менеджер записи.
Вы создаете менеджер записи, заносите в него измерения и удаляете.
7 kogotaz
 
04.05.26
16:39
И еще вопрос, лучше ВЫБРАТЬ РАЗРЕШЕННЫЕ или писать условием?
8 paramedic
 
04.05.26
16:40
(7) Если у вас RLS, то РАЗРЕШЕННЫЕ.
9 kogotaz
 
04.05.26
16:44
(8) Спасибо.
10 timurhv
 
04.05.26
16:55
(0) можно случайно не ту роль дать пользователю и весь регистр грохнет? :)
11 kogotaz
 
04.05.26
17:23
И всё-таки не могу понять, что делать после запроса...
12 Волшебник
 
04.05.26
17:24
(11) Вам ещё рано удалять записи из регистра.
13 timurhv
 
04.05.26
17:30
(11) попробуйте сразу новомодный способ
https://infostart.ru/1c/articles/2508120/
14 kogotaz
 
04.05.26
17:49
(13) Работает. Но код дурацкий какой-то.
15 timurhv
 
04.05.26
18:00
(14) Можно так:

УдаляемыеЗаписи = Запрос.Выполнить().Выгрузить();
Если НЕ УдаляемыеЗаписи.Количество() = 0 Тогда
    НаборЗаписей = РегистрыСведений.НазваниеРегистраСведений.СоздатьНаборЗаписей();
    НаборЗаписей.Загрузить(УдаляемыеЗаписи);
    НаборЗаписей.Записать(РежимЗамещения.Удаление);
КонецЕсли;
16 Волшебник
 
04.05.26
18:06
(15) это шутка?
17 timurhv
 
04.05.26
18:10
(16) нет, новый способ удаления из регистров, чтобы не выполнять в цикле. Регистр в (0) независимый, поэтому РасширенныеРежимыЗамещения можно не указывать

https://wonderland.v8.1c.ru/blog/novye-rezhimy-zapisi-podchinennykh-registrov-svedeniy-i-registrov-nakopleniya/
18 kogotaz
 
04.05.26
18:32
(15) Для справки. Не работает. Ошибка при вызове метода контекста (Загрузить) - Несоответствие типов (параметр номер '1').
19 timurhv
 
04.05.26
18:42
(18) УдаляемыеЗаписи - массив чтоли?
20 kogotaz
 
04.05.26
18:48
(19) Вот код.

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ РегистрСведений.НазваниеРегистраСведений";
УдаляемыеЗаписи = Запрос.Выполнить().Выбрать();
НаборЗаписей = РегистрыСведений.НазваниеРегистраСведений.СоздатьНаборЗаписей();
НаборЗаписей.Загрузить(УдаляемыеЗаписи);
НаборЗаписей.Записать(РежимЗамещения.Удаление);
21 X Leshiy
 
04.05.26
18:49
(20) рукалицо.jpg
22 X Leshiy
 
04.05.26
18:50
Пытаться загрузить выборку это пять)

Правильно было в (12) сказано)
23 kogotaz
 
04.05.26
18:51
Точно. В (15) же выгрузить...
AdBlock убивает бесплатный контент. 1Сергей