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

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

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

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

Решение 1. Использование встроенного механизма «Управление ассортиментом»

Этот инструмент является наиболее правильным с точки зрения методологии разработчиков 1С. Он позволяет жестко ограничить продажи на кассах, сохраняя общую базу данных и не перегружая систему сложными запросами проверки прав.

Рассмотрим пошагово, как настроить данный функционал:

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

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

Решение 2. Контроль остатков и фильтрация в форме подбора РМК

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

  1. За каждым пользователем (кассиром) жестко закрепим его магазин и соответствующий склад по умолчанию в настройках пользователя.
  2. В дополнительных правах пользователей или настройках РМК включим опцию Контролировать остатки при закрытии чека (запрет проведения чека «в минус»).
  3. В настройках формы подбора товаров РМК по умолчанию установим флаг Только в наличии.

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

Решение 3. Настройка маркетинговых акций и запретов продаж

Выясним, как решить задачу без программирования с помощью подсистемы маркетинга. Этот вариант отлично подходит для настройки ограничений в случае, если у вас установлена базовая или нетиповая версия программы 1С.

Алгоритм настройки выглядит следующим образом:

  1. Создадим сегменты номенклатуры для каждой группы товаров (например, «Сегмент Бытовая химия», «Сегмент Зоотовары»).
  2. Перейдем в раздел маркетинговых акций и создадим новую акцию.
  3. В правилах акции выберем тип Запрет продаж.
  4. Укажем сегменты товаров, запрещенные к продаже в конкретных торговых точках. Например, для магазина «Химия» создадим запрещающее правило на сегменты «Зоотовары» и «Детские товары».

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

Решение 4. Доработка через расширение: использование дополнительных свойств

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

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

Посмотрим на пример программного кода, который можно использовать в расширении для динамического списка формы подбора:


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

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

Почему не рекомендуется использовать RLS (ограничение на уровне записей)?

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

Резюме: Для реализации надежной схемы работы без привлечения программистов и потери быстродействия базы данных используйте комбинацию **Контроля остатков по складам** (Решение 2) и встроенного **Управления ассортиментом** (Решение 1).

← На главную