В процессе работы с крупными внедрениями на базе 1С:ERP или 1С:Комплексная автоматизация администраторы и разработчики часто сталкиваются с ситуацией, когда после программного создания документов или обновления системы пользователи теряют доступ к объектам. Одной из самых коварных ошибок является синтаксическая ошибка в механизме RLS (Record Level Security). Рассмотрим ситуацию, когда при попытке открыть документ ВводОстатковТоваров или сформировать отчет система выдает сообщение: «Неверное количество параметров при использовании шаблона ПоЗначениямРасширенный».
Разберем, почему эта проблема проявляется именно в новых версиях конфигураций (начиная с релизов 2.5.6.х). Основная причина кроется в переходе 1С на так называемые универсальные ограничения доступа. Эти механизмы базируются на Библиотеке стандартных подсистем (БСП).
Шаблон ПоЗначениямРасширенный — это сложный макрос внутри системы прав доступа, который генерирует итоговый SQL-запрос к базе данных с учетом разрешенных пользователю организаций, складов и других разрезов. В определенных обновлениях БСП структура этого шаблона меняется: добавляются новые параметры или удаляются старые. Если текст ограничения в роли (например, Чтение ввода остатков товаров) не был обновлен автоматически вместе с платформенными механизмами, возникает конфликт: шаблон ожидает одно количество аргументов (запятых), а получает другое.
Интересно, что старые документы, созданные до сбоя, могут открываться без проблем. Это связано с механизмом кэширования прав в таблице КлючиДоступа. Для старых записей ключи уже рассчитаны, а для новых документов (особенно созданных программно через обработки) система пытается вычислить права «на лету», натыкается на синтаксическую ошибку в RLS-запросе и блокирует доступ.
Если мы проанализируем текст ограничения доступа для роли, мы увидим длинную строку с множеством пустых параметров. Посмотрим на пример проблемного кода, который часто встречается в конфигурациях:
#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
#ПоЗначениямРасширенный(
"Документ.ВводОстатковТоваров","Чтение","", "", "",
"Организации","Т.Организация","И(",
"Склады","Т.Склад","ИЛИ",
"","Т.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)", ")",
"","","", "","","", "","","", "","","", "","","", "","","", "","","",
"","","","","","","","","","","","","","","","","","")
#КонецЕсли
Выясним причину сбоя в этом коде: количество запятых в конце вызова шаблона должно строго соответствовать версии БСП, используемой в вашей конфигурации. В некоторых релизах их может быть 50, в других — 120.
Как исправить:
ЧтениеВводаОстатковТоваров).Документ.ВводОстатковТоваров на праве Чтение изменим текст RLS.Иногда проблема кроется не в самом коде, а в некорректном состоянии регистров, хранящих ключи доступа. Проанализируем ситуацию: если RLS включен, но вспомогательные таблицы не актуализированы, система может выдавать ложные синтаксические ошибки. Для выборочной актуализации данных можно применить обработку для точечного пересчета прав доступа пользователей.
Выполним следующие шаги для восстановления данных:
/С ЗапуститьОбновлениеИнформационнойБазы. Это инициирует выполнение всех отложенных обработчиков обновления прав.Рассмотрим «быстрый» способ, который помогает в ряде случаев, когда ошибка вызвана временным сбоем кэша метаданных. Попробуем временно отключить проверку прав на уровне записей.
Внимание: это действие затронет всех пользователей системы, поэтому его рекомендуется выполнять во внерабочее время.
Посмотрим на проблему со стороны данных. Если документы создавались программно (обработкой), как в исходном сообщении, важно убедиться, что реквизиты, по которым строится RLS, заполнены корректно. Шаблон ПоЗначениямРасширенный в документе ВводОстатковТоваров обычно ориентируется на поля Организация и Склад. Для проверки действующих ограничений пользователя на созданный объект подойдёт обработка для анализа прав доступа на объект базы данных.
Проанализируем созданные документы:
Организация или Склад записана пустая ссылка, а в настройках прав пользователя не указано разрешение на «пустые» значения, RLS может отработать некорректно.Ошибка «Неверное количество параметров при использовании шаблона ПоЗначениямРасширенный» — это типичный маркер несоответствия версии кода БСП и текста ролей в конфигурации. Наиболее правильным и долгосрочным решением является обновление конфигурации до актуального патча (так как 1С обычно выпускает исправления для таких массовых ошибок) или корректировка текста RLS через расширение. Если же ошибка носит единичный характер, зачастую помогает простое обновление вспомогательных данных доступа через стандартное меню обслуживания.