Как в УТ 11.4 настроить права на создание документа реализации без возможности проведения?

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

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

Особенности работы ролей в расширениях конфигурации

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

Выясним причину блокировки: даже если в роли расширения для документа РеализацияТоваровУслуг проставлены галочки «Чтение», «Добавление» и «Изменение», форма может открыться в режиме только для просмотра, если не проставлены права на конкретные реквизиты. Разберем по шагам, что нужно сделать в расширении:

  1. Откроем роль в расширении.
  2. Найдем объект РеализацияТоваровУслуг.
  3. Перейдем к списку реквизитов, табличных частей и их реквизитов.
  4. Обязательно проставим галочки «Просмотр» и «Редактирование» для каждого реквизита и каждой табличной части в отдельности.
  5. Особое внимание уделим стандартным реквизитам (Дата, Номер, Проведен, ПометкаУдаления) — без прав на них форма также может блокироваться.

Как показывает практика, явное указание прав на подчиненные объекты в расширении — это самый надежный способ избежать «серой» формы документа.

Разделение прав на проведение по складам

Рассмотрим более сложную ситуацию: менеджеру разрешено проводить реализации по одному складу (где он выступает и кладовщиком), но запрещено по остальным. В УТ 11.4 права доступа часто завязаны на RLS (Record Level Security).

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

Посмотрим на пример кода, который можно внедрить в расширение:


&После("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
        // Проверяем, есть ли у пользователя специальная роль на проведение
        Если Не РольДоступна("РазрешитьПроведениеРеализаций") Тогда
            
            // Если роли нет, проверяем конкретный склад
            МассивРазрешенныхСкладов = УправлениеДоступом.РазрешенныеЗначения(Тип("СправочникСсылка.Склады"));
            
            Если МассивРазрешенныхСкладов.Найти(ЭтотОбъект.Склад) = Неопределено Тогда
                РежимЗаписи = РежимЗаписиДокумента.Запись;
                ОбщегоНазначенияКлиентСервер.СообщитьПользователю("У вас недостаточно прав для проведения реализации по складу " + ЭтотОбъект.Склад);
            КонецЕсли;
            
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Этот метод хорош тем, что он не вызывает критическую ошибку транзакции, а просто принудительно меняет режим записи с «Проведение» на «Запись», позволяя менеджеру сохранить черновик документа.

Использование программных фильтров БСП для получения прав

Часто возникает вопрос: как получить список складов, с которых пользователю разрешена отгрузка? В УТ 11.4, построенной на базе Библиотеки стандартных подсистем (БСП), для этого не нужно писать сложные запросы к таблицам прав. Проанализируем возможности функции УправлениеДоступом.РазрешенныеЗначения.

Данная функция возвращает массив ссылок на объекты, к которым у текущего пользователя есть права. Мы можем использовать её для фильтрации логики в документах:


// Получаем список всех складов, к которым есть доступ на изменение
СписокСкладов = УправлениеДоступом.РазрешенныеЗначения(Тип("СправочникСсылка.Склады"));

// Проверяем склад документа
Если СписокСкладов.Найти(Объект.Склад) <> Неопределено Тогда
    // Логика разрешенного действия
КонецЕсли;

Также стоит учитывать Параметры сеанса. В актуальных версиях платформы 8.3 права RLS кэшируются. Информацию о доступных значениях можно извлечь из параметра сеанса ДоступныеЗначенияПравДоступа, что работает значительно быстрее прямых запросов в циклах.

Влияние статусов и прав на изменение проведенных документов

Разберем еще один важный аспект: если менеджер все же смог провести документ (или это сделал за него другой сотрудник), форма может заблокироваться из-за статуса. В УТ 11.4 реализации имеют статусы: К предоплате, К отгрузке, Отгружено.

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

Использование прав «Интерактивное проведение»

Выясним разницу между правом Проведение и Интерактивное проведение в метаданных роли. Это ключевой момент для решения задачи «создавать, но не проводить»:

  1. Право Проведение: позволяет документу быть проведенным программно или в транзакции. Если его убрать совсем, документ не сможет иметь статус «Проведен».
  2. Право Интерактивное проведение: отвечает за кнопку «Провести» в форме и за действие при нажатии «Провести и закрыть».

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

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

Подводя итог, можно сказать, что решение проблемы с правами в расширениях УТ 11.4 требует комплексного подхода. Рассмотрим краткое резюме наших действий:

  1. Всегда проверяйте права на каждый реквизит внутри роли расширения. Не полагайтесь на автоматическое наследование прав от родительского объекта.
  2. Для тонкой настройки прав по складам используйте функции БСП, такие как УправлениеДоступом.РазрешенныеЗначения.
  3. Вместо полного запрета проведения через роли, рассмотрите вариант программного перехвата в ПередЗаписью, чтобы информировать пользователя и сохранять документ как черновик.
  4. Убедитесь, что у пользователя есть права на просмотр стандартных реквизитов документа, иначе форма останется недоступной для редактирования.

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

← На главную