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