Почему в 1С пропадает право на отмену проведения документа и как это исправить

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

В процессе администрирования прав доступа в 1С:Предприятие 8 программисты и системные администраторы часто сталкиваются с ситуацией, когда, казалось бы, все необходимые права пользователю даны, но кнопка Отмена проведения остается недоступной или пункт меню просто пропадает. Особенно остро эта проблема проявляется при обновлении платформы с устаревших релизов (например, ветки 8.2.12) на более современные (8.2.18, 8.3.x). Рассмотрим подробно, почему так происходит, и разберем внутреннюю логику платформы, которая превращает это поведение в штатную «фичу». Для оперативной проверки прав ролей на конкретный документ подойдёт инструмент для быстрой проверки прав доступа на объект метаданных.

Анализ проблемы: права есть, а кнопки нет

Представим типовую ситуацию. У нас есть документ РеализацияТоваровУслуг или любой другой документ Д. Мы создаем роль Р, в которой для этого документа настроены следующие ограничения:

  1. Разрешено Чтение, Просмотр, Добавление и Изменение.
  2. Разрешено Проведение и Отмена проведения.
  3. Разрешена Интерактивная отмена проведения.
  4. ЗАПРЕЩЕНО: Интерактивное удаление и Интерактивное изменение проведенных.

Логика администратора понятна: мы хотим, чтобы пользователь мог отменить проведение, если ошибся, но не мог «тихо» поменять реквизиты в уже проведенном документе (например, дату или сумму), не распроводя его. Однако на практике в формах списков и в самих документах команда «Отменить проведение» становится серой или исчезает. Как только мы добавляем галочку Интерактивное изменение проведенных, всё начинает работать. Выясним причину такой взаимосвязи.

Изменение логики платформы в новых релизах

Проанализируем, как платформа 1С интерпретирует действия пользователя. Долгое время в ранних версиях 1С:Предприятие 8.0 и 8.1 право «Интерактивная отмена проведения» считалось независимым. Однако, начиная с релизов платформы 8.2.15 и выше, архитектура проверки прав была усилена.

С точки зрения ядра платформы, любая манипуляция с объектом, который имеет статус Проведен = Истина, рассматривается как изменение состояния проведенного документа. Команда «Отмена проведения» — это не просто смена флага, это сложная транзакционная операция, которая:

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

Разбор по шагам: как настроить права правильно

Рассмотрим, какой минимальный набор прав необходим в современных версиях 1С (включая 8.3), чтобы пользователь мог штатно работать с документами:

  1. Редактирование — базовое право, позволяющее в принципе открывать объект на запись.
  2. Отмена проведения — технологическое право, разрешающее выполнение операции снятия с проведения на уровне базы данных.
  3. Интерактивная отмена проведения — право, отвечающее за видимость соответствующей команды в интерфейсе.
  4. Интерактивное изменение проведенных — критически важное право, разрешающее системе допустить пользователя к действиям над объектом, который уже проведен.

Важный нюанс: Многие опасаются, что включение права «Интерактивное изменение проведенных» позволит пользователям менять дату или контрагента в проведенном документе без перепроведения. Однако в типовых конфигурациях (на базе БП, УТ, ERP) это регулируется дополнительно на уровне кода (в процедурах ПередЗаписью или через механизм подписок на события), либо через «Даты запрета редактирования».

Программная отмена проведения vs Интерактивная

Нужно четко разделять действия пользователя в интерфейсе и работу программного кода. Если мы выполняем отмену проведения программно на сервере, проверка прав ведет себя иначе. Рассмотрим пример кода:


// Программная отмена проведения не требует права "Интерактивное изменение"
ОбъектДокумент = СсылкаНаДокумент.ПолучитьОбъект();
ОбъектДокумент.Записать(РежимЗаписиДокумента.ОтменаПроведения);

Этот код сработает, если у роли есть базовое право Отмена проведения. Ограничение Интерактивное изменение проведенных на него не распространяется, если только программист явно не вызвал метод ВыполнитьПроверкуПрав(). Проблема, обсуждаемая на форумах, касается именно пользовательского интерфейса («толстого» или «тонкого» клиента), где платформа сама управляет доступностью элементов.

Влияние на прикладной код и обработчики

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


Процедура ОбработкаУдаленияПроведения(Отказ)
    // Попытка записи данных в объект в момент отмены проведения
    ЭтотОбъект.ОтветственныйЗаОтмену = ПараметрыСеанса.ТекущийПользователь;
    // Если нет права на "Изменение", здесь возникнет ошибка прав доступа
КонецПроцедуры

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

Итоги и рекомендации

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

Как действовать администратору:

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

← На главную