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

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

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

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

"ВЫБРАТЬ
| МаркировкаТовара.Комплектность КАК Комплектность,
| "+СтрокаНаименования+"
|ИЗ
| Справочник.МаркировкаТовара КАК МаркировкаТовара
|УПОРЯДОЧИТЬ ПО
| "+СтрокаНаименования.ВОЗР+" ";
2. Borisych 503 10.06.10 00:55 Сейчас в теме
можно извернуться громоздкой конструкцией для определенной максимальной длины символов в самом запросе без постобработки результата
3. Збянтэжаны Саўка 244 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. Збянтэжаны Саўка 244 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 71 15.12.21 15:20 Сейчас в теме
(5) Для строки неограниченной длины есть такой вариант запроса:

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


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

(4)
УПОРЯДОЧИТЬ ПО
ДлинаНаименования УБЫВ
9. Obertone 71 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 87 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 до размерности наименования. Наименование это ограниченная длина.
Результат запроса соединяем с наименованиями и разбиваем на отдельные символы. Исключаем те строки где результат получился пустой символ.
Сворачиваем и считаем количество строк. Далее сортируем по количеству. Усё.
Оставьте свое сообщение
Вакансии
1С-Программист (интегратор Битрикс24)
Санкт-Петербург
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 100 000 руб.
Временный (на проект)

Разработчик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист
Санкт-Петербург
зарплата от 180 000 руб. до 240 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб. до 250 000 руб.
Полный день