Как запретить менеджерам использовать дублирующую номенклатуру, созданную для сайта?

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

В процессе интеграции 1С с интернет-магазинами часто возникает ситуация, когда в базу загружается отдельный массив номенклатуры специально для сайта. Эти позиции могут дублировать уже существующие товары по наименованию, но иметь специфические свойства, описания или характеристики, необходимые для веб-витрины. Главная проблема здесь — человеческий фактор: менеджеры по продажам могут по ошибке выбрать "сайтовую" позицию в заказ клиента, что приведет к пересортице и ошибкам в складском учете. Разберем подробно, как можно ограничить использование такой номенклатуры в операционной деятельности, сохранив возможность работы с ней для администраторов сайта.

Решение 1. Изменение логики хранения наименований (вариант автора)

Рассмотрим подход, который выбрал автор темы. Он заключается в том, чтобы визуально выделить номенклатуру для сайта, не ломая при этом интеграцию. Проанализируем ситуацию: если мы просто переименуем товар в 1С, добавив префикс "ДЛЯ САЙТА", то это же название может уйти и на сайт, что недопустимо.

Сделаем следующее:

  1. Добавим для справочника Номенклатура дополнительный реквизит (или свойство) "Наименование для сайта".
  2. В стандартном реквизите Наименование (или НаименованиеПолное) укажем техническое название, например: "САЙТ_Ботинки мужские арт. 123". Теперь менеджер сразу увидит, что позицию выбирать не стоит.
  3. В модуле обмена с сайтом изменим логику: вместо стандартного наименования настроим выгрузку значения из нашего нового свойства "Наименование для сайта".

Этот метод хорош тем, что он прост в реализации и не требует сложных манипуляций с правами доступа, однако он требует внесения изменений в правила обмена.

Решение 2. Использование штатного признака «Архивная номенклатура»

В современных конфигурациях, таких как 1С:Управление торговлей 11, ERP 2 или Комплексная автоматизация 2, реализован стандартный механизм работы с неиспользуемыми позициями. Рассмотрим подробнее реквизит Архивная.

Когда мы устанавливаем флаг «Архивная» в карточке номенклатуры:

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

Решение 3. Настройка групп доступа номенклатуры и RLS

Если нам нужно жесткое разделение на уровне прав доступа, воспользуемся механизмом RLS (Row-Level Security). В типовых конфигурациях это настраивается через Группы доступа номенклатуры. Разберем этот процесс по шагам:

  1. Включим функциональную опцию: НСИ и администрирование — Настройки пользователей и прав — Группы доступа — Ограничивать доступ на уровне записей.
  2. Создадим новую Группу доступа номенклатуры, назовем ее "Товары только для сайта".
  3. Присвоим эту группу всем "дублирующим" позициям.
  4. В профилях групп доступа для обычных менеджеров укажем запрет на работу с этой группой номенклатуры.

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


#Если &ОграничениеДоступаНаУровнеЗаписейУниверсальное #Тогда
ГДЕ ЧтениеОбъектаРазрешено(ГруппаДоступа)
#КонецЕсли

Помните, что использование RLS может снизить производительность базы данных, особенно при больших объемах справочника Номенклатура.

Решение 4. Программная блокировка через подписки на события

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

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


Процедура ПередЗаписьюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
    Если РежимПроведения = РежимПроведенияДокумента.Проведение Тогда
        Для Каждого СтрокаТЧ Из Источник.Товары Цикл
            Если СтрокаТЧ.Номенклатура.ТолькоДляСайта Тогда
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "Товар " + СтрокаТЧ.Номенклатура + " предназначен только для сайта!";
                Сообщение.УстановитьДанные(Источник);
                Сообщение.Сообщить();
                Отказ = Истина;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

Этот код предотвратит случайное проведение документа с "запрещенным" товаром, даже если менеджер нашел его и добавил в таблицу.

Решение 5. Настройка фильтрации в формах выбора

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

В расширении для формы списка или формы выбора справочника Номенклатура добавим код в процедуру ПриСозданииНаСервере:


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

Такой подход позволит "очистить" список номенклатуры для рядовых сотрудников, сохранив полный доступ для тех, кто занимается контентом сайта.

Решение 6. Сегментация и запрет продаж

В некоторых типовых решениях (например, УТ 11) можно использовать механизм Сегментов номенклатуры. Мы можем создать динамический или статический сегмент "Товары сайта" и в правилах продаж (типовых соглашениях) указать запрет на использование номенклатуры из этого сегмента. Это "административный" способ решения, который не требует программирования, но требует настройки бизнес-логики программы.

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

← На главную