Оригинал на GitHub
Вопрос
Есть временная таблица, в ней поле h_insert (для дальнейшего автозаполнения). Важно, чтобы данные в h_insert всегда имели сортировку по возрастанию по полю, например, Название заказчика. А поле из которого берутся данные в h_insert имеет тип Селект и их значение id не совпадают с Отображением. Как сделать сортировку при выборке через selectList по отображению (title) Селекта в исходной таблице, а не по его основанию (value)?
Ответ
Cамый простой способ — в таблице, из которой делается выборка, сделать техническое поле (тип строка), которое через #s.select_field
будет брать его отображение (title) и сортировку в коде в функции selectList в поле h_insert
делать по этому техническому полю.
Иногда бывает, что вариант добавления поля не годится. Поэтому можно пойти так. Взять rowlist
и дополнительно к field: 'select_field'
взять sfield: 'select_field'
. И потом этот rowlist
отсортировать по title
и после этого взять колонку с value
:
=: $sort[[value]]
sort: listSort(list: $rowlist; type: "string"; direction: "asc"; key: "title")
rowlist: selectRowList(table: 'table'; field: 'select_field' as "value"; sfield: 'select_field' as "title")
Первый вариант добавляет небольшой расход ресурсов при выполнении любого действия в таблице из которой делается выборка. Второй — расход при выполнении расчета h_insert
, так как для каждой строки будет рассчитан код-селекта поля указанного в sfield
.
Точка в которую предпочтительно перенести нагрузку определяется индивидуально для конкретной системы.