Переключение на Главную Страницу Страницы: 1 ... 4 5 [6] 7 8 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 464525 )
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #75 - 24. Июня 2008 :: 12:26
Печать  
А если
Код
Выбрать все
select ЧисловоеПоле [ЧисловоеПоле :Число.10.3]
 


как выдает?
Вообще в double'ах неточность бывает в 16ом-17ом знаках, что на вычислениях практически не сказывается, но влияет на сравнения.
То бишь если все математические операции производить без округления, а округлять только результат (посредством типизации колонки), особых проблем быть не должно.
просто
Код
Выбрать все
select ЧисловоеПоле [ЧисловоеПоле :Число.10.3]
 


и
Код
Выбрать все
select round(ЧисловоеПоле, 3)
 


совершенно разные вещи.
В первом случае SQLite возвращает double, которое присваивается значению 1С, и оно округляется уже самой 1Сой (с заданной точностью).
А во втором варианте число округляет SQLite, получает в результате снова double (которое может быть снова неточным), этот double моя ВК получает от SQLite и присваивает значению 1С как есть, без округления.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #76 - 24. Июня 2008 :: 12:36
Печать  
orefkov писал(а) 24. Июня 2008 :: 12:26:
А если
Код
Выбрать все
select ЧисловоеПоле [ЧисловоеПоле :Число.10.3]
 


как выдает?

нормально выдает
  
Наверх
ICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #77 - 24. Июня 2008 :: 12:38
Печать  
Как вариант можно предложить для каждого числового поля добавлять виртуальное поле, в котором возвращать число из поля как целое (то бишь домноженное на коэффициент, например для поля точностью 2 возвращать число * 100, для точности 3 - число * 1000, то есть просто убрав точку из числа).
Естественно, составитель запроса должен учитывать это, и конечный результат поделить на нужное число.
SQLite работает с 64-битными целыми, что полность покрывает числа до 19.Точность, и почти покрывает числа 19.0
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #78 - 24. Июня 2008 :: 12:41
Печать  
orefkov писал(а) 24. Июня 2008 :: 12:26:
Вообще в double'ах неточность бывает в 16ом-17ом знаках, что на вычислениях практически не сказывается, но влияет на сравнения.

А может из ВК в sqlite отдавать numeric как integer(8) и выполнять сдвиг десятичных разрядов обратно при передаче в 1С?
бред?
Изменено:
почти одновременно Улыбка
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #79 - 24. Июня 2008 :: 12:41
Печать  
orefkov писал(а) 24. Июня 2008 :: 12:26:
Вообще в double'ах неточность бывает в 16ом-17ом знаках, что на вычислениях практически не сказывается, но влияет на сравнения.
То бишь если все математические операции производить без округления, а округлять только результат (посредством типизации колонки), особых проблем быть не должно.

Ладно, завтра погляжу еще, если не получится - выложу конкретный пример

orefkov писал(а) 24. Июня 2008 :: 12:38:
Как вариант можно предложить для каждого числового поля добавлять виртуальное поле, в котором возвращать число из поля как целое (то бишь домноженное на коэффициент, например для поля точностью 2 возвращать число * 100, для точности 3 - число * 1000, то есть просто убрав точку из числа).
Естественно, составитель запроса должен учитывать это, и конечный результат поделить на нужное число.
SQLite работает с 64-битными целыми, что полность покрывает числа до 19.Точность, и почти покрывает числа 19.0

Тоже вариант, я так с обычным запросом и внешней функцией всегда поступал
  
Наверх
ICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #80 - 24. Июня 2008 :: 12:43
Печать  
Chieftain писал(а) 24. Июня 2008 :: 12:36:
orefkov писал(а) 24. Июня 2008 :: 12:26:
А если
Код
Выбрать все
select ЧисловоеПоле [ЧисловоеПоле :Число.10.3]
 


как выдает?

нормально выдает

О как!
Не зря я такую типизацию делал.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #81 - 24. Июня 2008 :: 12:45
Печать  
steban писал(а) 24. Июня 2008 :: 12:41:
orefkov писал(а) 24. Июня 2008 :: 12:26:
Вообще в double'ах неточность бывает в 16ом-17ом знаках, что на вычислениях практически не сказывается, но влияет на сравнения.

А может из ВК в sqlite отдавать numeric как integer(8) и выполнять сдвиг десятичных разрядов обратно при передаче в 1С?
бред?
Изменено:
почти одновременно Улыбка

О, добавить типизацию :СдвинутоеЧисло.НасколькоСдвинутое Улыбка
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #82 - 24. Июня 2008 :: 12:48
Печать  
orefkov писал(а) 24. Июня 2008 :: 12:45:
О, добавить типизацию :СдвинутоеЧисло.НасколькоСдвинутое Улыбка

Смех
все равно писателю запросов придется это учитывать при использовании арифметических выражений типа деления/умножения.
Ну хоть какое-то решение Улыбка
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #83 - 24. Июня 2008 :: 12:49
Печать  
orefkov писал(а) 24. Июня 2008 :: 12:45:
steban писал(а) 24. Июня 2008 :: 12:41:
orefkov писал(а) 24. Июня 2008 :: 12:26:
Вообще в double'ах неточность бывает в 16ом-17ом знаках, что на вычислениях практически не сказывается, но влияет на сравнения.

А может из ВК в sqlite отдавать numeric как integer(8) и выполнять сдвиг десятичных разрядов обратно при передаче в 1С?
бред?
Изменено:
почти одновременно Улыбка

О, добавить типизацию :СдвинутоеЧисло.НасколькоСдвинутое Улыбка

Завтра потестирую насколько правильно будет при типизации расчетных колонок и отпишусь
  
Наверх
ICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #84 - 24. Июня 2008 :: 12:55
Печать  
steban писал(а) 24. Июня 2008 :: 12:48:
orefkov писал(а) 24. Июня 2008 :: 12:45:
О, добавить типизацию :СдвинутоеЧисло.НасколькоСдвинутое Улыбка

Смех
все равно писателю запросов придется это учитывать при использовании арифметических выражений типа деления/умножения.
Ну хоть какое-то решение Улыбка

Ну, кто логарифмические линейки юзал, тот окажется на коне!
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #85 - 24. Июня 2008 :: 12:56
Печать  
Chieftain писал(а) 24. Июня 2008 :: 12:49:
Завтра потестирую насколько правильно будет при типизации расчетных колонок и отпишусь

Буду ждать. Самому интересно.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #86 - 24. Июня 2008 :: 13:06
Печать  
Код
Выбрать все
Select
...
WHERE UPPER(descr)>'Какое то значение'
Order by UPPER(descr)
limit N
 


эквивалентно ли
Код
Выбрать все
Select
...
WHERE descr>'Какое то значение'
Order by descr
limit N(descr) 


в SqlLite?
Как правильно писать, чтобы был задействован индекс UPPER(descr)?
Функция UPPER входит во все индексы(кроме id) всех справочников в 1С.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #87 - 24. Июня 2008 :: 13:24
Печать  
kiruha писал(а) 24. Июня 2008 :: 13:06:
Код
Выбрать все
Select
...
WHERE UPPER(descr)>'Какое то значение'
Order by UPPER(descr)
limit N
 


эквивалентно ли
Код
Выбрать все
Select
...
WHERE descr>'Какое то значение'
Order by descr
limit N(descr) 


в SqlLite?
Как правильно писать, чтобы был задействован индекс UPPER(descr)?
Функция UPPER входит во все индексы(кроме id) всех справочников в 1С.


Как проще, так правильнее.

Код
Выбрать все
Select
...
WHERE descr>'Какое то значение'
Order by descr
limit N 


Тут принят принцип как в MSSQL - в нем для полей 1С задается collate как регистронезависимое.
Для полей виртульных таблиц я задаю collate _1C - регистронезависимое сравнение с обрезкой строк справа.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #88 - 25. Июня 2008 :: 06:42
Печать  
orefkov писал(а) 24. Июня 2008 :: 12:56:
Chieftain писал(а) 24. Июня 2008 :: 12:49:
Завтра потестирую насколько правильно будет при типизации расчетных колонок и отпишусь

Буду ждать. Самому интересно.

В общем в этом плане есть проблемы. У меня проявляются при делении и даже ROUND не помогает Печаль. Как пример:
Код
Выбрать все
66.3/1.3 = 50, но д.б. 51
73.6/3.2 = 22, но д.б. 23
9.1/1.3 = 6, но д.б. 27
9.6/0.8 = 1, но д.б. 12 


Обойти это все можно, но кто знает где это еще выплыть может
  
Наверх
ICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #89 - 25. Июня 2008 :: 06:58
Печать  
Chieftain писал(а) 25. Июня 2008 :: 06:42:
orefkov писал(а) 24. Июня 2008 :: 12:56:
Chieftain писал(а) 24. Июня 2008 :: 12:49:
Завтра потестирую насколько правильно будет при типизации расчетных колонок и отпишусь

Буду ждать. Самому интересно.

В общем в этом плане есть проблемы. У меня проявляются при делении и даже ROUND не помогает Печаль. Как пример:
Код
Выбрать все
66.3/1.3 = 50, но д.б. 51
73.6/3.2 = 22, но д.б. 23
9.1/1.3 = 6, но д.б. 27
9.6/0.8 = 1, но д.б. 12 


Обойти это все можно, но кто знает где это еще выплыть может

Не знаю, как ты такое получил.
У меня
Код
Выбрать все
select
66.3 / 1.3 [О1 :Число.10.3],
73.6 / 3.2 [О2 :Число.10.3],
9.1 / 1.3  [О3 :Число.10.3],
9.6/0.8 [О4 :Число.10.3]
 


выдает
51.000, 23.000, 7.000, 12.000
а
Код
Выбрать все
select
66.3 / 1.3 [О1 :Число.10.0],
73.6 / 3.2 [О2 :Число.10.0],
9.1 / 1.3  [О3 :Число.10.0],
9.6/0.8 [О4 :Число.10.0]
 


выдает
51, 23, 7, 12
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 4 5 [6] 7 8 ... 79
ОтправитьПечать