Здесь описан другой способ (21. Определение длины строки в запросе).
Необходимо построить в запросе дерево поиска конца строки. Для формирования текста с деревом, включаемого в запрос, используется рекурсивная функция:
Функция Дерево(Реквизит, Начало, Конец) Экспорт
Если Начало + 1 = Конец Тогда
Возврат Строка(Конец);
КонецЕсли;
Середина = Начало + Цел((Конец - Начало) / 2);
СтрокаДерево = "ВЫБОР КОГДА ПОДСТРОКА(" + Реквизит + ", " + (Середина + 1) + ", 3) = """" ТОГДА "
+ Дерево(Реквизит, Начало, Середина) + " ИНАЧЕ " + Дерево(Реквизит, Середина, Конец) + " КОНЕЦ";
Возврат СтрокаДерево;
КонецФункции // Дерево()
Где:
Реквизит – строка с именем таблицы и реквизита, содержащего определяемые строки.
Начало, Конец – интервал в котором будет производится поиск конца строки.
ТекстДерево = Дерево("Строки.Строка", -1, 300);
Недостатком данного способа является необходимость заранее определиться с максимальной длиной строки, а если длина строк окажется больше, то длина будет определена как максимальная. С увеличением максимальной длины строки увеличивается длина текста запроса и вложенность операторов выбора, поэтому нужно ограничиваться разумными величинами.
Вставляем полученное дерево в запрос:
Запрос.Текст =
"ВЫБРАТЬ
| Строки.Строка,
| " + ТекстДерево + " КАК Длина
|ИЗ
| Строки КАК Строки
|
|УПОРЯДОЧИТЬ ПО
| Длина УБЫВ";
Вот и все. Скоро напишу, для чего это было нужно)