При работе с интернет-магазином или любым другим проектом на базе платформы 1С-Битрикс часто возникает необходимость управлять единицами измерения товаров (килограммы, штуки, упаковки и т. д.). Для удобства такой работы в модуле catalog (Начиная с версии платформы, где доступен D7) предусмотрен класс \Bitrix\Catalog\MeasureTable
. Ниже вы найдете подробное описание этого класса, разберете его методы, а также увидите примеры практического применения.

1. Общая информация о классе
Класс \Bitrix\Catalog\MeasureTable
предназначен для управления записями в таблице единиц измерения (обычно это таблица b_catalog_measure
). Он наследуется от Bitrix\Main\ORM\Data\DataManager
(до версии 18.0.2 модуля Main — от Bitrix\Main\Entity\DataManager
). Это означает, что для работы с таблицей единиц измерения вы можете использовать весь функционал ORM D7 (создание, чтение, обновление, удаление записей) и стандартные методы класса-родителя.
Цепочка наследования:
Bitrix\Catalog\MeasureTable
extends
Bitrix\Main\ORM\Data\DataManager
(до версии 18.0.2 – Bitrix\Main\Entity\DataManager)
2. Основные методы класса
Ниже приведены основные методы MeasureTable
, которые вы можете использовать для своей работы.
- getTableName()
Метод возвращает имя таблицы в базе данных, с которой связан данный класс (по умолчанию это
b_catalog_measure
).public static function getTableName() { return 'b_catalog_measure'; }
- getMap()
Метод возвращает массив маппинга полей (описание полей таблицы). На базе этого массива ORM понимает, как связаны поля в базе данных с сущностью класса
MeasureTable
.public static function getMap() { return [ // Пример структуры полей 'ID' => [ 'data_type' => 'integer', 'primary' => true, 'autocomplete' => true, ], 'MEASURE_TITLE' => [ 'data_type' => 'string', 'required' => true, 'validation' => [__CLASS__, 'validateMeasureTitle'], ], 'SYMBOL' => [ 'data_type' => 'string', 'validation' => [__CLASS__, 'validateSymbol'], ], // и так далее... ]; }
- validateMeasureTitle()
Метод возвращает набор валидаторов, которые применяются к полю
MEASURE_TITLE
. Обычно здесь определяются функции, проверяющие, чтобы поле не было пустым или не содержало некорректных символов. - validateSymbol()
Аналогично
validateMeasureTitle()
, но относится к полюSYMBOL
(короткое текстовое обозначение единицы измерения). - validateSymbolIntl()
Валидаторы для поля
SYMBOL_INTL
(международное текстовое обозначение единицы измерения). - validateSymbolLetterIntl()
Валидаторы для поля
SYMBOL_LETTER_INTL
(международное буквенное обозначение единицы измерения).
Обратите внимание: В реальной практике вы можете расширять или изменять эти валидаторы — например, добавлять ограничения по длине строки, недопустимым символам и т. п.
3. Примеры использования
3.1. Подключение модуля catalog
Перед любыми операциями с классом \Bitrix\Catalog\MeasureTable
необходимо подключить модуль catalog
:
\Bitrix\Main\Loader::includeModule('catalog');
Если модуль не будет подключен, при попытке вызвать методы класса произойдет ошибка (класс не будет найден).
3.2. Получение списка всех единиц измерения
Наиболее частый сценарий — получить список всех доступных единиц измерения. Для этого используем метод ORM getList()
:
\Bitrix\Main\Loader::includeModule('catalog');
$data = \Bitrix\Catalog\MeasureTable::getList()->fetchAll();
foreach ($data as $key => $value) {
// Если нужно дополнительно вывести описание из классификатора
// $info = CCatalogMeasureClassifier::getMeasureInfoByCode($value["CODE"]);
// Получаем короткое обозначение единицы измерения по коду
$symbol = CCatalogMeasureClassifier::getMeasureTitle($value["CODE"], 'SYMBOL_RUS');
$data[$key]['SYMBOL'] = $symbol;
// Получаем полное наименование единицы измерения (по коду)
$title = CCatalogMeasureClassifier::getMeasureTitle($value["CODE"], 'MEASURE_TITLE');
$data[$key]['MEASURE_TITLE'] = $title;
}
echo ''.print_r($data, 1).'
';
Разбор кода:
\Bitrix\Catalog\MeasureTable::getList()
возвращает объектBitrix\Main\ORM\Query\Result
.- Вызов метода
->fetchAll()
получает все записи в виде массива. - Для каждой записи мы можем дополнительно получить данные из
CCatalogMeasureClassifier::getMeasureTitle()
, который возвращает локализованное название единицы измерения.
Важно: Обратите внимание, что заголовки единиц измерения могут храниться отдельно и в разных языковых файлах. Если вы используете методы
CCatalogMeasureClassifier
, необходимо убедиться, что нужный языковой файл подключен.
3.3. Получение одной записи по ID
Если вам нужно получить данные конкретной единицы измерения (например, с ID = 1
), используйте метод getById()
:
\Bitrix\Main\Loader::includeModule('catalog');
$result = \Bitrix\Catalog\MeasureTable::getById(1)->fetch();
if ($result) {
echo ''.print_r($result, true).'
';
} else {
echo 'Запись с таким ID не найдена.';
}
В результате вы получите массив с информацией об указанной записи, аналогичный формату при fetchAll()
, только для конкретной строки.
4. Дополнительные сценарии работы
Создание новой записи
\Bitrix\Main\Loader::includeModule('catalog');
$result = \Bitrix\Catalog\MeasureTable::add([
'MEASURE_TITLE' => 'Литр',
'SYMBOL' => 'л',
'SYMBOL_INTL' => 'L',
'SYMBOL_LETTER_INTL' => '',
'CODE' => 112, // Например, код классификатора
]);
if ($result->isSuccess()) {
$newId = $result->getId();
echo "Новая запись успешно добавлена, ID: " . $newId;
} else {
$errors = $result->getErrorMessages();
echo "Ошибка при добавлении: " . implode(', ', $errors);
}
Обновление записи
\Bitrix\Main\Loader::includeModule('catalog');
$updateId = 2; // ID редактируемой записи
$result = \Bitrix\Catalog\MeasureTable::update($updateId, [
'MEASURE_TITLE' => 'Упаковка',
'SYMBOL' => 'уп',
]);
if ($result->isSuccess()) {
echo "Запись с ID = {$updateId} успешно обновлена.";
} else {
$errors = $result->getErrorMessages();
echo "Ошибка при обновлении: " . implode(', ', $errors);
}
Удаление записи
\Bitrix\Main\Loader::includeModule('catalog');
$deleteId = 3; // ID удаляемой записи
$result = \Bitrix\Catalog\MeasureTable::delete($deleteId);
if ($result->isSuccess()) {
echo "Запись с ID = {$deleteId} успешно удалена.";
} else {
$errors = $result->getErrorMessages();
echo "Ошибка при удалении: " . implode(', ', $errors);
}
5. Заключение
Работа с единицами измерения в 1С-Битрикс через класс \Bitrix\Catalog\MeasureTable
значительно упрощает управление записями благодаря использованию ORM D7. Вы можете не только получать списки всех доступных единиц измерения, но и создавать собственные, обновлять и удалять существующие, применять локализованные наименования через классификатор.
Для детального изучения всех возможностей \Bitrix\Catalog\MeasureTable
и его методов рекомендуется обращаться к официальной документации. Комбинируйте данный функционал с другими возможностями платформы (как ORM, так и высокоуровневые API) для создания полнофункциональных и удобных решений.
Используйте приведенные методы и примеры в ваших проектах, чтобы гибко управлять единицами измерения и улучшать функциональность ваших интернет-магазинов или других решений на базе 1С-Битрикс.