Как запретить изменение записанных спецификаций номенклатуры в 1С:УПП 1.3?

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

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

Стандартный механизм «Дата запрета изменения данных» для этой цели не подходит, так как в типовой реализации УПП 1.3 он контролирует документы и периодические регистры по дате, не распространяясь на элементы справочников, такие как СправочникСсылка.СпецификацииНоменклатуры.

Разберем подробнее наиболее надежные и практичные способы решения этой задачи.

Способ 1. Добавление подписки на событие с сохранением конфигурации на поддержке

Самый гибкий и технически чистый способ — добавление новой подписки на событие. Для этого не требуется полностью снимать конфигурацию с поддержки. Достаточно включить режим «Редактируется с сохранением поддержки» и добавить новый объект метаданных, не изменяя типовые модули.

В типовом справочнике СпецификацииНоменклатуры уже присутствует реквизит Состояние (со значениями «Подготовлен», «Утвержден», «Закрыт»). Мы можем перехватывать попытку записи объекта и блокировать ее, если спецификация уже была сохранена в базе или находится в статусе «Утвержден».

Разберем по шагам создание такой проверки:

  1. Открываем конфигуратор и добавляем новую подписку на событие, например, ЗапретИзмененияСпецификацийПередЗаписью.
  2. В свойстве Источник выбираем СправочникОбъект.СпецификацииНоменклатуры.
  3. В свойстве Событие выбираем ПередЗаписью.
  4. Создаем новый нетиповой общий модуль (или используем существующий модуль для доработок) и прописываем процедуру-обработчик.

Посмотрим на пример реализации кода процедуры:


Процедура ЗапретИзмененияСпецификацийПередЗаписью(Источник, Отказ) Экспорт

    // Полным правам и администраторам разрешаем редактирование
    Если РольДоступна("ПолныеПрава") Тогда
        Возврат;
    КонецЕсли;

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

КонецПроцедуры

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

Способ 2. Ограничение прав на уровне записей (RLS)

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

Проанализируем ситуацию с настройкой ограничений прав доступа:

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

Этот вариант не требует написания программного кода в модулях событий, однако требует контроля при обновлении ролей конфигурации поставщика.

Способ 3. Подключение штатного механизма версионирования объектов

Если бизнес-процесс требует не только блокировки, но и прозрачного аудита (кто именно, когда и какую строку в составе спецификации изменил), в УПП 1.3 рекомендуется включить встроенную подсистему версионирования.

Выясним порядок действий для включения истории изменений:

  1. Переходим в режим «1С:Предприятие» под пользователем с полными правами.
  2. Открываем форму настройки версионирования объектов (через сервисное меню настройки программы).
  3. Находим справочник Спецификации номенклатуры и переводим его в режим «Версионировать при записи».

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

← На главную