Руководство по работе с классом MeasureTable в 1С-Битрикс D7

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

Руководство по работе с классом MeasureTable в 1С-Битрикс D7

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, которые вы можете использовать для своей работы.

  1. getTableName()

    Метод возвращает имя таблицы в базе данных, с которой связан данный класс (по умолчанию это b_catalog_measure).

    
    public static function getTableName()
    {
        return 'b_catalog_measure';
    }
                
  2. 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'],
            ],
            // и так далее...
        ];
    }
                
  3. validateMeasureTitle()

    Метод возвращает набор валидаторов, которые применяются к полю MEASURE_TITLE. Обычно здесь определяются функции, проверяющие, чтобы поле не было пустым или не содержало некорректных символов.

  4. validateSymbol()

    Аналогично validateMeasureTitle(), но относится к полю SYMBOL (короткое текстовое обозначение единицы измерения).

  5. validateSymbolIntl()

    Валидаторы для поля SYMBOL_INTL (международное текстовое обозначение единицы измерения).

  6. 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С-Битрикс.

Теги:  руководство, D7

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Аутсорсинг

готов помочь, если нет времени

договорная

Могу взять на себя работы по full-stack на основе готовой верстки

* если нет верстки, то возможность верстать с Figma в режиме редактора

Модули и компоненты для «1С-Битрикс»

оценка производится на основе предоставленного Технического Задания

от 20 000 рублей
Разработка дополнительных модулей для 1С-Битрикс, расширение функционала, внедрение любых решений, требующихся для выполнения ваших бизнес-задач.

* стоимость зависит от конкретной задачи, ее объема и сложности выполняемых работ.

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр