При сопровождении и доработке типовых конфигураций 1С (таких как «Комплексная автоматизация», «ERP Управление предприятием» или «Управление торговлей») разработчики часто сталкиваются с необходимостью кастомизации системы. Использование расширений конфигурации — это наиболее прогрессивный метод, позволяющий сохранить типовую конфигурацию на поддержке и существенно облегчить процесс последующих обновлений. Однако при масштабных доработках возникают сопутствующие сложности: как быстро перенести множество объектов метаданных в расширение и как правильно настроить права доступа для пользователей в режиме управляемых форм на базе Библиотеки стандартных подсистем (БСП).
В этой статье мы подробно разберем, какими способами можно автоматизировать процесс массового добавления объектов в расширение, как устроена современная система прав доступа в БСП и как решить распространенную проблему с ошибкой «Нарушение прав доступа» при записи данных из внешних обработок.
В платформе 1С:Предприятие отсутствует прямая команда «Добавить всю ветку метаданных в расширение» по правому клику мыши. Если вам необходимо перенести десятки или сотни реквизитов конкретного справочника или документа, ручное добавление каждого поля может занять часы. Начиная с версии платформы 8.3.23, разработчики могут использовать изящный обходной путь через механизм Конструктора запросов.
Рассмотрим по шагам, как это сделать:
РеализацияТоваровУслуг).Этот простой прием позволяет в один клик заимствовать сложные структуры данных со всеми их реквизитами, табличными частями и стандартными реквизитами.
Если перед нами стоит задача перенести целую ветку метаданных (например, огромный список перечислений, планов видов характеристик или десятки справочников целиком), то даже конструктор запросов может оказаться неэффективным. В этом случае мы можем прибегнуть к низкоуровневой работе с файловой структурой конфигурации.
Проанализируем этот алгоритм:
Configuration.xml.Этот способ требует аккуратности, но незаменим при переносе сотен объектов метаданных за один раз.
Перейдем к вопросу настройки прав. В старых конфигурациях на обычных формах права назначались напрямую пользователям через роли в конфигураторе. В современных конфигурациях, работающих на управляемых формах под управлением БСП, архитектура прав усложнилась. Теперь администрирование выполняется в режиме «1С:Предприятие» через механизмы групп и профилей доступа.
Выясним причину, почему созданные нами новые объекты или роли в расширении могут быть «невидимы» для настройки в пользовательском режиме, и разберем правильный порядок действий.
В конфигураторе внутри расширения создадим новую роль (например, ДобавлениеИзменениеНовогоСправочника) и укажем соответствующие права на чтение, просмотр, ввод новых данных и редактирование для нашего объекта метаданных.
Важнейшее правило БСП: чтобы созданная в расширении роль появилась в списке выбора при настройке «Профилей групп доступа» в режиме Предприятия, эта роль обязательно должна входить в состав хотя бы одной подсистемы внутри самого расширения. Если в вашем расширении нет собственных подсистем, создайте новую подсистему (например, _ПраваРасширения) и установите для нее флаг видимости в интерфейсе, после чего включите вашу новую роль в состав этой подсистемы.
Необходимо учитывать важную особенность платформы 1С. Пока в вашем расширении нет вообще ни одной роли, платформа автоматически предоставляет полные права на все новые объекты расширения абсолютно всем пользователям информационной базы. Но как только вы создаете в расширении хотя бы одну роль, это автоматическое правило отключается. Теперь права на все созданные в расширении объекты нужно будет явно раздавать через роли всем пользователям, включая администраторов базы.
В БСП встроен фоновый механизм, который принудительно контролирует состав ролей у пользователей с полными правами. При каждом обновлении или входе пользователя система может сбрасывать назначенные вручную роли администраторам, оставляя им только предопределенные роли ПолныеПрава и Администрирование. Чтобы администраторы системы имели беспрепятственный доступ к вашим новым объектам из расширения, выполните следующие действия:
ПолныеПрава из основной конфигурации.ПолныеПрава и установите для нее полные права (включая интерактивное удаление, если требуется) на все новые справочники, документы и регистры, созданные в вашем расширении.Теперь перейдем в пользовательский интерфейс программы:
Часто разработчики сталкиваются с ситуацией: профили и группы настроены, пользователю выданы все права, но при попытке программно записать данные в новый справочник расширения из внешней обработки возникает системная ошибка: «Нарушение прав доступа».
Давайте проанализируем причины этой проблемы и способы ее устранения.
При установке или обновлении расширения в режиме «1С:Предприятие» (через меню Администрирование -> Печатные формы, отчеты и обработки -> Расширения) платформа по умолчанию устанавливает для него признак «Безопасный режим».
В безопасном режиме блокируются многие критические операции: запись в базу данных некоторых объектов, выполнение внешних программ, работа со сторонними COM-объектами и внешними обработками. Если ваше расширение управляет правами доступа или работает в связке с внешними обработками, этот флаг необходимо снять. Снимите галочку «Безопасный режим» в строке вашего расширения и перезапустите сеанс работы с базой данных.
Убедитесь, что у пользователя, под которым выполняется операция, помимо прав на сам справочник, присутствует роль, разрешающая интерактивное открытие внешних отчетов и обработок (в типовых конфигурациях за это отвечает роль ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок). Без этой роли выполнение любого кода из внешнего файла будет заблокировано платформой на уровне ядра безопасности.
В более старых версиях платформы внешние обработки работали с объектами расширений в режиме «слепого» исполнения: конфигуратор не видел типы данных из расширений во внешних обработках, не работал автоподбор реквизитов, не функционировал конструктор запросов к таблицам расширения. Если вам приходится работать на старых версиях платформы, используйте обращение к свойствам объектов через функцию ЗаполнитьЗначенияСвойств() или конструируйте запросы динамически в виде строк текста.
Начиная с версии платформы 8.3.28, разработчики получили полноценную интеграцию. Теперь объекты расширений полностью поддерживаются во внешних отчетах и обработках прямо на этапе разработки в конфигураторе. Вы можете выбирать типы данных расширения в реквизитах внешней обработки, использовать их в схемах компоновки данных (СКД) и в конструкторе запросов без каких-либо ограничений.
Для наглядности рассмотрим пример кода внешней обработки, выполняющей безопасную запись в новый справочник расширения с предварительной проверкой доступности роли и отключением безопасного режима исполнения кода:
Процедура ЗаписатьНовыйОбъектРасширения() Экспорт
// Проверим, доступны ли права на запись объекта у текущего пользователя
Если Не ПравоДоступа("Добавление", Метаданные.Справочники.УдаленныйСклад_НовыйСправочник) Тогда
ВызватьИсключение "У вас нет прав на создание элементов справочника в расширении!";
КонецЕсли;
// Перейдем к безопасной транзакции записи
НачатьТранзакцию();
Попытка
НовыйЭлемент = Справочники.УдаленныйСклад_НовыйСправочник.СоздатьЭлемент();
НовыйЭлемент.Код = "000001";
НовыйЭлемент.Наименование = "Центральный Склад (Расширение)";
НовыйЭлемент.Записать();
ЗафиксироватьТранзакцию();
Сообщить("Объект успешно записан!");
Исключение
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации("ОшибкиРасширения", УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение "Не удалось записать объект: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
КонецПроцедуры
Используя предложенные методы массовой работы с метаданными и соблюдая стандарты настройки безопасности БСП, вы сможете создавать стабильные и легко обновляемые системы прав любой сложности внутри расширений 1С.