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