Имя: Пароль:
1C
1С v8
Как программно удалить документ без полных прав?
, ,
0 Naivniy
 
06.12.13
11:33
Как программно удалить документ под пользователем без полных прав?

Пробовал использовать привилигированныйц режим:
УстановитьПривилегированныйРежим(Истина);
Док.Удалить();
УстановитьПривилегированныйРежим(Ложь);

Ошибка при вызове метода контекста (Удалить)
Док.Удалить();
по причине:
Нарушение прав доступа!
1 Cube
 
06.12.13
11:37
(0) УстановитьПривилегированныйРежим() во внешних обработках не фурычит...
2 Naivniy
 
06.12.13
11:38
(1) Это не внешняя обработка, Код отрабатывает в самописном документе.
4 Cube
 
06.12.13
11:40
(2) Значит вариант 2: клиент-сервер и код выполняется не на сервере.
5 FIXXXL
 
06.12.13
11:41
создай привилегированный модуль и там пиши код
6 Naivniy
 
06.12.13
11:45
(4) Верно. Клиент-серверный вариант. Выкидываю код в отдельную процедуру

&НаСервере
Процедура УдалениеДок(Док)        
    УстановитьПривилегированныйРежим(Истина);
    Док.Удалить();
    УстановитьПривилегированныйРежим(Ложь);      
КонецПроцедуры    

При открытии документа выдает следующее
Процедура или функция с указанным именем не определена (УдалениеДок)
<<?>>УдалениеДок(Док);
7 Cube
 
06.12.13
11:47
(6) А у тебя УФ, чтобы директивы компиляции юзать-то?
8 Naivniy
 
06.12.13
11:51
(7) А под обычными формами не работает разве?
9 Defender aka LINN
 
06.12.13
11:53
(2) В документе? Удаляется другой документ?
А можно целиком историю услышать?
10 Cube
 
06.12.13
11:54
(8) :))) Весело у вас там, я смотрю)
11 Wobland
 
06.12.13
11:56
(9) требование: в базе должен быть ровно один документ. что такого?
12 Godofsin
 
06.12.13
12:03
Как только появляется второй документ, он убивает первого, чтоб быть единственным. суровая правда жизни...
13 Naivniy
 
06.12.13
12:03
(9) Есть документ Транспортные расходы, При его проведении создается документ ПоступлениеТоваровУслуг. Если Транспортные расходы распровести, то ПоступлениеТоваровУслуг нужно изничтожить.
14 Godofsin
 
06.12.13
12:04
(13) потом проести тр. расходы и занова ПТУ создавать?
15 Wobland
 
06.12.13
12:04
и место на диске, где он был, нулями забивать для пущей гарантии
16 Cube
 
06.12.13
12:05
(13) А потом ловить "Объект не найден" в регистре взаиморасчетов с контрагентами?... Фиговое решение...
17 Cube
 
06.12.13
12:06
(16) Или ещё лучше - в книге покупок...
18 Kupogun
 
06.12.13
12:10
пометить на удаление не предлагать?
19 Naivniy
 
06.12.13
12:13
(18) Нужно именно удаление из базы документа
20 Wobland
 
06.12.13
12:14
(19) врёшь ты всё
21 Kupogun
 
06.12.13
12:15
такой вот
жестокий естественный отбор
документов
22 Cube
 
06.12.13
12:16
(19) Попахивает быдлокодом. И ответ уже дан в этой ветке...
23 Naivniy
 
06.12.13
12:17
(22) он самый
24 Wobland
 
06.12.13
12:18
да автору зряплату не выдали
25 МойКодУныл
 
06.12.13
12:19
(13) намучаешься ты с таким подходом. Я вот тоже ввязался в создание\удаление цепочек документов с одним основанием (по требованию заказчика) - жутко не доволен:), теперь переубеждаю. Быдлокод это, все-таки. Хотя, по началу казалось все логично.
26 Naivniy
 
06.12.13
12:20
(22) есть руководитель проекта, который сказал сделать так и никак иначе.
Раньше этот документ делал пользовательс с полными провами, теперь решили полные права у пользователя отжать и нарисовать ему новую роль, чтобы он мог только делать эти документы.
27 RHCP
 
06.12.13
12:23
для начала неплохо было бы проверить на связанные объекты через НайтиПоСсылкам()
28 Naivniy
 
06.12.13
12:26
Зайдем с другой стороны.
Есть, документ при проведении которого, что-то создается (документ/справочник - не важно). КАК при перепроведении или распроведении документа это что-то удалить БЕЗ полных прав?
Клиент-серверный вариант работы, на обычных формах.
29 МойКодУныл
 
06.12.13
12:27
Тут же уже писали про привилегированный модуль.
30 yukon
 
06.12.13
12:35
(26) РП гнать в шею по причине профессиональной безграмотности.
31 RHCP
 
06.12.13
12:37
(26) создайте отдельную роль на чтение+удаление этого документа/справочника, без просмотра. и дайте её пользователю своему
32 Naivniy
 
06.12.13
12:37
(29) Создал Новый общий модуль (Тест), Поставил галки напротив Сервер; Вызов сервера; Привилегированный.
В модуле одна процедура:
Процедура УдалениеДок(Док) Экспорт    
    Док.Удалить();    
КонецПроцедуры

В коде документа вызывается эта функция из модуля Тест:
Тест.УдалениеДок(Док);

При перепроведении выдает следующее:
Ошибка при вызове метода контекста (УдалениеДок) Тест.УдалениеДок(Док);
по причине:
Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода УдалениеДок ().
33 RHCP
 
06.12.13
12:39
(32) передавай ссылку, а не объект
34 Azverin
 
06.12.13
12:46
(0) я конечно извиняюсь, но ТС удаляет текущий документ или документ основание?
тогда:
    Для Каждого  Стр из Выборка Цикл
        Стр.Ссылка.ПолучитьОбъект().Удалить();
    КонецЦикла;
35 Azverin
 
06.12.13
12:47
+(34) в модуле документа Транспортные расходы
выборка по подчинённым докам
36 mikecool
 
06.12.13
12:48
(11) остаться должен только один?? автор Д маклауд? )))
37 Naivniy
 
06.12.13
12:52
(33) спасибо, заработало
38 Lucky68
 
06.12.13
12:56
выложи работающий код, вдруг кому пригодится
39 Wobland
 
06.12.13
12:58
(36) не, не маклауд
40 zebra87
 
06.12.13
12:59
Прочитал всю ветку, автор, ваш ник соответствует содержанию))) Подход своеобразный, я бы даже сказал не обычный)
41 Naivniy
 
06.12.13
12:59
(38) -> (32) + (33)
42 zebra87
 
06.12.13
13:01
(22) + (24)
43 МойКодУныл
 
06.12.13
13:02
В каком обработчике запускаешь? Или подпиской на событие?
Сразу предупрежу - будь аккуратен. Что у тебя будет, если при отмене проведения подчиненного проскочит блокировка? Прекратится транзакиця распроведения основания, или получатся 2 "рассинхронизированных" документа.?

Короче, не делайте так по возможности=). Я вроде все уже победил, но все равно метод лучше не использовать.
Основная теорема систематики: Новые системы плодят новые проблемы.