В процессе интеграции систем 1С:ЗУП и 1С:ERP часто возникает неприятная ситуация: документы ЗаявкаНаРасходованиеДенежныхСредств, созданные автоматически в результате обмена, видны только пользователям с полными правами. Рядовые сотрудники (казначеи, бухгалтеры) не видят их в списках до тех пор, пока администратор не зайдет в документ и не нажмет кнопку «Записать». Рассмотрим детально причины этого поведения и способы исправления ситуации.
В современных редакциях 1С:ERP 2.5 используется механизм, известный как производительный RLS (ограничение доступа на уровне записей). В отличие от классического RLS, который добавляет условия непосредственно в каждый запрос к базе данных, производительный режим работает через вспомогательные таблицы — ключи доступа.
Проанализируем, что происходит при создании документа:
КлючиДоступаКОбъектам и КлючиДоступаПользователей.Проблема «невидимости» заключается в том, что при загрузке данных через универсальный обмен или Enterprise Data, эти ключи часто не создаются автоматически. Выясним, почему это происходит.
При обмене данными почти всегда устанавливается свойство ЗагрузкаДанных = Истина. Это отключает большинство проверок в модулях объектов и подписки на события, чтобы ускорить процесс загрузки и избежать конфликтов. Однако именно в этих подписках зачастую заложен вызов механизмов Библиотеки стандартных подсистем (БСП), отвечающих за обновление прав.
Рассмотрим, как система ведет себя в этом случае. Даже если вы программно сбрасываете флаг ЗагрузкаДанных в модуле объекта, это не гарантирует корректного срабатывания всех механизмов распределенного доступа, так как Enterprise Data имеет свои особенности обработки объектов в модулях менеджера или через специализированные правила обработки.
Если документ создан, но не виден, первым делом нам необходимо проверить состояние очереди обновления прав. Посмотрим на регистр сведений ОчередьОбновленияКлючейДоступа. В норме, после загрузки документа, в этот регистр должна попасть запись о необходимости пересчета прав для данного объекта.
Если запись в очереди есть, но документ все еще не виден — значит, регламентное задание «Обновление ключей доступа» еще не отработало или завершилось с ошибкой. Если же записи в очереди вообще не появляются после обмена — проблема в самом коде загрузки.
Чтобы решить проблему программно, мы можем внедрить вызов обновления доступа непосредственно в логику обмена. После того как документ ЗаявкаНаРасходованиеДенежныхСредств был создан и записан, необходимо вызвать метод БСП, который принудительно зарегистрирует объект в очереди на обновление прав.
Пример кода, который можно разместить в обработчике «После загрузки» или в расширении модуля менеджера при обработке синхронизации:
// Подготовим массив со ссылкой на загруженный документ
МассивОбъектов = Новый Массив;
МассивОбъектов.Добавить(СсылкаНаДокумент);
// Вызываем метод БСП для обновления ключей доступа
УправлениеДоступом.ОбновитьОбъектыПриЗаписи(МассивОбъектов);
Этот метод гарантирует, что система «узнает» о новом документе и сформирует для него необходимые ключи доступа, даже если запись происходила в режиме ЗагрузкаДанных = Истина.
В 1С:ERP у многих документов есть скрытый реквизит ГруппаДоступа. Он заполняется автоматически при интерактивной записи на основании настроек программы. Проанализируем ситуацию: если при загрузке из ЗУП этот реквизит остается пустым, система RLS может просто не понимать, к какому сегменту прав отнести данный документ. В результате он становится недоступен всем, кроме администраторов.
Выясним, заполняется ли этот реквизит в вашем случае. Если нет — необходимо либо донастроить правила обмена, чтобы передавать корректное значение, либо добавить код в обработчик ПередЗаписью, который будет вычислять группу доступа программно.
Проанализируем подписки на события в вашей конфигурации. За обновление прав обычно отвечают подписки вида ЗаписатьКлючиДоступа.... Проверьте, не добавлены ли в систему расширения или доработки, которые блокируют выполнение этих подписок. Особенно это актуально для релизов ветки 2.5.22, где механизмы производительного RLS проходили стадию активной стабилизации.
В более поздних релизах (например, 2.5.26 и выше) многие ошибки в работе БСП были исправлены. Если у вас нет возможности быстро обновить конфигурацию, рекомендуется использовать ручной вызов обновления через УправлениеДоступом, описанный выше.
Чтобы окончательно убедиться, что дело именно в ключах доступа, выполним небольшой эксперимент под пользователем с ограниченными правами:
ВЫБРАТЬ * ИЗ Документ.ЗаявкаНаРасходованиеДенежныхСредств ГДЕ Ссылка = &НужнаяСсылка.Подводя итог, можно сказать, что «невидимость» документов после обмена — это классический симптом рассинхронизации основной таблицы данных и таблиц ключей доступа БСП. Основное решение заключается в том, чтобы заставить систему пересчитать права для загруженных объектов. Рассмотрим это как обязательный этап постобработки данных при любой программной загрузке в современных конфигурациях на базе 1С:ERP и 1С:КА.
Не забывайте также проверять регламентное задание «Обновление ключей доступа» — оно должно работать стабильно и без ошибок, так как именно оно является «двигателем», обеспечивающим актуальность прав доступа в системе.