Как удалить документы программно без явной выдачи на это прав?
Есть обработка для УТ 10.3. Одна из функций, удаление созданных документов. Команда работает под полными правами, но не работает под другими пользователями. УстановитьПривилегированныйРежим не помогло. В момент удаления пишет ошибку "Нарушение прав доступа!". Как можно сделать это программно? Вот код.
Процедура КоманднаяПанельУдалитьСозданныеДокументы(Кнопка)
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст = ПолучитьТекстЗапросаСозданныхДокументов();
Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(ДатаАнализа) - 1);
Запрос.УстановитьПараметр("КонецПериода", КонецДня(ДатаАнализа));
Запрос.УстановитьПараметр("Комментарий", КомментарийДляСоздаваемыхДокументов);
Выборка = Запрос.Выполнить().Выбрать();
ТекстСообщения = "";
Пока Выборка.Следующий() цикл
Ссылка = Выборка.Ссылка;
ТекстСообщения = ТекстСообщения + "Объект " + Ссылка + " не удалён";
Ссылка.ПолучитьОбъект().Удалить();
Если Ссылка.ПолучитьОбъект() = Неопределено тогда
ТекстСообщения = СтрЗаменить(ТекстСообщения, "не удалён", "успешно удалён" + Символы.ПС);
КоличествоУдаленных = ?(КоличествоУдаленных = неопределено, 1, КоличествоУдаленных + 1);
КонецЕсли;
КонецЦикла;
Если КоличествоУдаленных <> неопределено тогда
ТекстСообщения = ТекстСообщения + "Всего удалено: " + КоличествоУдаленных + " объектов";
Иначе
ТекстСообщения = "За указанную дату нет документов к удалению";
КонецЕсли;
Сообщить(ТекстСообщения);
КоманднаяПанельЗаполнить("");
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
возможно где-то отключается привелигированный режим
попробуйте перенести перед выполнение запроса
эти строчки лишние
и так ясно что в любом случаи удалит
привелигированный режим автоматически выключиться в конце выполнения процедуры
попробуйте перенести перед выполнение запроса
УстановитьПривилегированныйРежим(Истина);
Выборка = Запрос.Выполнить().Выбрать();
эти строчки лишние
и так ясно что в любом случаи удалит
Если Ссылка.ПолучитьОбъект() = Неопределено тогда
ТекстСообщения = СтрЗаменить(ТекстСообщения, "не удалён", "успешно удалён" + Символы.ПС);
КоличествоУдаленных = ?(КоличествоУдаленных = неопределено, 1, КоличествоУдаленных + 1);
КонецЕсли;
привелигированный режим автоматически выключиться в конце выполнения процедуры
УстановитьПривилегированныйРежим(Ложь);
(8) странно... пробовал в тестовой базе и все норм удаляет
удаляете проведенный или непроведенный документ??
попробуйте тот же модуль, но на другом виде документа (типа довереность, счет, чекккм, просто добавьте новый документ)
так же посмотрите в журнале что пишет... на что именно нету прав
удаляете проведенный или непроведенный документ??
попробуйте тот же модуль, но на другом виде документа (типа довереность, счет, чекккм, просто добавьте новый документ)
так же посмотрите в журнале что пишет... на что именно нету прав
Пришлось добавить экспортную процедуру удаления по ссылке в общий привилегированный модуль:
Как я понял, в форме обычного приложения в модуле формы обработки я всегда нахожусь в контексте клиента. А если явно написать директиву &НаСервере, то пишет, что процедура с таким именем не найдена. Возможно это связано с клиент-серверным вариантом работы.
Процедура УдалитьОбъектБазыДанных(УдаляемыйОбъект) Экспорт
УдаляемыйОбъект.ПолучитьОбъект().Удалить();
КонецПроцедуры
Как я понял, в форме обычного приложения в модуле формы обработки я всегда нахожусь в контексте клиента. А если явно написать директиву &НаСервере, то пишет, что процедура с таким именем не найдена. Возможно это связано с клиент-серверным вариантом работы.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот