В процессе работы с конфигурацией 1С:Управление торговлей 11.2 (или более свежими версиями на платформе 1С:Предприятие 8.3) пользователи иногда сталкиваются с парадоксальной ситуацией. При попытке просто изменить дату завершения в договоре с клиентом или даже просто при нажатии кнопки «Записать» система выдает ошибку: «Недостаточно прав для проведения». Это вызывает недоумение, так как стандартный договор в 1С — это справочник, а справочники не имеют механизма проведения. В этой статье мы подробно разберем, почему возникает такая ошибка, как ее диагностировать и какие шаги предпринять для решения.
Первым делом нам необходимо выяснить, с каким именно объектом мы имеем дело. В типовых решениях (УТ 11, ERP 2, КА 2) ДоговорыКонтрагентов являются справочниками. Механизм проведения (создание записей в регистрах накопления или бухгалтерии при нажатии «Провести») доступен только для документов.
Если система сообщает о недостатке прав именно для проведения, проанализируем возможные варианты:
ДоговорыКонтрагентов срабатывает программный код, который пытается перепровести связанные с ним документы (например, ЗаказКлиента или РеализацияТоваровУслуг), чтобы обновить в них данные или проверить лимиты по датам.Для того чтобы не гадать, какой именно роли не хватает пользователю, мы должны обратиться к самому надежному источнику информации — Журналу регистрации. Разберем алгоритм действий:
В колонке «Данные» или в детальном описании ошибки будет четко указано имя объекта метаданных. Например, если там написано Документ.ДоговорСКлиентом, значит, в вашей конфигурации договор действительно является документом. Если же там указан другой объект (например, какой-то регистр накопления или связанный документ), значит, ошибка возникает «по цепочке».
Выяснив объект, вызывающий ошибку, проанализируем настройки ролей в Конфигураторе. Нам нужно убедиться, что у пользователя активированы следующие права для проблемного объекта:
Записать(РежимЗаписиДокумента.Проведение).Рассмотрим пример настройки прав для кастомного документа в коде или через профили групп доступа. Если мы обнаружили, что пользователю запрещено проведение, нам нужно либо добавить ему соответствующую роль, либо создать новую.
Если в Журнале регистрации мы видим, что ошибка происходит при записи справочника, но ссылается на другой документ, проанализируем Подписки на события. В Конфигураторе найдем ветку Общие -> Подписки на события. Нас интересуют события ПередЗаписью или ПриЗаписи, где в качестве источника указан СправочникОбъект.ДоговорыКонтрагентов.
Проанализируем программный код в обработчике подписки. Часто там встречается подобная логика:
Процедура ПриЗаписиДоговора(Источник, Отказ) Экспорт
// Если изменилась дата договора, нужно обновить заказы
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ.ЗаказКлиента ГДЕ Договор = &Договор";
Запрос.УстановитьПараметр("Договор", Источник.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектЗаказа = Выборка.Ссылка.ПолучитьОбъект();
ОбъектЗаказа.Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;
КонецПроцедуры
В данном случае, если у пользователя нет прав на Проведение заказов клиентов, он не сможет сохранить договор, так как система попытается перепровести заказы и получит отказ. Решением здесь будет либо предоставление прав на заказы, либо использование механизма УстановитьПривилегированныйРежим(Истина) в коде подписки, чтобы действие выполнялось от имени системы без проверки прав текущего пользователя.
Иногда права на сам объект у пользователя есть, но срабатывает RLS (Record Level Security). Рассмотрим ситуацию: пользователь меняет дату договора на период, который попадает под действие Даты запрета редактирования. Или же договор привязан к организации или подразделению, на которые у пользователя установлен запрет в профиле групп доступа.
Система может выдавать неявную ошибку «Недостаточно прав для проведения», если при пересчете связанных данных (например, движений по регистрам накопления РасчетыСКлиентами) механизм RLS блокирует запись в защищенную область данных.
Чтобы окончательно решить проблему и избежать ее повторения, выполним следующие шаги:
ИнтерактивноеПроведение)./VisibleConfigurableErrors. Это позволит увидеть более развернутый стек ошибки прямо в пользовательском интерфейсе.Резюме: Ошибка чаще всего связана с тем, что «Договор» в вашей системе — это либо нетиповой документ, либо его изменение вызывает цепочку перепроведения других документов. Проверьте роли пользователя на предмет прав Проведение и Изменение для всех связанных объектов, которые система пытается затронуть при записи договора.