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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
1sqlite
23. Июня 2008 :: 07:19
Печать  
Представляю уважаемым форумчанам для тестирования ВК 1sqlite версии 1.0.1.0
Предназначена для работы с базами данных SQLite, а также для выполнения через
движок SQLite прямых запросов к таблицам дбф-баз 1С.

Основные фичи компоненты:
SQLite версии 3.5.9
Движок SQLite доработан в плане регистронезависимости русских символов, нормально работают lower, upper, like, названия таблиц, полей.
Добавлено collate _1С - сравнение строк без учета регистра и завершающих пробелов.
Отображение ДБФ-таблиц 1С в базу данных SQLite и возможность использовать их в запросах.
Работа с ДБФ-таблицами 1С в монопольном режиме.
Получение "длинных" строк 1С-ДБФ.
Типизация результатов запроса.
Работа с текстовыми и sql-параметрами в запросах.
Укладка в базу данных SQLite ТаблицЗначений.
Укладка в базу данных SQLite СписовЗначений с объектами 1С, с возможностью в ДБФ версии разворота групп справочников или счетов по иерархии.

http://sb-news.net/sqlite.php - SQLite по-русски

Прошу тестировать, высказывать пожелания.
После этапа тестирования и доработки исходники будут доступны под GPL.



Версия 1.0.1.1

- Исправлен вылет при попытке подключить таблицу строк документа, у которого нет ТЧ.
- Добавлены текстовые параметры: :ВидСубконто и :ПланСчетов
Качать: http://www.1cpp.ru/forumfiles/Attachments/1sqlite_1011.zip

Версия 1.0.1.2

- Исправлена работа с преобразованием значений типа Дата в формат БД.

Версия 1.0.1.3
- Исправлена ошибка в метапарсере при обработке вхождений текстовых параметров.

версия 1.0.1.4
- Добавлено автоподключение таблиц. В доке описано.

Версия 1.0.1.5
     - Исправлена ошибка подстановки текстового параметра ":ВидСправочника.ХХХ"
     - Добавлен модификатор 3 для подстановки значений типа Строка. Подставляет фрагмент текста без кавычек, для динамического формирования текста запроса.

Версия 1.0.1.6
- Исправлена подстановка значения пустой даты.
- Добавлена типизация :Субконто
- Добавлена типизация :Время
- Добавлена функция str2id
- Добавлена функция id2str

Версия 1.0.1.7

- Доработана работа 3го модификатора текстового параметра типа "Строка".
 Теперь подставляемый фрагмент текста также обрабатывается метапарсером.
- Удалены типизация ":ВидДокумента" и ":ВидДокументаПредставление".
- Добавлены типизации ":ИмяВида" и ":ПредставлениеВида".
- Доработан метод `SQLiteQuery::ВыполнитьЗапрос`_. Теперь можно получать
 результат выполнения запроса в таблицу значений, список значений,
 полем из скалярного запроса, а также в любой объект, реализующий
 интерфейс загрузки результата запроса (ISQLiteResultLoader).

Версия 1.0.1.8
- Исправлена ошибка обработки NULL значений.
- Исправлена ошибка преобразования из utf-8 нулевых строк
- Устранена гигантская утечка памяти при некоторых случаях использования LIMIT
- Рефакторинг классов базы данных и запросов, с целью облегчения использования их в других компонентах
- Из соображений производительности восстановлены типизации :ВидДокумента и :ВидДокументаПредставление
- Из соображений производительности добавлены типизации :ВидСубконто и :ВидСубконтоПредставление

Тестовая версия 1.0.1.9
- Убраны Begin/End ReadSequnce
- Добавлена возможность авто-транзакции при выполнении запроса.
- Исправлен косяк при укладке объектов с идшниками с русскими буквами (распределенка с русскоязычными кодами ИБ)
- Содержит тестовый поставщик ТП
Качать

Версия 1.0.2.0

    - SQLite обновлен до релиза 3.6.11
    - Добавлена способность ПоставщикаДанных динамически менять текст запроса, если
     некоторые поля не нужны табличному полю для отображения
    - Добавлена возможность быстрого поиска для поставщика данных
    - Исправлена ошибка выборки данных при некоторых условиях
     (where date <= '09или19или29.месяц.год' order by date desc)
    - Убрана странная ошибка при попытке подготовить запросы с текстом запроса длиннее 972 символов.
    - Порядок сортировки в 'collate _1C' сделан точно соответствующим порядку сортировки в дбф-файлах 1С.
    - Изменены методы:

           - SQLiteDataProvider::УстановитьТекстЗапроса
           - SQLiteDataProvider::Отладка

    - Добавлены методы:

           - SQLiteDataProvider::НеУдалятьПоля
           - SQLiteDataProvider::ПоляБыстрогоПоиска
           - SQLiteDataProvider::ПолучитьТекстЗапроса

Брать http://code.google.com/p/sqlite1c/downloads/list
« Последняя редакция: 07. Апреля 2009 :: 13:09 - orefkov »  

1sqlite_1013_.zip ( 374 KB | Загрузки )
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #1 - 23. Июня 2008 :: 07:20
Печать  
Очуметь. Все-таки довел до ума. Браво! Улыбка
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #2 - 23. Июня 2008 :: 07:26
Печать  
УложитьТЗ(ТЗ, ИмяТаблицы, [КакПостоянную])
Вот это очень полезное свойство. Жаль что в 1С++ нет такого.
  
Наверх
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #3 - 23. Июня 2008 :: 07:30
Печать  
Дождались!!! Ура!!!  Очень довольный
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #4 - 23. Июня 2008 :: 07:40
Печать  
Работоспособность в SQL версии сохранена?
  
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #5 - 23. Июня 2008 :: 07:40
Печать  
Здорово!
А можно получить какое-то резюме о плюсах/минусах по сравнению с VFP OLEDB ?
ИМХО будет очень полезная инфа.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #6 - 23. Июня 2008 :: 07:44
Печать  
trdm писал(а) 23. Июня 2008 :: 07:40:
Работоспособность в SQL версии сохранена?

В sql-версии должна работать, но без отображения таблиц 1С, тока для временных расчетов.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #7 - 23. Июня 2008 :: 07:50
Печать  
artbear писал(а) 23. Июня 2008 :: 07:40:
Здорово!
А можно получить какое-то резюме о плюсах/минусах по сравнению с VFP OLEDB ?
ИМХО будет очень полезная инфа.

Ну вкратце
+
Работа в монополе.
Длинные строки.
Легче записать условия для попадания в индекс.
Выигрывает по расходу памяти при групповых оперциях.
Не требует сторонних компонент доступа к БД. (ADO, ODBC и тп)
Скоростной разворот иерархий в УложитьОбъекты, за счет прямой работы с таблицами 1С.
-
double арифметика вместо numeric (хотя иногда она точнее, чем numeric).
Несколько проигрывает по времени по групповым операциям.
Несколько проигрывает при джойнах по неиндексирумым полям (можно обойти созданием врем-таблицы с индексом)
Не может оптимизировать условия in(), желательно вместо этого джойнить с врем-таблицами.
Вернее - при использовании условия in всегда делается fullscan, с индексированной проверкой попадания в список in.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #8 - 23. Июня 2008 :: 07:58
Печать  
orefkov писал(а) 23. Июня 2008 :: 07:50:
Не может оптимизировать условия in(), желательно вместо этого джойнить с врем-таблицами.
Вернее - при использовании условия in всегда делается fullscan, с индексированной проверкой попадания в список in.

FoxPro также не умеет полностью оптимизировать in .
Точнее если in можно свести к inlist(перечень конкретных значений) - то может, если подзапрос  - нет.
И также желательно вместо этого - джойнить с таблицами.

  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #9 - 23. Июня 2008 :: 08:18
Печать  
orefkov писал(а) 23. Июня 2008 :: 07:50:
+
Легче записать условия для попадания в индекс.
-
Несколько проигрывает по времени по групповым операциям.
Несколько проигрывает при джойнах по неиндексирумым полям (можно обойти созданием врем-таблицы с индексом)

Поясни, плиз, эти 3 фразы чуть более подробно.
1. Каким образом стало легче?
2. Групповые - GroupBy или еще что-то?
3. Покажи, как обойтись врем.таблицей с индексом, плиз Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #10 - 23. Июня 2008 :: 08:20
Печать  
Вылетает в космос при  попытке подключить виртуальную таблицу ДокументСтроки для документа без ТЧ.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1sqlite
Ответ #11 - 23. Июня 2008 :: 08:29
Печать  
А кто нибудь может поделится примером запроса...  Плачущий
хочется научится а счас ничего не умею  Смущённый
  

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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #12 - 23. Июня 2008 :: 08:34
Печать  
artbear писал(а) 23. Июня 2008 :: 08:18:
Поясни, плиз, эти 3 фразы чуть более подробно.

1. Каким образом стало легче?

Если индекс например iddoc+STR(lineno,4) то в SQLlite достаточно писать соединение по iddoc,
чтобы его использовать (как для SQL версии) а для FPro надо явно выписывать iddoc+STR(lineno,4) -
что почти никто фактически не делает и соответственно не использует.

2. Групповые - GroupBy или еще что-то?

Group By, Join, Order by - раньше в SqlLite проводились по алгоритму полного перебора,
что при очень больших выборках может привести к существенному замедлению
(при отсутствии индекса по полю соединения, если индекс есть - то все ОК)

P.S. Я пытался в этих случаях явно добавлять индекс - это в основном решает проблему - но
тогда появляется проблема написания (приходится вместо подзапроса выкладывать во врем таблицу и индексировать что трудоемко) и сама операция добавление индекса не самое быстрое в SQlLite почему то (?)

3. Покажи, как обойтись врем.таблицей с индексом, плиз
Явно создать временн. таблицу и явно добавить индекс - есть такие операции в SqlLite

Предыдущее обсуждение
http://www.1cpp.ru/forum/YaBB.pl?num=1192855975/0
http://www.1cpp.ru/forum/YaBB.pl?num=1192437970
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #13 - 23. Июня 2008 :: 08:56
Печать  
кто б теперь провайдера для ТП написал....  Круглые глаза И тогда ДБФ-никам не будут страшны никакие грозы!  Подмигивание
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #14 - 23. Июня 2008 :: 09:00
Печать  
JohnyDeath писал(а) 23. Июня 2008 :: 08:56:
кто б теперь провайдера для ТП написал....  Круглые глаза И тогда ДБФ-никам не будут страшны никакие грозы!  Подмигивание


На sqlLite провайдер судя по всему должен быть быстрее - там имеет смысл только  соединение таблиц по индексу,
и явное чтение страниц -  где SqlLite вдвое опережает Fox.
Также он должен быть быстрее при конструировании аналога объекта регистр.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #15 - 23. Июня 2008 :: 09:04
Печать  
JohnyDeath писал(а) 23. Июня 2008 :: 08:56:
кто б теперь провайдера для ТП написал....  Круглые глаза И тогда ДБФ-никам не будут страшны никакие грозы!  Подмигивание

trad же написал универсального поставщика на КОПах.
Попробуй замутить через него, основываясь на SQLite.
Я ведь не зря сделал виртуальные поля индексов - их можно использовать как уникальные ключи.
Сделаешь, а там посмотрим, глядишь, и в компоненте реализую.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #16 - 23. Июня 2008 :: 09:05
Печать  
steban писал(а) 23. Июня 2008 :: 08:20:
Вылетает в космос при  попытке подключить виртуальную таблицу ДокументСтроки для документа без ТЧ.

Ок. учту.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #17 - 23. Июня 2008 :: 09:08
Печать  
В качестве примера - моя обработка - универсальное дерево подчиненности документов для ДБФ-версии.
1С++ не требуется, только 1sqlite.
  

docgraph.zip ( 16 KB | Загрузки )
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #18 - 23. Июня 2008 :: 09:34
Печать  
О, еще один плюс по сравнению с OLEDB - сразу человечьи имена таблиц, полей, то бишь можно вообще обойтись без $ (Для типизацию колонок я сделал возможность указывать типы с ':', чтоб раскладку не переключать).
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #19 - 23. Июня 2008 :: 10:00
Печать  
orefkov писал(а) 23. Июня 2008 :: 09:34:
О, еще один плюс по сравнению с OLEDB - сразу человечьи имена таблиц, полей, то бишь можно вообще обойтись без $ (Для типизацию колонок я сделал возможность указывать типы с ':', чтоб раскладку не переключать).

Ну может вообще можно будет всё по-русски писать как 8-ке? Подмигивание (это так... в порядке бреда)
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #20 - 23. Июня 2008 :: 10:03
Печать  
JohnyDeath писал(а) 23. Июня 2008 :: 10:00:
orefkov писал(а) 23. Июня 2008 :: 09:34:
О, еще один плюс по сравнению с OLEDB - сразу человечьи имена таблиц, полей, то бишь можно вообще обойтись без $ (Для типизацию колонок я сделал возможность указывать типы с ':', чтоб раскладку не переключать).

Ну может вообще можно будет всё по-русски писать как 8-ке? Подмигивание (это так... в порядке бреда)

В-принципе можно.
Тока тогда надо еще и для служебных полей придумать человечьи имена.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #21 - 23. Июня 2008 :: 10:11
Печать  
Саш, а может у тебя уже есть парсер запроса?
Чтобы принудительно не подключать таблицы в мемори, можно было бы просто просмотреть запрос, "увидеть" из каких таблиц идут выборки и автоматом подгружать их.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #22 - 23. Июня 2008 :: 10:20
Печать  
И ещё вопрос. Можно ли как-нибудь строить ОЛАП-кубы используя 1sqlite (например консолью от berezdetsky)? Тут какая проблема: вроде как нужен ODBC-драйвер, я нашёл только вот этот: http://www.ch-werner.de/sqliteodbc/ , но он для SQLite 3.5.4 (я пробывал ещё с прошлыми версиями 1sqlite, но что-то не получилось. То ли у меня руки кривые, то ли действительно невозможно)
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #23 - 23. Июня 2008 :: 10:24
Печать  
JohnyDeath писал(а) 23. Июня 2008 :: 10:11:
Саш, а может у тебя уже есть парсер запроса?
Чтобы принудительно не подключать таблицы в мемори, можно было бы просто просмотреть запрос, "увидеть" из каких таблиц идут выборки и автоматом подгружать их.

Умного парсера нет.
Сейчас просто просматривается текст запроса на наличие текстовых параметров.
Писать свой умный парсер совершенно неохота - ведь если вдуматься, парсер уже есть в SQLite.
Хотя попробую поковыряюсь в нем, может заточу как надо.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #24 - 23. Июня 2008 :: 10:38
Печать  
JohnyDeath писал(а) 23. Июня 2008 :: 10:20:
И ещё вопрос. Можно ли как-нибудь строить ОЛАП-кубы используя 1sqlite (например консолью от berezdetsky)? Тут какая проблема: вроде как нужен ODBC-драйвер, я нашёл только вот этот: http://www.ch-werner.de/sqliteodbc/ , но он для SQLite 3.5.4 (я пробывал ещё с прошлыми версиями 1sqlite, но что-то не получилось. То ли у меня руки кривые, то ли действительно невозможно)


Вот над этим стоит подумать.
ODBC драйвер это ведь что?
Просто дллка, которая экспортирует заданный набор функций - SQLConnect, SQLExec и тп.
То бишь надо выяснить, какой минимальный набор этих функций требуется для построения OLAP-кубика,
реализовать эти методы, в реестре зарегить ODBC-драйвер (что-то типа Current process SQLite-Driver).
Тока он будет кубики строить только в среде 1С.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #25 - 23. Июня 2008 :: 10:42
Печать  
orefkov писал(а) 23. Июня 2008 :: 10:38:
Тока он будет кубики строить только в среде 1С.

А здесь нам большего и не надо  Подмигивание
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #26 - 23. Июня 2008 :: 11:12
Печать  
orefkov писал(а) 23. Июня 2008 :: 10:24:
JohnyDeath писал(а) 23. Июня 2008 :: 10:11:
Саш, а может у тебя уже есть парсер запроса?
Чтобы принудительно не подключать таблицы в мемори, можно было бы просто просмотреть запрос, "увидеть" из каких таблиц идут выборки и автоматом подгружать их.

Умного парсера нет.
Сейчас просто просматривается текст запроса на наличие текстовых параметров.
Писать свой умный парсер совершенно неохота - ведь если вдуматься, парсер уже есть в SQLite.
Хотя попробую поковыряюсь в нем, может заточу как надо.

Конкретно для этой задачи скорее всего достаточно узнать слово, которое стоит после FROM и после JOIN. Я далеко не спец в этих делах, но мне кажется, что другого не дано.
  
Наверх
 
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: 1sqlite
Ответ #27 - 23. Июня 2008 :: 11:46
Печать  
Требует ли ВК регистрации в реестре?
  

Лень двигатель прогресса.&&http://www.itpath.ru&&;
Наверх
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #28 - 23. Июня 2008 :: 11:49
Печать  
нет
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #29 - 23. Июня 2008 :: 12:37
Печать  
orefkov писал(а) 23. Июня 2008 :: 07:19:
Прошу тестировать, высказывать пожелания.

Высказываю:
Хочется предопределенных текстовых параметров :ВидСубконто.ИмяВидаСубконто и :ПланСчетов.ИмяПланаСчетов
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #30 - 23. Июня 2008 :: 12:41
Печать  
steban писал(а) 23. Июня 2008 :: 12:37:
orefkov писал(а) 23. Июня 2008 :: 07:19:
Прошу тестировать, высказывать пожелания.

Высказываю:
Хочется предопределенных текстовых параметров :ВидСубконто.ИмяВидаСубконто и :ПланСчетов.ИмяПланаСчетов

Во что их разворачивать?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #31 - 23. Июня 2008 :: 13:02
Печать  
:ВидСубконто.ИмяВидаСубконто разворачивать в идентификатор вида субконто (строка длиной 4 символа)
:ПланСчетов.ИмяПланаСчетов разворачивать в идентификатор плана счетов (строка длиной 4 символа)
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #32 - 23. Июня 2008 :: 13:09
Печать  
Ок. Сделаю.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #33 - 23. Июня 2008 :: 13:27
Печать  
steban писал(а) 23. Июня 2008 :: 13:02:
:ВидСубконто.ИмяВидаСубконто разворачивать в идентификатор вида субконто (строка длиной 4 символа)
:ПланСчетов.ИмяПланаСчетов разворачивать в идентификатор плана счетов (строка длиной 4 символа)


1sqlite 1.0.1.1

Исправлен вылет при попытке подключить таблицу строк документа, у которого нет ТЧ.
Добавлены текстовые параметры:
:ВидСубконто и :ПланСчетов
  

1sqlite_1011.zip ( 374 KB | Загрузки )
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #34 - 23. Июня 2008 :: 13:49
Печать  
artbear писал(а) 23. Июня 2008 :: 08:18:
orefkov писал(а) 23. Июня 2008 :: 07:50:
Легче записать условия для попадания в индекс.

Поясни, плиз, эти 3 фразы чуть более подробно.
1. Каким образом стало легче?

Ну, вот допустим, у меня в справочнике товаров есть реквизит НеВключатьВПрайс (Число, 1, 0) с включенной сортировкой. Надо показать элементы, где НеВключатьВПрайс  = 1, упорядочив по наименованию.
В 1sqlite пишем:

select ...
from  Справочник_Номенклатура
where НеВключатьВПрайс = 1
order by descr


При включенной отладке видим:

Подбор индекса для таблицы SC33:
     Ограничения: SP16515[НевключатьВпрайс]=;
     Упорядочить: DESCR,
     Найдено в кэше
     Выбран индекс VI16515: STR(SP16515,2)+UPPER(DESCR)
     Попадает в сортировку
     Стоимость: 10

Вот чтобы на фоксе попасть в индекс надо написать (если длина наименования 100)

where STR(НеВключатьВПрайс, 2) + UPPER(DESCR) between ' 1[тут 100 пробелов]' and ' 1[тут 100 букв Я]'
order by STR(НеВключатьВПрайс, 2) + UPPER(DESCR)

Я думаю, разницу в тексте запроса видно.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #35 - 23. Июня 2008 :: 14:01
Печать  
Какой-то косяк при установке параметра-даты. Запрос просто возвращает пустую выборку
Код
Выбрать все
	запрос = база.НовыйЗапрос();
	запрос.ВыполнитьЗапрос("create virtual table РегОст	using dbeng(РегистрИтоги.ОстаткиТМЦ)");
	ТекстЗапросаОстатка		= "
	|SELECT		РегОст.Номенклатура as Номенклатура,
	|			SUM(РегОст.Количество) as Количество
	|FROM		РегОст
	|WHERE		РегОст.Period = @ДатаОстаткаДляИтогов
	|GROUP BY	РегОст.Номенклатура
	|";
	запрос.Отладка(1);
	запрос.Подготовить(ТекстЗапросаОстатка);
	запрос.УстановитьПараметр("@ДатаОстаткаДляИтогов",НачМесяца(ТекущаяДата()));
	запрос.Выполнить(ТаблТоваров); 

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #36 - 23. Июня 2008 :: 14:20
Печать  
У меня тоже, что и Chieftain'a. Сделал обычный (не подготовленный) запрос и увидел, что
вот это:
Код
Выбрать все
БСО_Склад.period = :ВыбДата~ 


преобразовавыется в Цитата:
БСО_Склад.period = '20080601'

а это:
Код
Выбрать все
БСО_Склад.period = :ВыбДата 


преобразовавыется в Цитата:
БСО_Склад.period = '20080601а'


Хотя по документации:
Цитата:
0: Строка формата 'YYYYMMDD', как дата хранится в дбф-файлах
1: Строка формата 'YYYYMMDDЯ', момент конца даты
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #37 - 23. Июня 2008 :: 14:22
Печать  
orefkov писал(а) 23. Июня 2008 :: 13:49:
В 1sqlite пишем:

select ...
from  Справочник_Номенклатура
where НеВключатьВПрайс = 1
order by descr


Вот чтобы на фоксе попасть в индекс надо написать (если длина наименования 100)

where STR(НеВключатьВПрайс, 2) + UPPER(DESCR) between ' 1[тут 100 пробелов]' and ' 1[тут 100 букв Я]'
order by STR(НеВключатьВПрайс, 2) + UPPER(DESCR)

Я думаю, разницу в тексте запроса видно.


Не совсем. При правильной настройке (ANSI OFF) которая в стандартном Fox по умолчанию на Fox  будет
Код
Выбрать все
where STR(НеВключатьВПрайс, 2) + UPPER(DESCR)='1'  
order by descr 


http://www.1cpp.ru/forum/YaBB.pl?num=1184317705/31#31
что несколько проще, но безусловно требует усилий вручную подбирать индекс
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #38 - 23. Июня 2008 :: 19:48
Печать  
Исправлена работа с преобразованием значений типа Дата в формат БД.
  

1sqlite_1012.zip ( 331 KB | Загрузки )
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #39 - 24. Июня 2008 :: 00:28
Печать  
Обнаружен баг.
Такой код вызывает AV при вызове ВыполнитьЗапрос: [code]База=СоздатьОбъект("SQLiteBase");
имяФайла = ":memory:";
База.Открыть(имяФайла);
Запрос=База.НовыйЗапрос();
Запрос.ВыполнитьЗапрос("PRAGMA journal_mode = OFF");
Запрос.ВыполнитьЗапрос("create virtual table _1SBKTTL using dbeng(_1S.Bkttl)");
Запрос.ВыполнитьЗапрос("create virtual table _1SACCS using dbeng(_1S.Accs)");
Запрос.Отладка(1);
ТекстЗапроса="SELECT
|Итоги.ACCID Счет
|, Итоги.SD+Итоги.OBDT1-Итоги.OBKT1 КоличествоОстаток
|FROM _1SBKTTL AS Итоги
|
|INNER JOIN _1SACCS AS Счета  ON (Итоги.ACCID = Счета.ID) [highlight]AND (Итоги.AccID = :ВыбСчет)[/highlight]
|WHERE (Итоги.DATE = '20080401')
|";
Запрос.Подставлять("ВыбСчет",СчетПоКоду("10"));
ТЗ=Запрос.ВыполнитьЗапрос(ТекстЗапроса);
[/code]

С таким текстом запроса отрабатывает нормально:
[code]ТекстЗапроса="SELECT
|Итоги.ACCID Счет
|, Итоги.SD+Итоги.OBDT1-Итоги.OBKT1 КоличествоОстаток
|FROM _1SBKTTL AS Итоги
|
|INNER JOIN _1SACCS AS Счета  ON (Итоги.ACCID = Счета.ID)
|WHERE (Итоги.DATE = '20080401') [highlight]AND (Итоги.AccID = :ВыбСчет)[/highlight]
|";[/code]
И с таким текстом запроса отрабатывает нормально: [code]ТекстЗапроса="SELECT
|Итоги.ACCID Счет
|, Итоги.SD[highlight] [/highlight]КоличествоОстаток
|FROM _1SBKTTL AS Итоги
|
|INNER JOIN _1SACCS AS Счета  ON (Итоги.ACCID = Счета.ID) AND (Итоги.AccID = :ВыбСчет)
|WHERE (Итоги.DATE = '20080401')
|";
[/code]
И если явно указать ИД счета, то работает нормально: [code]ТекстЗапроса="SELECT
|Итоги.ACCID Счет
|, Итоги.SD+Итоги.OBDT1-Итоги.OBKT1 КоличествоОстаток
|FROM _1SBKTTL AS Итоги
|
|INNER JOIN _1SACCS AS Счета  ON (Итоги.ACCID = Счета.ID) AND (Итоги.AccID = [highlight]'     R   '[/highlight])
|WHERE (Итоги.DATE = '20080401') 
|";[/code]
Точнее локализовать не удалось
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #40 - 24. Июня 2008 :: 00:36
Печать  
Также код из предыдущего поста отваливается с AV при следующем тексте запроса:
Код
Выбрать все
ТекстЗапроса="SELECT
|Итоги.ACCID Счет
|, Итоги.SD КоличествоОстаток
|FROM _1SBKTTL AS Итоги
|WHERE (Итоги.DATE = '20080401')  AND (Итоги.AccID = @ВыбСчет)
|"; 

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #41 - 24. Июня 2008 :: 03:18
Печать  
Александр, предлагаю новую версию выкладывать в первый пост ветки, удобнее брать обновления Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #42 - 24. Июня 2008 :: 06:04
Печать  
[quote author=steban link=1214205575/30#39 date=1214267314]Обнаружен баг.
Такой код вызывает AV при вызове ВыполнитьЗапрос:[/quote]
Сэнкс.
Ошибку нашел.
Исправил.
В шапке.
1.0.1.3

  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #43 - 24. Июня 2008 :: 06:13
Печать  
В хелпе написано для SQLiteQuery
Цитата:
Подготовить / Prepeare Подготавливает переданный sql-запрос.

Поправишь?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #44 - 24. Июня 2008 :: 06:18
Печать  
artbear писал(а) 24. Июня 2008 :: 06:13:
В хелпе написано для SQLiteQuery
Цитата:
Подготовить / Prepeare Подготавливает переданный sql-запрос.

Поправишь?

О блин, точно. К след.версии.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #45 - 24. Июня 2008 :: 06:20
Печать  
Саш, для модификаторов текстовых параметров в 1sqlite какие есть отличия от модификаторов в 1С++ ?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #46 - 24. Июня 2008 :: 06:22
Печать  
Еще вопрос:
Саш, а у тебя есть какая-нибудь база с автоматическими тестами для 1sqlite, которой ты пользуешься при разработке? Или что-то подобное?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #47 - 24. Июня 2008 :: 06:26
Печать  
Можно ещё сделать, чтоб ВыполнитьЗапрос на вход мог воспринимать не только ТЗ, но и ИТЗ?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #48 - 24. Июня 2008 :: 06:26
Печать  
Еще по хелпу навскидку малюсенькие опечатки:
длинной (длиной), замерян (замерен), програмистом (программистом)
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #49 - 24. Июня 2008 :: 06:28
Печать  
JohnyDeath писал(а) 24. Июня 2008 :: 06:26:
Можно ещё сделать, чтоб ВыполнитьЗапрос на вход мог воспринимать не только ТЗ, но и ИТЗ?

+1
Наверняка можно договориться о создании спец.интерфейса для ИТЗ, который не будет меняться
Аналогично интерфейсу для ТП и АктивИкс.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #50 - 24. Июня 2008 :: 06:48
Печать  
Саш, еще просьба -
в прошлой ветке есть архив http://www.1cpp.ru/forumfiles/Attachments/1_001.ZIP,
в котором выложен обработка для тестирования 1sqlite. ИМХО удобно.
Просьба добавить эту обработку к официальной поставке 1sqlite.
Или у тебя есть более новый ее вариант?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #51 - 24. Июня 2008 :: 07:20
Печать  
artbear писал(а) 24. Июня 2008 :: 06:20:
Саш, для модификаторов текстовых параметров в 1sqlite какие есть отличия от модификаторов в 1С++ ?

Есть.
В доке все расписано.
Например, в 1С++ для справочников, документов и тп 2 модификатор преобразует в строку 15 символов, оставлен для совместимости. У меня его нет.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #52 - 24. Июня 2008 :: 07:22
Печать  
artbear писал(а) 24. Июня 2008 :: 06:22:
Еще вопрос:
Саш, а у тебя есть какая-нибудь база с автоматическими тестами для 1sqlite, которой ты пользуешься при разработке? Или что-то подобное?

Авто-тестов нет.
Есть несколько запросов сохраненных в моей консоли запросов, я их ручками прогоняю, смотрю.
Но все примитивненько, с текстовыми параметрами не работает еще.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #53 - 24. Июня 2008 :: 07:22
Печать  
artbear писал(а) 24. Июня 2008 :: 06:26:
Еще по хелпу навскидку малюсенькие опечатки:
длинной (длиной), замерян (замерен), програмистом (программистом)

Ну, прогоню через ворд Улыбка
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #54 - 24. Июня 2008 :: 07:24
Печать  
artbear писал(а) 24. Июня 2008 :: 06:28:
JohnyDeath писал(а) 24. Июня 2008 :: 06:26:
Можно ещё сделать, чтоб ВыполнитьЗапрос на вход мог воспринимать не только ТЗ, но и ИТЗ?

+1
Наверняка можно договориться о создании спец.интерфейса для ИТЗ, который не будет меняться
Аналогично интерфейсу для ТП и АктивИкс.

Можно сделать. Ща обдумаю интерфейс, я реализую его для ТЗ, СЗ, Леха пусть реализует для ИТЗ.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #55 - 24. Июня 2008 :: 07:27
Печать  
artbear писал(а) 24. Июня 2008 :: 06:48:
Саш, еще просьба -
в прошлой ветке есть архив http://www.1cpp.ru/forumfiles/Attachments/1_001.ZIP,
в котором выложен обработка для тестирования 1sqlite. ИМХО удобно.
Просьба добавить эту обработку к официальной поставке 1sqlite.
Или у тебя есть более новый ее вариант?

Я выкладывал ее в архиве с версией 1.0.1.0
Ща лежит отдельно на инфостарте.
Просто я ее еще хочу доделать для работы с параметрами, мож кто это на себя возьмет?
(Если найдется герой, просьба сделать без ТП и зависимости от других компонент)
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #56 - 24. Июня 2008 :: 08:00
Печать  
А как у SQLite обстоят дела с ХП?
  
Наверх
ICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

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

ХП нет. Только запросы.
  
Наверх
 
IP записан
 
kriblya
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 313
Зарегистрирован: 24. Декабря 2007
Re: 1sqlite
Ответ #58 - 24. Июня 2008 :: 09:02
Печать  
что есть ХП?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #59 - 24. Июня 2008 :: 09:11
Печать  
orefkov писал(а) 24. Июня 2008 :: 08:59:
Chieftain писал(а) 24. Июня 2008 :: 08:00:
А как у SQLite обстоят дела с ХП?

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

А файловые операции?
И как дела тогда с запросом вида :
Код
Выбрать все
Select TOP N
...
WHERE MyIndex>'Какое то значение'
Order by MyIndex 

??
Как используется ли индекс в этом случае?

P.S. ХП - хранимая процедура
P.S.Конструкция запроса - для табличного поля
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #60 - 24. Июня 2008 :: 09:31
Печать  
Создал проект на googlecode
http://code.google.com/p/sqlite1c/
Бинарники можно качать оттудова.
Исходники тянуть любым svn-клиентом: http://sqlite1c.googlecode.com/svn/trunk/*sqlite1c-read-only
* замените на пробел, чето форум непонимает линки с пробелами
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #61 - 24. Июня 2008 :: 09:35
Печать  
kiruha писал(а) 24. Июня 2008 :: 09:11:
orefkov писал(а) 24. Июня 2008 :: 08:59:
Chieftain писал(а) 24. Июня 2008 :: 08:00:
А как у SQLite обстоят дела с ХП?

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

А файловые операции?
И как дела тогда с запросом вида :
Код
Выбрать все
Select TOP N
...
WHERE MyIndex>'Какое то значение'
Order by MyIndex 

??
Как используется ли индекс в этом случае?

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


если индекс есть по полю MyIndex, он используется.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



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


если индекс есть по полю MyIndex, он используется.

Непонятно :
будет произведено позиционирование и далее считывание N записей (что очень быстро)
или
Выборка WHERE, потом упорядочивание выборки, потом отбор N записей
?
Если поставщик табличного поля запрашивает N записей от текущей (упорядоченной по индексу)
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #63 - 24. Июня 2008 :: 10:00
Печать  
При таком простом условии (сравнение по одному полю, входящему в индекс), будет очень хорошо:
двинет по индксу, отсчитает нужное количество записей.

При ключе с двумя полями входящими в один индекс, все гораздо хуже. Для MSSQL у Дмитро применяется сейчас такая конструкция:
Код
Выбрать все
where field1 > 'key1' or (field1 = 'key1' and field2 > 'key2')
 


MSSQL нормально понимает такую запись, двигает по индексу.
SQLite - во-первых выражения, объединенные по OR не оптимизирует, только по AND.
Во-вторых, с константами не работает (те он все равно не поймет, что в обоих подусловиях одинаковый 'key1')

Если переписать условие вот так:
Код
Выбрать все
where field1 >= 'key1' AND NOT (field1 = 'key1' AND field2 <='key2')
 


то SQLite для начала двинет по индексу на 'key1', потом будет идти по индексу, проверяя каждую запись на NOT (field1 = 'key1' AND field2 <='key2')
Это конечно несколько оптимальнее, но все равно не то, чего бы хотелось. А если еще и по первому полю селективность низкая, вообще хреново.
К сожалению, умение составлять английские предложения - не сильная моя черта, а то бы давно им фичереквест написал.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #64 - 24. Июня 2008 :: 10:03
Печать  
Вести с мисты - говорят, под вайном работает.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #65 - 24. Июня 2008 :: 10:31
Печать  
А такой запрос:
Код
Выбрать все
SELECT *
	|FROM Сотрудники
	|WHERE UPPER(Сотрудники.Descr) like 'Орефков%' 


не должен попадать в индекс Descr ?
Fox попадает.

и ещё:
1. так НЕ попадает:
Код
Выбрать все
WHERE UPPER(Сотрудники.Descr) = 'Орефков' 


2. так попадает:
Код
Выбрать все
WHERE Сотрудники.Descr = 'Орефков' 


3. так НЕ попадает
Код
Выбрать все
WHERE Сотрудники.Descr like 'Орефков%' 

  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #66 - 24. Июня 2008 :: 10:53
Печать  
JohnyDeath писал(а) 24. Июня 2008 :: 10:31:
А такой запрос:
Код
Выбрать все
SELECT *
	|FROM Сотрудники
	|WHERE UPPER(Сотрудники.Descr) like 'Орефков%' 


не должен попадать в индекс Descr ?
Fox попадает.

Не попадет. SQLite для попадания в индекс должен видеть условие
ПолеТаблицы = | > | < | >= | <= | like выражение

Здесь же у тебя Выражение = выражение.
При сравнении с полями таблиц SQLite он может оптимизироватьусловие like 'строка%', заменяя его на два условия >= and <=.
Но если условие like применяется к полю виртуальной таблицы, он запрашивает мой модуль, могу ли я его обработать. В текущей версии ВК никак не обрабатывает условия like, отдавая их на откуп SQLite.
В этом случае SQLite не разбивает like 'строка%' на два условия.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #67 - 24. Июня 2008 :: 11:33
Печать  
[quote author=orefkov link=1214205575/30#42 date=1214287457]Ошибку нашел.
Исправил.
В шапке.
1.0.1.3[/quote]
гут. :)
спасибо.

А типизацию субконто а-ля ODBCRecordset сложно сделать?
  

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


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #68 - 24. Июня 2008 :: 11:46
Печать  
Есть вопрос к этому разделу хелпа:
Цитата:
О числовых полях.

В SQLite нет поддержки работы с полями типа numeric. Для числовых полей в SQLite используются либо целые числа, либо double. Тип double гарантирует 16 точных знаков числа, то есть для нецелых числовых полей таблиц 1С, с длинной больше 17, возможна потеря точности. Также известно, что нецелые числа в double хранятся не всегда точно (с возможной ошибкой в 17 знаке, те например 0.3 хранится как 0.30000000000000001). Например, условие 0.3 - 0.1 = 0.2 не будет выполнятся. Поэтому в запросах с умом пользуйтесь функцией round. Например, условие round(0.3 - 0.1, 1) = 0.2 будет выполнятся.


Получается, чтобы не нарваться на косяки везде при расчетах нужно вставлять "round".
Плюс числовые колонки жестко типизировать в числу?
Неужели сделать ничего нельзя?

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #69 - 24. Июня 2008 :: 11:49
Печать  
[quote author=steban link=1214205575/60#67 date=1214307188][quote author=orefkov link=1214205575/30#42 date=1214287457]Ошибку нашел.
Исправил.
В шапке.
1.0.1.3[/quote]
гут. :)
спасибо.

А типизацию субконто а-ля ODBCRecordset сложно сделать?[/quote]

Как раз таки делаю. Если посмотреть исходники, видно ведь
[code]
case ttSubconto:
     break;
[/code]
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #70 - 24. Июня 2008 :: 11:54
Печать  
Chieftain писал(а) 24. Июня 2008 :: 11:46:
Есть вопрос к этому разделу хелпа:
Цитата:
О числовых полях.

В SQLite нет поддержки работы с полями типа numeric. Для числовых полей в SQLite используются либо целые числа, либо double. Тип double гарантирует 16 точных знаков числа, то есть для нецелых числовых полей таблиц 1С, с длинной больше 17, возможна потеря точности. Также известно, что нецелые числа в double хранятся не всегда точно (с возможной ошибкой в 17 знаке, те например 0.3 хранится как 0.30000000000000001). Например, условие 0.3 - 0.1 = 0.2 не будет выполнятся. Поэтому в запросах с умом пользуйтесь функцией round. Например, условие round(0.3 - 0.1, 1) = 0.2 будет выполнятся.


Получается, чтобы не нарваться на косяки везде при расчетах нужно вставлять "round".
Плюс числовые колонки жестко типизировать в числу?
Неужели сделать ничего нельзя?

ЗЫ... И почему это меня сильно напрягает Озадачен


Ну, на практике у меня не было случаев, когда бы это сильно напрягало.
Поделать в рамках текущей версии SQLite в-принципе можно: все поля numeric отдавать как blob, а для всех арифметических операций реализовать свои функции (и для агрегирования тоже)
те вместо
Код
Выбрать все
sum((а + б) / с)
 


будет что-то типа
Код
Выбрать все
numSum(numDiv(numAdd(а, б), c))
  


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


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #71 - 24. Июня 2008 :: 11:58
Печать  
orefkov писал(а) 24. Июня 2008 :: 11:54:
Ну, на практике у меня не было случаев, когда бы это сильно напрягало.
Поделать в рамках текущей версии SQLite в-принципе можно: все поля numeric отдавать как blob, а для всех арифметических операций реализовать свои функции (и для агреширования тоже)
те вместо
Код
Выбрать все
sum((а + б) / с)
 


будет что-то типа
Код
Выбрать все
numSum(numDiv(numAdd(а, б), c))
  


Оно это надо?

В таком виде, конечно нет
Но я вот сейчас и тестирую все это дело...
Самый частый вопрос - разбивка остатка на основные и базовые единицы... Коэффициент основной единицы возвращается криво очень часто, все дальнейшие расчеты с его использованием ессно тоже кривые. Т.е. для норального расчета нужно юзать ROUND.
А потом сидеть и думать - как бы где еще не попалось число, которое храниться будет неправильно. ИМХО нездорово это
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #72 - 24. Июня 2008 :: 12:07
Печать  
orefkov писал(а) 24. Июня 2008 :: 09:31:
Исходники тянуть любым svn-клиентом: http://sqlite1c.googlecode.com/svn/trunk/*sqlite1c-read-only
* замените на пробел, чето форум непонимает линки с пробелами

Консольным клиентом тянуть так:
Код
Выбрать все
svn checkout http://sqlite1c.googlecode.com/svn/trunk/ sqlite1c-read-only 


Для GUI-клиентов указывать URL: http://sqlite1c.googlecode.com/svn/trunk/
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #73 - 24. Июня 2008 :: 12:09
Печать  
Chieftain писал(а) 24. Июня 2008 :: 11:58:
Но я вот сейчас и тестирую все это дело...
Самый частый вопрос - разбивка остатка на основные и базовые единицы... Коэффициент основной единицы возвращается криво очень часто, все дальнейшие расчеты с его использованием ессно тоже кривые. Т.е. для норального расчета нужно юзать ROUND.
А потом сидеть и думать - как бы где еще не попалось число, которое храниться будет неправильно. ИМХО нездорово это

Можешь показать пример на конкретных числах, где конечный результат расчета (при установке типизации колонки Число.Длина.Точность) отличается от результата Фокса или 1С ?
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #74 - 24. Июня 2008 :: 12:15
Печать  
orefkov писал(а) 24. Июня 2008 :: 12:09:
Chieftain писал(а) 24. Июня 2008 :: 11:58:
Но я вот сейчас и тестирую все это дело...
Самый частый вопрос - разбивка остатка на основные и базовые единицы... Коэффициент основной единицы возвращается криво очень часто, все дальнейшие расчеты с его использованием ессно тоже кривые. Т.е. для норального расчета нужно юзать ROUND.
А потом сидеть и думать - как бы где еще не попалось число, которое храниться будет неправильно. ИМХО нездорово это

Можешь показать пример на конкретных числах, где конечный результат расчета (при установке типизации колонки Число.Длина.Точность) отличается от результата Фокса или 1С ?

При установке типизации числовых колонок и использовании ROUND считает нормально.
Хотя конструкция
Код
Выбрать все
Select ROUND(ЧисловоtПоле,3) as ЧисловаяКолонка 


не дает нормальное число в колонке, баааальшие дроби, хотя и только на некоторых числах.
И математические операции без использования ROUND приводят к весьма странным результатам с дробной частью
  
Наверх
ICQ  
IP записан
 
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 записан
 
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 записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #105 - 25. Июня 2008 :: 08:40
Печать  
А на запись данных в таблицы 1С работать будет?
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #106 - 25. Июня 2008 :: 08:51
Печать  
JohnyDeath писал(а) 25. Июня 2008 :: 08:30:
orefkov писал(а) 24. Июня 2008 :: 08:59:
Chieftain писал(а) 24. Июня 2008 :: 08:00:
А как у SQLite обстоят дела с ХП?

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

А может можно добавить метод типа "ДобавитьХП(ТекстЗапроса)", которя добавляла бы ХП для всего объекта SQLiteBase?


Вся вкусность ХП в возможности писать программу доступа к данным на языке высокого уровня,
и именно для реализации алгоритмов которые невозможно описать запросами SQL.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #107 - 25. Июня 2008 :: 09:00
Печать  
Тут вот размышлял и вот что надумал.
На базе SQLite можно сделать универсальный обмен данными.
Вернее использовать его как файл обмена.
ИМХО очень удобно будет. И флаг [КакПостоянную] тоже сюда очень здорово вписывается
В общем круть Смех
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #108 - 25. Июня 2008 :: 09:11
Печать  
Chieftain писал(а) 25. Июня 2008 :: 09:00:
Тут вот размышлял и вот что надумал.
На базе SQLite можно сделать универсальный обмен данными.
Вернее использовать его как файл обмена.
ИМХО очень удобно будет. И флаг [КакПостоянную] тоже сюда очень здорово вписывается
В общем круть Смех


См
Z1 писал(а) 23. Августа 2007 :: 05:42:
И всплыло задание по передаче прайса на сайт.
Первой мыслью  был  XML но призадумался и оказалось
что создать бд в формате sqliti ничем не хуже XML особенно
если сайт написан на php.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #109 - 25. Июня 2008 :: 09:13
Печать  
kiruha писал(а) 25. Июня 2008 :: 09:11:
Z1 писал(а) 23. Августа 2007 :: 05:42:
И всплыло задание по передаче прайса на сайт.
Первой мыслью  был  XML но призадумался и оказалось
что создать бд в формате sqliti ничем не хуже XML особенно
если сайт написан на php.

Вот ведь... а ведь не читал я ту ветку Печаль
Все равно супер Подмигивание

  
Наверх
ICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #110 - 25. Июня 2008 :: 12:02
Печать  
версия 1.0.1.4
- Добавлено автоподключение таблиц 1С. В доке описано.

то бишь теперь не надо сначала писать "create virtual table Товары using dbeng(Справочник.Номенклатура)"

Можно просто в запросе писать
from Справочник_Номенклатура Товары

Брать на http://code.google.com/p/sqlite1c/downloads/list
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #111 - 25. Июня 2008 :: 12:13
Печать  
Саш, а нельзя ли добавить функционал получения имен параметров запроса из текста запроса или объекта запроса?
Считаю это удобным для построения различных универсальных консолей запросов, как, например, в восьмерке.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #112 - 25. Июня 2008 :: 12:15
Печать  
А DELETED записи игнорируются SQLLite или возвращаются в общей куче?
В Fox поведение зависит от настроек.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #113 - 25. Июня 2008 :: 12:19
Печать  
artbear писал(а) 25. Июня 2008 :: 12:13:
Саш, а нельзя ли добавить функционал получения имен параметров запроса из текста запроса или объекта запроса?
Считаю это удобным для построения различных универсальных консолей запросов, как, например, в восьмерке.

Да, я подумывал над этим.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #114 - 25. Июня 2008 :: 12:20
Печать  
kiruha писал(а) 25. Июня 2008 :: 12:15:
А DELETED записи игнорируются SQLLite или возвращаются в общей куче?
В Fox поведение зависит от настроек.

Я не нашел (возможно пока) возможности в движке 1С включить показ удаленных строк.
Поковыряю еще. А вообще, зачем это нужно?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #115 - 25. Июня 2008 :: 12:20
Печать  
Какие-нибудь виртуальные таблицы, например, для регистров, периодических значений и бух.итогов планируются?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #116 - 25. Июня 2008 :: 12:22
Печать  
И еще вопрос.
Fox умеет обращаться к другим файлам ДБФ, что удобно например для хранения внешних баз (классификаторы)
и для обмена данными с другими базами.
В компоненте это возможно?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #117 - 25. Июня 2008 :: 12:24
Печать  
orefkov писал(а) 25. Июня 2008 :: 12:20:
kiruha писал(а) 25. Июня 2008 :: 12:15:
А DELETED записи игнорируются SQLLite или возвращаются в общей куче?
В Fox поведение зависит от настроек.

Я не нашел (возможно пока) возможности в движке 1С включить показ удаленных строк.
Поковыряю еще. А вообще, зачем это нужно?


Нет , это не нужно.
Спросил чтобы быть уверенным, что не всплывут удаленные записи в запросах.
  
Наверх
 
IP записан
 
Alister
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #118 - 25. Июня 2008 :: 13:12
Печать  
artbear писал(а) 25. Июня 2008 :: 12:20:
Какие-нибудь виртуальные таблицы, например, для регистров, периодических значений и бух.итогов планируются?

Особенно для бух.итогов хотелось бы Улыбка Да у нас в глубинке еще остались и бух.итоги Улыбка
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #119 - 25. Июня 2008 :: 13:25
Печать  
Alister писал(а) 25. Июня 2008 :: 13:12:
artbear писал(а) 25. Июня 2008 :: 12:20:
Какие-нибудь виртуальные таблицы, например, для регистров, периодических значений и бух.итогов планируются?

Особенно для бух.итогов хотелось бы Улыбка Да у нас в глубинке еще остались и бух.итоги Улыбка

Виртуальные таблицы не обязательно реализовывать в компоненте.
Парсинг и преобразование ВТ в запрос - это не то, что стоит стремиться сделать максимально эффективным по времени.
Можно это сделать внешним кодом (например классом).
Я уже начал писать ВТ БИОстатки в виде класса (что-то вроде AccountRecordset от betezdetsky, только для DBF)
Также там будут некоторые сервисные возможности для облегчения написания всяких парсеров.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #120 - 25. Июня 2008 :: 13:28
Печать  
А можно ли сделать в ВК непосредственное создание SQLiteQuery и какой-нибудь метод для связывания созданного объекта с SQLiteBase.
При текущей реализации наследование от SQLiteQuery невозможно Печаль
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #121 - 25. Июня 2008 :: 13:29
Печать  
steban писал(а) 25. Июня 2008 :: 13:25:
Виртуальные таблицы не обязательно реализовывать в компоненте.
Парсинг и преобразование ВТ в запрос - это не то, что стоит стремиться сделать максимально эффективным по времени.
Можно это сделать внешним кодом (например классом).
Я уже начал писать ВТ БИОстатки в виде класса (что-то вроде AccountRecordset от betezdetsky, только для DBF)
Также там будут некоторые сервисные возможности для облегчения написания всяких парсеров.

Согласен.
Классом поделишься ? Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #122 - 25. Июня 2008 :: 13:35
Печать  
artbear писал(а) 25. Июня 2008 :: 13:29:
Классом поделишься ? Улыбка

в текущем его состоянии - нет.
  

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


I Love YaBB 2!

Сообщений: 123
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #123 - 25. Июня 2008 :: 13:37
Печать  
Будет ли бета-тестирование, готов принять участие Улыбка За Артуром не поспел Улыбка
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #124 - 25. Июня 2008 :: 19:54
Печать  
steban писал(а) 25. Июня 2008 :: 13:28:
А можно ли сделать в ВК непосредственное создание SQLiteQuery и какой-нибудь метод для связывания созданного объекта с SQLiteBase.
При текущей реализации наследование от SQLiteQuery невозможно Печаль

Я подумаю. Просто в SQLiteQuery не так уж много методов, пока можно обойтись и агрегированием.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1sqlite
Ответ #125 - 26. Июня 2008 :: 05:22
Печать  
Я не могу побороть свою "глупость" сколько бы вчера не крутил и не вертел однако не получилось...
в общем вот текст запроса:
Код
Выбрать все
	ТекстЗапроса = "
	|SELECT
	|	Контрагенты.id [Контр :Справочник.Контрагенты]
	|	,ОснКонтЛицо.Значение AS ОсновноеКонтЛицо // для типизации пишу - ОснКонтЛицо.Значение [ОсновноеКонтЛицо :Справочник.КонтактныеЛица]
	|FROM
	|	Справочник_Контрагенты Контрагенты
	|
	|INNER JOIN
	|	(
	|	SELECT DISTINCT
	|		Константы.objid AS ЗначКонтр,
	|		Константы.value AS Значение
	|	FROM
	|		__1S_CONST Константы
	|	WHERE
	|		Константы.date
	|	IN
	|		(
	|		SELECT
	|			MAX(Конст.date)
	|		FROM
	|			__1S_CONST Конст
	|		WHERE
	|			(Конст.date <= @ТекДата)
	|		AND
	|			(Конст.id = :ИсторияРеквизита.Контрагенты.ОсновноеКонтактноеЛицо)
	|		AND
	|			(Конст.objid = Константы.objid)
	|		)
	|	AND
	|		(Константы.id = :ИсторияРеквизита.Контрагенты.ОсновноеКонтактноеЛицо)
	|	)
	|AS
	|	ОснКонтЛицо
	|ON
	|	(ОснКонтЛицо.ЗначКонтр = Контрагенты.id)
	|";
 


При попытке типизировать значение ОсновноеКонтЛицо в справочник "Контактные лица" (именно в таком формате он и хранится) получаю пустое значение. Без типизации значения во внутреннем формате.  Нерешительный

И еще вопрос... в таблице хранятся все периодические реквизиты, как можно вложенный запрос по составлению ВТ соотношений сделать таким образом чтобы все виды (различные id при условии одного objid) выводились в разных колонках?

Пы.Сы. счас ветка прямых запросов поделится на "трое"... раньше было SQL, DBF счас еще появится SQLite  Подмигивание
или я не в теме?
  

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #126 - 26. Июня 2008 :: 06:18
Печать  
Код
Выбрать все
	|SELECT
	|	Контрагенты.id [Контр :Справочник.Контрагенты],
	|	(select
	|		substr(П.value, 1, 9)
	|	from __1S_Const П
	|	where П.objid = Контрагенты.id and П.date <= @ТекДата
	|	and П.id = :ИсторияРеквизита.Контрагенты.ОсновноеКонтактноеЛицо
	|	order by date desc limit 1) [ОсновноеКонтЛицо :Справочник.КонтактныеЛица]
	|FROM
	|	Справочник_Контрагенты Контрагенты
 


Типизация не получается, потому что поле value 23 символа, а для типизации конкретным справочником требуется поле 9 символов.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1sqlite
Ответ #127 - 26. Июня 2008 :: 06:21
Печать  
Спасибо большое...   Подмигивание

очевидны большие пробелы в знаниях
  

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #128 - 26. Июня 2008 :: 07:17
Печать  
Версия 1.0.1.5
- Исправлена ошибка подстановки текстового параметра ":ВидСправочника.ХХХ"
- Добавлен модификатор 3 для подстановки значений типа Строка. Подставляет фрагмент текста без кавычек, для динамического формирования текста запроса.


Брать http://code.google.com/p/sqlite1c/downloads/list
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #129 - 26. Июня 2008 :: 15:37
Печать  
Это получается, что теперь можно вешать триггеры на таблицы?
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #130 - 27. Июня 2008 :: 04:31
Печать  
JohnyDeath писал(а) 26. Июня 2008 :: 15:37:
Это получается, что теперь можно вешать триггеры на таблицы?

Как ты себе это представляешь?
На виртуальные таблицы триггеры не вешаются.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1sqlite
Ответ #131 - 27. Июня 2008 :: 06:09
Печать  
Следуя по  мотивам данного текста http://www.1cpp.ru/forum/YaBB.pl?num=1180606447/2#2 (функция для преобразования 36-ричного времени в строку) сделал TimeAsStr.prg положил в КаталогИБ но в итоге запрос говорит что ничего о этой функции не знает...

как быть?
  

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


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #132 - 27. Июня 2008 :: 06:11
Печать  
Твоя ХП работает только для VFP, для 1sqllite нужно что-то другое.
Саш, пояснишь? смутно помню, где-то подобное для 1sqllite пробегало Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1sqlite
Ответ #133 - 27. Июня 2008 :: 06:21
Печать  
artbear писал(а) 27. Июня 2008 :: 06:11:
Твоя ХП работает только для VFP, для 1sqllite нужно что-то другое.
Саш, пояснишь? смутно помню, где-то подобное для 1sqllite пробегало Улыбка


Да... я так и понял.. нашел функции конвертирования но как их к SQLite приладить?
- вот обсуждение http://www.1cpp.ru/forum/YaBB.pl?num=1153475454/6#6
- вот еще раз http://www.sinor.ru/~my1c/knowhow/formtime.html
- вот еще два http://www.sinor.ru/~my1c/knowhow/SQLcnvID.html
  

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #134 - 27. Июня 2008 :: 10:04
Печать  
Версия 1.0.1.6
- Исправлена подстановка значения пустой даты.
- Добавлена типизация :Субконто
- Добавлена типизация :Время
- Добавлена функция str2id
- Добавлена функция id2str

Качать http://code.google.com/p/sqlite1c/downloads/list
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #135 - 27. Июня 2008 :: 10:20
Печать  
orefkov писал(а) 27. Июня 2008 :: 10:04:
- Добавлена функция str2id
- Добавлена функция id2str

я всё-таки ещё раз спрошу: нельзя ли сделать так, чтобы такие вот ф-ии пользователь мог сам добавлять в текущую базу?
Я вот, например, хочу ф-ию, которая бы возвращала имя месяца из даты. Не будешь же ты вшивать каждую такую хотелку в компоненту?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #136 - 27. Июня 2008 :: 10:27
Печать  
JohnyDeath писал(а) 27. Июня 2008 :: 10:20:
orefkov писал(а) 27. Июня 2008 :: 10:04:
- Добавлена функция str2id
- Добавлена функция id2str

я всё-таки ещё раз спрошу: нельзя ли сделать так, чтобы такие вот ф-ии пользователь мог сам добавлять в текущую базу?
Я вот, например, хочу ф-ию, которая бы возвращала имя месяца из даты. Не будешь же ты вшивать каждую такую хотелку в компоненту?

заведи в этой базе доп таблицу с думя полями : номер месяца , твое название месяца.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #137 - 27. Июня 2008 :: 10:30
Печать  
Z1 писал(а) 27. Июня 2008 :: 10:27:
JohnyDeath писал(а) 27. Июня 2008 :: 10:20:
orefkov писал(а) 27. Июня 2008 :: 10:04:
- Добавлена функция str2id
- Добавлена функция id2str

я всё-таки ещё раз спрошу: нельзя ли сделать так, чтобы такие вот ф-ии пользователь мог сам добавлять в текущую базу?
Я вот, например, хочу ф-ию, которая бы возвращала имя месяца из даты. Не будешь же ты вшивать каждую такую хотелку в компоненту?

заведи в этой базе доп таблицу с думя полями : номер месяца , твое название месяца.

в фоксе можно делать пользовательские функции, хочется чтобы и тут было также
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #138 - 27. Июня 2008 :: 10:35
Печать  
Chieftain писал(а) 27. Июня 2008 :: 10:30:
в фоксе можно делать пользовательские функции, хочется чтобы и тут было также


Что же orefkov мини-компилятор языка будет писать?
Разве что может есть какие-то обходные пути...
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #139 - 27. Июня 2008 :: 10:37
Печать  
kiruha писал(а) 27. Июня 2008 :: 10:35:
Chieftain писал(а) 27. Июня 2008 :: 10:30:
в фоксе можно делать пользовательские функции, хочется чтобы и тут было также


Что же orefkov мини-компилятор языка будет писать?
Разве что может есть какие-то обходные пути...

может DLL-ку подключать внешнюю?
  
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #140 - 27. Июня 2008 :: 11:09
Печать  
Chieftain писал(а) 27. Июня 2008 :: 10:37:
kiruha писал(а) 27. Июня 2008 :: 10:35:
Chieftain писал(а) 27. Июня 2008 :: 10:30:
в фоксе можно делать пользовательские функции, хочется чтобы и тут было также


Что же orefkov мини-компилятор языка будет писать?
Разве что может есть какие-то обходные пути...

может DLL-ку подключать внешнюю?

sqlite позволяет писать пользовательские функции на языке C.
читай документацию по sqlite.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #141 - 27. Июня 2008 :: 11:10
Печать  
Я подумываю над тем, чтобы добавить функцию ВыполнитьКод1С.
Но тут есть оборотная сторона медали - возможно неопытные пользователи переделывая 1Сые запросы, будут тупо переписывать оттуда условия, вставляя их например как
where ВыполнитьКод1С('парам1.Вид()', Журнал.iddoc) = 'РасходнаяНакладная'
что крайне отрицательно скажется на репутации компоненты.
Может VBScript или JScript прикрутить для этого?
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #142 - 27. Июня 2008 :: 11:14
Печать  
orefkov писал(а) 27. Июня 2008 :: 11:10:
Я подумываю над тем, чтобы добавить функцию ВыполнитьКод1С.
Но тут есть оборотная сторона медали - возможно неопытные пользователи переделывая 1Сые запросы, будут тупо переписывать оттуда условия, вставляя их например как
where ВыполнитьКод1С('парам1.Вид()', Журнал.iddoc) = 'РасходнаяНакладная'
что крайне отрицательно скажется на репутации компоненты.
Может VBScript или JScript прикрутить для этого?

Мож правда сделать функции из dll - тогда почти кто угодно сможет написать
  
Наверх
ICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #143 - 27. Июня 2008 :: 11:16
Печать  
Chieftain писал(а) 27. Июня 2008 :: 10:37:
kiruha писал(а) 27. Июня 2008 :: 10:35:
Chieftain писал(а) 27. Июня 2008 :: 10:30:
в фоксе можно делать пользовательские функции, хочется чтобы и тут было также


Что же orefkov мини-компилятор языка будет писать?
Разве что может есть какие-то обходные пути...

может DLL-ку подключать внешнюю?


запрос.ВыполнитьЗапрос("select load_extension('mycool.dll')");

Дллку пишешь сам.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #144 - 27. Июня 2008 :: 11:20
Печать  
orefkov писал(а) 27. Июня 2008 :: 11:16:
Chieftain писал(а) 27. Июня 2008 :: 10:37:
kiruha писал(а) 27. Июня 2008 :: 10:35:
Chieftain писал(а) 27. Июня 2008 :: 10:30:
в фоксе можно делать пользовательские функции, хочется чтобы и тут было также


Что же orefkov мини-компилятор языка будет писать?
Разве что может есть какие-то обходные пути...

может DLL-ку подключать внешнюю?


запрос.ВыполнитьЗапрос("select load_extension('mycool.dll')");

Дллку пишешь сам.

Все так просто? А как функции из нее вызывать? Или там длл специальная должна быть?
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #145 - 27. Июня 2008 :: 11:24
Печать  
Если можно Цитата:
VBScript или JScript прикрутить для этого?
, то, мне кажется, все будут довольны.
И хотелось бы как-то так:
1. Пишем скрипт.
2. в 1sqlite выполняем какой-нить "ДобавитьДопФункции(ТекстСкрипта)"
3. все доп. ф-ии складываются в отдельное место Каталога ИБ (в одно место).
4. 1sqlite при загрузке цепляет автоматом это хранилище и все, написанные ранее, ф-ии будут сразу доступны. Также плюс такого решения: это хранилище можно перетащить на др. базу и без заморочек использовать расш. функционал.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #146 - 27. Июня 2008 :: 11:25
Печать  
Правда в данный момент это сделать не получится, так как extension'ы должны быть связаны с sqlite динамически, а 1sqlite не экспортирует наружу методы sqlite.
Хотя, в-принципе, можно сделать чтобы 1sqlite методы самого sqlite експортровала наружу, и тогда extension-dll могли бы с ней линковаться.

Более подробно на http://www.sqlite.org/cvstrac/wiki?p=LoadableExtensions
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #147 - 27. Июня 2008 :: 11:28
Печать  
orefkov писал(а) 27. Июня 2008 :: 11:10:
Я подумываю над тем, чтобы добавить функцию ВыполнитьКод1С.
Но тут есть оборотная сторона медали - возможно неопытные пользователи переделывая 1Сые запросы, будут тупо переписывать оттуда условия, вставляя их например как
where ВыполнитьКод1С('парам1.Вид()', Журнал.iddoc) = 'РасходнаяНакладная'
что крайне отрицательно скажется на репутации компоненты.
Может VBScript или JScript прикрутить для этого?

Да, или эти языки, или все-таки код 1С.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #148 - 27. Июня 2008 :: 11:30
Печать  
Господа, мне сложно отслеживать все пожелания, раскиданные по разным форумам веткам.
Старайтесь писать их в http://code.google.com/p/sqlite1c/issues/list , всего-то и нужно, что завести аккаунт на гугле.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #149 - 27. Июня 2008 :: 11:33
Печать  
Саш, а может быть, все-таки багзилла у Федора?
Думаю, он заведет отдельный раздел для тебя Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #150 - 27. Июня 2008 :: 11:41
Печать  
orefkov писал(а) 27. Июня 2008 :: 11:30:
Господа, мне сложно отслеживать все пожелания, раскиданные по разным форумам веткам.
Старайтесь писать их в http://code.google.com/p/sqlite1c/issues/list , всего-то и нужно, что завести аккаунт на гугле.

Примерно так: http://code.google.com/p/sqlite1c/issues/detail?id=2 ?
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #151 - 27. Июня 2008 :: 11:52
Печать  
artbear писал(а) 27. Июня 2008 :: 11:33:
Саш, а может быть, все-таки багзилла у Федора?
Думаю, он заведет отдельный раздел для тебя Улыбка


Вот ежели бы Федор subversion поднял...
Не пользуюсь я CVS уже...
  
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #152 - 27. Июня 2008 :: 14:58
Печать  
orefkov писал(а) 27. Июня 2008 :: 11:52:
Вот ежели бы Федор subversion поднял...

Тебе апача или svnserve?
  
Наверх
www  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #153 - 28. Июня 2008 :: 08:48
Печать  
Версия 1.0.1.7

- Доработана работа 3го модификатора текстового параметра типа "Строка".
 Теперь подставляемый фрагмент текста также обрабатывается метапарсером.
- Удалены типизация ":ВидДокумента" и ":ВидДокументаПредставление".
- Добавлены типизации ":ИмяВида" и ":ПредставлениеВида".
- Доработан метод `SQLiteQuery::ВыполнитьЗапрос`_. Теперь можно получать
 результат выполнения запроса в таблицу значений, список значений,
 полем из скалярного запроса, а также в любой объект, реализующий
 интерфейс загрузки результата запроса (ISQLiteResultLoader).

Качать: http://code.google.com/p/sqlite1c/downloads/list
Качать файл 1sqlite_1017f.zip, кто успел скачать оттуда 1sqlite_1017.zip, закачайте обратно.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #154 - 28. Июня 2008 :: 21:25
Печать  
Alister писал(а) 25. Июня 2008 :: 13:37:
Будет ли бета-тестирование, готов принять участие Улыбка

можешь приступать: ВТ БИОстатки для 1sqlite
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #155 - 30. Июня 2008 :: 06:53
Печать  
Саш, а нельзя ли сделать автоподключения таблиц с синтаксисом как в OLEDB или ODBC?
т.е. чтоб можно было писать как:
Код
Выбрать все
From Справочник_Мой__Справочник 


так и:
Код
Выбрать все
From $Справочник.Мой_Справочник 


Почему я такой привередливый? Ну чтоб меньше переписывать старые запросы и такая конструкция:
Код
Выбрать все
JOIN $Справочник."+ВидСправочника  


выглядет поприятнее этой:
Код
Выбрать все
JOIN Справочник_"+ СтрЗаменить(ВидСправочника,"_","__")  


(и не факт что последняя конструкция будет работать везде нормально)
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #156 - 30. Июня 2008 :: 06:57
Печать  
Артур, в версии 1.0.1.7 для выгрузки результатов запросов я сделал спец-интерфейс. См. resultloader.h
Если для ИТЗ реализуете этот интерфейс, то компонента сможет выгружать и в ИТЗ.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #157 - 30. Июня 2008 :: 07:06
Печать  
JohnyDeath писал(а) 30. Июня 2008 :: 06:53:
Саш, а нельзя ли сделать автоподключения таблиц с синтаксисом как в OLEDB или ODBC?
т.е. чтоб можно было писать как:
Код
Выбрать все
From Справочник_Мой__Справочник 


так и:
Код
Выбрать все
From $Справочник.Мой_Справочник 


Почему я такой привередливый? Ну чтоб меньше переписывать старые запросы и такая конструкция:
Код
Выбрать все
JOIN $Справочник."+ВидСправочника  


выглядет поприятнее этой:
Код
Выбрать все
JOIN Справочник_"+ СтрЗаменить(ВидСправочника,"_","__")  


(и не факт что последняя конструкция будет работать везде нормально)

Вряд ли я это буду делать.
Для этого придется усложнять мета-парсер текста запроса.
Сейчас авто-подключение реализовано малюсенькой доработкой SQLite - в sqlite3LocateTable.
Если использовать синтаксис $Справочник.ВидСправочника, то маленьким изменением в SQLite не обойтись - строку $Справочник он будет воспринимать как sql-параметр, то есть придется всю эту байду выносить в метапарсер.

А по совместимости со старым кодом - для sql-1C это все равно не нужно, а для dbf - один хрен старые запросы рассчитанные на FoxPro, придется перерабатывать.

И вообще, $ меня достал переключать раскладку.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #158 - 30. Июня 2008 :: 11:47
Печать  
Вышибает 1С такой запрос:
Код
Выбрать все
select
	СпрОсн.id as [Дог $Справочник.ДоговораСтрахования],
(SELECT
	substr(П.value,1,9)
	from __1S_Const as П
	where П.objid = СпрОсн.id and П.date <= '20080630'
	and П.id = :ИсторияРеквизита.ДоговораСтрахования.Агент
	order by date desc limit 1) as Значение
From Справочник_ДоговораСтрахования as СпрОсн
left join Справочник_Агенты__Брокеры as СпрПод ON СпрПод.ID = Значение 



Если я не правильно составил запрос - поправьте, пожалуйста, но, думаю, что вылетов быть не должно.
Без последнего джойна всё работает нормально
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #159 - 30. Июня 2008 :: 12:14
Печать  
JohnyDeath писал(а) 30. Июня 2008 :: 11:47:
Вышибает 1С такой запрос:
Код
Выбрать все
select
	СпрОсн.id as [Дог $Справочник.ДоговораСтрахования],
(SELECT
	substr(П.value,1,9)
	from __1S_Const as П
	where П.objid = СпрОсн.id and П.date <= '20080630'
	and П.id = :ИсторияРеквизита.ДоговораСтрахования.Агент
	order by date desc limit 1) as Значение
From Справочник_ДоговораСтрахования as СпрОсн
left join Справочник_Агенты__Брокеры as СпрПод ON СпрПод.ID = Значение 



Если я не правильно составил запрос - поправьте, пожалуйста, но, думаю, что вылетов быть не должно.
Без последнего джойна всё работает нормально


Может так:
Код
Выбрать все
select
	СпрОсн.id as [Дог $Справочник.ДоговораСтрахования],
(SELECT
	substr(П.value,1,9)
	from __1S_Const as П
	where П.objid = СпрОсн.id and П.date <= '20080630'
	and П.id = :ИсторияРеквизита.ДоговораСтрахования.Агент
	order by date desc limit 1) as Значение [Значение :Справочник.Агенты_Брокеры]
From Справочник_ДоговораСтрахования as СпрОсн
 



А если так:
Код
Выбрать все
select
	СпрОсн.id as [Дог $Справочник.ДоговораСтрахования],
	СпрПод.id as Значение
From Справочник_ДоговораСтрахования as СпрОсн
left join Справочник_Агенты__Брокеры as СпрПод ON СпрПод.ID = (SELECT
	substr(П.value,1,9)
	from __1S_Const as П
	where П.objid = СпрОсн.id and П.date <= '20080630'
	and П.id = :ИсторияРеквизита.ДоговораСтрахования.Агент
	order by date desc limit 1)
 


  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #160 - 30. Июня 2008 :: 12:29
Печать  
Исправил типизацию :Субконто и :ПредставлениеВида
Качать http://sqlite1c.googlecode.com/files/1sqlite_1017_fixsubc.zip
Подробнее http://code.google.com/p/sqlite1c/issues/detail?id=5&can=1
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #161 - 30. Июня 2008 :: 12:53
Печать  
orefkov писал(а) 30. Июня 2008 :: 12:14:
Может так:
Код
Выбрать все
select
	СпрОсн.id as [Дог $Справочник.ДоговораСтрахования],
(SELECT
	substr(П.value,1,9)
	from __1S_Const as П
	where П.objid = СпрОсн.id and П.date <= '20080630'
	and П.id = :ИсторияРеквизита.ДоговораСтрахования.Агент
	order by date desc limit 1) as Значение [Значение :Справочник.Агенты_Брокеры]
From Справочник_ДоговораСтрахования as СпрОсн
 




Нет, мне именно присоединить таблицу надо.

orefkov писал(а) 30. Июня 2008 :: 12:14:
А если так:
Код
Выбрать все
select
	СпрОсн.id as [Дог $Справочник.ДоговораСтрахования],
	СпрПод.id as Значение
From Справочник_ДоговораСтрахования as СпрОсн
left join Справочник_Агенты__Брокеры as СпрПод ON СпрПод.ID = (SELECT
	substr(П.value,1,9)
	from __1S_Const as П
	where П.objid = СпрОсн.id and П.date <= '20080630'
	and П.id = :ИсторияРеквизита.ДоговораСтрахования.Агент
	order by date desc limit 1)
 



Так тоже пробывал - вылет.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #162 - 30. Июня 2008 :: 18:23
Печать  
В продолжении вылета. Тоже самое, но в ТиСе:
Код
Выбрать все
select Цены.ID [Цена :Справочник.Цены]
,Цены.ParentExt [Номенклатура :Справочник.Номенклатура]

from Справочник_Цены as Цены

left join Справочник_Единицы as Единицы ON Единицы.ID =
(select substr(П.value,1,9)
FROM __1s_const as П
where П.objid = Цены.id and П.date <= '20080630'
and П.id = :ИсторияРеквизита.Цены.Единица
order by П.date desc limit 1
) 

  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #163 - 01. Июля 2008 :: 04:15
Печать  
Часть проблемы я выяснил. Сейчас еще доразбираюсь, исправлю.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #164 - 01. Июля 2008 :: 14:00
Печать  
Или я уже что-то не понимаю, или...
Вот запрос к таблице движений:
Код
Выбрать все
SELECT

КатегорияБланка,
Количество*(1-2*debkred) as Количество

FROM Регистр_БСО__Склад

WHERE
	(DATE+TIME) BETWEEN
		'20080101' AND '200801315CWG00' 


Выдаёт 0 строк, хотя движения были. Пробывал дополнять пробелами:
Код
Выбрать все
'20080101	' AND '200801315CWG00' 


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


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #165 - 01. Июля 2008 :: 14:05
Печать  
JohnyDeath писал(а) 01. Июля 2008 :: 14:00:
Или я уже что-то не понимаю, или...
Вот запрос к таблице движений:
Код
Выбрать все
SELECT

КатегорияБланка,
Количество*(1-2*debkred) as Количество

FROM Регистр_БСО__Склад

WHERE
	(DATE+TIME) BETWEEN
		'20080101' AND '200801315CWG00' 


Выдаёт 0 строк, хотя движения были. Пробывал дополнять пробелами:
Код
Выбрать все
'20080101	' AND '200801315CWG00' 


Всё равно пусто.

Вместо (DATE+TIME) надо писать (DATE||TIME), плюс просто складывает, а || - это конкантенация строк
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #166 - 01. Июля 2008 :: 14:06
Печать  
Ага, всё нормально! Спасиб!  Подмигивание
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #167 - 02. Июля 2008 :: 06:58
Печать  
orefkov писал(а) 30. Июня 2008 :: 06:57:
Артур, в версии 1.0.1.7 для выгрузки результатов запросов я сделал спец-интерфейс. См. resultloader.h
Если для ИТЗ реализуете этот интерфейс, то компонента сможет выгружать и в ИТЗ.

Ага, вижу.
Леха Диркс пока занят, я сам займусь, постараюсь на этой или следующей неделе сделать.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #168 - 02. Июля 2008 :: 07:15
Печать  
artbear писал(а) 02. Июля 2008 :: 06:58:
orefkov писал(а) 30. Июня 2008 :: 06:57:
Артур, в версии 1.0.1.7 для выгрузки результатов запросов я сделал спец-интерфейс. См. resultloader.h
Если для ИТЗ реализуете этот интерфейс, то компонента сможет выгружать и в ИТЗ.

Ага, вижу.
Леха Диркс пока занят, я сам займусь, постараюсь на этой или следующей неделе сделать.


Если будет выгрузка в ИТЗ, то часть операций, когда SQLLIte ведет себя неоптимально - группирование,
соединение по неиндексным полям - можно проводить уже с ИТЗ - т.е. производительность повысится.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #169 - 02. Июля 2008 :: 07:26
Печать  
kiruha писал(а) 02. Июля 2008 :: 07:15:
часть операций, когда SQLLIte ведет себя неоптимально - группирование,
соединение по неиндексным полям - можно проводить уже с ИТЗ - т.е. производительность повысится.

ИМХО, из ИТЗ может понадобиться только метод "Группировать".
Остальное можно разрулить в 1sqlite при помощи временных таблиц с индексами.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #170 - 02. Июля 2008 :: 07:36
Печать  
steban писал(а) 02. Июля 2008 :: 07:26:
kiruha писал(а) 02. Июля 2008 :: 07:15:
часть операций, когда SQLLIte ведет себя неоптимально - группирование,
соединение по неиндексным полям - можно проводить уже с ИТЗ - т.е. производительность повысится.

ИМХО, из ИТЗ может понадобиться только метод "Группировать".
Остальное можно разрулить в 1sqlite при помощи временных таблиц с индексами.

ИМХО как раз метод ИТЗ::Группировать ИМХО не очень оптимален по расходу памяти и времени работы Печаль Хотя, конечно, очень удобный и качественный метод Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #171 - 02. Июля 2008 :: 07:43
Печать  
Подскажите, пожалуйста, как попасть в индекс DATETIME таблицы движения регистра, который = DTOS(DATE)+TIME+IDDOC+STR(LINENO,4)+STR(ACTNO,6)
Так:
Код
Выбрать все
SELECT *
FROM Регистр_БСО__Склад
WHERE
		     DATE||TIME BETWEEN
		'20080101	' AND '200801315CWG00' 


не попадает.
Так:
Код
Выбрать все
SELECT *
FROM Регистр_БСО__Склад
WHERE
		     DTOS(DATE)+TIME BETWEEN
		'20080101	' AND '200801315CWG00' 


ругается, что нет ф-ии DTOS.
Какой индекс строит 1sqlite для этой таблицы?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #172 - 02. Июля 2008 :: 07:48
Печать  
Код
Выбрать все
SELECT *
FROM Регистр_БСО__Склад
WHERE
		DATE BETWEEN '20080101' AND '20080131'
AND idx_DATE_TIME_IDDOC_LINENO_ACTNO BETWEEN '20080101	' AND '200801315CWG00'
 

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #173 - 02. Июля 2008 :: 07:50
Печать  
steban писал(а) 02. Июля 2008 :: 07:48:
Код
Выбрать все
SELECT *
FROM Регистр_БСО__Склад
WHERE
		DATE BETWEEN '20080101' AND '20080131'
AND idx_DATE_TIME_IDDOC_LINENO_ACTNO BETWEEN '20080101	' AND '200801315CWG00'
 


Самое то! Спасибо!
ТОлько условие
Код
Выбрать все
DATE BETWEEN '20080101' AND '20080131' 

мне кажется лишним. Или нет?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #174 - 02. Июля 2008 :: 07:52
Печать  
JohnyDeath писал(а) 02. Июля 2008 :: 07:50:
Самое то! Спасибо!
ТОлько условие
Код
Выбрать все
DATE BETWEEN '20080101' AND '20080131' 

мне кажется лишним. Или нет?

Вот как раз это условие обеспечивает попадание в индекс.
А по полю idx_тырыпыры.. индекса нет.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #175 - 02. Июля 2008 :: 07:58
Печать  
steban писал(а) 02. Июля 2008 :: 07:52:
Вот как раз это условие обеспечивает попадание в индекс.
А по полю idx_тырыпыры.. индекса нет.

а мне на запрос:
Код
Выбрать все
SELECT *
FROM Регистр_БСО__Склад
WHERE
		    idx_DATE_TIME_IDDOC_LINENO_ACTNO BETWEEN '20080101' AND '200801315CWG00' 


отладка вот это показала:
Цитата:
Подбор индекса для таблицы RA5966:
     Ограничения: DATETIME[dx_DATE_TIME_IDDOC_LINENO_ACTNO]>=; DATETIME[dx_DATE_TIME_IDDOC_LINENO_ACTNO]<=;
     Найдено в кэше
     Выбран индекс DATETIME: DTOS(DATE)+TIME+IDDOC+STR(LINENO,4)+STR(ACTNO,6)
     Стоимость: 16

т.е. типа попали.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #176 - 02. Июля 2008 :: 08:15
Печать  
Да, точно. Улыбка
И план выполнения и время выполнения одинаковые.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #177 - 02. Июля 2008 :: 08:27
Печать  
Использование поля вида idx_DATE_TIME_IDDOC_LINENO_ACTNO не решает проблему
ключа с двумя полями входящими в один индекс ? :

orefkov писал(а) 24. Июня 2008 :: 10:00:
При таком простом условии (сравнение по одному полю, входящему в индекс), будет очень хорошо:
двинет по индксу, отсчитает нужное количество записей.

При ключе с двумя полями входящими в один индекс, все гораздо хуже. Для MSSQL у Дмитро применяется сейчас такая конструкция:
Код
Выбрать все
where field1 > 'key1' or (field1 = 'key1' and field2 > 'key2')
 


MSSQL нормально понимает такую запись, двигает по индексу.
SQLite - во-первых выражения, объединенные по OR не оптимизирует, только по AND.
Во-вторых, с константами не работает (те он все равно не поймет, что в обоих подусловиях одинаковый 'key1')

Если переписать условие вот так:
Код
Выбрать все
where field1 >= 'key1' AND NOT (field1 = 'key1' AND field2 <='key2')
 


то SQLite для начала двинет по индексу на 'key1', потом будет идти по индексу, проверяя каждую запись на NOT (field1 = 'key1' AND field2 <='key2')
Это конечно несколько оптимальнее, но все равно не то, чего бы хотелось. А если еще и по первому полю селективность низкая, вообще хреново.
К сожалению, умение составлять английские предложения - не сильная моя черта, а то бы давно им фичереквест написал.

  
Наверх
 
IP записан
 
artbear
1