Как привязать номенклатуру к определённому складу в 1С:Комплексная автоматизация 2.4 / ERP 2.5?

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

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

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

Почему стандартные схемы обеспечения не решат проблему?

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

  1. Рекомендательный характер: Схемы обеспечения созданы для автоматизации планирования и работы обработки «Формирование потребностей». Они подсказывают системе, откуда и как привезти товар по умолчанию.
  2. Отсутствие жесткого контроля: Данный механизм никак не ограничивает ручной ввод пользователя. Менеджер по закупкам или кладовщик сможет беспрепятственно выбрать «запрещенный» склад в документах ПриобретениеТоваровУслуг или ПеремещениеТоваров. Система не выдаст никаких предупреждений и успешно проведет документ.

Поэтому для реализации жесткого запрета нам потребуются другие инструменты. Рассмотрим их подробнее.

Вариант 1. Использование механизма «Управление ассортиментом» (для розницы)

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

  1. Перейдем в раздел НСИ и администрирование -> Настройка разделов -> CRM и маркетинг. Включим опции Управление ассортиментом и Форматы магазинов.
  2. В карточке нашего целевого склада укажем тип склада — Розничный магазин, привяжем его к определенному Формату магазина и обязательно установим флаг Контролировать ассортимент.
  3. Создадим документ Изменение ассортимента (раздел CRM и маркетинг). В документе укажем наш формат магазина и внесем список разрешенной специальной номенклатуры, установив для нее статус Разрешены закупки и продажи (или аналогичный действующий статус жизненного цикла товара).

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

Вариант 2. Ограничение через адресное хранение (WMS) на оптовом складе

Если склад должен оставаться оптовым, мы можем настроить физическое ограничение размещения товаров в ячейках. Это реализуется через адресный склад:

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

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

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

Если наша цель — полностью защитить складской контур от ошибок человеческого фактора на этапе подбора товаров, мы можем настроить разделение прав:

  1. В разделе НСИ и администрирование -> Настройка пользователей и прав включим опцию Ограничивать доступ на уровне записей (RLS).
  2. Создадим специальные Группы доступа номенклатуры и Группы доступа складов.
  3. Распределим пользователей по группам доступа. Менеджерам, работающим со стандартным ассортиментом, полностью закроем видимость специальной группы номенклатуры и специального склада.

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

Вариант 4. Разработка контроля через расширение конфигурации (универсальный способ)

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

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

Рассмотрим пример кода для расширения, проверяющий соответствие склада и вида номенклатуры в документе ПеремещениеТоваров:


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

Аналогичные проверки можно легко внедрить для документов ПриобретениеТоваровУслуг, РеализацияТоваровУслуг и СборкаТоваров. Если на предприятии используется гибкая матрица ограничений (много складов и много различных групп номенклатуры), рекомендуется создать в расширении собственный регистр сведений «Матрица разрешенных складов» и производить запрос к нему при проведении любых складских документов.

Резюме

Для решения задачи жесткой привязки товаров к складам в 1С:КА 2.4 / ERP 2.5 мы можем выбрать один из путей:

← На главную