Как правильно ограничить доступ к закупочным ценам в 1С:Комплексная автоматизация 1.1 без потери работоспособности системы?

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

Задача по ограничению прав доступа к определенным типам цен часто возникает в крупных торговых компаниях. Однако попытка решить её «в лоб» через механизмы RLS (ограничение доступа на уровне записей) в такой конфигурации как КА 1.1 часто приводит к непредсказуемым последствиям. Давайте разберем, почему возникают ошибки и какие существуют надежные подходы для реализации этого требования.

Почему RLS на типы цен вызывает сбои?

Основная проблема заключается в механизме формирования расчетных цен. В КА 1.1 многие цены являются зависимыми от базовых (например, закупочных). Когда менеджер пытается открыть документ, система выполняет запрос к данным. Если у пользователя нет прав на чтение базовой цены, движок запросов 1С при попытке вычисления зависимой цены возвращает ошибку доступа.

Добавление ключевого слова РАЗРЕШЕННЫЕ в типовые запросы помогает временно, но это крайне ненадежный путь. Во-первых, вы рискуете нарушить работу множества отчетов и обработок, которые вы можете не учесть. Во-вторых, каждое обновление конфигурации будет требовать ручной проверки и повторного внесения правок, что делает систему крайне нестабильной.

Решение 1: Переход к статическому ценообразованию

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

  1. Откажитесь от использования формул в типе цены, которые ссылаются на закупочные цены напрямую при чтении.
  2. Настройте регламентное задание, которое будет запускаться, например, ночью.
  3. Это задание будет выполнять расчет цен по нужным алгоритмам и записывать готовые значения в регистр ЦеныНоменклатуры.

В результате, когда менеджер открывает документ, он обращается к уже рассчитанной, «готовой» цене. Поскольку эта цена не требует обращения к «запрещенной» базовой цене для вычисления, RLS срабатывает корректно, и ошибок не возникает.

Решение 2: Использование подписки на событие

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

При проведении документа, например ПоступлениеТоваровУслуг, в котором фиксируются закупочные цены, мы инициируем фоновую обработку для пересчета производных цен. Механизм ПодпискиНаСобытия позволяет нам перехватить момент записи документа и корректно обновить зависимые цены.


Процедура ПриЗаписиДокументаПоступления(Источник, Отказ) Экспорт
    // Логика запуска пересчета зависимых цен
    // Используем фоновое задание, чтобы не тормозить работу пользователя
    ПараметрыЗадания = Новый Структура("Номенклатура", Источник.Товары.ВыгрузитьКолонку("Номенклатура"));
    Задание = ФоновыеЗадания.Выполнить("МодульРасчетаЦен.ПересчитатьЦены", ПараметрыЗадания);
КонецПроцедуры

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

Что важно учитывать при выборе пути

Разберем важные нюансы, которые помогут избежать «выгребания косяков» после внедрения:

Подводя итог, настоятельно рекомендуем уходить от динамических расчетов в сторону статических значений. Это единственный способ сохранить производительность системы КА 1.1 и гарантировать отсутствие ошибок прав доступа при работе пользователей.

← На главную