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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #90 - 25. Июня 2008 :: 07:01
Печать  
округление при типизации выполняется по правилам 1С.
Код
Выбрать все
select
1.0 / 2.0  [О1 :Число.10.0]
 


Выдаст - если установлено "округлять 1.5 до 2", то 1.
Если "округлять 1.5 до 1", то 0.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #91 - 25. Июня 2008 :: 07:04
Печать  
А вот
Код
Выбрать все
select
1.0 / 3.0  [О1 :Число.100.20]
 


Выдает 0.33333333333333000000
те 1С при присваивании из double в numeric берет только 14 знаков.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #92 - 25. Июня 2008 :: 07:04
Печать  
Угу, так возвращает, а когда из базы дергает
Код
Выбрать все
CAST(Остатки.Количество/Единицы.Коэффициент as INTEGER) as [Упаковок :Число.15.0] 


66.3/1.3=50.9999999999999, отсюда 50
  
Наверх
ICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #93 - 25. Июня 2008 :: 07:08
Печать  
Chieftain писал(а) 25. Июня 2008 :: 07:04:
Угу, так возвращает, а когда из базы дергает
Код
Выбрать все
CAST(Остатки.Количество/Единицы.Коэффициент as INTEGER) as [Упаковок :Число.15.0] 


66.3/1.3=50.9999999999999, отсюда 50

Нет, так не пиши. Тут ты сам кастиш в инт, а это делается отбрасыванием дробной части.
Пиши просто
Код
Выбрать все
Остатки.Количество/Единицы.Коэффициент as [Упаковок :Число.15.0]
 


  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #94 - 25. Июня 2008 :: 07:10
Печать  
orefkov писал(а) 25. Июня 2008 :: 07:08:
Chieftain писал(а) 25. Июня 2008 :: 07:04:
Угу, так возвращает, а когда из базы дергает
Код
Выбрать все
CAST(Остатки.Количество/Единицы.Коэффициент as INTEGER) as [Упаковок :Число.15.0] 


66.3/1.3=50.9999999999999, отсюда 50

Нет, так не пиши. Тут ты сам кастиш в инт, а это делается отбрасыванием дробной части.
Пиши просто
Код
Выбрать все
Остатки.Количество/Единицы.Коэффициент as [Упаковок :Число.15.0]
 



А если мне нужно получить остаток от деления?
Код
Выбрать все
Остатки.Количество-CAST(Остатки.Количество/Единицы.Коэффициент as INTEGER) 

  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1sqlite
Ответ #95 - 25. Июня 2008 :: 07:11
Печать  
Александр, и все кто сможет помочь.... ткните носом где мне почитать что нить вот по такому вопросу.
Мне надо сделать отбор по реквизиту справочника... справочник пользователь задает самостоятельно, реквизит соответственно тоже, и значение реквизита, а как мне подобрать правильно модификатор в методе "УстановитьПараметр" ??? Т.е. как определить что за тип и вид значения труда не составляет, а вот как из предложенных вариантов (0,1,2 в зависимости от типа) мне подставлять?

Не пинайте ногами с прямыми запросами начал разбираться совсем недавно  Круглые глаза
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #96 - 25. Июня 2008 :: 07:12
Печать  
Ну, либо если надо именно количество целых упаковок получить, то тогда только
Код
Выбрать все
(cast(round(Остатки.Количество * 1000, 0) as integer) / cast(round(Единицы.Коэффициент * 1000, 0))) / 1000000
 



Вобщем, буду думать еще над этим.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #97 - 25. Июня 2008 :: 07:14
Печать  
orefkov писал(а) 25. Июня 2008 :: 07:12:
Ну, либо если надо именно количество целых упаковок получить, то тогда только

Не совсем... Нужно получить количество полных упаковок и оставшихся штук

orefkov писал(а) 25. Июня 2008 :: 07:12:
Вобщем, буду думать еще над этим.

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #98 - 25. Июня 2008 :: 07:17
Печать  
vandalsvq писал(а) 25. Июня 2008 :: 07:11:
Александр, и все кто сможет помочь.... ткните носом где мне почитать что нить вот по такому вопросу.
Мне надо сделать отбор по реквизиту справочника... справочник пользователь задает самостоятельно, реквизит соответственно тоже, и значение реквизита, а как мне подобрать правильно модификатор в методе "УстановитьПараметр" ??? Т.е. как определить что за тип и вид значения труда не составляет, а вот как из предложенных вариантов (0,1,2 в зависимости от типа) мне подставлять?

Не пинайте ногами с прямыми запросами начал разбираться совсем недавно  Круглые глаза

Если тип значения Неопределенный -  используй модификатор -1 (*).
Если тип значения - число, строка, дата - используй модификатор 0.
Если тип Перечисление, Справочник, Документ, Счет:
    Если у реквизита задан Вид (те Справочник.ТакойТо, Документ.Сякойто), то модификатор 0.
    Если Вид не задан (просто Справочник, Документ), то модификатор 1.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1sqlite
Ответ #99 - 25. Июня 2008 :: 07:35
Печать  
orefkov писал(а) 25. Июня 2008 :: 07:17:
vandalsvq писал(а) 25. Июня 2008 :: 07:11:
Александр, и все кто сможет помочь.... ткните носом где мне почитать что нить вот по такому вопросу.
Мне надо сделать отбор по реквизиту справочника... справочник пользователь задает самостоятельно, реквизит соответственно тоже, и значение реквизита, а как мне подобрать правильно модификатор в методе "УстановитьПараметр" ??? Т.е. как определить что за тип и вид значения труда не составляет, а вот как из предложенных вариантов (0,1,2 в зависимости от типа) мне подставлять?

Не пинайте ногами с прямыми запросами начал разбираться совсем недавно  Круглые глаза

Если тип значения Неопределенный -  используй модификатор -1 (*).
Если тип значения - число, строка, дата - используй модификатор 0.
Если тип Перечисление, Справочник, Документ, Счет:
   Если у реквизита задан Вид (те Справочник.ТакойТо, Документ.Сякойто), то модификатор 0.
   Если Вид не задан (просто Справочник, Документ), то модификатор 1.


А можно это в документацию добавить?
Кстати ты не против если я als и ints сделаю чуть позже. По твоей документации  Подмигивание
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #100 - 25. Июня 2008 :: 07:40
Печать  
Chieftain писал(а) 25. Июня 2008 :: 07:14:
orefkov писал(а) 25. Июня 2008 :: 07:12:
Ну, либо если надо именно количество целых упаковок получить, то тогда только

Не совсем... Нужно получить количество полных упаковок и оставшихся штук

orefkov писал(а) 25. Июня 2008 :: 07:12:
Вобщем, буду думать еще над этим.

А вот это не может не радовать! Очень довольный

Например, можно добавить функцию
Код
Выбрать все
Divide | Разделить (Делимое, Делитель, ТочностьДелимого, ТочностьДелителя, ТочностьРезультата)
 


Функция средствами арифметики 1С:
Преобразует Делимое из double в numeric заданной точности
Преобразует Делитель из double в numeric заданной точности
Выполняет деление numeric'ов.
Если точность результата не равна -1, округляет результат-numeric средствами 1С до указанной точности.
Возвращает: если ТочностьРезультата 0 - целое число (int64), иначе - numeric, пробразованный в double.
Аналогичная функция
Код
Выбрать все
Mod | ОстДеления (Делимое, Делитель, ТочностьДелимого, ТочностьДелителя, ТочностьРезультата)
 


тока возвращает остаток деления.
Кстати, сама 1С остаток от деления нецелых чисел интересно считает - она округляет операнды до целого, как задано в конфигурации, и возвращает остаток от деления целых.
То есть узнавать количество упаковок и сколько без упаковки, при нецелых коэффициентах - проблематично будет и в самой 1С.
Например, если остаток 63.7, а в упаковке 1.7, то 63.7 % 1.7 наврет, то бишь надо считать
63.7 - (Цел(63.7 / 1.7) * 1.7), то есть функция Mod остаток так должна считать:
ОкругленноеДелимое - (Цел (ОкругленноеДелимое / ОкругленныйДелитель) * ОкругленныйДелитель).
Во как табло выдало.

63.7 % 1.7 = 0
63.7 - (Цел(63.7 / 1.7) * 1.7) = 0.8
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #101 - 25. Июня 2008 :: 07:50
Печать  
orefkov писал(а) 25. Июня 2008 :: 07:40:
Например, можно добавить функцию
Код
Выбрать все
Divide | Разделить (Делимое, Делитель, ТочностьДелимого, ТочностьДелителя, ТочностьРезультата)
 



Это ты "системную" функцию добавишь?
А вообще - в этом конкретном случае я делаю так:
Код
Выбрать все
CAST((Остатки.Количество)*1000/(Единицы.Коэффициент*1000) as INTEGER) as [Упаковок :Число.15.0] 


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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #102 - 25. Июня 2008 :: 08:09
Печать  
Chieftain писал(а) 25. Июня 2008 :: 07:50:
И нормально вроде работает... Но все равно гемор(((

Ну, это уж к разработчикам SQLite.
Напиши им фичереквест, что бы numeric'и путем поддерживались.
У них сечас принято так:
Для хранения значений используются только типы:
Текст - unicode или utf-8 строка, оканчивающаяся нулем.
int64 - хранение целых
double - хранение нецелых
blob - бинарный байтовый поток с указанием длины потока.
Нормальных numeric'ов нету.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #103 - 25. Июня 2008 :: 08:25
Печать  
orefkov писал(а) 25. Июня 2008 :: 08:09:
Chieftain писал(а) 25. Июня 2008 :: 07:50:
И нормально вроде работает... Но все равно гемор(((

Ну, это уж к разработчикам SQLite.
Напиши им фичереквест, что бы numeric'и путем поддерживались.
У них сечас принято так:
Для хранения значений используются только типы:
Текст - unicode или utf-8 строка, оканчивающаяся нулем.
int64 - хранение целых
double - хранение нецелых
blob - бинарный байтовый поток с указанием длины потока.
Нормальных numeric'ов нету.

Да я бы написал, но у меня тоже "умение составлять английские предложения" на низком уровне Смех
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #104 - 25. Июня 2008 :: 08:30
Печать  
orefkov писал(а) 24. Июня 2008 :: 08:59:
Chieftain писал(а) 24. Июня 2008 :: 08:00:
А как у SQLite обстоят дела с ХП?

ХП нет. Только запросы.

А может можно добавить метод типа "ДобавитьХП(ТекстЗапроса)", которя добавляла бы ХП для всего объекта SQLiteBase?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 5 6 [7] 8 9 ... 79
ОтправитьПечать