Как привязать номенклатуру к организации и ограничить продажи в 1С:Управление торговлей 11?

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

В процессе ведения многофирменного учета в программе 1С:Управление торговлей (редакция 11) пользователи часто сталкиваются с задачей разделения товарного ассортимента между различными юридическими лицами. Например, когда в одной информационной базе ведется учет по двум организациям (одна на ОСНО, другая на УСН), возникает необходимость строго разграничить продажу товаров и услуг: определенные позиции должны продаваться исключительно от организации А, а другие — только от организации Б.

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

---

Метод 1. Использование штатного механизма «Соглашения + Сегменты номенклатуры»

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

Шаг 1. Формирование сегментов номенклатуры

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

  1. Перейдем в раздел CRM и маркетинг — Настройки и справочники — Сегменты номенклатуры.
  2. Создадим два (или более) сегмента, например: «Товары ООО Альфа» и «Товары ИП Бета».
  3. Настроим способ формирования сегмента. Мы можем формировать его Вручную (самостоятельно добавляя товары в список) или Периодически обновлять по определенным правилам (например, по совпадению группы номенклатуры, определенного бренда или значения дополнительного реквизита).

Шаг 2. Настройка типовых или индивидуальных соглашений с клиентами

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

  1. Перейдем в раздел CRM и маркетинг — Типовые соглашения с клиентами (или создадим индивидуальные соглашения в карточках партнеров).
  2. В карточке соглашения на вкладке Основное жестко укажем нашу Организацию (например, ООО «Альфа»).
  3. На вкладке Условия продаж в поле Сегмент номенклатуры выберем созданный ранее сегмент «Товары ООО Альфа».
  4. Аналогичным образом создадим второе соглашение для ИП «Бета» и привяжем к нему сегмент «Товары ИП Бета».

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

Важное ограничение метода:
Этот способ контроля работает безупречно только при условии, что у менеджеров в настройках прав доступа отсутствует роль «Отклонение от условий продаж». Если у пользователя есть полные права или назначена указанная роль, система выдаст лишь предупреждение о нарушении сегмента, но позволит провести документ с «чужим» товаром.

---

Метод 2. Ограничение прав доступа на уровне записей (RLS)

Рассмотрим еще один штатный инструмент платформы 1С:Предприятие — ограничение доступа на уровне записей (RLS). Этот способ позволяет разграничить видимость элементов справочника Номенклатура.

Выясним особенности настройки данного механизма:

  1. Включим опцию ограничения доступа в меню НСИ и администрирование — Настройки пользователей и прав — Ограничивать доступ на уровне записей.
  2. Активируем использование Групп доступа номенклатуры.
  3. Каждой позиции номенклатуры в ее карточке присвоим соответствующую группу (например, «Группа Альфа» и «Группа Бета»).
  4. В профилях групп доступа пользователей настроим права таким образом, чтобы менеджеры первой группы видели только товары из «Группы Альфа», а менеджеры второй — только из «Группы Бета».

Критический недостаток RLS в рамках нашей задачи:
Этот метод привязывает видимость товаров к конкретному пользователю (менеджеру), а не к реквизиту «Организация» в самом документе. Если менеджер работает в компании-мультихолдинге и должен выписывать документы то от одной организации, то от другой, RLS ему не поможет: он будет видеть всю разрешенную ему номенклатуру одновременно во всех документах, что приведет к ошибкам при вводе данных.

---

Метод 3. Использование контроля остатков (Интеркампани)

Некоторые специалисты предлагают использовать стандартный контроль остатков организаций. Проанализируем эту ситуацию подробнее.

В 1С:УТ 11 присутствует механизм исключения продаж «в минус» в разрезе организаций. Если мы включим опцию Контроль остатков товаров организаций и при этом не настроим схему передачи товаров между организациями («Интеркампани»), то система не позволит провести документ Реализация товаров и услуг от имени Организации Б, если этот товар фактически числится на остатках Организации А.

Почему этот способ не является полноценным решением:

---

Метод 4. Доработка через расширение конфигурации (Рекомендуемый технический путь)

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

Чтобы избежать жесткого кодирования (хардкода) конкретных организаций в программном коде, разберем по шагам, как реализовать гибкую схему привязки.

Вариант реализации А: Через дополнительные реквизиты

  1. Для справочника Номенклатура добавим дополнительный реквизит «Организация-владелец» с типом значения СправочникСсылка.Организации.
  2. В карточках номенклатуры заполним этот реквизит для каждой позиции. Если товар универсальный, реквизит можно оставить пустым.

Вариант реализации Б: Через собственный регистр сведений (более гибкий)

В расширении создадим непериодический регистр сведений СоответствиеНоменклатурыИОрганизаций со следующей структурой:

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

Программная реализация контроля проведения в расширении:

Для блокировки проведения документов продажи при наличии некорректных позиций создадим подписку на событие ОбработкаПроведения для документов РеализацияТоваровУслуг и ЗаказКлиента. Ниже рассмотрим пример программного кода, реализующего данную проверку (на примере использования дополнительного реквизита номенклатуры):


Процедура ПередЗаписьюДокумента_КонтрольОрганизаций(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт

	// Проверяем, что документ проводится
	Если Не РежимПроведения = РежимПроведенияДокумента.Проведение Тогда
		Возврат;
	КонецЕсли;

	// Получаем организацию из шапки документа
	ОрганизацияДокумента = Источник.Организация;
	Если Не ЗначениеЗаполнено(ОрганизацияДокумента) Тогда
		Возврат;
	КонецЕсли;

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

	Запрос.УстановитьПараметр("Ссылка", Источник.Ссылка);
	РезультатЗапроса = Запрос.Выполнить();

	Если Не РезультатЗапроса.Пустой() Тогда
		Выборка = РезультатЗапроса.Выбрать();
		Пока Выборка.Следующий() Цикл
			
			// Если доп. реквизит заполнен и не совпадает с организацией документа - блокируем проведение
			Если ЗначениеЗаполнено(Выборка.РазрешеннаяОрганизация) 
				И Выборка.РазрешеннаяОрганизация <> ОрганизацияДокумента Тогда
				
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
					НСтр("ru = 'В строке № " + Выборка.НомерСтроки + " указан товар """ + Выборка.ТоварНаименование + """, разрешенный к продаже только по организации: " + Выборка.РазрешеннаяОрганизация + "!'"),
					Источник,
					"Товары[" + (Выборка.НомерСтроки - 1) + "].Номенклатура",
					,
					Отказ);
				
				Отказ = Истина;
			КонецЕсли;
			
		КонецЦикла;
	КонецЕсли;

КонецПроцедуры

Преимущества программного контроля через расширение:

  1. Контроль работает на самом глубоком уровне транзакции проведения документа, обойти его интерактивно невозможно.
  2. Проверка срабатывает одинаково как для материальных товаров, так и для нематериальных услуг.
  3. Гибкость настройки: вы можете легко расширить логику, например, сделав предупреждения для одних групп пользователей и жесткий запрет для других.

Резюме

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

← На главную