Имя: Пароль:
1C
1С v8
Внешняя обработка \ Права пользователя \ Запись временного файла \ Безопасный режим
0 zelenprog
 
15.03.24
16:20
Добрый день!

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

При записи файла во временный каталог выдается ошибка под обычным пользователем.
Под Администратором работает нормально.

Вот код:

&НаКлиенте
Процедура РазобратьФайл(Команда)
    ДвоичныеДанные     = Новый ДвоичныеДанные(Объект.Файл);
    Адрес            = ПоместитьВоВременноеХранилище(ДвоичныеДанные, Новый УникальныйИдентификатор);
    РазобратьФайлНаСервере(Адрес);
КонецПроцедуры

&НаСервере
Процедура РазобратьФайлНаСервере(Адрес)
    ФайлПриемник    = ПолучитьИмяВременногоФайла("txt");
    ДанныеХранилища    = ПолучитьИзВременногоХранилища(Адрес);
    ДанныеХранилища.Записать(ФайлПриемник);   // !!!!! здесь ошибка
    ...
КонецПроцедуры


В последней строке под обычным пользователем выдается ошибка:
//-----------
Ошибка при вызове метода контекста (Записать)
{ВнешняяОбработка.ПечатьЭтекитокДляМаркировки.Форма.УФорма.Форма(158)}:ДанныеХранилища.Записать(ФайлПриемник);
{ВнешняяОбработка.ПечатьЭтекитокДляМаркировки.Форма.УФорма.Форма(40)}:РазборФайлаЭтикеток(Адрес);
по причине:
Установлен безопасный режим. Выполнение операции запрещено
//-----------

Подскажите, какие права\роли надо добавить пользователю, чтобы не было этой ошибки?
1 Волшебник
 
15.03.24
16:22
2 zelenprog
 
15.03.24
17:01
(1) Не вариант
3 Смотрящий
 
15.03.24
17:05
(2) В поток из временного храна, и поток разбирай как файл
4 Garykom
 
15.03.24
17:34
ПараметрыРегистрации.Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы)
https://sstud.ru/%D0%B2%D1%8B%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BE%D0%BA-1%D1%81-%D0%B2-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D0%BC-%D1%80/
5 zelenprog
 
18.03.24
09:42
(4) Я пробовал так делать - не помогает.

Единственное отличие в том, что вместо "РазрешениеНаИспользованиеКаталогаФайловойСистемы" я пробовал "РазрешениеНаИспользованиеКаталогаВременныхФайлов", поскольку у меня ошибка выдается при записи временного файла.
В общем модуле вот эта функция:


Функция РазрешениеНаИспользованиеКаталогаВременныхФайлов(Знач ЧтениеДанных = Ложь, Знач ЗаписьДанных = Ложь, Знач Описание = "") Экспорт
    Возврат РазрешениеНаИспользованиеКаталогаФайловойСистемы(ПсевдонимКаталогаВременныхФайлов(), ЧтениеДанных, ЗаписьДанных);
КонецФункции


Вот весь мой код:


Функция СведенияОВнешнейОбработке() Экспорт
    
    РегистрационныеДанные = Новый Структура;
    
    РегистрационныеДанные.Вставить("Наименование", "Простая обработка");     
    РегистрационныеДанные.Вставить("БезопасныйРежим", Ложь);         
    РегистрационныеДанные.Вставить("Версия", "1.0.1");       
    РегистрационныеДанные.Вставить("Вид", "ДополнительнаяОбработка");      
    РегистрационныеДанные.Вставить("Информация", "Простая обработка");
    
    РегистрационныеДанные.Вставить("Разрешения", Новый Массив);    
    Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(Истина, Истина);
    РегистрационныеДанные.Разрешения.Добавить(Разрешение);
    Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаПрограммы(Истина, Истина);
    РегистрационныеДанные.Разрешения.Добавить(Разрешение);
    ....


Но это не помогло.
6 zelenprog
 
18.03.24
09:43
Кажется я понял в чем причина.
У меня особенность в том, что я свою обработку запускаю просто через "Файл-Открыть". Механизм "ДополнительныеОтчетыИОбработки" не используется.
При открытии обработки через "Файл-Открыть" метод "СведенияОВнешнейОбработке()" не выполняется, значит разрешения не устанавливаются.
Наверно в этом причина моей ошибки.

А можно ли сделать так, чтобы при открытии обработки через "Файл-Открыть" для нее устанавливались нужные разрешения?
7 Garykom
 
18.03.24
10:13
(6) 1. в общий модуль ДополнительныеОтчетыИОбработки хоть раз заглядывал?
2. про событие формы ПриОткрытии знаешь?
8 zelenprog
 
18.03.24
10:51
(7) Посмотрел. Но так сходу не нашел в коде того, что мне нужно...

Как я понял, надо в событии "ПриОткрытии" вызвать какой-то метод общего модуля "ДополнительныеОтчетыИОбработки", чтобы выполнилось предоставление разрешений.
Но какой метод - не нашел :(
Если знаешь - подскажи плиз...
9 DJ Anthon
 
18.03.24
11:22
попробуй привилегированный режим
10 DrZombi
 
18.03.24
11:27
11 zelenprog
 
18.03.24
12:32
(9),(10) Это как "из пушки по воробьям".
Такой способ использовать нежелательно.

Надо регулировать с помощью разрешений "РегистрационныеДанные.Разрешения.Добавить(Разрешение)".
Это работает, я проверил для своей обработки, если ее добавлять как ДополнительнуюОбработку.

Вопрос только  в том, как сделать тоже самое при открытии обработки через "Файл-Открыть".
12 DrZombi
 
18.03.24
12:41
(11) Удачи :)
13 Garykom
 
18.03.24
13:10
(12) Ну теоретически никто не мешает при открытии внешней обработки программно засунуть/зарегать ее в дополнительных
А затем оттуда переоткрыть
14 Garykom
 
18.03.24
13:11
(13)+ Или еще круче разобраться с платформенным механизмом, где и как для хэша обработки сохраняются разрешения и туда напрямую на сервере писать ))