Почему в ОСВ расходятся суммы остатков и оборотов и как исправить ошибку прав доступа

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

При работе в конфигурации 1С:Бухгалтерия предприятия 3.0 (начиная с релизов 3.0.148 и выше) пользователи могут столкнуться с парадоксальной ситуацией. При формировании стандартных отчетов, таких как Оборотно-сальдовая ведомость (ОСВ) или ОСВ по счету, в верхней части окна появляется желтая информационная панель с текстом «В отчете расходятся суммы остатков и оборотов» и кнопкой «Пересчитать». Одновременно с этим система может выдавать критическую ошибку: «У пользователя недостаточно прав на исполнение операции над базой данных».

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

Выясняем причину возникновения ошибки

Проанализируем ситуацию: платформа 1С использует виртуальные таблицы для быстрого получения итогов (остатков и оборотов) по регистру бухгалтерии Хозрасчетный. Когда обычный пользователь формирует отчет, система накладывает на запрос механизмы RLS (Record Level Security) — ограничение прав на уровне записей. Если в коде запроса RLS или в настройках профиля групп доступа есть ошибка, или если данные в информационной базе не соответствуют новым правилам проверки, возникает конфликт.

Рассмотрим основные причины подробнее:

  1. Несоответствие прав на таблицы итогов: После обновления конфигурации могли измениться права на чтение служебных таблиц итогов. Если у пользователя есть право на чтение регистра, но механизм RLS «спотыкается» при обращении к таблице итогов, платформа считает, что данные отсутствуют или повреждены.
  2. Ошибки в логике RLS по подразделениям или организациям: В версиях 3.0.148–3.0.150 разработчики внесли существенные изменения в проверку прав по подразделениям. Если в базе ведется учет по подразделениям, но в некоторых документах (например, в ручных операциях) они не заполнены (значение NULL или ПустаяСсылка), новый алгоритм RLS может некорректно отсекать эти записи.
  3. Кэширование прав доступа: Система 1С хранит вспомогательные данные прав доступа в специальных регистрах сведений. После наката обновления эти данные могут не обновиться автоматически.

Шаг 1: Диагностика прав и итогов

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

Проанализируем работу отчета под пользователем с полными правами. Если ошибка исчезает и кнопка «Пересчитать» не появляется — физические итоги в базе данных, скорее всего, в порядке. Если же ошибка сохраняется и под администратором — необходимо выполнить стандартный пересчет итогов через Тестирование и исправление (ТиИ) или через консоль управления итогами.

Для пересчета итогов в обычном режиме предприятия перейдем в раздел Администрирование — Обслуживание — Управление итогами и агрегатами. Также стоит проверить информацию о структуре хранения базы данных, чтобы исключить ошибки в служебных таблицах. Проверим дату, по которую рассчитаны итоги, и при необходимости установим ее на текущий месяц.

Шаг 2: Обновление вспомогательных данных RLS

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

Попробуем запустить обновление программно. Для этого можно воспользоваться внешней обработкой или встроенной консолью запросов с возможностью выполнения кода:


// Принудительное обновление вспомогательных данных прав доступа
ПараметрыОбновления = Справочники.ИдентификаторыОбъектовМетаданных.ПараметрыОбновленияДанных();
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(ПараметрыОбновления);
УправлениеПравамиДоступа.ОбновитьВспомогательныеДанные();

Также рекомендуется запустить процедуру обновления информационной базы вручную, если есть подозрение, что регламентное задание при обновлении релиза отработало некорректно. Это можно сделать, запустив базу с параметром /C ЗапуститьОбновлениеИнформационнойБазы.

Шаг 3: Проверка настроек профилей групп доступа

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

  1. Перейдем в раздел Администрирование — Настройки пользователей и прав — Группы доступа.
  2. Выберем группу доступа проблемного пользователя.
  3. На вкладке Ограничения доступа проверим значения по виду доступа «Организации».
  4. Попробуем временно установить значение «Все разрешены, исключения отсутствуют». Если отчет начал формироваться — значит, проблема в конкретной записи ограничения по организации в регистре КлючиДоступаКОбъектам.

Шаг 4: Анализ битых ссылок в измерениях регистра

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


ВЫБРАТЬ
    Хозрасчетный.Регистратор,
    Хозрасчетный.Период,
    Хозрасчетный.Организация
ИЗ
    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
ГДЕ
    Хозрасчетный.Организация ЕСТЬ NULL
    ИЛИ Хозрасчетный.Организация.Ссылка ЕСТЬ NULL

Если запрос вернет строки, это означает, что у нас есть документы, которые «ломают» логику прав. Такие записи необходимо исправить, заполнив организацию корректным значением.

Шаг 5: Использование консоли для анализа запроса RLS

Для продвинутых программистов рассмотрим метод вычисления конкретного поля, на которое не хватает прав. Включим в Конфигураторе замер производительности. Запустим формирование ОСВ под пользователем. После остановки замера проанализируем стек вызовов. Ошибка прав обычно возникает при обращении к методу СформироватьОтчет(). В технологическом журнале (если он настроен) можно увидеть текст SQL-запроса, который был прерван системой безопасности.

Важный момент: Обратите внимание на роль ЧтениеДанныхБухгалтерии. В некоторых релизах 3.0.150 наблюдалась ошибка, когда в этой роли были сняты права на чтение некоторых измерений регистра Хозрасчетный (например, «Подразделение»), что приводило к невозможности расчета виртуальных таблиц итогов для RLS.

Резюме и практические рекомендации

Подводя итог, отметим, что сообщение «В отчете расходятся суммы остатков и оборотов» в данном контексте является лишь следствием того, что платформа не смогла получить полный набор данных из-за ограничений прав доступа. Не спешите делать трудоемкий пересчет итогов всей базы, если проблема локализована только у обычных пользователей.

Рекомендуемая последовательность действий:

← На главную