Как отсортировать запрос по длине строки

1. Caspers 08.06.10 13:50 Сейчас в теме
Есть запрос типа
|ВЫБРАТЬ
| МаркировкаТовара.Комплектность
|ИЗ
| Справочник.МаркировкаТовара КАК МаркировкаТовара
Нужно получить на выходе отсортированую таблицу по количеству символов, т.е. первыми д.б. те, у которых кол-во символов наибольшее...
Туплю, помогите, плз ...
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. vik2006 137 25.03.22 09:14 Сейчас в теме
(1) Попробуй в запросе сделать отдельное вычисляемое поле, где рассчитывается длина строки сортируемого поля. И уже потом во вкладке порядок сортировать по этому полю. Либо в увеличение, либо в уменьшение, в зависимости от надобности.
12. Nevelded 03.06.23 22:05 Сейчас в теме
"ВЫБРАТЬ
| МаркировкаТовара.Комплектность КАК Комплектность,
| ДЛИНАСТРОКИ(МаркировкаТовара.Комплектность.Наименование) КАК СтрокаНаименования
|ИЗ
| Справочник.МаркировкаТовара КАК МаркировкаТовара
|УПОРЯДОЧИТЬ ПО
| СтрокаНаименования.ВОЗР ";

Как-то так.. Яб сделал, либо вообще можно сделать вот так, чтоб лишних данных не было если они не нужны.

СтрокаНаименования= "ДЛИНАСТРОКИ(МаркировкаТовара.Комплектность.Наименование) КАК СтрокаНаименования";
УпорядочитьПо = "СтрокаНаименования.ВОЗР";

"ВЫБРАТЬ
| МаркировкаТовара.Комплектность КАК Комплектность,
| "+СтрокаНаименования+"
|ИЗ
| Справочник.МаркировкаТовара КАК МаркировкаТовара
|УПОРЯДОЧИТЬ ПО
| "+СтрокаНаименования.ВОЗР+" ";
2. Borisych 503 10.06.10 00:55 Сейчас в теме
можно извернуться громоздкой конструкцией для определенной максимальной длины символов в самом запросе без постобработки результата
3. Збянтэжаны Саўка 245 10.06.10 12:39 Сейчас в теме
Андрей пишет:

можно извернуться громоздкой конструкцией для определенной максимальной длины символов в самом запросе без постобработки результата


интересно. например как?
4. Borisych 503 11.06.10 00:01 Сейчас в теме
ВЫБРАТЬ
	ВЫБОР
		КОГДА ПОДСТРОКА(ВЫРАЗИТЬ(Справочник1.Наименование КАК СТРОКА(6)), 6, 1) <> " "
			ТОГДА 6
		КОГДА ПОДСТРОКА(ВЫРАЗИТЬ(Справочник1.Наименование КАК СТРОКА(5)), 5, 1) <> " "
			ТОГДА 5
		КОГДА ПОДСТРОКА(ВЫРАЗИТЬ(Справочник1.Наименование КАК СТРОКА(4)), 4, 1) <> " "
			ТОГДА 4
		КОГДА ПОДСТРОКА(ВЫРАЗИТЬ(Справочник1.Наименование КАК СТРОКА(3)), 3, 1) <> " "
			ТОГДА 3
		ИНАЧЕ 0
	КОНЕЦ КАК ДлинаНаименования,
	Справочник1.Наименование,
	Справочник1.Код
ИЗ
	Справочник.Справочник1 КАК Справочник1

УПОРЯДОЧИТЬ ПО
	ДлинаНаименования УБЫВ
Показать

и база :
Прикрепленные файлы:
1Cv8.1CD
5. Збянтэжаны Саўка 245 11.06.10 18:52 Сейчас в теме
(4) хм, это правильно конечно, но что делать ежели реквизит - строка неограниченной длины?..
Казалось бы ну такая популярная функция ДлинаСтроки() и почему 1С-ники не включили ее в язык запросов?

а что в приложенном файле кроме описанного здесь кода? а то лень качать
6. Borisych 503 12.06.10 00:21 Сейчас в теме
(5) база с одним справочником с элементами с именами различной длины
7. pvvpvv 10 14.06.10 09:09 Сейчас в теме
(5) В СКД есть функция ДлинаСтроки().
8. Obertone 74 15.12.21 15:20 Сейчас в теме
(5) Для строки неограниченной длины есть такой вариант запроса:

Выбор
Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(0)) = Наименование Тогда
0 Иначе Выбор
Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(1)) = Наименование Тогда
1 Иначе Выбор
Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(2)) = Наименование Тогда
2 Иначе Выбор
Когда ВЫРАЗИТЬ(Наименование КАК СТРОКА(3)) = Наименование Тогда
3 Иначе 
Конец
Конец
Конец
Конец КАК ДлинаНаименования
Показать


А дальше в конце запроса всё как написано выше:

(4)
УПОРЯДОЧИТЬ ПО
ДлинаНаименования УБЫВ
9. Obertone 74 25.03.22 09:05 Сейчас в теме
Ещё один вариант решения задачи при наличии платформы 1С выше версии 8.3.20: https://wonderland.v8.1c.ru/blog/novye-funktsii-yazyka-zaprosov-i-sistemy-komponovki-dannykh/

Нужно использовать встроенную функцию запроса ДлинаСтроки(), которая вычислит длину строки.

ДлинаСтроки(Наименование) КАК ДлинаНаименования


А дальше в конце запроса как написано выше:

УПОРЯДОЧИТЬ ПО
ДлинаНаименования УБЫВ
user1619761; triviumfan; +2 Ответить
11. triviumfan 93 06.07.22 22:57 Сейчас в теме
(9) Уже и забыл, что в 20 версии такое появилось. Но не все используют 20тку :)
13. Borisych 503 04.06.23 02:17 Сейчас в теме
(11) дата вопросов - 2010 год.
13 лет назад в платформе не было таких функций в языке запросов. Вот и алгоритмили...
user1619761; +1 Ответить
14. Said-We 05.06.23 12:18 Сейчас в теме
(13) Для 2010 года алгоритм тоже не очень. Если строка 150, то сколько писанины будет?
Обычный порождающий запрос числовой последовательности от 1 до размерности наименования. Наименование это ограниченная длина.
Результат запроса соединяем с наименованиями и разбиваем на отдельные символы. Исключаем те строки где результат получился пустой символ.
Сворачиваем и считаем количество строк. Далее сортируем по количеству. Усё.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот