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

Обновлено: 05.07.2024

Столкнулся с небольшой проблемкой при создании "своих" ролей в конфигураторе и добавлении их пользователям. Гуглил много, ответа толкового не нашёл, поэтому пришлось разбираться самому и как результат, решил поделиться опытом. Возможно кому-то пригодится.

Итак, проблема заключалась в следующем:

В какой-либо конфигурации на управляемых формах создаём свою роль (или несколько ролей, как в примере) (см. рис.1), обновляем конфигурацию. В режиме предприятия создаём профиль групп доступа с нашей новой ролью (см. рис.2), добавляем пользователю этот профиль (см. рис.3) и. ничего не происходит, как-будто у этого пользователя не добавлена наша роль. Заходим в конфигуратор, администрирование, пользователи, заходим в пользователя, смотрим "доступные роли" и видим, что у нашего пользователя не выбрана наша роль (см. рис.4).

Почему так происходит? Всё очень просто, разработчики сделали так, что если пользователь "администратор", то есть у него полные права, то собственно говоря, зачем же ему ещё какие-то роли? Ведь у него же и так полные права!

В целом вполне логично и кстати если пользователь не администратор, то всё работает корректно (см. рис.5 и рис.6). Сложности возникают только в том случае, если мы хотим добавить нашу роль/роли пользователю с полными правами. Можно конечно просто в конфигураторе выбрать у пользователя нашу роль/роли, но всё будет работать ровно до тех пор, пока кто-нибудь не решит перезаписать в режиме предприятия права доступа у этого пользователя, после этого "галочка" у добавленной роли "слетит".

Что же делать и где это происходит?

Идём в общие модули - "УправлениеДоступомСлужебный", находим процедуру "ОбновитьРолиПользователей". В ней есть следующий код:

"НовыеРоли" это Таблица значений, в которой выбраны все роли пользователя, которые мы ему назначили в режиме предприятия (включая "наши" роли). Как видно далее по коду, эта таблица очищается, в неё добавляются "ОбязательныеРолиАдминистратора" (Администратор системы, Полные права) и если выбрано, "ДополнительныеРолиАдминистратора" (Интерактивное открытие внешних отчетов и обработок).

Как мне показалось, самый простой и очевидный вариант, это добавить "наши" роли в таблицу "НовыеРоли". Для этого нам надо как-то отделить эти роли от всех остальных, поэтому у всех добавленных нами в конфигураторе ролей, делаем префикс "Доп_". Те "наши" роли, которые мы выбрали для пользователя, собираем в массив "ВыбранныеДополнительныеРоли" и далее из этого массива добавляем роли в таблицу значений "НовыеРоли". Ниже представлен код:

В заключение добавлю, процедура "ОбновитьРолиПользователей" абсолютна одинакова у многих конфигураций (благодаря "унификации" 1С), смотрел в УНФ 1.6, Бухгалтерия предприятия 3.0, Управление торговлей 11.4 (все конфигурации в нескольких версиях), поэтому сделал расширение, которое по идее должно работать на многих конфигурациях на управляемых формах. Можете скачать и добавить его себе, но предварительно не забудьте, что все добавленные роли должны иметь префикс "Доп_". Расширение написано на версии платформы: 8.3.12.1685. В расширение добавлен один общий модуль "УправлениеДоступомСлужебный", в котором только одна процедура "ОбновитьРолиПользователей" (&Вместо) с добавленным, по описанию выше, кодом. При добавлении расширения, не забываем снять галочки "безопасный режим" и "защита от опасных действий".

Речь пойдет о новых возможностях по кастомизации конфигурации в платформе 1С:Предприятие 8.3.9.

Чистая доработка

Сегодня мы рассмотрим внешние инструменты для доработки типовых решений.

Это позволит вносить достаточно серьезные изменения, НЕ снимая конфигурацию с поддержки.

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

Это решается с помощью расширений конфигурации на платформе 8.3.9.

Видео

В видео мы рассмотрим:

Хотите больше?

Эта тема детально раскрыта в курсе:

Не откладывайте свое обучение!

Комментарии / обсуждение (110):

Может кто подскажет как решить следующую проблему:

При заимствовании в расширение справочника Номенклатуры из типовой конфигурации УТ и добавлении в метаданные справочника своей табличной части Расш_Таблица сразу же возникает проблема при попытке в режиме предприятия скопировать уже существующий элемент справочника выдает ошибку:

Перебрасывает в Конфигураторе на:

Как можно обойти эту беду?

Добрый день!
Такая же ошибка возникнет, если табличную часть добавить в самой конфигурации, без расширения.

В указанной строке кода нужно новую ТЧ указать в методе ЗаполнитьЗначениеСвойств в четвертом параметре (список полей-исключений).
А для заполнения этой новой ТЧ при копировании дописать код (или реализовать другую логику, если нужно не просто скопировать строки ТЧ, а преобразовать их):

Объект.Расш_Таблица.Загрузить(ИсточникКопирования.Расш_Таблица.Выгрузить());

Все эти действия можно сделать в расширении.

Спасибо за ответ? Если я создаю новый справочник в расширении и в нем таблицу, то таких проблем не возникает. Эта беда в заимствованном справочнике.

Пока не могу сообразить как в расширении это сделать, чтобы не лезть в код конфигурации? Можете подсказать?

1. Да, это проблема в конкретном справочнике Номенклатура в конкретной конфигурации, которая содержит указанный код.
2. Можно использовать аннотацию Вместо или ИзменениеИКонтроль.

Это не оговорка, всё верно.
Речь о том, что в 8.3.9 нельзя было добавлять реквизиты в объекты конфигурации. Например, нельзя добавить реквизит в документ или справочник, нельзя добавить табличную часть и так далее.
В данном же примере был добавлен реквизит в форму расширение. Это просто поле формы, оно не хранится в БД и заполняется программным образом.

Был добавлен реквизит формы, а не реквизит объекта.

Это был условный код.
Для простоты мы не стали заполнять реквизит формы.
В любом случае в 8.3.9 не было возможности создавать реквизиты в расширениях, поэтому скрытую фичу здесь можно не искать :)

Переопределение свойств заимствованных объектов в расширениях недопустимо в режиме совместимости 8.3.8 и ниже, который сейчас используется в типовой УТ.

Добрый день!
В этом видеоуроке показывается, что в корневом объекте конфигурации устанавливается режим совместимости Не использовать.
А в типовой УТ 11 действительно пока еще используется режим совместимости Версия 8.3.8. Думаю, что это вопрос времени.

Добрый день, Кирилл!

Евгений, спасибо!
В тех. поддержку 1С написал, посмотрю, что ответят. Свежая (на 08.12.2016) версия платформы (8.3.9.1850) не помогла :)

Ок, сообщайте полученный ответ :)

Отлично, ждем релиза.

У меня уже релиз платформы 8.3.11.3034, а проблемы все те же:(

Добрый день.
Вопрос по расширениях, если кто сталкивался, помогите.

Есть подозрение что фоновое задание их не использует. Может как то можно настроить? Не понимаю, это нереально, или я просто что то не так делаю.

Вопрос снят.
Расширение работало в безопасном режиме, в этом и была проблема.

Короче есть глюк для файлового варианта фонки не видят расширения, в клиет серверном видит, не знаю может исправят скоро.

Ребята, а кто нибудь знает, как расширения с применением хранилища разрабатывать? С приходом 8.3.9 расширения стали очень перспективными, но в отсутсвие средства групповой разработки кажется бесполезным.

Добрый день!
На данный момент нельзя работать с расширением через хранилище. Такой вариант не поддерживается. На партнерском форуме разработчики платформы отвечали, что рассматривают возможность добавления этой возможности.

Опыта использования таких систем нет. Встречал упоминания об использовании Mercurial для этих целей.

Добрый день, Евгений!

Вопрос снимается.
Надо было настроить профиль безопасности в консоли и связать с Базой

Вопрос: это я делаю что-то не так, или поведение системы так задумано?

Если это ошибка платформы, она должна как-нибудь ругнуться, а тут не ругается. Может, есть какие-то хитрости при обращении к реквизитам через ссылку в расширяющей форме?

Ясно, спасибо. Значит чуда не произошло))
Я про то, что через расширения структуру конфигурации не изменишь.

Здравствуйте. видео останавливается нв 3 секунде. Не подскажите, с чем это может быть связано.

Добрый день!
Проверка видео в нескольких браузерах не выявила никаких проблем.
После чистки кэша или при просмотре в другом браузере ошибка сохраняется?

Спасибо. Видео пошло.

Здравствуйте! Посмотрел видео, тяжело вздохнул! Как же я отстал от жизни! Сижу в древней, переписанной УПП. До УФ/БСП дальше, чем до Китая! И просвета не видно!! :(

1С:Предприятие 8.3 (8.3.9.1850) Управление торговлей, редакция 11.2 (11.2.3.175)
Я наверное что то пропустил, у меня не получилось снять с поддержки только один объект конфигурации и не получилось создать документ в расширении конфигурации.

1. Простите, не получилось поставить режим «Объект поставщика редактируется с сохранением поддержки» только для одного объекта.
2. Буду ждать курс

Сразу могу сказать что задействован механизм доп.сведений, но оооочень нестандартным и возможно неоптимальным образом, зато это позволило использовать в добавленном функционале данные любых ссылочных и примитивных типов, и любой структуры.

Спасибо за видео! Очень познавательно!

Теперь весь пласт доработок можно вынести в расширение. Конфигурацию все равно придется с замочка снять, для добавления реквизитов и новых объектов. Но это совсем не проблема, т.к. не влияет на обновление типовой.

Да, можно считать, что это прорыв в разработке на 1С :)

Ну в 8.3.9 наконец-то добавили возможность изменять модули объектов, до этого, имхо, ничего серьезного с помощью расширения сделать было нельзя, так как все равно лезешь либо в код общих модулей либо в код модулей объектов, теперь в целом, можно добавлять в конфигурацию новые реквизиты и объекты метаданных, а существующие дорабатывать с помощью расширений, но пока лично мой опыт использования расширений: сыровато. Ждем дальнейших улучшений и усовершенствований.

Я буквально 2 месяца назад ради интереса пример делал с хранением данных(таблицы значений) в доп реквизите в формате json\xml\и другие варианты. На хабре многии не поняли(не все прочитали) для чего это может быть нужно и устроили бурный холивар(ну там впринципе 1с красная тряпка), на инфостарте вопросов не задавали. И вот Вы пишите пример который как раз под этот метод. ;)

1 При открытии формы считываем из доп реквизита и прячем доп реквизит хранящий данные.
2 При закрытии преобразовываем данные в формат хранения и сравниваем изменились ли они и если да переписываем данные доп реквизита.

Поэтому вероятность этого события не велика.

Читайте также: