Задача: Получить все доступные свойства заказа для всех активных типов плательщика из модуля магазина.
Старые методы получения свойств заказа
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
),
]);