При работе с конфигурациями 1С, особенно при оптимизации производительности системы с использованием механизмов ограничения доступа на уровне записей (RLS), мы можем столкнуться с неожиданными ошибками. Одна из таких проблем возникает при попытке перевести базу из стандартного режима RLS в производительный режим, когда система выдает ошибку, связанную с «Датами запрета изменений». Давайте подробно разберем эту ситуацию и выясним, как ее можно решить.
Первоначальное сообщение пользователя ярко демонстрирует суть проблемы. При попытке перехода в производительный режим RLS возникает ошибка следующего вида:
При обновлении ключей доступа пользователей списка "Даты запрета изменения (загрузки) данных (Регистр сведений)" возникла ошибка:
Для списка РегистрСведений.ДатыЗапретаИзменения не удалось подготовить параметры ограничения доступа к работе, так как в определяемом типе ПолеРегистраКлючейДоступаКРегистрам не хватает типов:
- ПланОбменаСсылка.ОбменУправлениеТорговлейБухгалтерияПредприятия,
- ПланОбменаСсылка.ОбменУправлениеТорговлейБухгалтерияПредприятия30,
- ПланОбменаСсылка.ОбменУправлениеТорговлейБухгалтерияПредприятияКОРП,
- ПланОбменаСсылка.ОбменУправлениеТорговлейБухгалтерияПредприятияКОРП30,
- ПланОбменаСсылка.ОбменУправлениеТорговлейРозница,
имеющихся у полей (Пользователь) в ограничении доступа: РазрешитьЧтениеИзменение ГДЕ ТИПЗНАЧЕНИЯ(Пользователь) = ТИП(Справочник.Пользователи) ИЛИ ТИПЗНАЧЕНИЯ(Пользователь) = ТИП(Справочник.ГруппыПользователей) ИЛИ ТИПЗНАЧЕНИЯ(Пользователь) = ТИП(Справочник.ВнешниеПользователи) ИЛИ ТИПЗНАЧЕНИЯ(Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей) ИЛИ Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей)
{ОбщийМодуль.УправлениеДоступомСлужебный.Модуль(26238)}: ВызватьИсключение ТекстОшибки;
Эта ошибка возникает в контексте конфигурации 1С:Управление торговлей 11 (УТ 11), на платформе 8.3.16.1296, в релизе 11.4.12.71 или близких к нему. Суть ошибки сводится к тому, что механизм RLS, при подготовке ключей доступа для регистра сведений ДатыЗапретаИзменения, не находит необходимые типы данных, которые должны быть включены в определяемый тип ПолеРегистраКлючейДоступаКРегистрам. Эти отсутствующие типы обычно представляют собой ссылки на планы обмена, такие как ПланОбменаСсылка.ОбменУправлениеТорговлейБухгалтерияПредприятия и аналогичные.
Прежде чем перейти к решениям, давайте кратко разберем, что такое производительный режим RLS и почему мы хотим в него перейти. RLS (Row-Level Security), или ограничение доступа на уровне записей, — это механизм 1С, который позволяет задавать права доступа пользователей не только на уровне объектов метаданных (например, "доступ к документам Продажа"), но и на уровне отдельных записей этих объектов (например, "доступ только к своим продажам" или "доступ к продажам определенного склада").
Стандартный режим RLS работает "на лету": при каждом обращении пользователя к данным, система формирует запрос с условиями ограничения доступа. Это может быть ресурсоемким процессом, особенно в больших базах данных с множеством пользователей и сложными ограничениями.
Производительный режим RLS призван решить эту проблему. Он предварительно вычисляет и сохраняет "ключи доступа" для каждого пользователя и каждой комбинации ограничений. При запросе данных, вместо динамического формирования условий, система просто использует уже готовые ключи, что значительно ускоряет выполнение запросов и повышает общую производительность, особенно в клиент-серверных базах.
Ошибка, с которой мы столкнулись, указывает на сбой именно в процессе предварительной подготовки этих ключей доступа, когда система пытается определить полный набор возможных типов данных, которые могут использоваться в ограничениях.
Основная причина этой ошибки обычно заключается в несогласованности в метаданных конфигурации или в некорректном составе типов, включенных в так называемые "определяемые типы" (ОпределяемыйТип). В данном случае, проблема возникает в определяемом типе ПолеРегистраКлючейДоступаКРегистрам.
Почему это происходит:
Рассмотрим несколько подходов к решению данной проблемы, исходя из опыта других пользователей и официальной информации.
Наиболее частым и эффективным решением для такого рода ошибок является обновление 1С:Управление торговлей до более поздних релизов. Часто подобные проблемы являются известными ошибками, которые фирма "1С" исправляет в последующих обновлениях.
В некоторых случаях, до выхода полноценного релиза, фирма "1С" выпускает экстренные исправления в виде патчей (расширений конфигурации или обновлений модулей). Один из пользователей упомянул, что "выпустили патч, проблему устранили". Если обновление всей конфигурации до новой версии пока невозможно или нежелательно, следует проверить наличие официальных патчей на портале 1С:ИТС, предназначенных для решения именно этой ошибки для вашей версии конфигурации.
Если проблему нужно решить срочно и нет возможности немедленно обновиться или применить патч, существует временный обходной путь, который позволит продолжить работу с системой, пусть и без преимуществ производительного режима RLS. Этот метод был успешно применен одним из пользователей:
НСИ и администрирование -> Настройка пользователей и прав -> Группы доступа -> Варианты работы) установите значение "Стандартный" вместо "Производительный".Если после обновления проблема все еще сохраняется, или если вы хотите провести более глубокую диагностику, можно рассмотреть следующие шаги:
ПроверкаВнедренияБСП.erf. Этот отчет может помочь найти и автоматически исправить ошибки, связанные с определяемыми типами, а также обновить ограничения в ролях. Он предназначен для диагностики и устранения причин "нехватки типов", которые лежат в основе данной проблемы. Запустите его в режиме диагностики и следуйте рекомендациям.ПланОбменаСсылка.ОбменУправлениеТорговлейБухгалтерияПредприятия, ПланОбменаСсылка.ОбменУправлениеТорговлейРозница), корректно зарегистрированы в вашей базе данных и их метаданные актуальны. Иногда проблемы возникают, если состав планов обмена не соответствует ожиданиям системы, или если некоторые из них были удалены/изменены некорректно.Важно также понимать, что ошибка затрагивает механизм «Даты запрета изменения». Этот функционал предназначен для предотвращения редактирования документов и данных в закрытых учетных периодах. Например, если финансовый месяц закрыт, мы не хотим, чтобы пользователи могли изменять документы этого месяца. Настройка дат запрета обычно выполняется в разделе Администрирование -> Настройка пользователей и прав -> Даты запрета изменения данных.
Кроме того, существует «Дата запрета загрузки данных», которая защищает информацию от изменений, поступающих в результате обмена данными (например, из другой информационной базы). Этот механизм настраивается отдельно от даты запрета редактирования и также может быть затронут проблемами RLS.
Мы рассмотрели проблему, связанную с ошибкой «нехватки типов» при попытке перейти в производительный режим RLS в 1С:Управление торговлей 11. Эта ошибка, официально признанная фирмой "1С", требует внимательного подхода. Наиболее надежным решением является обновление конфигурации до последних стабильных релизов, в которых проблема уже устранена, или применение соответствующих патчей. В качестве временной меры можно переключить режим RLS на "Стандартный", чтобы обеспечить непрерывность работы. В случае сохраняющихся проблем, используем дополнительные диагностические инструменты и при необходимости обращаемся за помощью к квалифицированным специалистам 1С.