Доброго времени суток колеги. Возник вопрос при работе. Не могу найти полезной информации.
Есть таблица значений. В ней всего один столбец со строковым значением. Таблица заполняется из excel. Записей по тестовому файлу 28к+

Задача следующая, нужно каким-то образом отсортировать её по схеме «Заглавная английская - строчная английская – Заглавная русская – строчная русская – цифры – спецсимволы» по первому знаку в алфавитном порядке.
Может кто-то сталкивался с таким или имеет понятия как это сделать грамотно.

У меня есть идея это разделить просто таблицу на отдельные, так сказать подтаблицы как по схеме, проверяя просто первый символ. После каждую из этих таблиц просто взять и сортировать стандартным ТабЗнач.Сортировать(). После просто объединить в нужный мне порядок в одну таблиц. Не уверен правда, что это будет оптимизировано.

Как вариант если через консоль запроса прогнать это дело и там есть какой-то вариант, но я не уверен
---
Может не самый оптимальный вариант, но работает:
```1c
    &НаСервере
    Процедура СортироватьПоПравилуНаСервере()

    ПорядокСимволов = Новый Соответствие;

    ТЗ = РеквизитФормыВЗначение("Таблица");
    ТЗ.Колонки.Добавить("Порядок", Новый ОписаниеТипов("Строка"));

    Для Каждого Стр Из ТЗ Цикл
    Массив = Новый Массив;
    Для Сч = 1 По СтрДлина(Стр.Значение) Цикл
    ТекущийСимвол = Сред(Стр.Значение, Сч, 1);
    Порядок = ПорядокСимволов[ТекущийСимвол];
    Если Порядок = Неопределено Тогда
    Порядок = ПорядокСимвола(ТекущийСимвол);
    ПорядокСимволов[ТекущийСимвол] = Порядок;
    КонецЕсли;
    Массив.Добавить(Порядок + ТекущийСимвол);
    КонецЦикла;
    Стр.Порядок = СтрСоединить(Массив);
    КонецЦикла;

    ТЗ.Сортировать("Порядок");

    ЗначениеВРеквизитФормы(ТЗ, "Таблица");

    КонецПроцедуры

    &НаКлиентеНаСервереБезКонтекста
    Функция ПорядокСимвола(Символ)

    Если Найти("ABCDEFGHIJKLMNOPQRSTUVWXYZ", Символ) > 0 Тогда
    Возврат "0"
    КонецЕсли;

    Если Найти("abcdefghijklmnopqrstuvwxyz", Символ) > 0 Тогда
    Возврат "1"
    КонецЕсли;

    Если Найти("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", Символ) > 0 Тогда
    Возврат "2"
    КонецЕсли;

    Если Найти("абвгдеёжзийклмнопрстуфхцчшщъыьэюя", Символ) > 0 Тогда
    Возврат "3"
    КонецЕсли;

    Если Найти("0123456789", Символ) > 0 Тогда
    Возврат "4"
    КонецЕсли;

    Возврат "5"

    КонецФункции
```
---
Заглавная английская - строчная английская – Заглавная русская – строчная русская – цифры – спецсимволы Это правило должно работать на все символы в значении или достаточно на первый? В последнем случае можно добавить служебную колонку Порядок, в которую писать числа в зависимости от первого символа в соответствии с правилом (буквы - 0, числа - 1, спецсимволы - 2). Результат сортировать по 2-м колонкам: Порядок, Значение.
---
Нет все равно порядок должен быть таким, даже для последующих символов
---
приведите несколько записей из таблицы значений, чтобы понимание сортируемого было
---
Примерно так

1762252
867011219
"СТИЛЬ" сектор Monaco Brawn 630*630*850
/3249/Т9D-1 Деревянный набор 9пр./коричневый/
<Мартика> Ковш 2л С77
0,75 Вино БИШО НЮИ СЖ КР СХ
11001408 Редукционный клапан
110217 кольцо уплотнительное О-образное 132,5х3,5 мм 1769799
110711 О-кольцо 70,5Хх64,5Х3 368035
11110701 Клапан
12806 Лампа светильник Дельта /черный/
1297573Н1, 571291131 Кромка боковая левая
1297574Н1, 571291134 Кромка режущая боковая пр
13,3" Ультрабук Asus (UX301LA)(FHD/Touch) i7 4510U(2.0)/6192/SSD 512/IntelHD4400/WiFi/BT/Cam/Win8Pro
13,3" Чехол HP Spectre Split Leather 1PD69AA
13.3" Ноутбук Asus (UX31A)(FHD)i7 3517U(1.9)/4096/SSD 256/Intel HD4000/WiFi/BT/Cam/MS Win7 Pro (Инв.
13.3" Сумка DNS/AirTone AT-W213 Black, нейлон, черный
Пробник электрический 140мм 100-500В
Палец
Ремкомплект цилиндра подъема кабины
Ремкомплект цилиндра подъема кабины (1541983)
Ремкомплект цилиндра подъема кабины (1541982)
ремкомплект цилиндра кабины ухо (1524337)
Панель управления LCP
9580 6 Тормозной фитинг
9580 8 Тормозной фитинг
9620670 пальцы лепестка грейфера (Liebherr)
970/100000 доля (13,8кв.м.) в нежилом помещ. № 188, общей пл. 1423,1кв.м, Блок Б; 1,2,3 этаж
9968596 Джойстик
9ES144434021 стекло фары правой 1446584
A-934C Li Сервис пакет 2000м/ч 10070222
AB7000 Преобразователь интерфейсов Anybus-Com Profibus DP
AC Beko BKG-09 C
AELITE Sab Red, сабвуфер
AF1843 Фильтр
AF1849M Фильтр
AF421M фильтр
AF821M фильтр
AF881 Фильтр
AFC-05 Картотечный шкаф 1620х466х631
AFC-520/330 - Электрическая дисковая машина AFC520/330
ASM-120T/2 Сейф 1200*550*390
Audio Quest YIQ-G 6 m RSA видео кабели комп
Audio Quest YIQ-А 12 m RSA видео кабели комп
Back-UPS CS 500 (источник питания)
BALTECH VP-3405-2 - виброручка (виброперемещение, виброскорость, виброумкорение)
BEL-600S Электромагнитный замок
Belden Кабель-витая пара с многопроволочными медными жилами экранированная 3105А 1х2х0,3 Belden 3105
Bistrо фужер для коньяка 400мл 1 шт (1013829) (Новый)
BOSS B16TR-RAF Верхняя панель для шкафа/орех/
BOSS B2D40K-2-RAF Двери двойные с замком /орех/
---
со спецсимволами сортировать отдельно придется. Все остальное должно и с помощью ТабЗнач.Сортировать() прокатить
---
Сейчас проверил, но там есть косяк. Он не учитывает регистр, что не совсем то.
---
как вариант перевести в верхний регистр все символы и отсортировать
---
если быстродействие не критично, проще всего добавить колонку порядка, пройтись по таблице и заполнить эту колонку. 28 тыс записей не так уж много.
Если это регулярное действие и скорость выполнения важна, то да, пожалуй, есть смысл в изобретении.
---
Может не самый оптимальный вариант, но работает:
```1c
    &НаСервере
    Процедура СортироватьПоПравилуНаСервере()

    ПорядокСимволов = Новый Соответствие;

    ТЗ = РеквизитФормыВЗначение("Таблица");
    ТЗ.Колонки.Добавить("Порядок", Новый ОписаниеТипов("Строка"));

    Для Каждого Стр Из ТЗ Цикл
    Массив = Новый Массив;
    Для Сч = 1 По СтрДлина(Стр.Значение) Цикл
    ТекущийСимвол = Сред(Стр.Значение, Сч, 1);
    Порядок = ПорядокСимволов[ТекущийСимвол];
    Если Порядок = Неопределено Тогда
    Порядок = ПорядокСимвола(ТекущийСимвол);
    ПорядокСимволов[ТекущийСимвол] = Порядок;
    КонецЕсли;
    Массив.Добавить(Порядок + ТекущийСимвол);
    КонецЦикла;
    Стр.Порядок = СтрСоединить(Массив);
    КонецЦикла;

    ТЗ.Сортировать("Порядок");

    ЗначениеВРеквизитФормы(ТЗ, "Таблица");

    КонецПроцедуры

    &НаКлиентеНаСервереБезКонтекста
    Функция ПорядокСимвола(Символ)

    Если Найти("ABCDEFGHIJKLMNOPQRSTUVWXYZ", Символ) > 0 Тогда
    Возврат "0"
    КонецЕсли;

    Если Найти("abcdefghijklmnopqrstuvwxyz", Символ) > 0 Тогда
    Возврат "1"
    КонецЕсли;

    Если Найти("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", Символ) > 0 Тогда
    Возврат "2"
    КонецЕсли;

    Если Найти("абвгдеёжзийклмнопрстуфхцчшщъыьэюя", Символ) > 0 Тогда
    Возврат "3"
    КонецЕсли;

    Если Найти("0123456789", Символ) > 0 Тогда
    Возврат "4"
    КонецЕсли;

    Возврат "5"

    КонецФункции
```