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

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 92 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С аналитик
Москва
зарплата от 210 000 руб.
Полный день

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

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

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

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)