Многие разработчики и администраторы баз данных сталкиваются с ситуацией, когда в конфигурации 1С:Управление торговлей 10.3 при попытке провести документ реализации от лица пользователя со стандартными правами (например, «Менеджер по продажам») система выдает ошибку. Документ записывается, но не проводится, а в окне сообщений появляется текст: «У пользователя недостаточно прав на исполнение операции над базой данных». Ошибка, как правило, ссылается на метод Выполнить общего модуля партионного учета.
Давайте подробно разберем эту проблему, выясним причину ее возникновения и рассмотрим несколько надежных способов ее решения.
Первым делом нам необходимо понять, на каком именно этапе система блокирует действие пользователя. Ошибка указывает на строку кода, где выполняется запрос. Чтобы увидеть сам запрос, воспользуемся отладчиком.
Поставим точку останова на строке, вызывающей ошибку (например, Возврат Запрос.Выполнить().Выгрузить(...)). Когда выполнение остановится, вычислим выражение Запрос.Текст. Мы увидим масштабный запрос, который обращается к регистру сведений СписанныеТовары и внутренне соединяется с виртуальной таблицей остатков регистра накопления ПартииТоваровНаСкладах.
Проблема кроется в архитектуре регистра накопления ПартииТоваровНаСкладах. У этого регистра есть измерение ДокументОприходования, которое имеет составной тип данных (включает в себя различные документы, образующие партию). Когда запрос обращается к этому измерению, платформа 1С автоматически проверяет наличие у текущего пользователя прав на чтение документов, которые являются значениями этого измерения.
Если менеджер по продажам не имеет прав на чтение документов поступления, запрос упадет с ошибкой прав доступа. Разберем по шагам, как исправить эту ситуацию через настройку ролей.
ПоступлениеТоваровУслуг и установим для него право Чтение.ПартииТоваровНаСкладах и ПродажиСебестоимость.Важный нюанс: партию товара может образовывать не только документ поступления. Если товар поступил на склад в результате других операций, менеджеру потребуются права на чтение и этих документов. К партиообразующим документам относятся:
АвансовыйОтчетОприходованиеТоваровПеремещениеТоваровВводНачальныхОстатковСледовательно, для полного устранения ошибки галочку «Чтение» необходимо проставить для всех видов документов, которые могут выступать документами оприходования.
Рассмотрим ситуацию, когда права на чтение документа выданы, но ошибка все равно появляется. В конфигурации УТ 10.3 часто используется механизм RLS (ограничение доступа на уровне записей), например, по складам, организациям или контрагентам.
Если в запросе партионного учета не используется ключевое слово РАЗРЕШЕННЫЕ, то при попытке прочитать партию, образованную документом другой организации (к которой у менеджера нет доступа по RLS), запрос полностью прервется с ошибкой базы данных. Разработчики типовой УТ 10.3 не везде указывали это ключевое слово в старых релизах, что приводит к конфликтам при жестких ограничениях.
Иногда возникает парадокс: этот же запрос с такими же параметрами во внешней обработке выполняется без проблем, а при проведении документа — ругается на права. Выясним причину.
Все зависит от контекста выполнения. Если код выполняется в серверном общем модуле без включения привилегированного режима, платформа жестко проверяет права. Внешние обработки или обработки проведения по партиям часто запускаются с использованием метода УстановитьПривилегированныйРежим со значением Истина. В привилегированном режиме платформа полностью отключает проверку прав доступа (включая RLS), поэтому запрос отрабатывает корректно для любого пользователя.
Раздача прав на чтение закупочных документов менеджерам по продажам не всегда допустима с точки зрения политики безопасности компании. Кроме того, расчет партий по ФИФО/ЛИФО в момент проведения документа сильно замедляет работу менеджера и вызывает блокировки таблиц базы данных при активной параллельной работе.
Посмотрим на альтернативное и самое правильное решение для высоконагруженных баз УТ 10.3 — использование отложенного партионного учета.
Теперь менеджеры будут проводить документы реализации мгновенно. Система сформирует движения только по товарам на складах и взаиморасчетам. Никаких обращений к партиям в этот момент происходить не будет, а значит, ошибка прав доступа исчезнет навсегда.
Для расчета себестоимости и списания партий необходимо настроить регламентное задание Проведение по партиям, которое будет запускаться автоматически (например, каждую ночь или раз в несколько часов) под пользователем с полными правами. Либо выполнять обработку ПроведениеПоПартиям вручную от лица администратора. Это кардинально ускорит работу отдела продаж и обезопасит коммерческие данные от лишних глаз.