Имя: Пароль:
1C
1С v8
можно ли в запросе из массива строк вырезать одинаковую подстроку ??
0 lim9
 
11.03.12
11:02
у меня массив строк, типа:
ск1, ск2, ...,ск999.
Можно ли как-то запросом вырезать "ск", чтобы получить только значения цифр?
1 ProProg
 
11.03.12
11:03
можно. разршаю.
2 Reset
 
11.03.12
11:03
Можно. Например, через функцию ПОДСТРОКА.
3 Maxus43
 
11.03.12
11:04
да нельзя имхо. подстрока ничего не даст, не знаем длины строки, а она переменная
4 Maxus43
 
11.03.12
11:05
в СКД можно попробовать. чистым запросом - нет.
Хотя не совсем понятно ещё что значит массив строк
5 Reset
 
11.03.12
11:09
(3) У него написано в сабже "одинаковую" ;) Хотя хз что это значит, конечно. В примерах префиксы одинаковой длины, подробней задачу он не описывает)
6 Maxus43
 
11.03.12
11:11
(5) префиксы одинаковой, числа - нет. в подстроке надо начало и конец... а тут конец неизвестен.
лично мне непонятно что такое массив строк. каким образом МАССИВ оказался в запросе или что это вобще. строка "ск1, ск2" или ещё чего
7 Maxus43
 
11.03.12
11:13
телепатия чего-то страдает сёдня
8 Reset
 
11.03.12
11:13
(6) ПОДСТРОКА(БлаБла, 2, 10000)
9 Reset
 
11.03.12
11:14
(8) Хотя это и некрасиво :)
10 Reset
 
11.03.12
11:15
(6) С остальным послностью согласен
11 Капитан О
 
11.03.12
11:15
(8) с третьей позиции
12 Maxus43
 
11.03.12
11:15
ну ждём автора. пусть раскроет тайну ск1, ск2, ...,ск999
13 Reset
 
11.03.12
11:16
(11) я от балды написал, НЕ к (0)
14 aleks-id
 
11.03.12
11:20
(13) забыл про максимальную длину 1024 ;)
15 Maxus43
 
11.03.12
11:21
в СКД ДлинаСтроки есть, можно там красивше сделать. Да и именно Массивы там можно крутить-вертеть :)
16 lim9
 
11.03.12
11:32
ск1..... ск999 - это просто коды справочника, которые "хорошие" пользователи понабивали как-попало вручную, вот теперь приходиться вводит нумерацию принудительную
17 Reset
 
11.03.12
11:34
(16) Имхо, рассмотри вопрос о полной перенумерации, т.к. строить алгоритмы на произвольно(руками пользователей) вбитых строках ненадежно
18 Maxus43
 
11.03.12
11:38
даже если не полностью нумерацию менять - в данной задаче запрос - не актуален. один фиг будеш получать объекты и менять код, т.е. запрос только для выборки элементов, а в цикле при обходе результата - играть с кодом как хочеш, во встроенном языке
19 lim9
 
11.03.12
11:38
(17) согласен
20 lim9
 
11.03.12
11:39
благодарю за помощчь! )
21 DexterMorgan
 
11.03.12
11:39
(16) Может поможет делал недавно для УТ11:

&НаСервере
Функция ВернутьЦифрыИзСтроки(СтрокаПроверки, УдалитьЛидирующиеНули = Истина)
   
   Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда
       Возврат "";
   КонецЕсли;
   
   ЦифрыИзСтроки = "";
   
   Для ё = 1 По СтрДлина(СтрокаПроверки) Цикл
       Символ = Сред(СтрокаПроверки, ё, 1);
       Если ЭтоЦифра(Символ) Тогда
           ЦифрыИзСтроки = ЦифрыИзСтроки + Символ;
       КонецЕсли;
   КонецЦикла;
   
   Если УдалитьЛидирующиеНули Тогда
       ЦифрыИзСтроки = СтроковыеФункцииКлиентСервер.УдалитьПовторяющиесяСимволы(ЦифрыИзСтроки, "0");
   КонецЕсли;
       
   Возврат ЦифрыИзСтроки;
   
КонецФункции

&НаСервере
Функция ЭтоЦифра(Символ)
   КодСимвола = КодСимвола(Символ);
   Возврат (КодСимвола >= 48 И КодСимвола <= 57)
КонецФункции
22 Капитан О
 
11.03.12
11:49
ЦифрыИзСтроки = СтроковыеФункцииКлиентСервер.УдалитьПовторяющиесяСимволы(ЦифрыИзСтроки, "0");

не знаю, что оно делает, но в середине все нули оставит?
23 DexterMorgan
 
11.03.12
11:50
(22) Обижаешь =)



// Удаляет повторяющиеся символы слева/справа в переданной строке
//
// Параметры:
//  Строка      - Строка - исходная строка, из которой необходимо удалить повторяющиеся символы
//  Символ      - Строка - значение символа, который необходимо удалить
//  Режим       - Строка - (необязательный) [Слева|Справа] режим добавления символов к исходной строке: слева или справа
//
Функция УдалитьПовторяющиесяСимволы(Знач Строка, Знач Символ, Знач Режим = "Слева") Экспорт
   
   Если ВРег(Режим) = "СЛЕВА" Тогда
       
       Пока Лев(Строка, 1)= Символ Цикл
           
           Строка = Сред(Строка, 2);
           
       КонецЦикла;
       
   ИначеЕсли ВРег(Режим) = "СПРАВА" Тогда
       
       Пока Прав(Строка, 1)= Символ Цикл
           
           Строка = Лев(Строка, СтрДлина(Строка) - 1);
           
       КонецЦикла;
       
   КонецЕсли;
   
   Возврат Строка;
КонецФункции
24 Капитан О
 
11.03.12
11:52
а третий параметр я не приметил ;)