Имя: Пароль:
1C
 
Как получить число целых миллионов из числа, используя только операторы языка запросов?
,
0 Dzenn
 
гуру
26.07.19
17:22
Привет!

Есть номера заказов, числа от 1000000 до 25000000. Все заказы, начинающиеся на 1 - это сегмент 1, все, начинающиеся на 2 - это сегмент 2, и так далее, до сегмента 25. Как, используя только операторы языка запросов, то есть ( + , -, *, /, сумма, максимум, минимум, среднее ) получить из номера сегмент?
1 H A D G E H O G s
 
26.07.19
17:25
Не тащить такую фигню в запросы.
2 Dzenn
 
гуру
26.07.19
17:26
(1) бляяяяяяяяя.......
3 palsergeich
 
26.07.19
17:27
Язык запросов 1с не предназначен для таких операций.
Разбирайте и храните данные отдельно от такой сущности как код.
4 palsergeich
 
26.07.19
17:28
Сделать то можно, но производительность данного решения будет под огромным сомнением.
5 RomanYS
 
26.07.19
17:29
выразить(ТвоеЧисло/1000000 - 0.5 как Число(10,0))
6 lodger
 
26.07.19
17:29
(0)
выразить(ИмяТаблицы.Номер / 1000000 как число (5,0)) КАК НомерСегмента
7 palsergeich
 
26.07.19
17:30
(5) (6) а теперь выведите мне все товары 25 сегмента и давайте посмотрим на план)
8 palsergeich
 
26.07.19
17:31
А завтра окажется что по одному сегменту миллиона мало и переходим на миллиарды.
9 H A D G E H O G s
 
26.07.19
17:31
Без ВЫБОР КОГДА тут никак.
Производительность будет нормальная, читать эту дрянь потом тяжко - отмывать кровь из глаз тяжело.
10 palsergeich
 
26.07.19
17:32
(9) ну как нормальная постоянный фулл скан.
11 azernot
 
26.07.19
17:33
ВЫРАЗИТЬ((НомерЗаказа-500000) / 1000000 КАК ЧИСЛО(2, 0)) КАК Сегмент
12 Dzenn
 
гуру
26.07.19
17:33
(5) спасибо, точно :-)
13 Dzenn
 
гуру
26.07.19
17:34
(11) да, спасибо, или так :-)
14 H A D G E H O G s
 
26.07.19
17:34
(10) Это же не в условии, в результирующем поле
15 lodger
 
26.07.19
17:36
(7) (10) если уж надо в условие, то условие надо модифицировать.
ГДЕ
ИмяТаблицы.Номер > &НомерСегментаСнулями
16 palsergeich
 
26.07.19
17:38
(14) ну а зачем ещё нужен? 100% для отборов в дальнейшем, а если все очень плохо то для РЛС.
ТС послушная дядю Пашу. Я тоже был молод и любил арифметику в запросах похожего вида, а потом наступил себе на уй ей же.
Не хочешь конфу коверкать - сделай доп реквизит хотя бы.
17 azernot
 
26.07.19
17:39
Если НомерЗаказа - строка, то без выбора не обойтись

    ВЫБОР
        КОГДА НомерЗаказа ПОДОБНО "25%"
            ТОГДА 25
        КОГДА НомерЗаказа ПОДОБНО "24%"
            ТОГДА 24
        КОГДА НомерЗаказа ПОДОБНО "23%"
            ТОГДА 23
        КОГДА НомерЗаказа ПОДОБНО "22%"
            ТОГДА 22
....
        КОГДА НомерЗаказа ПОДОБНО "1%"
            ТОГДА 1
        ИНАЧЕ 0
    КОНЕЦ КАК Сегмент
18 lodger
 
26.07.19
17:40
(17) нам обещали число
19 azernot
 
26.07.19
17:40
(0) Я очень надеюсь, что этот запрос тебе нужен, чтобы прошерстить историю заказов в базе и правильно заполнить реквизит "НомерСегмента", чтобы потом уже использовать его.
20 palsergeich
 
26.07.19
17:40
(17) а потом ещё 150 сегментов добавится.
Просто потому что шеф захотел.
Почему сразу не сделать нормально??
21 olegves
 
26.07.19
17:40
а можно и так:
НомерЗакакза - НомерЗаказа%1000000 КАК Сегмент
22 azernot
 
26.07.19
17:41
(20) Я двумя руками за то, чтобы сделать "нормально". Но "нормально" можно сделать начиная с сегодня, а что делать с тем, что было вчера?
23 palsergeich
 
26.07.19
17:42
(22) привести их к нормально сегодня.
Чем больше такого копится исторически тем больнее жахнет.
Завалы тоже надо разгребать.
24 lodger
 
26.07.19
17:43
(21) Синтаксическая ошибка "%".
25 palsergeich
 
26.07.19
17:44
(23) на моей памяти у заказчика весь отдел на улицу пошел после выявления такого багажа тех долга.
26 Dzenn
 
гуру
26.07.19
17:44
(19) (20) Заказы - это номера из производственной системы, подключённой к 1С с помощью внешнего источника данных. Они не хранятся в 1С, и сегменты нужно получать "на лету". Я и сам должен был найти ответ из (11), но что-то сильно подтупливаю сегодня. А по поводу ваших комментариев - кто-то флудит, а кто-то отвечает по сути, ищите разницу.
27 RomanYS
 
26.07.19
17:47
(7) не знаю что там в плане

На 0.5М проводок время выполнения запросов почти одинаковое (между быстрее на 5%)
    
"ВЫБРАТЬ
    |    ТЧ.Регистратор,
    |    ПРЕДСТАВЛЕНИЕ(ТЧ.Регистратор)
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный КАК ТЧ
    |ГДЕ
    |    (ВЫРАЗИТЬ(ТЧ.Сумма / 1000 - 0.5 КАК ЧИСЛО(10, 0))) = 1";
    
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ТЧ.Регистратор,
    |    ПРЕДСТАВЛЕНИЕ(ТЧ.Регистратор)
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный КАК ТЧ
    |ГДЕ
    |    ТЧ.Сумма между 1000 И 1999.99";
28 H A D G E H O G s
 
26.07.19
17:48
(27) Епстественно, везде скан, поэтому одинаковое.