Меню

Как получить свойства заказа в 1С-Битрикс: старые методы и современный API D7

Просмотров: 148

Задача: Получить все доступные свойства заказа для всех активных типов плательщика из модуля магазина.

свойства заказа в 1С-Битрикс

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

CModule::IncludeModule("sale"));

$personTypes = CSalePersonType::GetList(
    [
        "SORT" => "ASC"
    ],
    [
        "ACTIVE" => "Y"
    ]
);

while ($personType = $personTypes->Fetch()) {
        
    var_dump($personType); // Распечатка всех полей плательщиков
        
    $orderProps = CSaleOrderProps::GetList(
        ["SORT" => "ASC"],
        ["PERSON_TYPE_ID" => $personType["ID"]]
    );

    while ($prop = $orderProps->Fetch()) {
        var_dump($prop); // Распечатка всех свойств заказа для этого плательщика
    }
}
  • Подключение модуля sale с помощью CModule::IncludeModule("sale").
  • Получение списка всех активных типов плательщиков с использованием метода CSalePersonType::GetList.
  • В параметры запроса передаётся:
    • Сортировка по полю SORT в порядке возрастания.
    • Фильтр по активности (ACTIVE => "Y").
  • Для каждого типа плательщика выполняется цикл while, который:
    • Распечатывает информацию о текущем типе плательщика.
  • Для каждого типа плательщика выполняется запрос к методу CSaleOrderProps::GetList:
    • Устанавливается сортировка по полю SORT в порядке возрастания.
    • Фильтр по PERSON_TYPE_ID, соответствующему текущему плательщику.
  • Для каждого свойства заказа выполняется внутренний цикл while, который:
    • Распечатывает информацию о текущем свойстве заказа.

Новые методы через API D7 - получение свойств заказа и типов плательщика

Тоже самое можно (и более того - рекомендуется) сделать через новое API 1С-Битрикс. Здесь тот же самый результат но c использованием getList-ов нового ядра

use Bitrix\Main\Loader;
use Bitrix\Sale\Internals\PersonTypeTable;
use Bitrix\Sale\Internals\OrderPropsTable;

Loader::includeModule("sale");

// Получаем типы плательщиков
$personTypes = PersonTypeTable::getList([
    'filter' => [
        'ACTIVE' => 'Y'// Только активные
    ],
    'order' => [
        'SORT' => 'ASC'// Сортировка
    ]
]);

while ($personType = $personTypes->fetch()) {

    var_dump($personType);

    // Получаем свойства для типа плательщика
    $orderProps = OrderPropsTable::getList([
        'filter' => [
            'PERSON_TYPE_ID' => $personType['ID']
        ],
        'order' => [
            'SORT' => 'ASC'
        ],
    ])->fetchAll();
        
    var_dump($orderProps);

}

Использование API D7 позволяет:

  • Легче расширять и поддерживать код благодаря строгой типизации.
  • Уменьшить вероятность ошибок из-за устаревших методов.
  • Увеличить производительность запросов за счёт улучшенной работы с базой данных.

Дополнение по getList

Не забываем о грамотном использовании нового ядра, передавая в getList доступные параметры можно оптимизировать производительность кода.

$res = \Запрос\К нужному классу::getList([
    'order' => // массив- сортировка
    'select' => // массив- выбираемые поля
    'filter' => // массив- фильтр
    'group' =>  // массив- группировка, order должен быть пустой
    'limit' => // число- ограничение выбираемого кол-ва
    'offset' => // число- смещение первого столбца в результате
    'count_total' => // число- дает возможность получить кол-во элементов через метод getCount()
    'runtime' =>  // массив полей сущности, создающихся динамически
    'data_doubling' => // булево (ум. false) - получение одинаковых записей
    'cache' => array( // массив-  кеширование запроса запроса
    'ttl' => 1000,
    'cache_joins' => true
    ),
]);
Михаил Базаров 05.01.2025
Пример получения свойств заказа с улучшением по производительности
Код
use Bitrix\Main\Loader;
use Bitrix\Sale\Internals\PersonTypeTable;
use Bitrix\Sale\Internals\OrderPropsTable;

Loader::includeModule("sale");

// Получаем типы плательщиков
$personTypes = PersonTypeTable::getList([
    'filter' => [
        'ACTIVE' => 'Y'// Только активные
    ],
    'order' => [
        'SORT' => 'ASC'// Сортировка
    ],

    // Нам нужен только ID плательщика
    // остальные поля не отбираем
    // экономя запросы к БД
    'select' => [
        'ID'
    ],

    // Кешируем запрос
    'cache' => [
        'ttl' => 36000,
    ],
]);

while ($personType = $personTypes->fetch()) {

    // Получаем свойства для типа плательщика
    $orderProps = OrderPropsTable::getList([
        'filter' => [
            'PERSON_TYPE_ID' => $personType['ID']
        ],
        'order' => [
            'SORT' => 'ASC'
        ],

        // Нам нужны только название, код и тип поля
        // остальные поля не отбираем
        // экономя запросы к БД
        'select' => [
            'NAME',
            'CODE',
            'TYPE'
        ],

        // Кешируем запрос
        'cache' => [
            'ttl' => 36000,
        ],
    ])->fetchAll();

    echo '<pre>';
    print_r($orderProps);
    echo '</pre>';

}

Стоимость и сроки разработки сайтов и приложений

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

Интернет магазин: разработка с нуля от 400 000 руб.
от 5-ти недель

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

Интернет-магазин на готовом решении от 100 000 руб.
от 7-ми дней

Готовое решение — вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Запускается на одном из 200-та (на ваш выбор) готовых решений.

Мобильное приложение от 400 000 руб.
от 1-го месяца

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Опросник на разработку. После ознакомления, задам уточняющие вопросы и оценю проект по стоимости и срокам разработки.