Вопрос
Что можно сделать, чтобы отсортировать список договоров по возрастанию или убыванию номеров, а не так, как на скрине?
Ответ
Данное поведение сортировки обусловлено тем, что поле [Номер] - текстовое, а правила сортировки текста отличаются от правил сортировки чисел. Для решения задачи сортировки, необходимо:
1. Создать замещающий объект [Договор] и добавить в него новую числовую колонку. Опубликовать объект.
2. Открыть замещающий объект [Договор] вновь, создать событие [Перед сохранением записи] ([ContractSaving]), перейти к процессу объекта ([Дополнительно] – [Открыть процесс]).
3. В процессе добавить [Событийный подпроцесс].
4. На подпроцессе разместить сигнал, в поведении сигнала указать сигнал - [ContractSaving].
5. За сигналом добавить скрипт-задачу с кодом:
int num = 0;
bool res = int.TryParse(Entity.Number, out num);
if (res == true)
{
Entity.UsrNumber = num;
}
return true;
6. За скрипт-задачей разместить завершающий сигнал. Сохранить. Опубликовать процесс.
Теперь при сохранении новых или изменении старых записей договоров, номер будет дублироваться в числовую колонку. Её и необходимо вывести вместо старой в реестр, и там будет работать сортировка по правилам сортировки чисел.
Для обновления всех старых записей системы и заполнения новой колонки значениями, в конфигурации необходимо добавить на закладке [SQL-сценарии] скрипт и выполнить его:
UPDATE Contract
SET UsrNumber = CONVERT(INT, Number)
Все это справедливо, если в поле номер пишутся номера без префикса.