Как исправить ошибку прав доступа при списании партий в 1С:УТ 10.3?

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

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

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

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

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

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

Проблема кроется в архитектуре регистра накопления ПартииТоваровНаСкладах. У этого регистра есть измерение ДокументОприходования, которое имеет составной тип данных (включает в себя различные документы, образующие партию). Когда запрос обращается к этому измерению, платформа 1С автоматически проверяет наличие у текущего пользователя прав на чтение документов, которые являются значениями этого измерения.

Решение 1: Настройка прав доступа к документам и регистрам

Если менеджер по продажам не имеет прав на чтение документов поступления, запрос упадет с ошибкой прав доступа. Разберем по шагам, как исправить эту ситуацию через настройку ролей.

  1. Откроем конфигуратор и перейдем к роли МенеджерПоПродажам (или той, под которой работает пользователь).
  2. Найдем документ ПоступлениеТоваровУслуг и установим для него право Чтение.
  3. Проверим права на регистры накопления. Обязательно должны стоять галочки на чтение для регистров ПартииТоваровНаСкладах и ПродажиСебестоимость.

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

Следовательно, для полного устранения ошибки галочку «Чтение» необходимо проставить для всех видов документов, которые могут выступать документами оприходования.

Влияние RLS (ограничения прав на уровне записей)

Рассмотрим ситуацию, когда права на чтение документа выданы, но ошибка все равно появляется. В конфигурации УТ 10.3 часто используется механизм RLS (ограничение доступа на уровне записей), например, по складам, организациям или контрагентам.

Если в запросе партионного учета не используется ключевое слово РАЗРЕШЕННЫЕ, то при попытке прочитать партию, образованную документом другой организации (к которой у менеджера нет доступа по RLS), запрос полностью прервется с ошибкой базы данных. Разработчики типовой УТ 10.3 не везде указывали это ключевое слово в старых релизах, что приводит к конфликтам при жестких ограничениях.

Почему внешние обработки работают без ошибок?

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

Все зависит от контекста выполнения. Если код выполняется в серверном общем модуле без включения привилегированного режима, платформа жестко проверяет права. Внешние обработки или обработки проведения по партиям часто запускаются с использованием метода УстановитьПривилегированныйРежим со значением Истина. В привилегированном режиме платформа полностью отключает проверку прав доступа (включая RLS), поэтому запрос отрабатывает корректно для любого пользователя.

Решение 2: Отложенное проведение по партиям (Оптимальная практика)

Раздача прав на чтение закупочных документов менеджерам по продажам не всегда допустима с точки зрения политики безопасности компании. Кроме того, расчет партий по ФИФО/ЛИФО в момент проведения документа сильно замедляет работу менеджера и вызывает блокировки таблиц базы данных при активной параллельной работе.

Посмотрим на альтернативное и самое правильное решение для высоконагруженных баз УТ 10.3 — использование отложенного партионного учета.

  1. Откроем настройки Учетной политики (Управленческий учет).
  2. Снимем галочку Списывать партии при проведении документов.
  3. Сохраним настройки.

Теперь менеджеры будут проводить документы реализации мгновенно. Система сформирует движения только по товарам на складах и взаиморасчетам. Никаких обращений к партиям в этот момент происходить не будет, а значит, ошибка прав доступа исчезнет навсегда.

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

← На главную