Есть ли в D7 сортировка по типу ASC,NULLS?

В языке D7 в 1C-Bitrix существует возможность использовать сортировку по типу ASC (по возрастанию) и NULLS (сортировка NULL значений).

Для этого вы можете воспользоваться методом addOrder() в классе BitrixMainEntityQuery:

use BitrixMainEntityQuery;
use BitrixMainEntityExpressionField;

$query = new Query($entity);

$query->addSelect([
    'ID', 'NAME', 'DATE_CREATED'
);

$query->addOrder('FIELD');
$query->addOrder('DATE_CREATED', 'ASC');
$query->addOrder('NAME', 'NULLS');

$result = $query->exec();

while ($row = $result->fetch()) {
    // обработка результата
    echo $row['ID'] . ' ' . $row['NAME'] . ' ' . $row['DATE_CREATED'] . '<br>';
}

Здесь $entity - это сущность D7, относящаяся к вашей таблице БД.

В метод addOrder() можно передать строку с именем поля, по которому вы хотите провести сортировку. Если вам нужна сортировка по возрастанию, вы можете установить второй параметр как 'ASC'. Если вы хотите сортировать NULL значения по конкретному полю, установите второй параметр как 'NULLS'. Обратите внимание, что параметр 'NULLS' будет работать только с базой данных, которая поддерживает NULL значения.

Также вы можете использовать метод addExpressionField(), чтобы создать выражение с сортировкой по типу ASC и NULLS:

$query->addExpressionField('NAME_NULLS', 'CASE WHEN %s IS NULL THEN 1 ELSE 0 END', 'NAME');
$query->addOrder('NAME_NULLS');
$query->addOrder('NAME', 'ASC');

Здесь метод addExpressionField() позволяет добавить выражение, которое будет вычислено при выполнении запроса. В данном случае, мы создаем новое поле 'NAME_NULLS', основанное на поле 'NAME' и сортируем по нему сначала по NULL значениям, затем по возрастанию.

В обоих случаях вы получите отсортированный результат, соответствующий вашим требованиям.