В процессе интеграции 1С с интернет-магазинами часто возникает ситуация, когда в базу загружается отдельный массив номенклатуры специально для сайта. Эти позиции могут дублировать уже существующие товары по наименованию, но иметь специфические свойства, описания или характеристики, необходимые для веб-витрины. Главная проблема здесь — человеческий фактор: менеджеры по продажам могут по ошибке выбрать "сайтовую" позицию в заказ клиента, что приведет к пересортице и ошибкам в складском учете. Разберем подробно, как можно ограничить использование такой номенклатуры в операционной деятельности, сохранив возможность работы с ней для администраторов сайта.
Рассмотрим подход, который выбрал автор темы. Он заключается в том, чтобы визуально выделить номенклатуру для сайта, не ломая при этом интеграцию. Проанализируем ситуацию: если мы просто переименуем товар в 1С, добавив префикс "ДЛЯ САЙТА", то это же название может уйти и на сайт, что недопустимо.
Сделаем следующее:
Номенклатура дополнительный реквизит (или свойство) "Наименование для сайта".Наименование (или НаименованиеПолное) укажем техническое название, например: "САЙТ_Ботинки мужские арт. 123". Теперь менеджер сразу увидит, что позицию выбирать не стоит.Этот метод хорош тем, что он прост в реализации и не требует сложных манипуляций с правами доступа, однако он требует внесения изменений в правила обмена.
В современных конфигурациях, таких как 1С:Управление торговлей 11, ERP 2 или Комплексная автоматизация 2, реализован стандартный механизм работы с неиспользуемыми позициями. Рассмотрим подробнее реквизит Архивная.
Когда мы устанавливаем флаг «Архивная» в карточке номенклатуры:
Проанализируем применимость: если менеджеры сайта редактируют контент напрямую в 1С, им достаточно включить отображение архивных позиций в своей форме списка, в то время как в торговых документах эти позиции мешаться не будут.
Если нам нужно жесткое разделение на уровне прав доступа, воспользуемся механизмом RLS (Row-Level Security). В типовых конфигурациях это настраивается через Группы доступа номенклатуры. Разберем этот процесс по шагам:
Группу доступа номенклатуры, назовем ее "Товары только для сайта".Важный нюанс: как отмечено в сообщении 15, стандартный механизм часто ограничивает только добавление и изменение. Если нужно полностью скрыть позиции "на чтение", придется настраивать шаблоны RLS вручную в конфигураторе. Посмотрим на пример простого условия в шаблоне RLS:
#Если &ОграничениеДоступаНаУровнеЗаписейУниверсальное #Тогда
ГДЕ ЧтениеОбъектаРазрешено(ГруппаДоступа)
#КонецЕсли
Помните, что использование RLS может снизить производительность базы данных, особенно при больших объемах справочника Номенклатура.
Чтобы гарантированно запретить использование номенклатуры в документах, не ограничивая при этом права на ее редактирование, мы можем использовать подписки на события. Это наиболее гибкий метод. Рассмотрим реализацию через событие ПередЗаписью для документов или через проверку в модуле объекта документа.
Проанализируем ситуацию: нам нужно создать признак (флаг) ТолькоДляСайта в справочнике. Затем в расширении создадим обработчик, который будет проверять табличные части документов перед проведением:
Процедура ПередЗаписьюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт
Если РежимПроведения = РежимПроведенияДокумента.Проведение Тогда
Для Каждого СтрокаТЧ Из Источник.Товары Цикл
Если СтрокаТЧ.Номенклатура.ТолькоДляСайта Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Товар " + СтрокаТЧ.Номенклатура + " предназначен только для сайта!";
Сообщение.УстановитьДанные(Источник);
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Этот код предотвратит случайное проведение документа с "запрещенным" товаром, даже если менеджер нашел его и добавил в таблицу.
Чтобы менеджеры даже не видели лишние позиции в момент подбора, мы можем программно установить отбор в формах выбора. Выясним причину популярности этого метода: он не влияет на права доступа и работает максимально прозрачно для пользователя.
В расширении для формы списка или формы выбора справочника Номенклатура добавим код в процедуру ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Устанавливаем отбор: скрываем товары для сайта для всех, кроме администраторов
Если Не РольДоступна("ПолныеПрава") Тогда
ЭлементОтбора = Список.КомпоновкаДанных.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТолькоДляСайта");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
КонецЕсли;
КонецПроцедуры
Такой подход позволит "очистить" список номенклатуры для рядовых сотрудников, сохранив полный доступ для тех, кто занимается контентом сайта.
В некоторых типовых решениях (например, УТ 11) можно использовать механизм Сегментов номенклатуры. Мы можем создать динамический или статический сегмент "Товары сайта" и в правилах продаж (типовых соглашениях) указать запрет на использование номенклатуры из этого сегмента. Это "административный" способ решения, который не требует программирования, но требует настройки бизнес-логики программы.
Подводя итог, выбор метода зависит от ваших технических возможностей и версии конфигурации. Для простых случаев достаточно переименования и доп. реквизитов. Для строгих ограничений лучше использовать подписки на события или RLS. А для удобства пользователей идеальным вариантом станет настройка фильтрации в формах выбора через расширение.