Определение длины строки в запросе 1С
Как извесно боль запросов 1С, в невозможности «штатно» определить длину строки в запросе. Вот один из обходных «велосипедов»:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
&НаСервере Процедура ПроанализироватьНаСервере(имя) ТекстДерево = Дерево("ацукацукацук.Поле_1_1", -1, 300); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | " + ТекстДерево + " КАК Длина |ИЗ | РегистрСведений.ацукацукацук КАК ацукацукацук |УПОРЯДОЧИТЬ ПО | Длина УБЫВ"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл сообщить(ВыборкаДетальныеЗаписи.Длина); КонецЦикла; КонецПроцедуры &НаСервере Функция Дерево(Реквизит, Начало, Конец) Экспорт Если Начало + 1 = Конец Тогда Возврат Строка(Конец); КонецЕсли; Середина = Начало + Цел((Конец - Начало) / 2); СтрокаДерево = "ВЫБОР КОГДА ПОДСТРОКА(" + Реквизит + ", " + (Середина + 1) + ", 3) = """" ТОГДА " + Дерево(Реквизит, Начало, Середина) + " ИНАЧЕ " + Дерево(Реквизит, Середина, Конец) + " КОНЕЦ"; Возврат СтрокаДерево; КонецФункции |