Имя: Пароль:
1C
1С v8
Как в СКД преобразовать строку в число?
0 SherifSP
 
26.07.13
11:25
Пишу ВЫРАЗИТЬ(НомерДома, КАК Число) запрос отвечает: Не совместимые типы "ВЫРАЗИТЬ", как тогда можно преобразовать строку в число?
1 Капитан О
 
26.07.13
11:28
на зачем?
2 SherifSP
 
26.07.13
11:28
Для сортировки, по строке не правильно сортирует
3 cw014
 
26.07.13
11:30
(2) А если номер дома = "29-а"???
4 SherifSP
 
26.07.13
11:31
(3) Делема)
5 Капитан О
 
26.07.13
11:31
(4) что это?
6 rinatru
 
26.07.13
11:32
дилемма
7 cw014
 
26.07.13
11:32
(5) Не знаю, может тещю так зовут
8 SherifSP
 
26.07.13
11:32
(3) Но дробная часть отдельным полем выводится
9 Капитан О
 
26.07.13
11:33
(8) а ты насильно присвой туда ересь
10 Капитан О
 
26.07.13
11:33
+(9) тип поля же такое позволяет
11 SherifSP
 
26.07.13
11:36
(10) В скд на закладке вычисления в поле значение выставил этому полю число, но сортировка не работает
12 Nexux
 
26.07.13
11:37
не в запросе не получится, в вычисляемых полях попробовать можно Число([ИмяПоля])
13 salvator
 
26.07.13
11:37
(0) Напиши свою функцию и вызывай ее в вычисляемых полях
14 Serg_1960
 
26.07.13
11:37
(5) Это пятница :)

По теме:
Чтобы сортировка имела хоть какой-то смысл - надо "стандартизировать" написание номера дома. А вот это в типовых нет.
Можно предпологатьвстретить в адресе любое написание "29-а" ("29а", "29А" и т.д.) В СКД - только вызовом внешней функции решается
15 SherifSP
 
26.07.13
11:41
(14) Дайте ссылку на эту функцию?)
16 cw014
 
26.07.13
11:42
(15) Напишите сами
17 SherifSP
 
26.07.13
11:43
(16) Там велосипед нужно придумывать, а хотелось бы к общему принципу свести
18 cw014
 
26.07.13
11:44
(17) Никаких велосипедов, работы на 5 минут с перекурами
19 SherifSP
 
26.07.13
11:47
(18) Через попытку попробовать сразу в число преобразовать в исключении перебрать каждый символ значения, откинуть не нужное и преобразовать в число?
20 cw014
 
26.07.13
11:49
(19) Исключи попытку и первое преобразование
21 Капитан О
 
26.07.13
11:49
(19) 43/4 - > 434
22 cw014
 
26.07.13
11:50
+(19) Перебирай строку, проверяй, что у тебя код символа текущий между 48 и 57 (включительно). Если не так, прерывай цикл и то что получилось преобразовывай в число
23 SherifSP
 
26.07.13
11:53
К функции обращаться в поле выражение и передавать туда свое значение?
24 cw014
 
26.07.13
11:53
Функция НомерДомаВЧисло(НомерДома) Экспорт

  Результат = "";
  НомерДома = СокрЛП(НомерДома);
  ДлинаНомера = СтрДлина(НомерДома);
  Для Сч = 1 По ДлинаНомера Цикл
    ТекСимвол = Сред(НомерДома,Сч,1);
    Если КодСимвола(ТекСимвол) >= 48 и КодСимвола(ТекСимвол) <= 57 тогда
      Результат = Результат + ТекСимвол;
    Иначе
      Прервать;
    КонецЕсли;
  КонецЦикла;

  Если СтрДлина(Результат) > 0 тогда
    Возврат Число(Результат);
  Иначе
    Возврат 0;
  КонецЕсли;

КонецФункции
25 KAO111
 
26.07.13
11:53
В СКД:

ПОДСТРОКА("       ",1,10+ДЛИНАСТРОКИ(НомерДома)) +  НомерДома

Будет нормально сортироваться за счет первых пробелов
26 KAO111
 
26.07.13
11:54
ПОДСТРОКА("       ",1,10-ДЛИНАСТРОКИ(НомерДома)) +  НомерДома
27 cw014
 
26.07.13
11:55
(25)(26) Математик, уважаю... Только вместо пробелов наверное лучше "0" поставить
28 Капитан О
 
26.07.13
11:57
опля! длина строки появилась? давно?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший