Почему документы Заявка на расходование денежных средств (ЗРДС) не видны пользователям после загрузки из ЗУП до ручной перезаписи?

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

В процессе интеграции систем 1С:ЗУП и 1С:ERP часто возникает неприятная ситуация: документы ЗаявкаНаРасходованиеДенежныхСредств, созданные автоматически в результате обмена, видны только пользователям с полными правами. Рядовые сотрудники (казначеи, бухгалтеры) не видят их в списках до тех пор, пока администратор не зайдет в документ и не нажмет кнопку «Записать». Рассмотрим детально причины этого поведения и способы исправления ситуации.

Разберем механизм работы «Производительного RLS»

В современных редакциях 1С:ERP 2.5 используется механизм, известный как производительный RLS (ограничение доступа на уровне записей). В отличие от классического RLS, который добавляет условия непосредственно в каждый запрос к базе данных, производительный режим работает через вспомогательные таблицы — ключи доступа.

Проанализируем, что происходит при создании документа:

  1. При записи объекта система анализирует его реквизиты (организацию, подразделение, группу доступа и т.д.).
  2. На основе этих данных формируется уникальный ключ доступа.
  3. Этот ключ записывается в специализированные регистры сведений: КлючиДоступаКОбъектам и КлючиДоступаПользователей.
  4. Когда пользователь открывает список документов, система просто соединяет таблицу документов с таблицей ключей, что работает значительно быстрее старых механизмов.

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

Влияние режима ЗагрузкаДанных = Истина

При обмене данными почти всегда устанавливается свойство ЗагрузкаДанных = Истина. Это отключает большинство проверок в модулях объектов и подписки на события, чтобы ускорить процесс загрузки и избежать конфликтов. Однако именно в этих подписках зачастую заложен вызов механизмов Библиотеки стандартных подсистем (БСП), отвечающих за обновление прав.

Рассмотрим, как система ведет себя в этом случае. Даже если вы программно сбрасываете флаг ЗагрузкаДанных в модуле объекта, это не гарантирует корректного срабатывания всех механизмов распределенного доступа, так как Enterprise Data имеет свои особенности обработки объектов в модулях менеджера или через специализированные правила обработки.

Проанализируем регистры очереди обновления

Если документ создан, но не виден, первым делом нам необходимо проверить состояние очереди обновления прав. Посмотрим на регистр сведений ОчередьОбновленияКлючейДоступа. В норме, после загрузки документа, в этот регистр должна попасть запись о необходимости пересчета прав для данного объекта.

Если запись в очереди есть, но документ все еще не виден — значит, регламентное задание «Обновление ключей доступа» еще не отработало или завершилось с ошибкой. Если же записи в очереди вообще не появляются после обмена — проблема в самом коде загрузки.

Решение 1: Принудительное обновление ключей в обработчике обмена

Чтобы решить проблему программно, мы можем внедрить вызов обновления доступа непосредственно в логику обмена. После того как документ ЗаявкаНаРасходованиеДенежныхСредств был создан и записан, необходимо вызвать метод БСП, который принудительно зарегистрирует объект в очереди на обновление прав.

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


// Подготовим массив со ссылкой на загруженный документ
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаДокумент);

// Вызываем метод БСП для обновления ключей доступа
УправлениеДоступом.ОбновитьОбъектыПриЗаписи(МассивОбъектов);

Этот метод гарантирует, что система «узнает» о новом документе и сформирует для него необходимые ключи доступа, даже если запись происходила в режиме ЗагрузкаДанных = Истина.

Решение 2: Проверка реквизита «Группа доступа»

В 1С:ERP у многих документов есть скрытый реквизит ГруппаДоступа. Он заполняется автоматически при интерактивной записи на основании настроек программы. Проанализируем ситуацию: если при загрузке из ЗУП этот реквизит остается пустым, система RLS может просто не понимать, к какому сегменту прав отнести данный документ. В результате он становится недоступен всем, кроме администраторов.

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

Решение 3: Проверка подписок на события

Проанализируем подписки на события в вашей конфигурации. За обновление прав обычно отвечают подписки вида ЗаписатьКлючиДоступа.... Проверьте, не добавлены ли в систему расширения или доработки, которые блокируют выполнение этих подписок. Особенно это актуально для релизов ветки 2.5.22, где механизмы производительного RLS проходили стадию активной стабилизации.

В более поздних релизах (например, 2.5.26 и выше) многие ошибки в работе БСП были исправлены. Если у вас нет возможности быстро обновить конфигурацию, рекомендуется использовать ручной вызов обновления через УправлениеДоступом, описанный выше.

Использование консоли запросов для диагностики

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

  1. Откроем консоль запросов под обычным пользователем.
  2. Выполним простой запрос: ВЫБРАТЬ * ИЗ Документ.ЗаявкаНаРасходованиеДенежныхСредств ГДЕ Ссылка = &НужнаяСсылка.
  3. Если запрос возвращает результат, а в динамическом списке документа нет — проблема в настройках самого списка или кэше.
  4. Если запрос не возвращает результат — значит, RLS отрабатывает и блокирует запись на уровне платформы из-за отсутствия ключей.

Заключение

Подводя итог, можно сказать, что «невидимость» документов после обмена — это классический симптом рассинхронизации основной таблицы данных и таблиц ключей доступа БСП. Основное решение заключается в том, чтобы заставить систему пересчитать права для загруженных объектов. Рассмотрим это как обязательный этап постобработки данных при любой программной загрузке в современных конфигурациях на базе 1С:ERP и 1С:КА.

Не забывайте также проверять регламентное задание «Обновление ключей доступа» — оно должно работать стабильно и без ошибок, так как именно оно является «двигателем», обеспечивающим актуальность прав доступа в системе.

← На главную