И снова безопасный режим и выполнение операции запрещено

1. denisvilny 14.06.18 11:28 Сейчас в теме
Добрый день!
Конфигурация Зарплата и управление персоналом, редакция 3.1 (3.1.5.171), платформа 1С:Предприятие 8.3 (8.3.11.3034)
Пишу внешний отчет, в отчете используется СКД, в самом отчете необходимо вывести ФИО сотрудника в дательном падеже, типа Выдана тому то тому то..
Для этого использую в вычисляемых полях выражение СклонениеПредставленийОбъектов.ПросклонятьФИО(ФизическоеЛицо, 3, ФизическоеЛицо)
И вот тут засада - в данной функции глобального модуля есть строчка ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСклоненияФИО"), код компоненты, соответственно, зашит в общем макете. Из-за этого при исполнении отчета выдается ругательство "Установлен безопасный режим. Выполнение операции запрещено". Да, всё логично. Отчет ломится использовать внешнюю компоненту, с точки зрения безопасности 1С верно блокирует запуск небезопасного кода. Перерыл кучу тем на форумах, отыскал простое решение, в процедуре где заполняются параметры регистрации внешнего отчета, нужно добавить строчку:
ПараметрыРегистрации.Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты("ОбщийМакет.КомпонентаСклоненияФИО", "Фамилия в дательном падеже")); И более ничего, и народ радуется, у них все получилось... Но только не у меня.
Ну все же вроде как верно, перепроверил 100 раз, глаза замылились. Но наблюдаю все ту же фразу: "Установлен безопасный режим. Выполнение операции запрещено". Подскажите, что не так то? И знающие люди, подскажите, как вообще платформа 1С понимает использование небезопасного кода, как фильтрует что разрешено, а что нет, как вызов метода ПодключитьВнешнююКомпоненту анализируется что он добавлен в разрешения? Прошу помощи...
По теме из базы знаний
Найденные решения
14. SlavaKron 19.06.18 14:38 Сейчас в теме
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. пользователь 14.06.18 12:06
Сообщение было скрыто модератором.
...
9. spacecraft 19.06.18 10:08 Сейчас в теме
(1) из-за новой фичи на сайте по модерации сообщений со ссылками (хотя ссылка на официальный сайт 1С была) предыдущее сообщение так и не появилось.
Смысл следующий. Если используется клиент-серверная архитектура и компонента подключается на сервере, тогда смотрите в сторону Профили безопасности на сервере.
tiodal83; +1 Ответить
2. Boneman 298 14.06.18 11:58 Сейчас в теме
ну, еще у самого пользователя, в конфигураторе - галка есть "защита от опасных действий".
Там-то тоже надо снять.
3. denisvilny 14.06.18 12:00 Сейчас в теме
Запускаю под Администратором, полные права, галка "Защита от опасных действий" снята, только что проверил. То есть в итоге не работает.
5. Boneman 298 14.06.18 12:09 Сейчас в теме
(3)
попробуй в параметры регистрации обработки добавить строку
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
6. denisvilny 14.06.18 12:51 Сейчас в теме
Все это пробовал, и так и эдак, не помогает
7. Timur.V 78 19.06.18 00:30 Сейчас в теме
У внешнего отчета:
Действия - Открыть модуль объекта

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

    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.ВедомостьНаВыплатуЗарплатыВКассу"); 
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    
    тзКоманды = Новый ТаблицаЗначений;
    тзКоманды.Колонки.Добавить("Идентификатор");
    тзКоманды.Колонки.Добавить("Представление");
    тзКоманды.Колонки.Добавить("Модификатор");
    тзКоманды.Колонки.Добавить("ПоказыватьОповещение");
    тзКоманды.Колонки.Добавить("Использование");

    строкаКоманды = тзКоманды.Добавить();
    строкаКоманды.Идентификатор = "Т53";
    строкаКоманды.Представление = "Т-53 внешняя";
    строкаКоманды.Модификатор = "ПечатьMXL";
    строкаКоманды.ПоказыватьОповещение = Истина;
    строкаКоманды.Использование = "ВызовСерверногоМетода";

    ПараметрыРегистрации.Вставить("Команды", тзКоманды);

    Возврат ПараметрыРегистрации;
КонецФункции
Показать
8. denisvilny 19.06.18 09:30 Сейчас в теме
(7) Безусловно, всё это сделано. Решения так и нет
10. sergathome 4 19.06.18 10:17 Сейчас в теме
(8) Не знаю что там у кого работало, но СКД ВСЕГДА исполняет внешние функции в безопасном режиме. Так было не всегда и, видимо, вам попалось "решение" с тех ещё времён... Решения НЕТ. Я в своё время угрохал кучу времени и нашёл где-то в дебрях ИТСа строчку про безусловно безопасное исполнение кода внешних функций СКД. Возможно, конечно, что с тех времён опять что-то поменялось и теперь оно опять не так...
11. ipoloskov 162 19.06.18 12:28 Сейчас в теме
Сделать в физлицах доп. реквизит "ФИО в дательном падеже". Обработкой заполнить реквизит. Сделать подписку на события при записи регистра сведений "ФИОФизлиц" и справочника "Физлица", заполняющее этот реквизит.

Использовать в отчете готовое ФИО в дательном падеже, радовацца. Получить благодарность за ускорение работы отчета (опционально)
12. denisvilny 19.06.18 13:23 Сейчас в теме
(11) Примерно к такому решению я и подошел, только используется встроенный регистр сведений СклоненияПредставленийОбъектов, там хранятся склонения всевозможных объектов, однако не все элементы туда попадают. Да, и конечно же, изменять конфигурацию совсем не хотелось бы
(10) Как то совсем безутешно )
13. SlavaKron 19.06.18 13:49 Сейчас в теме
(11) По-моему, проще отчет переделать - добавить программно заполняемый набор данных с ФИО в дательном падеже.
14. SlavaKron 19.06.18 14:38 Сейчас в теме
15. denisvilny 20.06.18 09:24 Сейчас в теме
(14) Да, хорошая идея, спасибо!
16. denisvilny 20.06.18 10:11 Сейчас в теме
В итоге сделал в модуле отчета в процедуре ПриКомпоновкеРезультата такие строки:
Для Каждого ЭлементНастройки ИЗ КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
Если ЭлементНастройки.Параметр = Новый ПараметрКомпоновкиДанных("ФизическоеЛицо") Тогда
ЗначениеПараметраФизЛица = ЭлементНастройки.Значение;
ФИОВДательномПадеже = СклонениеПредставленийОбъектов.ПросклонятьФИО(ЗначениеПараметраФизЛица.Наименование, 3, ЗначениеПараметраФизЛица);
КонецЕсли;
КонецЦикла;

При этом функция ПросклонятьФИО так же записывает сведения в регистр сведений СклоненияПредставленийОбъектов, а в СКД я использую этот регистр и извлекаю готовое значение в дательном падеже. Все изящно, все работает, огромное спасибо всем помогавшим!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот