Добрый день!
Конфигурация Зарплата и управление персоналом, редакция 3.1 (3.1.5.171), платформа 1С:Предприятие 8.3 (8.3.11.3034)
Пишу внешний отчет, в отчете используется СКД, в самом отчете необходимо вывести ФИО сотрудника в дательном падеже, типа Выдана тому то тому то..
Для этого использую в вычисляемых полях выражение СклонениеПредставленийОбъектов.ПросклонятьФИО(ФизическоеЛицо, 3, ФизическоеЛицо)
И вот тут засада - в данной функции глобального модуля есть строчка ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаСклоненияФИО"), код компоненты, соответственно, зашит в общем макете. Из-за этого при исполнении отчета выдается ругательство "Установлен безопасный режим. Выполнение операции запрещено". Да, всё логично. Отчет ломится использовать внешнюю компоненту, с точки зрения безопасности 1С верно блокирует запуск небезопасного кода. Перерыл кучу тем на форумах, отыскал простое решение, в процедуре где заполняются параметры регистрации внешнего отчета, нужно добавить строчку:
ПараметрыРегистрации.Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпоненты("ОбщийМакет.КомпонентаСклоненияФИО", "Фамилия в дательном падеже")); И более ничего, и народ радуется, у них все получилось... Но только не у меня.
Ну все же вроде как верно, перепроверил 100 раз, глаза замылились. Но наблюдаю все ту же фразу: "Установлен безопасный режим. Выполнение операции запрещено". Подскажите, что не так то? И знающие люди, подскажите, как вообще платформа 1С понимает использование небезопасного кода, как фильтрует что разрешено, а что нет, как вызов метода ПодключитьВнешнююКомпоненту анализируется что он добавлен в разрешения? Прошу помощи...
---
Пример.
---
Сообщение было скрыто модератором.
---
из-за новой фичи на сайте по модерации сообщений со ссылками (хотя ссылка на официальный сайт 1С была) предыдущее сообщение так и не появилось.
Смысл следующий. Если используется клиент-серверная архитектура и компонента подключается на сервере, тогда смотрите в сторону Профили безопасности на сервере.
---
ну, еще у самого пользователя, в конфигураторе - галка есть "защита от опасных действий".
Там-то тоже надо снять.
---
Запускаю под Администратором, полные права, галка "Защита от опасных действий" снята, только что проверил. То есть в итоге не работает.
---
попробуй в параметры регистрации обработки добавить строку
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
---
Все это пробовал, и так и эдак, не помогает
---
У внешнего отчета:
Действия - Открыть модуль объекта

поправьте поля под себя

```1c
    Функция СведенияОВнешнейОбработке() Экспорт
    ПараметрыРегистрации = Новый Структура;

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

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

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

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

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

    Возврат ПараметрыРегистрации;
    КонецФункции
```
---
Безусловно, всё это сделано. Решения так и нет
---
Не знаю что там у кого работало, но СКД ВСЕГДА исполняет внешние функции в безопасном режиме. Так было не всегда и, видимо, вам попалось "решение" с тех ещё времён... Решения НЕТ. Я в своё время угрохал кучу времени и нашёл где-то в дебрях ИТСа строчку про безусловно безопасное исполнение кода внешних функций СКД. Возможно, конечно, что с тех времён опять что-то поменялось и теперь оно опять не так...
---
Сделать в физлицах доп. реквизит "ФИО в дательном падеже". Обработкой заполнить реквизит. Сделать подписку на события при записи регистра сведений "ФИОФизлиц" и справочника "Физлица", заполняющее этот реквизит.

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

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