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