При работе в конфигурации 1С:Бухгалтерия предприятия 3.0 (начиная с релизов 3.0.148 и выше) пользователи могут столкнуться с парадоксальной ситуацией. При формировании стандартных отчетов, таких как Оборотно-сальдовая ведомость (ОСВ) или ОСВ по счету, в верхней части окна появляется желтая информационная панель с текстом «В отчете расходятся суммы остатков и оборотов» и кнопкой «Пересчитать». Одновременно с этим система может выдавать критическую ошибку: «У пользователя недостаточно прав на исполнение операции над базой данных».
Особенность проблемы заключается в том, что под пользователем с полными правами отчет строится корректно, а данные сходятся. Чтобы понять, почему поведение системы отличается, полезно провести сравнение ролей пользователей. Разберем подробно, почему это происходит и как восстановить работоспособность системы для обычных пользователей.
Проанализируем ситуацию: платформа 1С использует виртуальные таблицы для быстрого получения итогов (остатков и оборотов) по регистру бухгалтерии Хозрасчетный. Когда обычный пользователь формирует отчет, система накладывает на запрос механизмы RLS (Record Level Security) — ограничение прав на уровне записей. Если в коде запроса RLS или в настройках профиля групп доступа есть ошибка, или если данные в информационной базе не соответствуют новым правилам проверки, возникает конфликт.
Рассмотрим основные причины подробнее:
NULL или ПустаяСсылка), новый алгоритм RLS может некорректно отсекать эти записи.Прежде всего, нам необходимо убедиться, что проблема носит программный характер, а не является следствием реального повреждения базы данных. Выполним следующие действия:
Проанализируем работу отчета под пользователем с полными правами. Если ошибка исчезает и кнопка «Пересчитать» не появляется — физические итоги в базе данных, скорее всего, в порядке. Если же ошибка сохраняется и под администратором — необходимо выполнить стандартный пересчет итогов через Тестирование и исправление (ТиИ) или через консоль управления итогами.
Для пересчета итогов в обычном режиме предприятия перейдем в раздел Администрирование — Обслуживание — Управление итогами и агрегатами. Также стоит проверить информацию о структуре хранения базы данных, чтобы исключить ошибки в служебных таблицах. Проверим дату, по которую рассчитаны итоги, и при необходимости установим ее на текущий месяц.
Если диагностика подтвердила, что под полными правами все работает, значит, корень проблемы в механизме ограничений. В таких случаях может потребоваться точечный пересчет прав доступа для пользователя. Рассмотрим процедуру принудительного обновления вспомогательных данных. В конфигурациях на базе БСП для этого предусмотрены специальные процедуры.
Попробуем запустить обновление программно. Для этого можно воспользоваться внешней обработкой или встроенной консолью запросов с возможностью выполнения кода:
// Принудительное обновление вспомогательных данных прав доступа
ПараметрыОбновления = Справочники.ИдентификаторыОбъектовМетаданных.ПараметрыОбновленияДанных();
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(ПараметрыОбновления);
УправлениеПравамиДоступа.ОбновитьВспомогательныеДанные();
Также рекомендуется запустить процедуру обновления информационной базы вручную, если есть подозрение, что регламентное задание при обновлении релиза отработало некорректно. Это можно сделать, запустив базу с параметром /C ЗапуститьОбновлениеИнформационнойБазы.
Разберем ситуацию, когда ошибка «Недостаточно прав» связана с конкретной организацией. В некоторых случаях после обновления слетают настройки в Профилях групп доступа. Помочь в диагностике может внешняя обработка на просмотр прав и профилей групп доступа. Посмотрим на алгоритм исправления:
КлючиДоступаКОбъектам.Выясним причину, почему RLS может блокировать итоги только по одной организации. Часто это связано с тем, что в регистре бухгалтерии появились записи с пустой организацией или битой ссылкой, которую RLS не может обработать. Проанализируем состояние регистра с помощью простого запроса:
ВЫБРАТЬ
Хозрасчетный.Регистратор,
Хозрасчетный.Период,
Хозрасчетный.Организация
ИЗ
РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
ГДЕ
Хозрасчетный.Организация ЕСТЬ NULL
ИЛИ Хозрасчетный.Организация.Ссылка ЕСТЬ NULL
Если запрос вернет строки, это означает, что у нас есть документы, которые «ломают» логику прав. Такие записи необходимо исправить, заполнив организацию корректным значением.
Для продвинутых программистов рассмотрим метод вычисления конкретного поля, на которое не хватает прав. Включим в Конфигураторе замер производительности. Запустим формирование ОСВ под пользователем. После остановки замера проанализируем стек вызовов. Ошибка прав обычно возникает при обращении к методу СформироватьОтчет(). В технологическом журнале (если он настроен) можно увидеть текст SQL-запроса, который был прерван системой безопасности.
Важный момент: Обратите внимание на роль ЧтениеДанныхБухгалтерии. В некоторых релизах 3.0.150 наблюдалась ошибка, когда в этой роли были сняты права на чтение некоторых измерений регистра Хозрасчетный (например, «Подразделение»), что приводило к невозможности расчета виртуальных таблиц итогов для RLS.
Подводя итог, отметим, что сообщение «В отчете расходятся суммы остатков и оборотов» в данном контексте является лишь следствием того, что платформа не смогла получить полный набор данных из-за ограничений прав доступа. Не спешите делать трудоемкий пересчет итогов всей базы, если проблема локализована только у обычных пользователей.
Рекомендуемая последовательность действий:
Организация и Подразделение в проводках.