Разработчики, работающие в многопользовательской среде с использованием Хранилища конфигурации 1С, часто сталкиваются с раздражающей ситуацией. При попытке добавить новый реквизит или табличную часть в документ, который, казалось бы, никак не связан с основной массой ролей, система выдает критическую ошибку или предупреждение. Платформа настойчиво требует захватить в Хранилище несколько десятков ролей, которые вы даже не открывали. Разберем подробно, почему так происходит, как работает механизм контроля целостности метаданных и какие шаги нужно предпринять, чтобы минимизировать подобные блокировки в будущем.
Первым делом проанализируем ситуацию с точки зрения внутренней логики платформы 1С. Основная причина кроется в свойстве роли Устанавливать права для реквизитов и табличных частей по умолчанию. Рассмотрим, как этот флаг влияет на поведение Хранилища:
СуммаОперации в документе РеализацияТоваровУслуг), платформа должна решить, какие права будут у существующих ролей на этот новый объект.Роль технически изменился. Несмотря на то, что вы не открывали редактор роли вручную, её внутреннее описание было дополнено новыми узлами метаданных.Выясним причину, по которой это свойство включено почти у всех ролей. По умолчанию 1С включает этот флаг для облегчения жизни разработчику: при добавлении полей в типовые объекты не нужно заходить в каждую роль и проставлять галочки. Однако в крупных проектах с десятками разработчиков эта "фича" превращается в проблему, блокирующую параллельную работу.
Рассмотрим еще один важный параметр, влияющий на связность объектов — Независимые права подчиненных объектов. Если этот флаг у роли выключен, то права на реквизиты жестко наследуются от прав на сам документ. В этом случае Хранилище проявляет еще большую "бдительность". Платформа не может гарантировать корректность прав без обновления всей структуры роли целиком. Если же свойство включено, роли ведут себя чуть более изолированно, но флаг права по умолчанию все равно может инициировать требование захвата.
Часто возникает вопрос: почему из 50 нетиповых ролей Хранилище просит захватить только 20, хотя флаг авто-назначения стоит у всех? Проанализируем возможные факторы избирательности системы:
Чтение или Просмотр) на родительский объект (документ). Если роль вообще не "видит" документ, то и права на его новые реквизиты в неё не прописываются, следовательно, объект метаданных Роль не меняется..db в каталоге хранилища) со временем могут накапливаться несоответствия. Роли могут попадать в список обязательных к захвату из-за "фантомных" изменений, которые фактически не видны в конфигураторе.Разберем по шагам, как действовать, если вы столкнулись с массовым требованием захвата ролей при помещении изменений в Хранилище.
Хранилище конфигурации — Администрирование (или просмотр состава). Найдите список ролей, выделите нужные через клавишу Shift и выполните Захватить в хранилище. После этого вы сможете поместить свой документ, а затем вернуть роли обратно.Получить из хранилища для корня конфигурации или для ветки Роли рекурсивно. Это синхронизирует ваше локальное состояние с базой Хранилища и может снять часть претензий системы.Если вы работаете в таких конфигурациях, как 1С:ERP Управление предприятием или 1С:Комплексная автоматизация, где количество ролей исчисляется сотнями, стандартный механизм 1С может парализовать разработку. Рассмотрим профессиональный подход к решению этой проблемы:
Отключение прав по умолчанию. Для всех новых, нетиповых ролей рекомендуется снимать флаг Устанавливать права для реквизитов и табличных частей по умолчанию. Да, это заставит вас вручную настраивать права при создании новых реквизитов, но это полностью исключит блокировку этих ролей в Хранилище при изменении структуры документов другими разработчиками. Это считается правилом хорошего тона при проектировании архитектуры прав доступа в высоконагруженных проектах.
Использование расширений. Если ваша задача — добавить реквизит в типовой документ, рассмотрите возможность использования Расширения конфигурации. В расширении права на добавленные объекты живут по своим правилам, и вам не придется трогать роли основной конфигурации, что сохранит нервы всей команде разработчиков.
Ситуация, когда Хранилище просит захватить роли при изменении документа — это не баг, а особенность логики платформы по поддержанию целостности прав доступа. Платформа просто пытается гарантировать, что новые данные не останутся без прав в тех ролях, где обещано их автоматическое назначение.
Для решения проблемы рассмотрите следующий алгоритм действий:
Помните, что Хранилище 1С — инструмент довольно старый и жесткий в плане блокировок, поэтому понимание его внутренней XML-природы помогает избежать многих часов бесплодных споров с коллегами о том, "кто опять захватил все роли".