Как реализовать связь многие ко многим для номенклатуры в 1С:Розница Базовая

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

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

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

Метод 1. Использование сегментов номенклатуры

Проанализируем наиболее «чистый» с точки зрения архитектуры способ — механизм Сегменты номенклатуры. Этот инструмент позволяет объединять товары в группы по произвольным признакам, при этом один товар может одновременно находиться в неограниченном количестве сегментов.

Рассмотрим пошагово, как это применить для нашей задачи:

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

Преимущество этого метода в том, что данные хранятся в стандартном регистре сведений НоменклатураСегмента, что обеспечивает высокую скорость выборки даже при больших объемах данных.

Метод 2. Виртуальные штрихкоды и коды SKU

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

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

Пример логики поиска запчастей для модели с кодом "BP-100":


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Штрихкоды.Номенклатура КАК Запчасть
    |ИЗ
    |	РегистрСведений.Штрихкоды КАК Штрихкоды
    |ГДЕ
    |	Штрихкоды.Штрихкод = &КодМоделиТехники";

Запрос.УстановитьПараметр("КодМоделиТехники", "BP-100");
Результат = Запрос.Выполнить().Выгрузить();

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

Метод 3. Использование механизма «Сопутствующие товары»

В типовой «1С:Розница» существует штатный функционал для кросс-продаж. Хотя он предназначен для того, чтобы кассир предлагал батарейки к фонарику, мы можем использовать его для связи «Инструмент — Запчасти».

Разберем, как это реализовать:

  1. Откроем карточку модели инструмента (например, «Бензопила 1.1»).
  2. Перейдем в раздел «Сопутствующие товары».
  3. Добавим в список все запчасти, которые к ней подходят.

Данный метод хорош тем, что он визуально понятен пользователю и не требует программирования для ввода данных. Информация хранится в регистре сведений СопутствующиеТовары. Для реализации удобного подбора в документах (например, в Заказе покупателя или Чек ККМ) достаточно будет написать небольшую внешнюю обработку заполнения, которая будет обращаться к этому регистру.

Метод 4. Дополнительные реквизиты и внешние файлы

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

Рассмотрим алгоритм реализации:

  1. Создадим ДополнительныйРеквизит у номенклатуры с типом «Строка», куда будем записывать уникальный идентификатор для связи с внешней базой.
  2. Саму матрицу применяемости (таблицу связей) будем хранить во внешнем файле (формата JSON или SQLite) в папке с базой данных.
  3. Внешняя обработка при открытии формы подбора будет подключаться к этому файлу, находить нужные связи и выводить список номенклатуры 1С.

Пример структуры JSON-файла для хранения связей:


[
  {
    "tool_id": "MOTO-001",
    "parts": ["ZAP-10", "ZAP-11", "ZAP-15"]
  },
  {
    "tool_id": "MOTO-002",
    "parts": ["ZAP-10", "ZAP-22"]
  }
]

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

Метод 5. Использование справочника «Номенклатура поставщиков»

Выясним еще одну возможность, скрытую в настройках. В «Рознице» можно включить использование номенклатуры поставщиков. Этот справочник по своей сути уже является механизмом сопоставления «один ко многим» (один ваш товар может соответствовать нескольким товарам разных поставщиков).

Мы можем перевернуть эту логику: использовать элементы справочника НоменклатураПоставщиков как аналоги или кросс-ссылки на модели техники. Это позволит хранить артикулы производителей и связывать их с вашей основной карточкой запчасти. Главный плюс здесь — наличие штатных отчетов, которые умеют работать с этими связями.

Итоги и рекомендации

Выбор конкретного метода зависит от объема данных и требуемого удобства для персонала:

Важно: Помните, что в Базовой версии основной упор всегда идет на внешние обработки и отчеты. Именно они позволяют реализовать недостающую бизнес-логику (автоматический подбор аналогов, групповую проверку совместимости), не нарушая возможности автоматического обновления программы.

← На главную