Почему возникает ошибка «Неверное количество параметров» при открытии документов ввода начальных остатков?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

В процессе работы с крупными внедрениями на базе 1С:ERP или 1С:Комплексная автоматизация администраторы и разработчики часто сталкиваются с ситуацией, когда после программного создания документов или обновления системы пользователи теряют доступ к объектам. Одной из самых коварных ошибок является синтаксическая ошибка в механизме RLS (Record Level Security). Рассмотрим ситуацию, когда при попытке открыть документ ВводОстатковТоваров или сформировать отчет система выдает сообщение: «Неверное количество параметров при использовании шаблона ПоЗначениямРасширенный».

Проанализируем причину возникновения ошибки

Разберем, почему эта проблема проявляется именно в новых версиях конфигураций (начиная с релизов 2.5.6.х). Основная причина кроется в переходе 1С на так называемые универсальные ограничения доступа. Эти механизмы базируются на Библиотеке стандартных подсистем (БСП).

Шаблон ПоЗначениямРасширенный — это сложный макрос внутри системы прав доступа, который генерирует итоговый SQL-запрос к базе данных с учетом разрешенных пользователю организаций, складов и других разрезов. В определенных обновлениях БСП структура этого шаблона меняется: добавляются новые параметры или удаляются старые. Если текст ограничения в роли (например, Чтение ввода остатков товаров) не был обновлен автоматически вместе с платформенными механизмами, возникает конфликт: шаблон ожидает одно количество аргументов (запятых), а получает другое.

Интересно, что старые документы, созданные до сбоя, могут открываться без проблем. Это связано с механизмом кэширования прав в таблице КлючиДоступа. Для старых записей ключи уже рассчитаны, а для новых документов (особенно созданных программно через обработки) система пытается вычислить права «на лету», натыкается на синтаксическую ошибку в RLS-запросе и блокирует доступ.

Вариант 1. Исправление текста шаблона RLS

Если мы проанализируем текст ограничения доступа для роли, мы увидим длинную строку с множеством пустых параметров. Посмотрим на пример проблемного кода, который часто встречается в конфигурациях:


#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
    #ДляОбъекта("")
#Иначе
    #ПоЗначениямРасширенный(
        "Документ.ВводОстатковТоваров","Чтение","", "", "",
        "Организации","Т.Организация","И(",
        "Склады","Т.Склад","ИЛИ",
        "","Т.Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)", ")",
        "","","", "","","", "","","", "","","", "","","", "","","", "","","",
        "","","","","","","","","","","","","","","","","","")
#КонецЕсли

Выясним причину сбоя в этом коде: количество запятых в конце вызова шаблона должно строго соответствовать версии БСП, используемой в вашей конфигурации. В некоторых релизах их может быть 50, в других — 120.

Как исправить:

  1. Создадим расширение конфигурации, чтобы не снимать основную конфигурацию с поддержки.
  2. Добавим в расширение роль, вызывающую ошибку (например, ЧтениеВводаОстатковТоваров).
  3. В расширении для объекта Документ.ВводОстатковТоваров на праве Чтение изменим текст RLS.
  4. Приведем количество пустых параметров (запятых) в соответствие с эталонным шаблоном текущего релиза. Самый простой способ — скопировать текст аналогичного рабочего ограничения из другого документа той же конфигурации.

Вариант 2. Обновление вспомогательных данных доступа

Иногда проблема кроется не в самом коде, а в некорректном состоянии регистров, хранящих ключи доступа. Проанализируем ситуацию: если RLS включен, но вспомогательные таблицы не актуализированы, система может выдавать ложные синтаксические ошибки. Для выборочной актуализации данных можно применить обработку для точечного пересчета прав доступа пользователей.

Выполним следующие шаги для восстановления данных:

  1. Перейдем в раздел НСИ и Администрирование — Обслуживание.
  2. Откроем пункт Управление доступом.
  3. Запустим процедуру Обновление вспомогательных данных.
  4. Также крайне эффективно помогает запуск базы в режиме 1С:Предприятие с параметром командной строки: /С ЗапуститьОбновлениеИнформационнойБазы. Это инициирует выполнение всех отложенных обработчиков обновления прав.

Вариант 3. Сброс настроек через отключение RLS

Рассмотрим «быстрый» способ, который помогает в ряде случаев, когда ошибка вызвана временным сбоем кэша метаданных. Попробуем временно отключить проверку прав на уровне записей.

Внимание: это действие затронет всех пользователей системы, поэтому его рекомендуется выполнять во внерабочее время.

  1. Зайдем в НСИ и Администрирование — Настройка пользователей и прав.
  2. Снимем флаг Ограничивать доступ на уровне записей.
  3. Дождемся завершения фонового процесса (система может «подвиснуть» на время очистки таблиц доступа).
  4. После завершения снова установим этот флаг. Система инициирует полную перезапись ключей доступа, что часто устраняет синтаксические несоответствия.

Вариант 4. Проверка корректности заполнения данных

Посмотрим на проблему со стороны данных. Если документы создавались программно (обработкой), как в исходном сообщении, важно убедиться, что реквизиты, по которым строится RLS, заполнены корректно. Шаблон ПоЗначениямРасширенный в документе ВводОстатковТоваров обычно ориентируется на поля Организация и Склад. Для проверки действующих ограничений пользователя на созданный объект подойдёт обработка для анализа прав доступа на объект базы данных.

Проанализируем созданные документы:

Подведем итоги

Ошибка «Неверное количество параметров при использовании шаблона ПоЗначениямРасширенный» — это типичный маркер несоответствия версии кода БСП и текста ролей в конфигурации. Наиболее правильным и долгосрочным решением является обновление конфигурации до актуального патча (так как 1С обычно выпускает исправления для таких массовых ошибок) или корректировка текста RLS через расширение. Если же ошибка носит единичный характер, зачастую помогает простое обновление вспомогательных данных доступа через стандартное меню обслуживания.

← На главную