Имя: Пароль:
1C
 
КА 2 - Не работает упорядочивание по номеру договора
0 Unbandigen
 
05.02.26
15:27
Запрос:

ВЫБРАТЬ
    ДоговорыКонтрагентов.Номер КАК Номер,
    ДоговорыКонтрагентов.Контрагент КАК Контрагент
ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
    ДоговорыКонтрагентов.Контрагент = &Контрагент
УПОРЯДОЧИТЬ ПО
    ДоговорыКонтрагентов.Номер ВОЗР    


Выдает:
Номер    Контрагент
11    База "Электротовары"
5    База "Электротовары"
9    База "Электротовары"

Почему не работает упорядочивание? Я потестил, 10 тоже считает меньше 5 и т.д. Если вместо 11 указать 8, то норм все упорядочит.
1 Unbandigen
 
05.02.26
15:26
Пробовал также зайти через "строки", то же самое.

ВЫБРАТЬ
    "йоу" + ДоговорыКонтрагентов.Номер + "!!!" КАК Номер,
    ДоговорыКонтрагентов.Контрагент КАК Контрагент
ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
    ДоговорыКонтрагентов.Контрагент = &Контрагент
УПОРЯДОЧИТЬ ПО
    "йоу" + ДоговорыКонтрагентов.Номер + "!!!" ВОЗР    



Номер    Контрагент
йоу11!!!    База "Электротовары"
йоу5!!!    База "Электротовары"
йоу9!!!    База "Электротовары"
2 Мультук
 
гуру
05.02.26
15:32
(0)


ВЫБРАТЬ
    ДоговорыКонтрагентов.Номер КАК Номер,
    ТипЗначения(ДоговорыКонтрагентов.Номер) КАК НомерТип,
    ДоговорыКонтрагентов.Контрагент КАК Контрагент
ИЗ
    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
ГДЕ
    ДоговорыКонтрагентов.Контрагент = &Контрагент
УПОРЯДОЧИТЬ ПО
    ДоговорыКонтрагентов.Номер ВОЗР    


Если в НомерТип написано "строка", то

google:
Как работает сортировка строк
3 shuhard
 
05.02.26
15:32
(0) 0 пробовал слева присобачить ?
4 Unbandigen
 
05.02.26
15:37
(2) Да, это строки. Бывают коды в буквами. Какие пути решения?
(3) Нет. Но, я думаю, это будет временным решением, ведь я решу проблему для десятков, а потом пойдут сотни и т.д.
5 shuhard
 
05.02.26
15:39
(4) строки должны иметь равную длину
в них не должно быть не бланкированных нулей
6 Unbandigen
 
05.02.26
15:41
(5) понятно.
Но люди так не работают. Они ведут произвольно нумерацию договоров: 2, 12, ГБ1, 4.
И хотят, чтобы на выход в отчете упорядочивалось как: 2, 4, 12, ГБ1.
7 Гипервизор
 
05.02.26
16:06
(6) Странные люди просят странного.
Это требует странных решений:

// Исходные данные
ВЫБРАТЬ "2" КАК НомерДоговора ПОМЕСТИТЬ ВТ_Договоры ОБЪЕДИНИТЬ
ВЫБРАТЬ "12" ОБЪЕДИНИТЬ
ВЫБРАТЬ "ГБ1" ОБЪЕДИНИТЬ
ВЫБРАТЬ "4";

// Табличку предварительно собираем в коде и передаем в запрос
ВЫБРАТЬ    1 КАК ДлинаСтроки, "0000" КАК Префикс ПОМЕСТИТЬ ВТ_Префиксы ОБЪЕДИНИТЬ
ВЫБРАТЬ    2, "000" ОБЪЕДИНИТЬ
ВЫБРАТЬ    3, "00" ОБЪЕДИНИТЬ
ВЫБРАТЬ    4, "0" ОБЪЕДИНИТЬ
ВЫБРАТЬ    5, "";

ВЫБРАТЬ
    ВТ_Договоры.НомерДоговора,
    ВТ_Префиксы.Префикс + ВТ_Договоры.НомерДоговора КАК ПолеДляСортировки
ИЗ
    ВТ_Договоры КАК ВТ_Договоры
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Префиксы КАК ВТ_Префиксы
        ПО (ДЛИНАСТРОКИ(ВТ_Договоры.НомерДоговора) = ВТ_Префиксы.ДлинаСтроки)
УПОРЯДОЧИТЬ ПО
    ПолеДляСортировки
8 АгентБезопасной Нацио
 
05.02.26
16:14
ВЫБРАТЬ
    ВТ.Поле1 КАК ПолеПредставление,
    ВЫРАЗИТЬ(ПРАВ("       " + ВТ.Поле1, 5) КАК СТРОКА(5)) КАК ПолеДляСортировки
ПОМЕСТИТЬ ВТ_1
ИЗ
    ВТ КАК ВТ
;
ВЫБРАТЬ
    ВТ_1.ПолеПредставление КАК ПолеПредставление,
    ВТ_1.ПолеДляСортировки КАК ПолеДляСортировки
ИЗ
    ВТ_1 КАК ВТ_1
УПОРЯДОЧИТЬ ПО    
ВТ_1.ПолеДляСортировки
9 d4rkmesa
 
05.02.26
16:23
(0) Добавьте в сам справочник договоров реквизит для сортировки. Можно сделать и в запросе, но будет громоздко, т.к. длина реквизита Номер равно 128. В СКД и предобработке несколько проще можно сделать.
10 Гипервизор
 
05.02.26
16:26
(8) 👍
11 Unbandigen
 
05.02.26
16:37
(8) потрясающе. Спасибо!
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший