Как скрыть остатки других магазинов и запретить их продажу в 1С:Розница 2

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

В сетевой торговле часто возникает ситуация, когда кассиры одного магазина видят остатки товаров в других торговых точках через интерфейс Рабочего места кассира (РМК). В некоторых случаях это полезно для консультации покупателей, однако в конфигурациях типа 1С:Розница 2 или 1С:Розница 8. Аптека это может привести к пересортице и ошибкам, когда кассир случайно пробивает товар, числящийся на другом складе. Разберем подробно, как изолировать данные магазинов друг от друга, используя штатные механизмы и дополнительные настройки.

Настройка ограничения доступа на уровне записей (RLS)

Первым делом проанализируем базовый механизм платформы 1С — RLS (Record Level Security). Именно он отвечает за то, какие данные пользователь может видеть в списках и отчетах, а какие — нет. Рассмотрим пошагово процесс включения и настройки этого функционала:

  1. Перейдем в раздел Администрирование — Настройки пользователей и прав.
  2. Развернем подраздел Ограничение доступа и установим флаг Ограничивать доступ на уровне записей.
  3. После включения этой опции нам необходимо настроить Профили групп доступа. Зайдем в одноименный справочник.

Важно понимать ошибку, упомянутую в обсуждении на форуме: нельзя создавать профиль без назначенных ролей. Профиль групп доступа — это совокупность разрешенных действий (ролей) и ограничений. Чтобы ограничение по магазинам заработало, выполним следующие действия:

Проанализируем состав ролей в профиле Продавец-кассир. Выясним, есть ли там роли, дающие право на чтение остатков. Обычно это типовые роли. Далее переходим на вкладку Ограничения доступа. Здесь для вида доступа Магазины установим значение Все запрещены, исключения назначаются в группах доступа.

Создание групп доступа для каждого магазина

Теперь, когда профиль готов, создадим Группы доступа. Рассмотрим ситуацию, когда у нас два магазина: «Магазин 1» и «Магазин 2».

  1. Создаем группу доступа «Кассиры Магазина 1». В качестве профиля выбираем наш настроенный профиль с ограничением.
  2. На вкладке Магазины добавляем только «Магазин 1».
  3. В список участников группы добавляем пользователей (кассиров), работающих в этой точке.
  4. Повторяем процедуру для «Магазина 2».

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

Настройка профиля РМК и отображения остатков

В конфигурации 1С:Розница 2 за поведение формы подбора отвечает не только RLS, но и настройки самого интерфейса РМК. Посмотрим на настройки, которые могут игнорировать общие правила доступа для удобства пользователя.

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

Если наша задача — полная изоляция, этот флаг необходимо снять. Проанализируем также настройку Выбор склада в РМК. Если кассиру разрешено выбирать склад, он сможет переключиться на склад другого магазина (если это не запрещено в Дополнительных правах пользователей).

Запрет продажи товаров с чужих складов

Даже если мы скрыли видимость, остается риск продажи «в минус» или случайного выбора серии/характеристики, принадлежащей другому складу (особенно актуально для 1С:Аптека). Для решения второго вопроса автора — запрета пробития — выполним следующие настройки:

  1. Зайдем в Администрирование — Пользователи и права — Дополнительные права пользователей.
  2. Выберем нужного пользователя или группу пользователей.
  3. В дереве настроек найдем раздел Продажи.
  4. Снимем флаг Разрешить продажу при отсутствии остатков.
  5. Убедимся, что снят флаг Разрешить выбор склада в РМК.

Теперь система будет жестко контролировать наличие товара именно на том складе, который привязан к текущему рабочему месту (ККМ).

Проблема кэширования и динамических списков

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

Во-первых, после изменения прав доступа пользователь должен полностью перезапустить сеанс 1С. Во-вторых, если используется поиск «по строке», система обращается к индексам полнотекстового поиска. Рекомендуется обновить индекс в разделе Поддержка и обслуживание — Управление полнотекстовым поиском.

Решение проблемы через расширение (для программистов)

Если штатные средства RLS не дают нужного результата в форме подбора (например, из-за специфики отраслевого решения «Аптека»), наиболее эффективным методом будет использование расширения конфигурации. Рассмотрим пример логики, которую можно внедрить.

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


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

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

Итоги настройки

Подведем итог. Для полной изоляции магазинов в 1С:Розница 2 требуется комплексный подход:

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

← На главную