Единица измерения в 1С-Битрикс — это не просто подпись «шт.» рядом с ценой, а полноценный справочник, который влияет на цену, корзину, обмен с 1С и логику весовых товаров. Разберём, где он живёт, как правильно его заполнить и что учесть при выводе на витрине.
Где находится справочник единиц измерения
Единицы измерения относятся к модулю Торговый каталог (catalog), а не к инфоблокам. Открыть справочник можно в админке: Магазин → Настройки → Единицы измерения (в старом меню — Сервисы → Торговый каталог → Единицы измерения). Хранятся записи в таблице b_catalog_measure.
Каждая запись описывается несколькими полями:
- Код (ID) по ОКЕИ — числовой код из общероссийского классификатора единиц измерения (796 — штука, 166 — килограмм, 006 — метр). Именно по нему идёт сопоставление при обмене с 1С;
- Национальное условное обозначение — то, что видит покупатель («шт», «кг», «м»);
- Международное сокращённое обозначение — латиницей (PCE, KGM, MTR);
- Флаг «По умолчанию» — единица, которая подставляется новым товарам автоматически.
Единица по умолчанию и базовый набор
После установки модуля в справочнике уже есть штука (796) с признаком «по умолчанию». Это удобно: если товар штучный, поле можно не трогать — Битрикс подставит значение сам. Менять единицу по умолчанию стоит только в специфических каталогах (например, магазин ткани, где почти всё в метрах).
Признак «по умолчанию» может быть только у одной записи. Если вы отметите новую единицу, старая автоматически потеряет флаг. Товары, у которых единица не задана явно, при выводе цены будут наследовать именно эту запись.
Как единица привязывается к товару и цене
Единица измерения задаётся на вкладке «Торговый каталог» карточки элемента инфоблока (для товара или для торгового предложения). Там же указывается количество в единице измерения — множитель для случаев, когда товар продаётся упаковками. Например, единица «шт», а в одной продаваемой позиции 12 штук.
С точки зрения данных цена товара всегда хранится за одну единицу измерения. Поле цены (b_catalog_price) ссылается на тип цены и на количество в единице. Это важно понимать при расчётах: если вы выводите «цена за упаковку», нужно умножать базовую цену на коэффициент, а не хранить две разные цены.
- Штучный товар — единица «шт», количество в единице
1; - Упаковка — единица «шт», количество в единице
12(продаём коробками по 12); - Весовой товар — единица «кг» или «г», цена за килограмм, шаг покупки задаётся отдельно.
Коэффициенты пересчёта единиц (ratio)
Отдельно от справочника Битрикс умеет хранить коэффициенты пересчёта между единицами (b_catalog_measure_ratio). Они нужны, когда один и тот же товар можно купить и поштучно, и упаковкой: базовый ratio равен 1, а дополнительный — например, 10 для «упаковки из 10 штук».
Коэффициент по умолчанию (DEFAULT = Y) участвует в расчёте цены и остатков. Дополнительные коэффициенты используют компоненты корзины и покупки кратными количествами. Программно с ними работают через классы \Bitrix\Catalog\MeasureRatioTable и \Bitrix\Catalog\MeasureTable.
| Сущность | Таблица | За что отвечает |
|---|---|---|
| Единица измерения | b_catalog_measure | Справочник ОКЕИ, обозначения |
| Привязка к товару | b_catalog_product | Поле MEASURE у товара |
| Коэффициент | b_catalog_measure_ratio | Кратность покупки |
Вывод единиц в каталоге, карточке и корзине
Штатные компоненты catalog.element, catalog.section и sale.basket.basket получают обозначение единицы автоматически — в шаблоне оно доступно в массиве товара (ключи вида ITEM_MEASURE / MEASURE). В карточке цена обычно выводится как «1 250 ₽ / шт», в корзине единица подставляется рядом с количеством.
Если вы дорабатываете шаблон, обозначение проще всего получить так:
- в компонентах каталога — из подготовленных данных товара, не запрашивая справочник заново;
- в произвольном коде — через
CCatalogMeasure::getList()или D7-классMeasureTable::getList()по ID единицы; - для весовых товаров учитывайте шаг и минимальное количество, иначе покупатель сможет заказать «0,5 шт».
Единицы измерения при обмене с 1С
При стандартном обмене CommerceML 1С передаёт единицу измерения товара кодом ОКЕИ. Битрикс сопоставляет пришедший код с записью в b_catalog_measure по полю Код по ОКЕИ. Если кода в справочнике нет, единица может не подтянуться, и товар останется без обозначения.
Поэтому перед первым обменом стоит убедиться, что все используемые в 1С единицы (штука, килограмм, литр, метр, упаковка) заведены в справочнике Битрикс с корректными кодами ОКЕИ. Это снимает большинство проблем «цена есть, а единицы нет» после выгрузки.
Частые ошибки и как их избежать
Единицы измерения кажутся мелочью, но именно на них спотыкаются при запуске магазина. Типичные проблемы:
- Пустое обозначение в карточке — у товара не задана единица и нет единицы по умолчанию. Решение: задать значение «по умолчанию» и переиндексировать;
- Дубли единиц — после нескольких выгрузок из 1С появляются две «штуки» с разными кодами. Нужно оставить одну и переназначить товары;
- Неверная цена упаковки — цена хранится за единицу, а на витрине выводится за упаковку без умножения на количество в единице;
- Весовой товар без шага — покупатель заказывает дробное количество там, где это недопустимо.
Проверить связку проще всего на тестовом товаре: задать единицу, коэффициент, вывести карточку и добавить в корзину — так сразу видно, где обозначение теряется.
Итог
Единицы измерения в Битрикс — это справочник ОКЕИ на уровне модуля «Торговый каталог», привязка к товару на вкладке торгового каталога, цена за единицу и коэффициенты пересчёта для упаковок. Чтобы витрина и корзина показывали корректные обозначения, а обмен с 1С не терял данные, важно заранее завести все нужные единицы с правильными кодами ОКЕИ и назначить единицу по умолчанию.
Если каталог большой, товары разнотипные (штучные, весовые, метражные), а обмен с 1С уже настроен, ошибки в единицах всплывают массово и портят цены на витрине. Мы в B2Bsite наводим порядок в справочниках, настраиваем корректный обмен и вывод единиц в карточке и корзине — как в рамках разработки магазина, так и на поддержке.
Частые вопросы
Где задаётся единица измерения товара?
На вкладке «Торговый каталог» в карточке товара или торгового предложения. Сам справочник единиц находится в разделе Магазин → Настройки → Единицы измерения.
Что такое код ОКЕИ и зачем он нужен?
Это числовой код единицы из общероссийского классификатора (796 — штука, 166 — килограмм). По нему Битрикс сопоставляет единицы при обмене с 1С, поэтому коды должны совпадать.
Можно ли задать единицу по умолчанию?
Да, признак «по умолчанию» ставится у одной записи справочника. Товары без явно указанной единицы наследуют именно её при выводе цены.
Цена в Битрикс хранится за единицу или за упаковку?
Цена всегда хранится за одну единицу измерения. Стоимость упаковки получается умножением базовой цены на количество в единице или на коэффициент пересчёта.
Почему в карточке товара не выводится обозначение единицы?
Чаще всего у товара не задана единица и нет единицы по умолчанию, либо запись справочника была удалена. Нужно назначить единицу и обновить данные.
Как продавать товар упаковками по несколько штук?
Задайте количество в единице измерения (например, 12) или добавьте коэффициент пересчёта в справочнике коэффициентов. Тогда покупка идёт кратными количествами.
Что делать с весовыми товарами?
Использовать единицу «кг» или «г», хранить цену за килограмм и задать шаг и минимальное количество покупки, чтобы нельзя было заказать некорректное дробное значение.
Почему после обмена с 1С появились дубли единиц?
1С передаёт единицы кодом ОКЕИ, и при несовпадении кодов создаются новые записи. Нужно оставить одну единицу, переназначить на неё товары и удалить дубли.
Поможем с настройкой и поддержкой 1С-Битрикс: Управление сайтом
Поможем с настройкой, доработкой и поддержкой 1С-Битрикс: Управление сайтом.