Имя: Пароль:
1C
1С v8
Поиск позиции подстроки в строке
, ,
0 NastyNasty
 
27.12.12
13:00
Дорогие 1Сники! Нужна Ваша помощь. Я в запросе получаю строку (формат у нее такой: тутненужнаястрока@НУЖНАЯСТРОКА@тутненужнаястрока). Длина ненужных строк переменная, но я наверняка знаю, что строка, которая мне нужна отделена символами @. Мне нужно ИМЕННО в запросе отбросить ненужные части (отчет СКД). В голову пришел глупый вариант поиска в каждом символе строки подстроку @, чтобы выявить позицию, но это очень глупо...
1 НЕА123
 
27.12.12
13:04
(0)
а что делать? в запросе только так.
2 HouseCD
 
27.12.12
13:05
Посмотри операцию Подобно (Like)
3 NastyNasty
 
27.12.12
13:05
(1) я не могу поверить, что никто не придумал адекватного решения
4 DrShad
 
27.12.12
13:07
(2) всю ветку не читал ПОДОБНО уже было?
5 salvator
 
27.12.12
13:08
(0) ПОДСТОРОКА. Но она тебе не поможет.
6 НЕА123
 
27.12.12
13:09
(3)
пардон. в (1) про запросы.
если СКД, тогда спрошу - зачем?
7 NastyNasty
 
27.12.12
13:09
(5)ПОДСТРОКА я использую в своем деревянном решении
8 МихаилМ
 
27.12.12
13:11
9 НЕА123
 
27.12.12
13:13
НУЖНАЯСТРОКА - максимальная длина какая?
10 Reset
 
27.12.12
13:13
По нормальному в запросе никак.

По ненормальному - соединять с таблицей чисел по
Подстрока(Строка,Числа.Значение,1)="@",
используя минимум(), получить только первые вхождения.
а затем выводить Подстрока(Строка,Числа.Значение) КАК БезПервойНенужно части
затем аналогично отрезать вторую (уже минимум() не нужен будет)
11 Ursus maritimus
 
27.12.12
13:15
Если СКД, можно внешнюю функцию использовать
12 NastyNasty
 
27.12.12
13:17
(9) неограниченная длина
13 dimaldinho
 
27.12.12
13:49
(0) >> Мне нужно ИМЕННО в запросе отбросить ненужные части (отчет СКД).

Программно формируешь отчет. С помощью ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений выводишь результат в таблицу значений. Таблицу значений алгоритмически обрабатываешь, отрезая ненужные части строк. Получившуюся таблицу значений с правильными строками используешь как внешний источник данных в компоновке.
14 Infsams654
 
27.12.12
14:20
(0) МассивПодстрок = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ВсяСтрока,"@");
в типовых БП, БГУ и пр.
15 NastyNasty
 
28.12.12
13:23
(14) ваше решение мне нравится, всё хорошо, спасибо, я как раз в вдгб искала подобную функцию, но у меня снова тупняк. прописываю вызов функции в вычисляемом поле. возвращается у меня массив. Но я не могу обратиться к элменту по индексу. Пишу так ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(ВсяСтрока,"@")[1]. при формировании отчета говорит "Отчет не сформирован. ожидается ) ")"". Как я могу получить элемент массива?
16 Infsams654
 
28.12.12
14:41
(15) так нельзя (в 1С к сожалению, нет хранимых процедур и пользовательских функций, как в порядочных СУБД). Поэтому нужно программно обрабатывать результат, см. например, v8: перехват результата СКД
17 NastyNasty
 
10.01.13
08:25
Нашла такой же внешний отчет, сделанный построителем. Если конфа была бы дописанная, можно было бы в свой модуль функцию засунуть, которая возвращает не массив, как стандартная, а строку