Имя: Пароль:
1C
1С v8
Как текстовый номер документа в запросе преобразовать в число?
,
0 altaykniga
 
09.07.14
18:06
Привет всем! Прошу совета. Тип номера документа - строка. применяются только цифры в этих номерах. Необходимо упорядочить эти документы по номеру в запросе. Как это сделать?
Как я понимаю, нужно строковый номер сначала преобразовать в числовой, чтобы сортировка прошла нормально. Т.к. если сортировать строковые номера, то получается так: 11,110,1101,200,3724,64,667
1 dj_serega
 
09.07.14
18:10
через запрос нужно извращаться.
2 Wobland
 
09.07.14
18:21
на зачем?
3 altaykniga
 
09.07.14
18:28
(2) пишу в запросе
|    ВЫРАЗИТЬ(ц_ППН.НомерНаклПоставщика КАК ЧИСЛО) КАК Номер,

выходит ошибка:
Несовместимые типы "ВЫРАЗИТЬ"
4 Wobland
 
09.07.14
18:29
(3) не удивил. вопрос повторить?
5 altaykniga
 
09.07.14
18:42
(4) "на зачем?"
повтори. Вопрос непонятен
6 altaykniga
 
09.07.14
18:42
(4) Необходимо упорядочить эти документы по номеру в запросе - вот зачем
7 Михаил Козлов
 
09.07.14
18:46
(7) Добавьте "скрытый" реквизит, заполняйте его в ПередЗаписью и сортируйте в запросе.
Если не хотите менять конфу, можно через свойства прописать в регистр сведений ЗначенияСвойствОбъектов и брать поле сортировки из него.
8 Господин ПЖ
 
09.07.14
18:56
если длина фиксирована можно через мега case вывернуться... но это изврат
9 Enders
 
09.07.14
18:59
Можно в одном запросе преобразовать в число, выгрузить его в тз, а во второй запрос скормить полученную ТЗ :) Хотя тоже изврат
10 Enders
 
09.07.14
19:06
не, херню сморозил...
11 Ёпрст
 
09.07.14
19:08
(6) они и так отлично упорядочиваются, как строки.. чем не устраивает ?
12 PR
 
09.07.14
19:21
(0) Никак. А потому что нехрен лидирующие нули удалять.
13 PR
 
09.07.14
19:21
(3) Все правильно, так и должно быть
14 PR
 
09.07.14
19:22
(11) Чем не устраивает, написано в (0). Внезапно, да?
15 sirsp
 
09.07.14
19:50
(0) Изврат, из расчета, что длина номера=10:

ВЫБРАТЬ "11" Номер ПОМЕСТИТЬ Номера //ВТ для проверки
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "110"
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ "101"
;

ВЫБРАТЬ 1 Позиция ПОМЕСТИТЬ Позиции
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8
ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 9
;

ВЫБРАТЬ
    10 - МАКСИМУМ(Позиции.Позиция) ОбратнаяДлина
    ,Номера.Номер
ПОМЕСТИТЬ
    ДлиныНомеров
ИЗ
    Номера
    ,Позиции
ГДЕ
    НЕ ПОДСТРОКА(Номера.Номер, Позиции.Позиция, 10)    = ""
СГРУППИРОВАТЬ ПО
    Номера.Номер
;

ВЫБРАТЬ
    ДлиныНомеров.Номер
    ,ПОДСТРОКА("0000000000" + ДлиныНомеров.Номер, 10 - ДлиныНомеров.ОбратнаяДлина, 100) ПолеДляСортировки
ИЗ    
    ДлиныНомеров
УПОРЯДОЧИТЬ ПО
    ПолеДляСортировки    

Не преобразует, но сортирует :)
16 PR
 
09.07.14
19:55
(15) Эээ..., а просто
ВЫБОР
КОГДА ПОДСТРОКА(НомерБезНолей, 10, 1) <> ""
ТОГДА НомерБезНолей
КОГДА ПОДСТРОКА(НомерБезНолей, 9, 1) <> ""
ТОГДА "0" + НомерБезНолей
КОГДА ПОДСТРОКА(НомерБезНолей, 8, 1) <> ""
ТОГДА "00" + НомерБезНолей
...
КОНЕЦ
+ НомерБезНолей
не катит что ли уже?
17 sirsp
 
09.07.14
19:59
(16) Ключевое слово _изврат_ :)
18 Мимохожий Однако
 
09.07.14
20:05
Обработай номера документов до лидирующих нулей и сортировка будет обеспечена.
19 ДенисЧ
 
09.07.14
20:25
20 dj_serega
 
09.07.14
21:03
(19) что бы было отсортировано =)