Имя: Пароль:
1C
1С v8
Как в запросе написать условие gr&(1<<4)?
0 AnisaL
 
13.03.14
10:02
Доброе утро!
Как в запросе написать условие gr&(1<<4) ?
1 Мутабор
 
13.03.14
10:03
gr%26(1%3C%3C4)
2 Мутабор
 
13.03.14
10:04
Вот полностью в запросе:
http://yandex.ru/yandsearch?text=gr%26(1%3C%3C4)&from=os&lr=197
или мы про гугл?
3 Мутабор
 
13.03.14
10:05
4 m-serg74
 
13.03.14
10:06
(2) +100 :)
5 AnisaL
 
13.03.14
10:06
(0) точнее условие вот: gr&(1<<4)>0
6 AnisaL
 
13.03.14
10:08
(1) непонятно
7 m-serg74
 
13.03.14
10:08
(5) а 1<<4 это не 10000
8 bolobol
 
13.03.14
10:10
Взять в кавычки, не?
9 ДенисЧ
 
13.03.14
10:11
в 1с нет оператора << ...
10 1dvd
 
13.03.14
10:11
Это С++ чтоли?
11 bolobol
 
13.03.14
10:11
И где здесь условие, простите, 1 много меньше четырёх это, условно, можно принять за истину сразу, или за ложь, в зависимости от системы, наверное
12 AnisaL
 
13.03.14
10:11
(8) запрос я делаю в конструкторе к внешнему источнику данных, там в условии написать в кавычках?
13 AnisaL
 
13.03.14
10:12
(11) условие здесь (5) что результат выражения больше 0
14 AnisaL
 
13.03.14
10:13
(11) это не много меньше 4, а побитовый левый сдвиг
15 AnisaL
 
13.03.14
10:13
(10) да, в с++ есть такая операция, запрос к базе данных биллинга
16 AnisaL
 
13.03.14
10:14
Вопрос как это выражение написать в 1с
17 m-serg74
 
13.03.14
10:17
(16) разделить на 100000 с коруглением до целого и до одного десятичного и сравнить не подходит?
18 m-serg74
 
13.03.14
10:18
(17) извиняюсь... отставить
19 1dvd
 
13.03.14
10:21
1<<4

это можно представить как
1*16
20 bolobol
 
13.03.14
10:22
Побитовый сдвиг это возведение двойки в степень и умножение на результат. А вот побитовое И...
21 vqwy
 
13.03.14
10:22
угадал автора по теме
22 vqwy
 
13.03.14
10:23
в ветку реквестируется Wobland
23 1dvd
 
13.03.14
10:24
(22) позвал
24 le_
 
13.03.14
10:25
(0) Предлагаю сформулировать это условие на русском языке и решение тут же найдется.
25 AnisaL
 
13.03.14
10:25
(20) ну сначала же делается сдвиг а потом операция &, т.е. побитовое И
26 AnisaL
 
13.03.14
10:25
(21) интересно как?
27 1dvd
 
13.03.14
10:28
(26) не понятно для чего такую экзотику делать в 1С, тем более в запросе
28 AnisaL
 
13.03.14
10:28
(23) без него не обойдемся никак))
29 1dvd
 
13.03.14
10:29
Wobland пока занят. подойдёт попозже
30 AnisaL
 
13.03.14
10:29
(27) мне нужно загрузить данные из базы биллинга, а это условие определяет договор физика или юрика:

SELECT * from Contract WHERE gr&(1<<4)>0   - юрики
SELECT * from Contract WHERE gr&(1<<0)>0   - физики
31 1dvd
 
13.03.14
10:30
(30) gr - это число?
32 vqwy
 
13.03.14
10:31
(30) что такое "gr", уже спрашивали, я так понимаю?
33 le_
 
13.03.14
10:32
И причем тут с++?
34 AnisaL
 
13.03.14
10:32
(32) (31) да число - целое, например 35184372121605
35 AnisaL
 
13.03.14
10:33
(33) ни причем, это запрос на sql (30)
36 le_
 
13.03.14
10:34
(35) А в (15) что?
37 le_
 
13.03.14
10:35
В общем, нужно сделать незнамо что и незнамо как. Желающие помочь, присоединяйтесь!
38 Wobland
 
13.03.14
10:36
(30) 4я цифра не ноль - юрик, 1я цифра не ноль - физик. что за бред?
39 bolobol
 
13.03.14
10:36
Так вот, И побитовое с одним битом - это деление на возведённую в степень двойку и проверка на чётность. Осталось понять, как проверить чётность...
40 ДенисЧ
 
13.03.14
10:37
(38) кто ты такой, чтобы критиковать структуру бд биллинга?
ДАли условие - пляши.
41 bolobol
 
13.03.14
10:37
Кроме как делить на два без остатка - ничего в голову не приходит
42 bolobol
 
13.03.14
10:38
Итого, получаем целое(гр / (1*2^4))%2 = 0 или 1
43 Wobland
 
13.03.14
10:39
вот тебе 4я цифра строкой: select substring(cast(22220222 as varchar(8)), 8-4+1, 1)
или тут вообще о чём речь?
44 Йохохо
 
13.03.14
10:40
(30) Цел(гр, 32) > 8
45 vqwy
 
13.03.14
10:41
был бы это ИНН - просто определили бы юрик или физик
46 Зойч
 
13.03.14
10:46
делай через адо, там все есть
47 Ненавижу 1С
 
гуру
13.03.14
10:51
что все таки означает 1<<4 ?
48 z80a
 
13.03.14
10:53
(47) один гораздо меньше чем 4
49 Ненавижу 1С
 
гуру
13.03.14
10:54
(48) логично, но тогда почему 1<<0
50 z80a
 
13.03.14
10:55
(49) хз
51 Speshuric
 
13.03.14
10:55
52 Ненавижу 1С
 
гуру
13.03.14
10:56
(51) если бы смысл был таким, то наверное написали бы просто 16
53 Speshuric
 
13.03.14
10:58
(52)см. 30, просто походу кто-то в запросе решил указать явно какой бит должен быть установлен для юриков и физиков.
54 le_
 
13.03.14
11:00
55 Starhan
 
13.03.14
11:01
(52) возможно  AnisaL не знает истиннго ссмысла 1<<4 и пишет как дали.
56 Йохохо
 
13.03.14
11:01
(49) просто для единообразия записи, наверняка там еще куча гадости понапихана, 1<<1 самозанятый, 1<<2 иностранный
57 Speshuric
 
13.03.14
11:08
(49) 1<<0 = 1, проверяем 0-й бит, 1<<4 = 16 - проверяем 4-й бит, всё логично и просто было для автора запроса в SQL.
Битовую арифметику в 1С-ном запросе сделать легко и просто, но выражения получаются неситаемые.
58 Speshuric
 
13.03.14
11:14
(57)

В запросе придется делать примерно так:

ВЫБРАТЬ
    ВЫБОР
        КОГДА Т.Ч / 2 = (ВЫРАЗИТЬ(Т.Ч / 2 КАК ЧИСЛО(15, 0)))
            ТОГДА ЛОЖЬ
        ИНАЧЕ ИСТИНА
    КОНЕЦ КАК ПроверкаБита0,
    ВЫБОР
        КОГДА (ВЫРАЗИТЬ(Т.Ч / 16 КАК ЧИСЛО(15, 0))) / 2 = (ВЫРАЗИТЬ((ВЫРАЗИТЬ(Т.Ч / 16 КАК ЧИСЛО(15, 0))) / 2 КАК ЧИСЛО(15, 0)))
            ТОГДА ЛОЖЬ
        ИНАЧЕ ИСТИНА
    КОНЕЦ КАК ПроверкаБита4
ИЗ
    (ВЫБРАТЬ
        &Параметр КАК Ч) КАК Т
59 Ненавижу 1С
 
гуру
13.03.14
11:22
(58) ВЫРАЗИТЬ(Т.Ч / 16 КАК ЧИСЛО(15, 0)) работает как округление а не целая часть, надо
ВЫРАЗИТЬ(Т.Ч / 16 -0.5 КАК ЧИСЛО(15, 0))
60 Speshuric
 
13.03.14
11:39
(59) Спасибо за ценное уточнение, писал "на коленке". Один фиг делать так в запросе я бы не стал. Уж проще промежуточную вьюху с вычисляемыми полями (или сразу с условиями) впендюрить и оттуда брать данные.
61 Wobland
 
13.03.14
12:03
всё ещё занимаетесь этим битоверчением? интересно..
62 AnisaL
 
13.03.14
12:55
(61) я только пришла с обеда
63 Wobland
 
13.03.14
12:59
(62) самое время пояснить тому, кто всё прогулял, содержательный смысл конструкции
64 AnisaL
 
13.03.14
13:03
(63) слушаю внимательно ))
65 Wobland
 
13.03.14
13:05
хорошо, переформулируем запрос. что за gr&(1<<4) ?
66 AnisaL
 
13.03.14
13:05
(65) это условие для юриков
67 Wobland
 
13.03.14
13:06
хорошо, переформулируем ещё раз. что означают операции (это же операции?) & и <<?
68 AnisaL
 
13.03.14
13:07
(65) точнее gr&(1<<4)>0, gr - группа, типа bigint(20) в базе данных биллинга
69 Ненавижу 1С
 
гуру
13.03.14
13:08
(68) а дальше?
70 Wobland
 
13.03.14
13:08
всё-таки битовые сложения и сдвиг?
71 Wobland
 
13.03.14
13:08
(70) 1С так не умеет. за SQLем что-то тоже не заметил
72 AnisaL
 
13.03.14
13:09
(67) & - Bitwise AND, << - Left shift - взято отсюда https://dev.mysql.com/doc/refman/5.0/en/bit-functions.html
73 Ненавижу 1С
 
гуру
13.03.14
13:09
(71) битовый сдвиг влево на 1С? да запросто!
74 Wobland
 
13.03.14
13:09
(73) в запросе?
75 AnisaL
 
13.03.14
13:09
(70) да
76 AnisaL
 
13.03.14
13:09
(74) да
77 Wobland
 
13.03.14
13:10
(76) <<4 - умножение на 16
78 AnisaL
 
13.03.14
13:10
(74) в смысле что это условие надо в запросе реализовать к внешнему источнику
79 AnisaL
 
13.03.14
13:11
(77) 1<<4 - 1*16 ?
80 Ненавижу 1С
 
гуру
13.03.14
13:12
(79) 1<<4 = 1*2^4 = 1*16
81 Wobland
 
13.03.14
13:14
(77) а в паре с умножением - выделение 4го бита
82 Зойч
 
13.03.14
13:14
нужно проверить что 4 бит - это единичка. На 1с это нельзя
83 Wobland
 
13.03.14
13:15
а что, если взять и перечислить все числа, имеющие 4й бит в 1? бредово, но технически осуществимо
84 Ненавижу 1С
 
гуру
13.03.14
13:17
вот твоё условие:

gr - (ВЫРАЗИТЬ(gr / 32 - 0.5 КАК ЧИСЛО(10, 0))) * 32 >= 16
85 AnisaL
 
13.03.14
13:23
(84) спасибо! а вот такое выражение: gr&(1<<0)>0
86 Wobland
 
13.03.14
13:24
(84) у меня 233 (11101001) через это не пролезло. не так считал?
87 skunk
 
13.03.14
13:25
(77)как бы не совсем так
88 Wobland
 
13.03.14
13:26
(87) как бы - это как?
89 Ненавижу 1С
 
гуру
13.03.14
13:27
(86) для 233 условие = ложь
90 skunk
 
13.03.14
13:28
но просто не всегда а<<4 будет равно а*16
91 inspam
 
13.03.14
13:28
(82) чой то?
92 Ненавижу 1С
 
гуру
13.03.14
13:28
(86) считая слева 4-й бит равен 0 (нумерация от 0), так что все ОК
93 Wobland
 
13.03.14
13:30
(92) ага, понял уже
94 Wobland
 
13.03.14
13:31
(90) ты про переполнение штоль? чудная, давно забытая вселенная с ноликами и единичками ;)
95 skunk
 
13.03.14
13:31
(94)но его пока не кто не отменял
96 Ненавижу 1С
 
гуру
13.03.14
13:32
(85) а подумать самой?
16 замени на 1
32=2*16 замени на 2
97 Serginio1
 
13.03.14
13:33
(52) Это битовая маска. Сдвиг удобен теч, что зная в какой позиции должен быть флаг начиная с нуля.
98 AnisaL
 
13.03.14
14:01
(84) так не получается - и физики и юрики выбираются
99 Wobland
 
13.03.14
14:02
(98) по твоей схеме гр может содержать признаки физлица и юрлица одновременно
100 vqwy
 
13.03.14
14:03
100
101 Wobland
 
13.03.14
14:06
(98) тебя научить быстро смотреть глазами в 4й или 0й байт десятичного числа?
102 AnisaL
 
13.03.14
14:08
(101) ага
103 Мутабор
 
13.03.14
14:10
16
48
112
240
у них байт установлен
104 Wobland
 
13.03.14
14:10
105 Мутабор
 
13.03.14
14:11
106 AnisaL
 
13.03.14
14:16
(104) это поняла
107 le_
 
13.03.14
14:20
(103) Байт или бит?
108 Мутабор
 
13.03.14
14:21
У этих чисел бит. Но решение выше уже написали думаю, там что поздно баржоми пить
109 AnisaL
 
13.03.14
14:33
(108) ты про (84) ? у меня по нему не удалось получить юриков
110 Ненавижу 1С
 
гуру
13.03.14
14:41
(109) накидай нам несколько примеров gr для юриков
111 le_
 
13.03.14
14:44
(0) А почему бы не использовать ADO для доступа к этим данным? Можно было бы использовать готовые запросы, как, как есть...
112 AnisaL
 
13.03.14
14:51
(110) 1099511726101
1099511726100
4398046609428
4398046609429
4398046543892
113 AnisaL
 
13.03.14
14:52
(111) да, но столько уже работы проделано со внешними источниками, переписывать много
114 AnisaL
 
13.03.14
14:54
(112) еще 1125899906908180, 72057594037993492
115 Ненавижу 1С
 
гуру
13.03.14
14:55
пробовала разрядность в (84) повысить?
КАК ЧИСЛО(15, 0)
116 Ненавижу 1С
 
гуру
13.03.14
14:58
(114) проверил все, всё проходит
повысь разрядность КАК ЧИСЛО(18, 0)
117 Ненавижу 1С
 
гуру
13.03.14
15:00
если не поможет, то дело в движке, точнее ретрансляторе запроса, придется переходить на ADO
118 AnisaL
 
13.03.14
15:00
(116) ок, щас попробую
119 AnisaL
 
13.03.14
15:04
(116) ура! получилось! спасибо большое!
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс