Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 459241 )
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
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #178 - 02. Июля 2008 :: 09:56
Печать  
Саш, проект не собирается в ВС6:
1. В utex.h ненужный инклюд #include <fixalloc.h>
2. В SQL_DBF.rc также ненужный инклюд #include "l.rus\afxres.rc"

Поправишь?

ЗЫ без этих строк проект нормально собирается.
  

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
Ответ #179 - 02. Июля 2008 :: 11:02
Печать  
artbear писал(а) 02. Июля 2008 :: 06:58:
orefkov писал(а) 30. Июня 2008 :: 06:57:
Артур, в версии 1.0.1.7 для выгрузки результатов запросов я сделал спец-интерфейс. См. resultloader.h
Если для ИТЗ реализуете этот интерфейс, то компонента сможет выгружать и в ИТЗ.

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

http://cvs.alterplast.ru/bugs/show_bug.cgi?id=3953
  

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
Ответ #180 - 02. Июля 2008 :: 11:04
Печать  
Все оказалось очень просто, сейчас залью код в icpp 3.0 и выложу сборку 3.0.1.6 Улыбка
  

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
Ответ #181 - 02. Июля 2008 :: 11:31
Печать  
artbear писал(а) 02. Июля 2008 :: 11:02:
artbear писал(а) 02. Июля 2008 :: 06:58:
orefkov писал(а) 30. Июня 2008 :: 06:57:
Артур, в версии 1.0.1.7 для выгрузки результатов запросов я сделал спец-интерфейс. См. resultloader.h
Если для ИТЗ реализуете этот интерфейс, то компонента сможет выгружать и в ИТЗ.

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

http://cvs.alterplast.ru/bugs/show_bug.cgi?id=3953

Выполнено в icpp.
Инфа - http://www.1cpp.ru/forum/YaBB.pl?num=1206042291/332#332
  

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
Ответ #182 - 02. Июля 2008 :: 11:34
Печать  
Саш, прошу обозначить в доке для 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 записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #183 - 02. Июля 2008 :: 11:45
Печать  
artbear писал(а) 02. Июля 2008 :: 11:34:
Саш, прошу обозначить в доке для 1SQLite этот факт для ИТЗ.

В доке для ВыполнитьЗапрос можно добавить след. текст
Цитата:
    - Если параметр *Приемник* - объект "ИндексированнаяТаблица" из ВК 1С++ версии 3.0.1.6 и выше
     то возвращаемое значение - это ссылка на этот объект.
     Если параметр *ПараметрыДляПриемника* пуст (не задан или не равен 0), то из переданной
     таблицы предварительно удаляются все данные и колонки, если 0 -
     таблица не очищается и результат запроса добавляется к существующим в таблице значений данным.
     Если таблица значений не очищается и колонок в ней
     меньше, чем в результате запроса, то лишние колонки результата запроса отбрасываются.
  

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
Ответ #184 - 02. Июля 2008 :: 14:23
Печать  
Вышла 1.0.1.8

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

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #185 - 02. Июля 2008 :: 14:26
Печать  
artbear писал(а) 02. Июля 2008 :: 11:45:
artbear писал(а) 02. Июля 2008 :: 11:34:
Саш, прошу обозначить в доке для 1SQLite этот факт для ИТЗ.

В доке для ВыполнитьЗапрос можно добавить след. текст
Цитата:
   - Если параметр *Приемник* - объект "ИндексированнаяТаблица" из ВК 1С++ версии 3.0.1.6 и выше
     то возвращаемое значение - это ссылка на этот объект.
     Если параметр *ПараметрыДляПриемника* пуст (не задан или не равен 0), то из переданной
     таблицы предварительно удаляются все данные и колонки, если 0 -
     таблица не очищается и результат запроса добавляется к существующим в таблице значений данным.
     Если таблица значений не очищается и колонок в ней
     меньше, чем в результате запроса, то лишние колонки результата запроса отбрасываются.

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #186 - 02. Июля 2008 :: 14:44
Печать  
orefkov писал(а) 02. Июля 2008 :: 14:26:
А вот бы еще если ПараметрыДляПриемника строка, то в ней передавалось, как сгруппировать результат запроса.
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 записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #187 - 02. Июля 2008 :: 19:14
Печать  
orefkov писал(а) 02. Июля 2008 :: 14:26:
1sqlite пока не умеет итоги по иерархиям накручивать.

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


I Love YaBB 2!

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

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

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


Как это нет - это специальное "виртуальное" поле индекса - как раз для обеспечения возможности попадать в индексы по составным полям. 1С  в sql-версии не зря ведь поля date, time, iddoc объединила в одно поле.
Конечно, если бы в sql версии это были отдельные поля, то для попадания в индекс пришлось бы писать

date > ... or (date=... and time >...) or (date=... and time=... and iddoc >...)

MSSQL это бы понял, а вот SQLite - никоим образом не поймет.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #189 - 02. Июля 2008 :: 19:34
Печать  
kiruha писал(а) 02. Июля 2008 :: 08:27:
Использование поля вида idx_DATE_TIME_IDDOC_LINENO_ACTNO не решает проблему
ключа с двумя полями входящими в один индекс ? :


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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #190 - 02. Июля 2008 :: 19:38
Печать  
artbear писал(а) 02. Июля 2008 :: 14:44:
orefkov писал(а) 02. Июля 2008 :: 14:26:
А вот бы еще если ПараметрыДляПриемника строка, то в ней передавалось, как сгруппировать результат запроса.
1sqlite пока не умеет итоги по иерархиям накручивать.

Сделать не проблема.
Ты поточнее расшифруй, плиз, формат этой строки, лады?


Ну не знаю. Как-то перечислить колонки группировок, колонки итогов.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #191 - 02. Июля 2008 :: 19:45
Печать  
Chieftain писал(а) 02. Июля 2008 :: 19:14:
orefkov писал(а) 02. Июля 2008 :: 14:26:
1sqlite пока не умеет итоги по иерархиям накручивать.

То есть в твоих планах и такое есть? Подмигивание


Да. Это ближайшая задача. В свое время разбирался, как олап кубики устроены, по каким алгоритмам работают. Сделал рабочую модель на JScript'е и даже начинал кодировать в С++, но пришлось отложить. Сейчас хочу вернутся к теме.
Хочу сделать накручивалку итогов на таблицу в SQLite базе, и визуальное средство отображения.
То есть для отчета делаем запрос с укладкой результата во врем-таблицу:
create table Result as select...
потом накручиваем на таблицу итоги, подключаем отображатель - видим отчет.

А может, просто прикручу стандартные локальные олап-кубики, с OWC.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #192 - 02. Июля 2008 :: 19:49
Печать  
orefkov писал(а) 02. Июля 2008 :: 19:45:
Chieftain писал(а) 02. Июля 2008 :: 19:14:
orefkov писал(а) 02. Июля 2008 :: 14:26:
1sqlite пока не умеет итоги по иерархиям накручивать.

То есть в твоих планах и такое есть? Подмигивание


Да. Это ближайшая задача. В свое время разбирался, как олап кубики устроены, по каким алгоритмам работают. Сделал рабочую модель на JScript'е и даже начинал кодировать в С++, но пришлось отложить. Сейчас хочу вернутся к теме.
Хочу сделать накручивалку итогов на таблицу в SQLite базе, и визуальное средство отображения.
То есть для отчета делаем запрос с укладкой результата во врем-таблицу:
create table Result as select...
потом накручиваем на таблицу итоги, подключаем отображатель - видим отчет.

А может, просто прикручу стандартные локальные олап-кубики, с OWC.

Здорово!!!

ЗЫ... ну ты и МОСК Подмигивание
  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #193 - 02. Июля 2008 :: 21:53
Печать  
orefkov

Круто.

Я уже полгода ношу туда-сюда базы sqlite для обмена данными и всего такого, и это оказалось сильно удобно.
Но я как-то всегда знал, что ты не бросишь эту идею, уж больно она хороша. )
...
Саня, а не стоит ли добавить еще и интерфейс для обратной перегонки из ИТ в таблицу SQLite (УложитьТЗ)?
Полезно было бы.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #194 - 03. Июля 2008 :: 03:16
Печать  
kms писал(а) 02. Июля 2008 :: 21:53:
orefkov

Саня, а не стоит ли добавить еще и интерфейс для обратной перегонки из ИТ в таблицу SQLite (УложитьТЗ)?
Полезно было бы.

+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 записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #195 - 03. Июля 2008 :: 05:04
Печать  
orefkov писал(а) 02. Июля 2008 :: 19:45:
...
А может, просто прикручу стандартные локальные олап-кубики, с OWC.

Мне кажется, что так и надо сделать. Вертелка кубов от OWC очень удобна, а тратить силы на свой вьюер.... нет, лучше здесь ещё что-нибудь полезненькое наваять.  Подмигивание
В общем у Орефкова нарисовался ещё один шедевр!  Очень довольный Спасибо!
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #196 - 03. Июля 2008 :: 05:50
Печать  
orefkov писал(а) 02. Июля 2008 :: 19:30:
Как это нет - это специальное "виртуальное" поле индекса - как раз для обеспечения возможности попадать в индексы по составным полям. 1С  в sql-версии не зря ведь поля date, time, iddoc объединила в одно поле.
Конечно, если бы в sql версии это были отдельные поля, то для попадания в индекс пришлось бы писать

date > ... or (date=... and time >...) or (date=... and time=... and iddoc >...)

MSSQL это бы понял, а вот SQLite - никоим образом не поймет.

1. А как посмотреть эти виртуальные поля индекса для конкретной таблицы? Или можно быть уверенным, что, если в родной таблице есть индекс, то и существует такое виртуальное поле индекса с именем = idx_Тут_Через_Нижнее_Подчёркивание_Все_Поля_Входящие_В_Индекс ?
2. Можно ли как-то самому создавать такие поля? (или это бред, т.к. необходимо наличие физического индекса таблицы?)
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #197 - 03. Июля 2008 :: 07:43
Печать  
artbear писал(а) 03. Июля 2008 :: 03:16:
kms писал(а) 02. Июля 2008 :: 21:53:
orefkov

Саня, а не стоит ли добавить еще и интерфейс для обратной перегонки из ИТ в таблицу SQLite (УложитьТЗ)?
Полезно было бы.

+1

Только вот вопрос, как это сделать грамотно.
Может захотеться выгрузить из ИТ по индексу, и только заданные колонки.
Т.е. интерфейс получается кастомизируемый с двух сторон - и потому не очень универсальный. (
  

De quelle planète es-tu?
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #198 - 03. Июля 2008 :: 07:49
Печать  
JohnyDeath писал(а) 03. Июля 2008 :: 05:50:
orefkov писал(а) 02. Июля 2008 :: 19:30:
Как это нет - это специальное "виртуальное" поле индекса - как раз для обеспечения возможности попадать в индексы по составным полям. 1С  в sql-версии не зря ведь поля date, time, iddoc объединила в одно поле.
Конечно, если бы в sql версии это были отдельные поля, то для попадания в индекс пришлось бы писать

date > ... or (date=... and time >...) or (date=... and time=... and iddoc >...)

MSSQL это бы понял, а вот SQLite - никоим образом не поймет.

1. А как посмотреть эти виртуальные поля индекса для конкретной таблицы? Или можно быть уверенным, что, если в родной таблице есть индекс, то и существует такое виртуальное поле индекса с именем = idx_Тут_Через_Нижнее_Подчёркивание_Все_Поля_Входящие_В_Индекс ?
2. Можно ли как-то самому создавать такие поля? (или это бред, т.к. необходимо наличие физического индекса таблицы?)

1. Об этом так и написано в документации к компоненте.
Раздел "Отображение ДБФ-таблиц 1С в базу данных SQLite"

Также модуль dbeng при отображении таблиц создает в структуре подключаемой таблицы "виртуальные" поля индексов - это поле, которое для движка SQLite выглядит обычным полем, но данные, возвращаемые модулем dbeng для этого поля - есть ключ индекса текущей записи, с добавлением номера записи. Основных назначений таких полей два - использование как уникального ключа записи для использовании в ТабличномПоле 1С++, и оптимизация указания границ по составным полям. Имя таких полей формируется как:

idx_Поле1_Поле2_Итд

то есть префикс "idx", за которым через символы "_" перечислены названия поля, входящих в индекс.


2. Это поля, отображающие индексы таблицы. Создай индекс - и поле появится. Индекс можно создать, написав его в 1cv.dd, удалить cdx, зайти монопольно. Правда при штатной реструктуризации базы 1С такой индекс скорее всего прибьет, то бишь надо его каждый раз добавлять. Но помнится, для опенконфа был подобный скрипт.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #200 - 03. Июля 2008 :: 07:59
Печать  
kms писал(а) 03. Июля 2008 :: 07:43:
kms писал(а) 02. Июля 2008 :: 21:53:
orefkov
Саня, а не стоит ли добавить еще и интерфейс для обратной перегонки из ИТ в таблицу SQLite (УложитьТЗ)?

Только вот вопрос, как это сделать грамотно.
Может захотеться выгрузить из ИТ по индексу, и только заданные колонки.
Т.е. интерфейс получается кастомизируемый с двух сторон - и потому не очень универсальный. (


ИМХО нужно выделить отдельный подконтекст от SQLiteQuery, видимый из 1С, который умеет укладывать данные в таблицы SQLite
А уж ИТЗ будет в него загружать данные.
т.е. код типа
Код
Выбрать все
ОбъектУкладки = SQLiteQuery.ПолучитьОбъектУкладки(НаборПараметровНастройкиУкладки...);
ИТЗ.Выгрузить(ОбъектУкладки, Индекс и т.д.); 



Или наоборот - выделить отдельный подконтекст от ИТЗ
Код
Выбрать все
ОбъектУкладки = ИТЗ.ПолучитьОбъектУкладки(НаборПараметровНастройкиУкладки...);
SQLiteQuery.УложитьТЗ(ОбъектУкладки...); 



В обоих случаях для сторонних ВК будет описан только интерфейс загрузки, который и должен реализовать ОбъектУкладки.
Объем работы в обоих случаях примерно одинаковый Улыбка
  

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


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #201 - 03. Июля 2008 :: 08:44
Печать  
artbear писал(а) 03. Июля 2008 :: 07:59:
В обоих случаях для сторонних ВК будет описан только интерфейс загрузки, который и должен реализовать ОбъектУкладки.
Объем работы в обоих случаях примерно одинаковый Улыбка

Ну, в общем, да.
Можно поделить палку-о-двух концах на две обычных. Улыбка
В принципе, "ПараметрыДляПриемника" тоже хорошо, но мне почему-то сложнее для восприятия, чем прокси-объекты.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #202 - 03. Июля 2008 :: 10:24
Печать  
Вот кстати неплохая ссылка http://sb-news.net/sqlite.php SQLite по-русски
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #203 - 03. Июля 2008 :: 10:25
Печать  
kms, поделив палку о двух концах на две, получишь две палки о двух концах Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #204 - 04. Июля 2008 :: 10:03
Печать  
orefkov писал(а) 03. Июля 2008 :: 10:25:
kms, поделив палку о двух концах на две, получишь две палки о двух концах Улыбка

Саня, я прекрасно это понимаю.
Более того, у меня уже есть много разных палко о двух концах, с которыми я не знаю, что делать. Улыбка

Я просто хотел сказать, что и с ПараметрамиДляПриемника может случиться то же самое.
Сегодня при передаче в ИТ мы хотим передать строку - указание для группировки.
Завтра появится плоская группировка ИТ - мы будем менять формат этой строки?

При этом версия ИТ может быть не готова принять такую строку в новом формате.
С прокси-объектами все это обработать проще.
Ну, по крайней мере - мне так кажется, на данный момент. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #205 - 04. Июля 2008 :: 11:45
Печать  
kms писал(а) 04. Июля 2008 :: 10:03:
orefkov писал(а) 03. Июля 2008 :: 10:25:
kms, поделив палку о двух концах на две, получишь две палки о двух концах Улыбка

Саня, я прекрасно это понимаю.
Более того, у меня уже есть много разных палко о двух концах, с которыми я не знаю, что делать. Улыбка

Я просто хотел сказать, что и с ПараметрамиДляПриемника может случиться то же самое.
Сегодня при передаче в ИТ мы хотим передать строку - указание для группировки.
Завтра появится плоская группировка ИТ - мы будем менять формат этой строки?

При этом версия ИТ может быть не готова принять такую строку в новом формате.
С прокси-объектами все это обработать проще.
Ну, по крайней мере - мне так кажется, на данный момент. Улыбка


Ну, кто мешает в ПараметрыДляПриемника передать не строку, а еще какой-либо объект?
Кто мешает в Приемник передать не ИТ, а ПроксиОбъект, которому установили принимающую ИТ и способ приемки?
Моей компоненте по-барабану же, лишь бы Приемник кастился в ISQLiteResultLoader.
Аналогично будет и для загрузки чего угодно в таблицу SQLite.
Просто я пока думаю над интерфейсом, какимнить ITableDataSource.
И потом никто не запретит в 1С++ не реализовывать ISQLiteResultLoader непосредственно в ИТ, а например написать объект, реализующий как ISQLiteResultLoader, так и ITableDataSource, отвечающий за загрузку в/выгрузку из ИТ. Как захотите, так и сделаете.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #206 - 04. Июля 2008 :: 11:51
Печать  
Да, и кстати. Что-то никто не просит подключать таблицы журналов расчета.
Никому не нужно?
Или сделать для полноты картины? Я просто их структуру совершенно не знаю.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #207 - 07. Июля 2008 :: 04:28
Печать  
orefkov писал(а) 04. Июля 2008 :: 11:45:
kms писал(а) 04. Июля 2008 :: 10:03:
Я просто хотел сказать, что и с ПараметрамиДляПриемника может случиться то же самое.
Сегодня при передаче в ИТ мы хотим передать строку - указание для группировки.
Завтра появится плоская группировка ИТ - мы будем менять формат этой строки?


Ну, кто мешает в ПараметрыДляПриемника передать не строку, а еще какой-либо объект?
Кто мешает в Приемник передать не ИТ, а ПроксиОбъект, которому установили принимающую ИТ и способ приемки?

Ага, я как раз и подразумевал, что в ПараметрыДляПриемника может быть все, что угодно Улыбка
  

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
Ответ #208 - 07. Июля 2008 :: 04:28
Печать  
orefkov писал(а) 04. Июля 2008 :: 11:51:
Да, и кстати. Что-то никто не просит подключать таблицы журналов расчета.

Конечно, нужно.
Зарплата на больших базах также подтормаживает Улыбка
  

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


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #209 - 07. Июля 2008 :: 05:15
Печать  
artbear писал(а) 07. Июля 2008 :: 04:28:
orefkov писал(а) 04. Июля 2008 :: 11:51:
Да, и кстати. Что-то никто не просит подключать таблицы журналов расчета.

Конечно, нужно.
Зарплата на больших базах также подтормаживает Улыбка

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #210 - 07. Июля 2008 :: 07:59
Печать  
artbear писал(а) 07. Июля 2008 :: 04:28:
orefkov писал(а) 04. Июля 2008 :: 11:51:
Да, и кстати. Что-то никто не просит подключать таблицы журналов расчета.

Конечно, нужно.
Зарплата на больших базах также подтормаживает Улыбка

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



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #211 - 07. Июля 2008 :: 10:46
Печать  
А реально ли сделать "УложитьИТЗ" по анологии с "УложитьТЗ"? И, если у ИТЗ были индексы, то чтоб и в таблице Sqlite они тоже создавались.
Но, т.к. ТЗ преобразуется при укладке в зависимости от имён колонок, а у ИТЗ нет заголовков, то, вероятно, надо будет добавлять входные параметры.
Хотелку оформлять или не стОит?
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #212 - 08. Июля 2008 :: 11:25
Печать  
Вроде как сделал поставщика данных ТП для SQLite.
Дока пока не готова.
Есть два примера использования:
1. В ТиСе показ документов по графе отборов Контрагент
2. В ТиСе показ справочника товаров с иерархией и остатками на складах

Все в архиве.
Просьба потестить.
  

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


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #213 - 08. Июля 2008 :: 11:59
Печать  
orefkov писал(а) 08. Июля 2008 :: 11:25:
Просьба потестить.

Переход в конец журнала при нажатии End на клавиатуре выполняется очень долго.
При этом потребление оперативы вырастает на ~60М (в моей базе), одно из ядер процессора нагружается на 100%, из таблиц DBF почти ничего не читается.
Съеденная оператива не отдается после позиционирования в конец списка, а отдается только при закрытии ТП.
Изменено:
или переходе в начало списка
  

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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #214 - 08. Июля 2008 :: 12:08
Печать  
orefkov писал(а) 08. Июля 2008 :: 11:25:
Вроде как сделал поставщика данных ТП для SQLite.
Дока пока не готова.
Есть два примера использования:
1. В ТиСе показ документов по графе отборов Контрагент
2. В ТиСе показ справочника товаров с иерархией и остатками на складах

Все в архиве.
Просьба потестить.


А в чем отличие от варианта Steban?
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #215 - 08. Июля 2008 :: 12:22
Печать  
steban писал(а) 08. Июля 2008 :: 11:59:
Съеденная оператива не отдается после позиционирования в конец списка, а отдается только при закрытии ТП.

Хм...
А движок SQLite (или 1sqlite) кэширует данные из виртуальных таблиц?
  

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
Ответ #216 - 08. Июля 2008 :: 12:30
Печать  
steban писал(а) 08. Июля 2008 :: 11:59:
из таблиц DBF почти ничего не читается.

Это при локальном доступе к базе.
При сетевом доступе еще как читается.
Похоже, что поставщик читает весь журнал для нахождения последней записи.
  

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


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #217 - 08. Июля 2008 :: 12:38
Печать  
orefkov

Саня, да, есть такое дело, о котором говорит Степан.
У меня, правда, память освобождается при переходе в начало (Home).
Плюс промотка снизу вверх (от конца в начало) постоянно увеличивает working set - плохо.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #218 - 08. Июля 2008 :: 12:45
Печать  
orefkov

И просьба у меня будет, разобраться бы.
Как диагностировать такое дело, подскажи:

Код
Выбрать все
	Пост.УстановитьТекстЗапроса("
	|SELECT
	|Ж.iddoc [key]
	|,Ж.iddoc [Док :Документ]
	|,Ж.iddocdef [Док_вид :ВидДокументаПредставление]
	|,Ж.DocNo Номер
	|,Ж.date [Дата :Дата]
	|,Ж.time [Время :Время]
	|from Журнал Ж
//	|where 1=1
	|", "key", "[Док :Документ]");
 



Если комментарий не снять, ошибку дает:
Код
Выбрать все
Пост.УстановитьТекстЗапроса("
{Y:\1SQLITE_DP\ТП_ТИС_ДОКИПОГРАФЕОТБОРАКОНТРАГЕНТ.ERT(34)}: near "and": syntax error
 


Откуда берется and?
И может быть при включенной отладке выдавать полный текст запроса в окошко сообщений для ясности?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #219 - 08. Июля 2008 :: 12:52
Печать  
Комментарии к рисунку:
1. открылась форма с ТП, нажали End
2. нажали home
3. нажали End
4. нажали Home
5. нажали End
6. закрыли форму.

Замерялось в монопольном режиме. База на локальном винте.
может поможет в разборках.
  

sqlitedptrace.GIF ( 50 KB | Загрузки )
sqlitedptrace.GIF

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


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #220 - 08. Июля 2008 :: 13:42
Печать  
У меня тоже на ТП_ТиС_СправочникНоменклатураСИерархиейИОстатками.ert зависает.
Открываю обработку.
Несколько раз перехожу по иерархии.
100% загрузка проца.

ЗЫ... только что открыл, ничего не делал - пришлось переключиться на другое окно. Возвращаюсь в 1С - висит, 100%
  
Наверх
ICQ  
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #221 - 08. Июля 2008 :: 14:49
Печать  
kms писал(а) 08. Июля 2008 :: 12:45:
orefkov

И просьба у меня будет, разобраться бы.
Как диагностировать такое дело, подскажи:

Код
Выбрать все
	Пост.УстановитьТекстЗапроса("
	|SELECT
	|Ж.iddoc [key]
	|,Ж.iddoc [Док :Документ]
	|,Ж.iddocdef [Док_вид :ВидДокументаПредставление]
	|,Ж.DocNo Номер
	|,Ж.date [Дата :Дата]
	|,Ж.time [Время :Время]
	|from Журнал Ж
//	|where 1=1
	|", "key", "[Док :Документ]");
 



Если комментарий не снять, ошибку дает:
Код
Выбрать все
Пост.УстановитьТекстЗапроса("
{Y:\1SQLITE_DP\ТП_ТИС_ДОКИПОГРАФЕОТБОРАКОНТРАГЕНТ.ERT(34)}: near "and": syntax error
 


Откуда берется and?
И может быть при включенной отладке выдавать полный текст запроса в окошко сообщений для ясности?


Текст исходного запроса не анализируется. Просто добавляются условия по ключевому полю через and.
Для диагностики есть метод Отладка(КакиеЗапросыОтлаживать, Режим)
Вызывать перед УстановитьТекстЗапроса

В поставщике могут подготавливаться 5-6 запросов. Для каких запросов включить отладку, задается параметром КакиеЗапросыОтлаживать, суммой чисел
1 - запрос на получение первых записей
2 - запрос на получение последних записей
4 - запрос на получение следующих записей
8 - запрос на получение предыдущих записей
16 - запрос на обновление текущей строки
32 - запрос на поиск записи по ид-полю
те написав
пост.Отладка(7, 1)
отладим первые три запроса.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #222 - 08. Июля 2008 :: 15:08
Печать  
А, понятно, спасибо.
Я по инерции ставил "пост.Отладка(1)".
  

De quelle planète es-tu?
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #223 - 09. Июля 2008 :: 07:46
Печать  
Ну чтож, нашел кучу багов. Пофиксил. Тестируем поставщика дальше?

Вопрос к знатокам поставщиков. Есть у ТП такой метод, как ТекущаяСтрока. Если пользователь пишет
тп.ТекущаяСтрока = выбЭлемент
мне надо по переданному значению определить ключ нужной записи.
Сейчас это делается убого, и может привести к full-scan'у.

Например, такой запрос (вывод справочника с иерархией):
Код
Выбрать все
|select
|id [Номенклатура :Справочник.Номенклатура],
|code [Код],
|descr [Наименование],
|case when isfolder = 2 then '' else '+' end [ЭтоГруппа],
|Артикул,
|БазоваяЕдиница [БазоваяЕдиница :Справочник.Единицы],
|idx_parentid_isfolder_descr key
|from Справочник_Номенклатура Н
|where parentid = @parentid
 


Пользователь задает ид-поле - [Номенклатура :Справочник.Номенклатура].

То есть возникает задача - если мне передали id, надо вычислить для него idx_parentid_isfolder_descr.
Сейчас это решается так:
выполняется запрос
Код
Выбрать все
|select
|id [Номенклатура :Справочник.Номенклатура],
|code [Код],
|descr [Наименование],
|case when isfolder = 2 then '' else '+' end [ЭтоГруппа],
|Артикул,
|БазоваяЕдиница [БазоваяЕдиница :Справочник.Единицы],
|idx_parentid_isfolder_descr key
|from Справочник_Номенклатура Н
|where parentid = @parentid and [Номенклатура :Справочник.Номенклатура] = @idvalue
|order by key limit 1
 


Как видите, не самый оптимальный вариант, оптимальней было бы

Код
Выбрать все
|select idx_parentid_isfolder_descr
|from Справочник_Номенклатура Н
|where id = @idvalue limit 1
 



В примере с документами по графе отбора ситуация еще хуже.

Я совершенно не представляю, как автоматом из исходного текста запроса и названия ИдПоля сгенерить оптимальный запрос для получения ключа порядка по значению ИдПоля.
Может, при указании ИдПоля задавать еще и запрос для нахождения ключа по ИдПолю?
  

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #224 - 09. Июля 2008 :: 07:54
Печать  
Кстати, для Кирюхи.
Таки нашел я оптимальный вариант запроса для SQLite, для выборки порции данных от ключа, если в индексе два и более полей.
Вот простой пример, из него все будет понятно:
Код
Выбрать все
--create table test(f1, f2, f3)
--create index on_test on test(f1, f2)
--insert into test values(1, 1, 2)
--insert into test values(1, 2, 8)
--insert into test values(2, 1, 15)

select * from (select * from test where f1 = 1 and f2>1 order by f1, f2) t
union all
select * from (select * from test where f1 > 1 order by f1, f2) t
limit 2
 


Генерится почти идеальный план.
  
Наверх
 
IP записан
 
Phoenix
Senior Member
****
Отсутствует


itpath.ru

Сообщений: 398
Местоположение: Москва
Зарегистрирован: 15. Июня 2006
Пол: Мужской
Re: 1sqlite
Ответ #225 - 09. Июля 2008 :: 07:59
Печать  
Саша, чей-то не смог запустить "Дерево документов" на СКЛ БД, это нормально?
ошибку могу привести.
  

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #226 - 09. Июля 2008 :: 08:02
Печать  
Phoenix писал(а) 09. Июля 2008 :: 07:59:
Саша, чей-то не смог запустить "Дерево документов" на СКЛ БД, это нормально?
ошибку могу привести.

Это пример только для ДБФ-баз.
Для скл баз надо его переделывать под 1С++.
Вернее, надо скачать с этого же форума, когда-то я выкладывал вариант для 1С++ и скл-баз.
Ищи "Граф подчиненности документов"
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #227 - 09. Июля 2008 :: 08:17
Печать  
О, хотелось бы обратить ваше внимание на такую замечательную агрегатную функцию в SQLite, как group_concat.
Посмотрите в примере ТП со справочником товаров, как изящно получается строка с разбивкой остатков по складам.
Код
Выбрать все
запрОстатки.Подготовить("
|select
|	group_concat(rtrim(Склады.descr) || ': ' || Остатки.Кол, '; ') [Остаток]
|from
|(select
|	Склад,
|	sum(Количество) Кол
|from РегистрИтоги_ОстаткиТМЦ Итоги
|where period = :ДатаТА and Номенклатура = @goods
|group by Склад) Остатки
|left join Справочник_Склады Склады on Остатки.Склад = Склады.id
|");
....

запрОстатки.УстановитьПараметр("@goods", тп.ТекущаяСтрока);
стрИнфо = "Остатки по складам: " + запрОстатки.Выполнить(0);

 

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


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #228 - 09. Июля 2008 :: 10:20
Печать  
Саша, а можно тогда уж еще небольшой ликбез.

Цитата:
--create table test(f1, f2, f3)
--create index on_test1 on test(f1)
--create index on_test2 on test(f2)
--create index on_test3 on test(f3)
--insert into test values(1, 1, 2)
--insert into test values(1, 2, 8)
--insert into test values(2, 1, 15)


Как эффективно строить выборки с участием нескольких индексов?

Цитата:
select * from test where f1 = 1 and f2 = 1 order by f3
select * from test where f1 = 1 or f2 = 1 order by f3
select * from test where f1 < 1 and f2 > 1 order by f3
select * from test where f1 < 1 or f2 > 1 order by f3


"or" надо переписывать как union?
А "and" и так нормально ляжет на индексы?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

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

Цитата:
--create table test(f1, f2, f3)
--create index on_test1 on test(f1)
--create index on_test2 on test(f2)
--create index on_test3 on test(f3)
--insert into test values(1, 1, 2)
--insert into test values(1, 2, 8)
--insert into test values(2, 1, 15)


Как эффективно строить выборки с участием нескольких индексов?

Цитата:
select * from test where f1 = 1 and f2 = 1 order by f3
select * from test where f1 = 1 or f2 = 1 order by f3
select * from test where f1 < 1 and f2 > 1 order by f3
select * from test where f1 < 1 or f2 > 1 order by f3


"or" надо переписывать как union?
А "and" и так нормально ляжет на индексы?

Начнем с того, что SQLite, как и MSSQL делает проход по одной таблице ТОЛЬКО максимум по одному индексу.
То есть если хотим заюзать несколько индексов, то надо соотвественно, делать несколько подзапросов, организуя их так, чтобы в каждом подзапросе для таблицы участвовало только одно условие, попадающее в индекс.
И объединять результаты подзапросов через union, union all, intersect, и разные join
По порядку

запрос
Код
Выбрать все
select * from test where f1 = 1 and f2 = 1 order by f3
 


План выполнения:
Код
Выбрать все
Использование таблиц
order	from	detail
0	0	TABLE test WITH INDEX on_test2
 


Поэксперементировал и преобразовал:
Код
Выбрать все
select *
from test left join
(
   select rowid from test where f1 = 1
   intersect
   select rowid from test where f2 = 1
) tConstr on test.rowid = tConstr.rowid
where tConstr.rowid is not null
order by f3
 



План:
Код
Выбрать все
Использование таблиц
order	from	detail
0	0	TABLE test WITH INDEX on_test1
0	0	TABLE test WITH INDEX on_test2
0	0	TABLE test WITH INDEX on_test3 ORDER BY
1	1	TABLE  AS tConstr
 


Естественно, если посмотреть детально программу выполнения видно, что создаются временные таблицы для операций intersect, собственно, обслуживание самого intersect. Так что на небольших таблицах или плохих условиях это наоборот даст проигрыш.

Код
Выбрать все
select * from test where f1 = 1 or f2 = 1 order by f3
План:
Использование таблиц
order	from	detail
0	0	TABLE test WITH INDEX on_test3 ORDER BY
 



Переделываем
Код
Выбрать все
select *
from test left join
(
   select rowid from test where f1 = 1
   union
   select rowid from test where f2 = 1
) tConstr on test.rowid = tConstr.rowid
where tConstr.rowid is not null
order by f3
План:
Использование таблиц
order	from	detail
0	0	TABLE test WITH INDEX on_test1
0	0	TABLE test WITH INDEX on_test2
0	0	TABLE test WITH INDEX on_test3 ORDER BY
1	1	TABLE  AS tConstr
 



те принцип примерно понятен. and заменяем на intersect, or заменяем на union.
Для данных примеров пришлось извратится с запросом, чтобы попасть еще и в order by.
Если использовать inner join, SQLite почему-то идет не по on_test3, а по primary key (rowid), и сортирует во временной таблице.

Если бы в запросах не было order by f3, то было бы проще:
Код
Выбрать все
select * from test where f1 = 1 and f2 = 1
 


заменилось бы на

select * from test where f1 = 1
intersect
select * from test where f2 = 1

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #230 - 09. Июля 2008 :: 12:12
Печать  
Также добавлю, что по слухам, таинственная Rushmore в Фоксе работает именно так.
Также на http://www.sqlite.org/cvstrac/wiki?p=PerformanceTuning пишут, что Postgree также сам оптимизирует выполнение по такому принципу.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #231 - 09. Июля 2008 :: 12:50
Печать  
orefkov писал(а) 09. Июля 2008 :: 07:54:
Кстати, для Кирюхи.
Таки нашел я оптимальный вариант запроса для SQLite, для выборки порции данных от ключа, если в индексе два и более полей.
Вот простой пример, из него все будет понятно:
Код
Выбрать все
--create table test(f1, f2, f3)
--create index on_test on test(f1, f2)
--insert into test values(1, 1, 2)
--insert into test values(1, 2, 8)
--insert into test values(2, 1, 15)

select * from (select * from test where f1 = 1 and f2>1 order by f1, f2) t
union all
select * from (select * from test where f1 > 1 order by f1, f2) t
limit 2
 


Генерится почти идеальный план.

Весьма остроумно Улыбка
***********
А что касается использования сразу 2-х индексов - это на мой взгляд весьма сомнительно.
Вместо одной выборки делается две.
Предположим - журнал документов с двумя индексами - "вид журнала" и второй - iddoc.
Отбор Вид="Реализация" и id='  123   '
Представляю, что получится, когда вместо  отбора по iddoc в запросе будут выбираться
все документы Реализации,  потом создаваться временная таблица, потом выбираться iddoc
а потом еще и intersect.

P.S>Кстати как  SQLLite делать подсказки, какой индекс использовать(оптимизировать ли выражение в where)?
Или не использовать ?
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #232 - 09. Июля 2008 :: 13:27
Печать  
kiruha писал(а) 09. Июля 2008 :: 12:50:
А что касается использования сразу 2-х индексов - это на мой взгляд весьма сомнительно.
Вместо одной выборки делается две.
Предположим - журнал документов с двумя индексами - "вид журнала" и второй - iddoc.
Отбор Вид="Реализация" и id='  123   '
Представляю, что получится, когда вместо  отбора по iddoc в запросе будут выбираться
все документы Реализации,  потом создаваться временная таблица, потом выбираться iddoc
а потом еще и intersect.


Когда я первый раз описывал эту технику, то сразу же оговорил, что применять ее следует с очень большой оглядкой, тщательно все взвесив. Применимо скорее всего для случаев, когда для обоих индексов средняя селективность.

Цитата:
P.S>Кстати как  SQLLite делать подсказки, какой индекс использовать(оптимизировать ли выражение в where)?
Или не использовать ?


Указать хинт, какой из индексов использовать при возможном выборе из нескольких - нельзя.
Для родных таблиц SQLite может помочь команда ANALYZE - строит статистику по индексам.
Зато можно ограничить количество выбираемых индексов с помощью значка '+' в условии перед именем поля, которое попадает в индекс, но не желательно к использованию.

Предположим - журнал документов с двумя индексами - "вид журнала" и второй - iddoc.
Отбор Вид="Реализация" и id='  123   '
Чтобы не заствлять SQLite мучительно думать, какой индекс выбрать (да еще и ошибится при этом), нужно написать
where +Вид='Реализация' and id='  123   '

Дело в том, что +Вид для SQLite уже не название колонки таблицы, а выражение. А для выражений он индексы не использует.
Модуль dbeng при выборе индексов выбирает тот, который закрывает больше условий. В данном случае, оба индекса закрывают по одному условию, но так как индекс по ID по списку раньше чем по виду журнала, выберется индекс по ID.
Также я хочу помимо количества закрываемых условий при использовании индекса учитывать еще и "процент заполненности".
Те индекс по iddoc - длина 1 поле, используется 100% индекса.
индекс по виду журнала - idjournal,date,time,iddoc - длина 4 поля, используется 25% индекса.
Нужно только формулу придумать, как оценить все вместе - и количество закрываемых условий, и их вид (=, >, <), и процент использованных полей из индекса, и попадание индекса в сортировку.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #233 - 09. Июля 2008 :: 13:53
Печать  
Про "+" очень полезно.
Жаль что автоматически нельзя - в принципе для ссылочных полей можно было бы
делать приблизительную оценку по количеству строк в таблице, к которой ссылка относится.
orefkov писал(а) 09. Июля 2008 :: 13:27:
...
Когда я первый раз описывал эту технику, то сразу же оговорил, что применять ее следует с очень большой оглядкой, тщательно все взвесив. Применимо скорее всего для случаев, когда для обоих индексов средняя селективность.


Ну предположим что в журнале есть еще поле и индекс "Контрагент"
10 000 строк в 1SJourn, 1000 строк на одного контрагента, 1000 строк на "Реализация"
в пересечении "Реализация"\"Контрагент" 100 строк.
Не вижу смысла, в чем выгода 2-х выборок и их соединения , когда можно
сделать 1-у выборку и потом отобрать у результирующего набора нужные строки - операция проще соединения -
один проход - итого на одну выборку меньше, не считая прочих затрат.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #234 - 09. Июля 2008 :: 17:14
Печать  
orefkov писал(а) 09. Июля 2008 :: 07:46:
Я совершенно не представляю, как автоматом из исходного текста запроса и названия ИдПоля сгенерить оптимальный запрос для получения ключа порядка по значению ИдПоля.
Может, при указании ИдПоля задавать еще и запрос для нахождения ключа по ИдПолю?

Можно ввести некоторые ограничения на текст запроса. Например, потребовать чтобы запрос был вида:
Код
Выбрать все
SELECT поля
FROM таблицы
[опционально соединения]
[опционально условия WHERE]
 


Запретить использовать HAVING, GROUP BY и т.п.
UNION и INTERSECT только в подзапросах.
При таких ограничениях вполне можно разобрать текст запроса при помощи PCRE
Готов помочь с PCRE.
только исходников с поставщиком на гугль-код нету
  

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
Ответ #235 - 10. Июля 2008 :: 12:37
Печать  
steban писал(а) 09. Июля 2008 :: 17:14:
только исходников с поставщиком на гугль-код нету

Так что-то никто не отписывается, стал ли журнал нормально листаться, есть ли скачки по памяти при листании, справочник не зависает ли, обновление работает нормально или нет. Так что я пока не понимаю, коммитить или нет.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #236 - 10. Июля 2008 :: 12:42
Печать  
orefkov писал(а) 10. Июля 2008 :: 12:37:
steban писал(а) 09. Июля 2008 :: 17:14:
только исходников с поставщиком на гугль-код нету

Так что-то никто не отписывается, стал ли журнал нормально листаться, есть ли скачки по памяти при листании, справочник не зависает ли, обновление работает нормально или нет. Так что я пока не понимаю, коммитить или нет.

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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #237 - 10. Июля 2008 :: 12:44
Печать  
Chieftain писал(а) 10. Июля 2008 :: 12:42:
orefkov писал(а) 10. Июля 2008 :: 12:37:
steban писал(а) 09. Июля 2008 :: 17:14:
только исходников с поставщиком на гугль-код нету

Так что-то никто не отписывается, стал ли журнал нормально листаться, есть ли скачки по памяти при листании, справочник не зависает ли, обновление работает нормально или нет. Так что я пока не понимаю, коммитить или нет.

По справочнику на первый взгляд все ОК.
Есть один вопрос - быстый поиск ты не подключал видимо?

Нет еще. Думаю над ним.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #238 - 10. Июля 2008 :: 15:46
Печать  
orefkov писал(а) 10. Июля 2008 :: 12:37:
steban писал(а) 09. Июля 2008 :: 17:14:
только исходников с поставщиком на гугль-код нету

Так что-то никто не отписывается, стал ли журнал нормально листаться, есть ли скачки по памяти при листании, справочник не зависает ли, обновление работает нормально или нет. Так что я пока не понимаю, коммитить или нет.

Дык повода не было.
Все идеально, пока нечего сказать.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #239 - 10. Июля 2008 :: 17:01
Печать  
orefkov

Саша, а может быть получится сделать единый интерфейс выгрузки для большинства случаев?

ISQLiteResultLoader не универсален в силу использования sqlite3*, который в других задачах не нужен (да и сейчас не используется).
Плюс нет возможности ограничить количество строк.
И нет возможности для возврата ошибки.

Я вижу несколько по-другому:
Интерфейс1: построчный

* init
1. Источник спрашивает: приемник, у меня есть N колонок, X строк, принимаешь?
2. Приемник возвращает код/отсутствие ошибки; да, могу принять N1 колонок, X1 строк (N1 <= N, X1 <= X).

* setColumn (повторяется N1 раз)
3. Источник: добавляю колонку IDX, имя NAME, тип CType
4. Приемник: возвращает код ошибки

* addValues (повторяется X1 раз)
5. Источник: добавляю строку из N колонок, значения CValue**
6. Приемник: код ошибки

* getLastError()
предоставляется приемником после возврата кода ошибки.

виртуальный деструктор ИМХО не нужно включать в интрерфейс.
лучше AddRef() / Release().

CString не хотелось бы использовать.

Все функции имеют спецификацию throw()

Короче:
Код
Выбрать все
	ULONG AddRef();
	ULONG Release();

	// Подготовка приемника к приему результатов
	// Должен возвращать количество колонок, которое готов принять приемник.
	virtual HRESULT init(DWORD& colCount, DWORD& rowCount) = 0;

	// Добавление колонки в результат запроса
	virtual HRESULT setColumn(DWORD colIdx, LPCSTR colName, const CType& type) = 0;

	// Добавление строки в результат запроса.
	// Параметр - массив указателей на CValue, количеством равный количеству
	// добавленных колонок
	virtual HRESULT addValues(DWORD colCount, CValue** ppValues) = 0;
		количество колонок мне нужно, чтобы упростить реализацию интерфейса - Саша, думаю у тебя будут возражения, может быть я здесь и не прав

	// Присвоение возвращаемого значения
	virtual HRESULT assignRetValue(CValue& retVal) = 0;

		// Ошибка
		virtual LPCSTR getLastError() = 0;
 


« Последняя редакция: 10. Июля 2008 :: 18:11 - kms »  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #240 - 10. Июля 2008 :: 17:12
Печать  
А то может быть и забить стандартный QueryInterface сразу в VT, чтобы место под солнцем занять.
Короче, сделать, наконец, нормальные наследники от IUnknown и дело с концом?
И пусть это не COM, и по прежнему CValue и т.п.

Меня, если честно, весь этот rtti в таких объемах прилично напрягает.
Привыкаешь так писать, а для облико морале это не здорово.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #241 - 10. Июля 2008 :: 19:17
Печать  
В-целом то я согласен с тобой.
Есть частности - например, при выгрузке результата запроса количества строк я не знаю.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #242 - 10. Июля 2008 :: 22:16
Печать  
[quote author=orefkov link=1214205575/240#241 date=1215717470]В-целом то я согласен с тобой.
Есть частности - например, при выгрузке результата запроса количества строк я не знаю.[/quote]
Ага, понял. Тогда вот так пока:
[code]
     // источник может передавать 0, если количество не определено
     // приемник может возвращать 0, если ограничений нет
     // если приемник реально не может принять данные, пусть возвращает ошибку
     virtual HRESULT ldrInit(DWORD& nColCount, DWORD& nRowCount) throw() = 0;
[/code]

Пошел пока путем максимального упрощения, чтобы понять чего не хватает.
Понял пока вот что:
- "ПараметрыДляПриемника" - так и не захотелось использовать.
Вижу, у тебя используется для параметризации очистки, но в общем случае у меня получается параметров больше.
Например, я хочу загружать данные в строку или колонку ТЗ, при этом могу обрезать исходные данные до одной строки, а могу слить все строки в одну - и т.д.
Короче, прокси-объекты в качестве кастомизированных приемников представляются предпочтительными.

- setColumn упростил в пользу AddColumn - применения colIdx не нашел.

- Вот что хотел спросить у тебя - assignRetValue - тоже не вижу применения.
У меня все приемники - это живые контексты, после выгрузки - это контексты с данными.
Нужен ли будет assignRetValue?

P.S.
Ну, наверняка чего-то будет не хватать, вот жду этого момента. :)
На выгрузке из строки ИТ в вектор пока пожеланий не проявилось.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #243 - 11. Июля 2008 :: 02:59
Печать  
[quote author=kms link=1214205575/240#242 date=1215728213]
Ну, наверняка чего-то будет не хватать, вот жду этого момента. :)
На выгрузке из строки ИТ в вектор пока пожеланий не проявилось.[/quote]
ИМХО нужно переделать выгрузку/загрузку из ИТЗ на этот интерфейс, сразу и проверим его правильность :)
  

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


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #244 - 11. Июля 2008 :: 07:32
Печать  
[quote author=artbear link=1214205575/240#243 date=1215745154][quote author=kms link=1214205575/240#242 date=1215728213]
Ну, наверняка чего-то будет не хватать, вот жду этого момента. :)
На выгрузке из строки ИТ в вектор пока пожеланий не проявилось.[/quote]
ИМХО нужно переделать выгрузку/загрузку из ИТЗ на этот интерфейс, сразу и проверим его правильность :)[/quote]
Надеюсь. :)

Надо вот это сделать в полном объеме, http://cvs.alterplast.ru/bugs/show_bug.cgi?id=3979
И интерфейса, видимо, должно быть два: для выгрузки (инициатор источник) и для загрузки (инициатор приемник).
  

De quelle planète es-tu?
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #245 - 11. Июля 2008 :: 07:44
Печать  
[quote author=kms link=1214205575/240#242 date=1215728213][quote author=orefkov link=1214205575/240#241 date=1215717470]В-целом то я согласен с тобой.
Есть частности - например, при выгрузке результата запроса количества строк я не знаю.[/quote]
Ага, понял. Тогда вот так пока:
[code]
     // источник может передавать 0, если количество не определено
     // приемник может возвращать 0, если ограничений нет
     // если приемник реально не может принять данные, пусть возвращает ошибку
     virtual HRESULT ldrInit(DWORD& nColCount, DWORD& nRowCount) throw() = 0;
[/code]

Пошел пока путем максимального упрощения, чтобы понять чего не хватает.
Понял пока вот что:
- "ПараметрыДляПриемника" - так и не захотелось использовать.
Вижу, у тебя используется для параметризации очистки, но в общем случае у меня получается параметров больше.
Например, я хочу загружать данные в строку или колонку ТЗ, при этом могу обрезать исходные данные до одной строки, а могу слить все строки в одну - и т.д.
Короче, прокси-объекты в качестве кастомизированных приемников представляются предпочтительными.

- setColumn упростил в пользу AddColumn - применения colIdx не нашел.

- Вот что хотел спросить у тебя - assignRetValue - тоже не вижу применения.
У меня все приемники - это живые контексты, после выгрузки - это контексты с данными.
Нужен ли будет assignRetValue?

P.S.
Ну, наверняка чего-то будет не хватать, вот жду этого момента. :)
На выгрузке из строки ИТ в вектор пока пожеланий не проявилось.[/quote]

Так, по порядку.

Зависимости текущего интерфейса от sqlite нет - параметр объявлен указателем на предварительно продекларированную структуру sqlite3. Как говорится - не нужен, не используй. А мне для будущего развития может пригодится.

Виртуальный деструктор - ну это я по привычке, gcc любит ворнинги кидать, когда класс с виртуальными функциями не имеет виртуального деструктора.

AddRef/Release тоже ни к чему - мой метод выгрузки нисколько не собирается сохранять ссылки на объект приемник либо удалять его.

Параметры для приемника - ну, тебе не нужны, а мне допустим нужны. Если они есть, то хуже не будет - позволяет реализовывать более гибкие сценарии использования.

Присвоение возвращаемого значения: опять же твой сценарий - это очень частный случай.
Посмотри например у меня IScalarResultLoader.
К тому же какой код проще:
[code]
Приемник = СоздатьПростейшийЗагрузчикВоЧтоТо();
запрос.Выполнить(Приемник);
Результат = Приемник.ПринятыеДанные();
[/code]
или
[code]
Результат = запрос.Выполнить(СоздатьПростейшийЗагрузчикВоЧтоТо());
[/code]?

setColumn vs addColumn
colIdx у меня используется в IVTResultLoader.
Даже если посмотреть общую семантику интерфейса - раз в методе init уже указывается количество колонок, то далее нужен именно set а не add. В первоначальном варианте интерфейса у меня как раз было так - в init количество колонок не указывалось, и был метод addColumn. Однако когда я начал реализовывать загрузчик не в пустую ТЗ, а уже содержашую колонки - вот тут и пришлось изменить интерфейс.

Ограничение количества принимаемых строк - делать в инит имхо неверно - приемник может не знать, сколько строк ему надо выкачать, но должен иметь возможность остановить приемку (например, приемник с какимнить условием типа "Пока общий итог сумм документов меньше 100000").
Я собирался изменить void addValues на BOOL addValues - при возврате FALSE остановить выгрузку.

Вот примерно так.

И такой вопрос
Даже перейдя на IUnknown-ые интерфейсы, остается вопрос перехода от CValue/CBLContext к IUnknown, те тот же rtti и dynamic_cast. Так стоит ли овчинка выделки?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #246 - 11. Июля 2008 :: 08:35
Печать  
[quote author=orefkov link=1214205575/240#245 date=1215762279]
Зависимости текущего интерфейса от sqlite нет - параметр объявлен указателем на предварительно продекларированную структуру sqlite3. Как говорится - не нужен, не используй. А мне для будущего развития может пригодится.
[/quote]
Прости мою дотошность, но я как раз хотел бы понять, каким образом.
Может быть, я тоже забыл какие-то данные добавить, которые могут потом понадобиться.
А интерфейс - есть интерфейс, изменить ведь не получится.

[quote]
AddRef/Release тоже ни к чему - мой метод выгрузки нисколько не собирается сохранять ссылки на объект приемник либо удалять его.
[/quote]
Я понимаю. Это общая часть для других интерфейсов.

[quote]
Параметры для приемника - ну, тебе не нужны, а мне допустим нужны. Если они есть, то хуже не будет - позволяет реализовывать более гибкие сценарии использования.
[/quote]
OK.

[quote]
Присвоение возвращаемого значения: опять же твой сценарий - это очень частный случай.
Посмотри например у меня IScalarResultLoader.
[/quote]
Здесь согласен, спасибо.

[quote]
setColumn vs addColumn
colIdx у меня используется в IVTResultLoader.
Даже если посмотреть общую семантику интерфейса - раз в методе init уже указывается количество колонок, то далее нужен именно set а не add. В первоначальном варианте интерфейса у меня как раз было так - в init количество колонок не указывалось, и был метод addColumn. Однако когда я начал реализовывать загрузчик не в пустую ТЗ, а уже содержашую колонки - вот тут и пришлось изменить интерфейс.
[/quote]
Нет, не соглашусь.
Это частная проблема загрузки в ТЗ, а не основа интерфейса.
Ничто не мешает приемнику сделать счетчик колонок на своей стороне.

Add() и без того обязан передать согласованное число колонок, только Add() обязан сделать это по-порядку, а Set() - это интерфейс типа random access.

[quote]
Ограничение количества принимаемых строк - делать в инит имхо неверно - приемник может не знать, сколько строк ему надо выкачать, но должен иметь возможность остановить приемку (например, приемник с какимнить условием типа "Пока общий итог сумм документов меньше 100000").
Я собирался изменить void addValues на BOOL addValues - при возврате FALSE остановить выгрузку.
[/quote]
Не согласен.
Если приемник знает свои возможности, это может помочь источнику оптимизировать собственные механизмы.
Предположим, для выгрузки одной строки не  нужно кешировать данные размером в 10000.
Возможность останова - это хорошо, но недостаточно.

Кроме того, BOOL - не лучший вариант.
Ибо причина останова может быть как критической (переполнение памяти, ошибка в данных), так и рабочей (наелся суммой).
Первая требует исключения - вторая нет.

[quote]
И такой вопрос
Даже перейдя на IUnknown-ые интерфейсы, остается вопрос перехода от CValue/CBLContext к IUnknown, те тот же rtti и dynamic_cast. Так стоит ли овчинка выделки?[/quote]
Да вот не знаю пока.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #247 - 11. Июля 2008 :: 08:44
Печать  
[quote author=kms link=1214205575/240#246 date=1215765340]
[quote]
И такой вопрос
Даже перейдя на IUnknown-ые интерфейсы, остается вопрос перехода от CValue/CBLContext к IUnknown, те тот же rtti и dynamic_cast. Так стоит ли овчинка выделки?[/quote]
Да вот не знаю пока.[/quote]
ИМХО IUnknown пока не нужно, ведь в дальнейшем при необходимости нам никто не мешает нарастить каркас для этого интерфейса, объединив в каком-то промежуточном прокси-объекте интерфейс IUnknown и наши интерфейсы.
  

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


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #248 - 11. Июля 2008 :: 09:03
Печать  
[quote author=kms link=1214205575/240#246 date=1215765340][quote]
Параметры для приемника - ну, тебе не нужны, а мне допустим нужны. Если они есть, то хуже не будет - позволяет реализовывать более гибкие сценарии использования.
[/quote]
OK.
[/quote]
Только интерфейс перестает быть самодостаточным.

Получив интерфейс некоторого приемника и захотев что-то выгрузить, я не могу быть уверен в результате.
Ибо кроме интерфейса я должен знать и параметры.

Допустим, у меня есть коллекция приемников и я хочу выгрузить последовательно по одной строке результата в каждый.
Не решаемо, ибо к коллекции приемников понадобится еще и коллекция параметров.

Ладно, это видимо уже вопрос идеологии.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #249 - 11. Июля 2008 :: 10:26
Печать  
Да, я подумал еще и во многом с тобой согласился.
С addColumn ты прав.
Действительно, в моей реализации IVTResultLoader::setColumn я полагаюсь на последовательный перебор индекса с выгружающей стороны.
Присвоение значения - спецефическая мулька ВыполнитьЗапрос, и может быть реализована совершенно другим интерфесом, равно как и доп.параметры. Да и вообще я в ВыполнитьЗапрос доп параметры уберу.
Кому надо, чтобы ТЗ или СЗ очищались - пусть предварительно пишут - Очистить(), УдалитьСтроки(), УдалитьВсеЗначения().
Ща накидаю свой вариант интерфейса.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #250 - 11. Июля 2008 :: 10:45
Печать  
orefkov писал(а) 11. Июля 2008 :: 10: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 записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #251 - 11. Июля 2008 :: 11:05
Печать  
Вот допустим примерно так:
Код
Выбрать все
class IInterface
{
public:
	virtual void AddRef() = 0;
	virtual void Release() = 0;
	enum errCodes{
		success,
		memError,
		// Другие базовые ошибки
		firstErrForChilds
	};
};

class IErrorDescription : public IInterface
{
public:
	virtual errCodes lastError(CString& errDescr) throw() = 0;
};

class IValuesDataDestination : public IInterface
{
public:
	enum myErrCodes{
		dontWantMoreData = IInterface::firstErrForChilds,
	};
	enum{
		unLimRows = 0,
	};
	virtual errCodes init(DWORD& colCount, DWORD& rowCount) throw() = 0;
	virtual errCodes addColumn(LPCSTR colName, const CType& type) throw() = 0;
	// Нельзя менять ни адреса в массиве указателей, ни сами значения
	virtual errCodes addValues(CValue const* const* ppVals) throw() = 0;
};

class IValuesDataSource : public IInterface
{
public:
	virtual errCodes dataInfo(DWORD& colCount, DWORD& rowCount) throw() = 0;
	virtual errCodes columnInfo(DWORD colIdx, CString& colName, CType& type) throw() = 0;
	virtual errCodes nextValues(CValue const* const* &ppVals) throw() = 0;
};

class ISQLiteParamModificators : public IInterface
{
	virtual errCodes columnModificator(DWORD colIdx, int& mod) throw() = 0;
};
 



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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #252 - 11. Июля 2008 :: 11:18
Печать  
Тема пересеклась с темой Коллекции в 1С++, поэтому пишу сюда.

kms

Михаил, все-таки мне не нравится твой вариант реализации выгрузки строки ИТЗ в коллекцию Печаль
ИМХО метод интерфейса ldrAddRow / AddValues (CValue** pValues) для оптимизации должен получать уже готовую строку.
А сейчас мы вызываем этот метод столько раз, сколько колонок мы передали.
Каждый раз производится вызов виртуального метода и т.д, мелочь, но неприятно.

Наш интерфейс ИМХО работает с последовательным количеством колонок, они не дробятся, поэтому мы и имеем право выдавать строку целой порцией/массивом, а не поэлементно.

Что скажете?

Саша, я прав насчет целой порции или ты считаешь по другому?

PS я через Н-минут в оффлайн до понедельника уеду, так что продолжайте без меня Улыбка
  

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
Ответ #253 - 11. Июля 2008 :: 11:29
Печать  
Саша, меня интерфейсы почти устраивают.

ОДно но:
Михаил, Саша, а нафига нам коды ошибок вообще?
Я лично нигде, кроме AddValues, не вижу необходимости для них.
Можно ведь вернуть TRUE или FALSE в каждом методе, а для получения точной инфы в случае возврата FALSE можно обратиться к интерфейсу получения данных об ошибке.

Все равно нельзя предугадать заранее все коды ошибок для будущих объектов.
  

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


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #254 - 11. Июля 2008 :: 15:18
Печать  
[quote author=artbear link=1214205575/240#252 date=1215775112]
ИМХО метод интерфейса ldrAddRow / AddValues (CValue** pValues) для оптимизации должен получать уже готовую строку.
А сейчас мы вызываем этот метод столько раз, сколько колонок мы передали.
Каждый раз производится вызов виртуального метода и т.д, мелочь, но неприятно.
[/quote]
Время - это ресурс. Память - это ресурс.
Допустим, для меня они равнозначны.
Как сделать выбор в пользу одного из них?

Мы сейчас разрабатываем построчный интерфейс.
Возможен интерфейс, где данные передаются колонками.
Можно обдумать, но это отдельная тема.

Скажу только, что для ассоциированного вектора построчный интерфейс удобнее, а вот поколоночный требует доп. расхода памяти как на источнике, так и на приемнике.

[quote]
Наш интерфейс ИМХО работает с последовательным количеством колонок, они не дробятся, поэтому мы и имеем право выдавать строку целой порцией/массивом, а не поэлементно.
[/quote]
Я тебе больше скажу.
Можно вообще сразу передавать массив N * M - и всего за 1 вызов виртуального метода. ;)
Только мы еще пытаемся решать задачу ограничения набора данных и вменяемой диагностики ошибок.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #255 - 11. Июля 2008 :: 16:05
Печать  
[quote author=orefkov link=1214205575/240#251 date=1215774343]Обсуждаем дальше.[/quote]

1. Я все же за то, чтобы оставить QueryInterface, как альтернативу dynamic_cast.
Ну, здесь, как ты говоришь, "не нужно - не используй", а накладные расходы пренебрежимо малы.

2. Как я понимаю результат любой операции: это тип и код ошибки.
Поскольку речь идет о межмодульном взаимодействии, не исключено, что мне будут неизвестны все возможные коды ошибок.
Но я должен иметь возможность отличить ситуации:

- отсутствия ошибки (не ошибка)
обработка источником: нормальное продолжение

- добровольного отказа от продолжения (не ошибка)
обработка источником: завершение обработки

- аварийного отказа от продолжения (ошибка).
обработка источником: аварийное завершение (исключение)

В этом плане HRESULT подходит как нельзя лучше: есть общедоступные варианты ошибок, вменяемый S_OK, S_FAIL, к примеру - это будет добровольный отказ.
Можно расширять при необходимости.

Вообще, я бы не искал лучшего, по мне IUnknown и HRESULT - вполне удачны.

3. CValue const * const * - это +1.
Я сам не решился здесь такое написать, чтобы не испугать телезрителей. ;)

4. nextValues(CValue const* const* &ppVals)
В какой момент память ppVals будет освобождаться?

Варианта 2 (мне известных) - либо память выделяет инициатор, либо надо добавить в интерфейс что-то типа done().

5. dataInfo()
Названия, конечно, для интерфейсов, построенных на виртуальных функциях - не так важны.
Но вообще - то, это тоже init() по-сути, ибо осуществляет сброс начальной позиции выборки.

6. Несмотря на п.5 хотелось бы все же, чтобы названия у тебя и у меня были одни и те же.
В этом плане меня смущают, конечно, и AddRef() и Release() (слишком используемы), а функциям-членам я бы все-таки дал какой-то префикс, дабы вероятность коллизий была меньше.

7. Не понял пока прелести выноса GetLastError() в отдельный интерфейс.
Что мы тут выиграем?

8. CString не нравится.
Все реализации, которые у меня встречаются позволяют вернуть без напряга LPCSTR.
Также возможно использование NULL как индикатор отсутствия наименования.

9. CType& - ты уверен, что CType* и NULL для нетипизированных - не будет удобнее?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #256 - 12. Июля 2008 :: 06:47
Печать  
HRESULT - имхо отрыжка COMа.
Мы же пишем в С++, и enum'ы позволят объявить самоописывающийся интерфейс, что бы как раз не было
"Поскольку речь идет о межмодульном взаимодействии, не исключено, что мне будут неизвестны все возможные коды ошибок". Базовые общеупотребительные ошибки объявляются в IInterface, спецефические для интерфейса - в интерфейсе. Правда, очень жаль, что в С++ нельзя отнаследовать enum от enum'а.

GetLastError - ну либо надо ее надо тогда делать в самом базовом интерфейсе, либо отдельным интерфейсом, иначе она будет плодится в каждом интерфейсе. Возвращать LPCSTR имхо моветон. Либо я должен рассчитывать, что вызывающая сторона сразу скопирует строку куданить к себе, либо как-то обеспечивать "живость" этого указателя, причем не имея никакой инфы, а до каких пор этот указатель должен оставаться живым.

const CType& vs const CType* - имхо дело вкуса. Однако стоит заметить, что нетипизированных значений в 1С не бывает, ведь CValue отнаследована от CType. Хотя может быть, ты и прав - это позволит отличить "значения, принимающие тип 0" от "значения, тип которых оставлять как есть".


nextValues(CValue const* const* &ppVals)
Память должна выделятся источником. Освобождаться по done.
Я бы даже наверное переделал так:
Код
Выбрать все
virtual errCodes init(DWORD& cols, DWORD& rows, CValue const* const* &ppVals) = 0;
virtual errCodes nextValues() = 0;
virtual void done() = 0;
 


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


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #257 - 12. Июля 2008 :: 06:51
Печать  
Вобщем, думайте до 01.08.2008, а я в отпуск Улыбка
Поеду пробовать настоящего немецкого пива.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #258 - 12. Июля 2008 :: 09:03
Печать  
ОК.
GetLastError - я просто не был уверен, что одного GetLastError на все интерфейсы хватит (т.е. что GetLastError не должен плодиться).
Но, возможно, это действительно так.

LPCSTR - это не так уж и плохо.
Указатель действителен до любого следующего вызова данного интерфейса (или любого интерфейса объекта для единого GetLastError).
std::string::c_cstr() работает также, а у 1C также работает CValue::Format().

+Да что там - наш интерфейс также гарантирует время жизни указателей и значений, переданных в addValues, только на время выполнения метода.

Зато если я использую у себя в инициаторе не CString, а std::string (к примеру), мне не надо создавать CString, заполнять ее и после этого еще раз копировать в std::string.

orefkov писал(а) 12. Июля 2008 :: 06:51:
Вобщем, думайте до 01.08.2008, а я в отпуск Улыбка
Поеду пробовать настоящего немецкого пива.

Ну, классных те удовольствий колбасных Улыбка
« Последняя редакция: 12. Июля 2008 :: 11:00 - kms »  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #259 - 15. Июля 2008 :: 04:48
Печать  
Михаил, ну что, какой вариант выбираем?

Я пока что предлагаю добавить хотя бы ldrDone, без него, например, не сделаешь нормальную выгрузку в таблицу значений / список значений на форме, т.к. негде вернуть флаг Refresh и обновить элемент после загрузки данных.

Интерфейс источника будем реализовывать в icpp или Сашу подождем?
  

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
Ответ #260 - 15. Июля 2008 :: 06:01
Печать  
ints по функционалу 1sqlite
  

1sqlite.rar ( 0 KB | Загрузки )

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


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: 1sqlite
Ответ #261 - 15. Июля 2008 :: 08:21
Печать  
artbear писал(а) 15. Июля 2008 :: 04:48:
Я пока что предлагаю добавить хотя бы ldrDone, без него, например, не сделаешь нормальную выгрузку в таблицу значений / список значений на форме, т.к. негде вернуть флаг Refresh и обновить элемент после загрузки данных.

Интерфейс источника будем реализовывать в icpp или Сашу подождем?

Артур, я обдумываю эту тему.
Давай пока возьмем небольшой таймаут.

А.
Зачем, говоришь нужен Done в интерфейсе выгрузки?
Может быть, перенести обсуждение в отдельную ветку?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #262 - 15. Июля 2008 :: 08:41
Печать  
Завел новую тему об универсальных интерфейсах загрузки/выгрузки
http://www.1cpp.ru/forum/YaBB.pl?num=1216110955/0#0
Прошу обсуждать их там, а не в этой ветке.
  

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
Ответ #263 - 18. Июля 2008 :: 05:27
Печать  
Видели последние посты hogik-a на инфостарте (особенно самый последний)? Неужели всё так плохо?  Печаль
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #264 - 18. Июля 2008 :: 07:02
Печать  
JohnyDeath писал(а) 18. Июля 2008 :: 05:27:
Видели последние посты hogik-a на инфостарте (особенно самый последний)? Неужели всё так плохо?  Печаль


Исходники sqlLite в открытом доступе. Т.е. в принципе даже если ошибка имеет место -
всегда все можно исправить. Кстати hogik не догоняет как sqlLite делает запросы
- весьма позабавило Улыбка
- между тем автор sqlLite откровенно не заморачивался обработкой запросов -
алгоритм Join у него занимает строк 20 Улыбка
Думаю, что просто основные клиенты не интересуются ни обновлением данных, ни соединением Больших таблиц.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #265 - 18. Июля 2008 :: 07:28
Печать  
Мы тут с Александром ака Chieftain попытались сэмулировать вылет. У нас не получилось!  Улыбка
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #266 - 18. Июля 2008 :: 07:34
Печать  
JohnyDeath писал(а) 18. Июля 2008 :: 07:28:
Мы тут с Александром ака Chieftain попытались сэмулировать вылет. У нас не получилось!  Улыбка



В прошлом году тестировал sqlLite. На тестовой было все ОК.
Решил попробовать в многопользовательском режиме на рабочей базе.
База навернулась.
Грешил на конфликт foxpro и sqllite.
Пост если очень нужно - могу разыскать - но ветки уж очень длинные...
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #267 - 18. Июля 2008 :: 07:46
Печать  
kiruha писал(а) 18. Июля 2008 :: 07:34:
JohnyDeath писал(а) 18. Июля 2008 :: 07:28:
Мы тут с Александром ака Chieftain попытались сэмулировать вылет. У нас не получилось!  Улыбка



В прошлом году тестировал sqlLite. На тестовой было все ОК.
Решил попробовать в многопользовательском режиме на рабочей базе.
База навернулась.
Грешил на конфликт foxpro и sqllite.
Пост если очень нужно - могу разыскать - но ветки уж очень длинные...

Хм... Ну у меня в одной из рабочих баз уже крутится, правда там не особо много используется.
Запросы к справочнику истории наценок по группам товаров для расчета цен, запросы к документам - определение параметров ценовых соглашений по контрагентам.
Пока что косяков не обнаружил, но в базе активных зверей только 5-6 человек
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #268 - 18. Июля 2008 :: 07:57
Печать  
Chieftain писал(а) 18. Июля 2008 :: 07:46:
kiruha писал(а) 18. Июля 2008 :: 07:34:
JohnyDeath писал(а) 18. Июля 2008 :: 07:28:
Мы тут с Александром ака Chieftain попытались сэмулировать вылет. У нас не получилось!  Улыбка



В прошлом году тестировал sqlLite. На тестовой было все ОК.
Решил попробовать в многопользовательском режиме на рабочей базе.
База навернулась.
Грешил на конфликт foxpro и sqllite.
Пост если очень нужно - могу разыскать - но ветки уж очень длинные...

Хм... Ну у меня в одной из рабочих баз уже крутится, правда там не особо много используется.
Запросы к справочнику истории наценок по группам товаров для расчета цен, запросы к документам - определение параметров ценовых соглашений по контрагентам.
Пока что косяков не обнаружил, но в базе активных зверей только 5-6 человек


Думаю, что очень сложно Цитата:
Т.е. я брал запрос из http://infostart.ru/blogs/482/. А в другой сессии выполнял чтение, обновление, добавление, удаление записей.

попасть и в запрос и в обновление на небольших объемах.
Естественно, все это требует более тщательной проверки - а Саша в отпуске Печаль
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #269 - 18. Июля 2008 :: 08:02
Печать  
kiruha писал(а) 18. Июля 2008 :: 07:57:
Естественно, все это требует более тщательной проверки - а Саша в отпуске Печаль

Естественно остается только ждать его.
Я попробовал воспроизвести падение в тесте - не получилось, хотя вероятность одновременного выполнения была ооочень высокой, по моему мнению.
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3046
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #270 - 18. Июля 2008 :: 08:50
Печать  
Chieftain писал(а) 18. Июля 2008 :: 08:02:
Я попробовал воспроизвести падение в тесте - не получилось, хотя вероятность одновременного выполнения была ооочень высокой, по моему мнению.

а от версии платформы поведение не может зависеть?
  

1&&2&&3
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #271 - 18. Июля 2008 :: 08:52
Печать  
Chieftain :

Попробуй такой тест :
kiruha писал(а) 30. Октября 2007 :: 14:49:
Подсунул Join почти реальный запрос - вывести движения по товарам с документами
и в соседней колонке показать текущий остаток
Код
Выбрать все
SELECT
РезервыТоваров.Товар,
РезервыТоваров.iddoc,
РезервыТоваров.РезервНаСкладе,
ОстаткиТоваров.ОстатокНаСкладе

FROM
(SELECT
РегРезервы.Товар as Товар,
РегРезервы.iddoc as iddoc,
РегРезервы.РезервТовара as РезервНаСкладе

FROM
     Регистр_РезервыТоваров as РегРезервы
WHERE
   РегРезервы.Date between '20060101' and '20070101'
) as РезервыТоваров

LEFT JOIN
(SELECT
РегОстатки.Товар as Товар,
Sum(РегОстатки.ОстатокТовара) as ОстатокНаСкладе

FROM
     РегистрИтоги_ОстаткиТоваров as РегОстатки
WHERE
    РегОстатки.PERIOD = '20070801'

GROUP BY  РегОстатки.Товар) as ОстаткиТоваров

on ОстаткиТоваров.Товар=РезервыТоваров.Товар 



Время выполнения 55812 мс.
Локально.
Вообщем реализация join все таки не супер.

Хотя выполнение запросов в temp таблицы скорее всего выход (только много лишней ручной писанины,
особенно для динамических запросов)


Т.е. две большие таблицы соединенные через Join без индекса(например два подзапроса, регистры можешь любые взять с измерением номенклатура).
Такие запросы выполняются sqlLite долго. В это же время другим пользователем
выполнять проведение по регистру.

Будут ошибки?
P.S. Время ожидания захвата выставить в 10 сек
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #272 - 18. Июля 2008 :: 10:09
Печать  
kiruha писал(а) 18. Июля 2008 :: 08:52:
Будут ошибки?
P.S. Время ожидания захвата выставить в 10 сек

Попробовал, несколько раз и правда удалось заставить 1С свалиться ((
Но есть один момент: если использовать "vk_sleep_1C", то вылетов не наблюдается

ЗЫ.. интересно, а много дбфников ею пользуются?
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

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

Вот код запроса
Код
Выбрать все
SELECT
	COALESCE(
		ДокСобытиеВстреча.iddoc
		,ДокСобытиеЗвонок.iddoc
		,ДокСобытиеПисьмо.iddoc
		,ДокСобытиеЭлектронноеПисьмо.iddoc
		,ДокСобытие.iddoc) AS ПоставщикДанных_Документ
	,CASE WHEN ЖурналДок.Closed = 1 THEN 2 ELSE
	CASE WHEN ЖурналДок.IsMark = "*" THEN 3 ELSE 1 END END AS ПоставщикДанных_Пикт
	,ЖурналДок.IdDocDef [ПоставщикДанных_ВнутрВидДок :ИмяВида]
	,ЖурналДок.DocNo AS НомерДок
	,ЖурналДок.Date [ДатаДок :Дата]
	,ЖурналДок.Time [ВремяДок :Время]
	,ЖурналДок.IdDocDef [ВидДок :ВидДокументаПредставление]
	,COALESCE(
		ДокСобытиеВстреча.КонтактнаяИнформация
		,ДокСобытиеЗвонок.КонтактнаяИнформация
		,ДокСобытиеПисьмо.КонтактнаяИнформация
		,ДокСобытиеЭлектронноеПисьмо.КонтактнаяИнформация
		,ДокСобытие.КонтактнаяИнформация
	) [КонтактнаяИнформация :Строка.0]
	,COALESCE(
		ДокСобытиеВстреча.Направление
		,ДокСобытиеЗвонок.Направление
		,ДокСобытиеПисьмо.Направление
		,ДокСобытиеЭлектронноеПисьмо.Направление
		,ДокСобытие.Направление
	) [Направление :Перечисление.НаправленияСобытий]
	,COALESCE(
		ДокСобытиеВстреча.Результат
		,ДокСобытиеЗвонок.Результат
		,ДокСобытиеПисьмо.Результат
		,ДокСобытиеЭлектронноеПисьмо.Результат
		,ДокСобытие.Результат
	) [Результат :Строка.999]
	,COALESCE(
		ДокСобытиеВстреча.Содержание
		,ДокСобытиеЗвонок.Содержание
		,ДокСобытиеПисьмо.Содержание
		,ДокСобытиеЭлектронноеПисьмо.Содержание
		,ДокСобытие.Содержание
	) [Содержание :Строка.0]
	,COALESCE(
		ДокСобытиеВстреча.Тема
		,ДокСобытиеЗвонок.Тема
		,ДокСобытиеПисьмо.Тема
		,ДокСобытиеЭлектронноеПисьмо.Тема
		,ДокСобытие.Тема
	) [Тема :Строка.100]
	,COALESCE(
		ДокСобытиеВстреча.Контрагент
		,ДокСобытиеЗвонок.Контрагент
		,ДокСобытиеПисьмо.Контрагент
		,ДокСобытиеЭлектронноеПисьмо.Контрагент
		,ДокСобытие.Контрагент
	) [Контрагент :Справочник.Контрагенты]
	,COALESCE(
		ДокСобытиеВстреча.КонтактноеЛицо
		,ДокСобытиеЗвонок.КонтактноеЛицо
		,ДокСобытиеПисьмо.КонтактноеЛицо
		,ДокСобытиеЭлектронноеПисьмо.КонтактноеЛицо
		,ДокСобытие.КонтактноеЛицо
	) [КонтактноеЛицо :Справочник.КонтактныеЛица]
	,COALESCE(
		ДокСобытиеВстреча.Пользователь
		,ДокСобытиеЗвонок.Пользователь
		,ДокСобытиеПисьмо.Пользователь
		,ДокСобытиеЭлектронноеПисьмо.Пользователь
		,ДокСобытие.Пользователь
	) [Пользователь :Справочник.Пользователи]
	,COALESCE(
		ДокСобытиеВстреча.ПоследнееИзменение
		,ДокСобытиеЗвонок.ПоследнееИзменение
		,ДокСобытиеПисьмо.ПоследнееИзменение
		,ДокСобытиеЭлектронноеПисьмо.ПоследнееИзменение
		,ДокСобытие.ПоследнееИзменение
	) [ПоследнееИзменение :Строка.150]
FROM
	Журнал ЖурналДок

LEFT JOIN
	Документ_СобытиеВстреча ДокСобытиеВстреча
ON
	ДокСобытиеВстреча.iddoc = ЖурналДок.iddoc
LEFT JOIN
	Документ_СобытиеЗвонок ДокСобытиеЗвонок
ON
	ДокСобытиеЗвонок.iddoc = ЖурналДок.iddoc
LEFT JOIN
	Документ_СобытиеПисьмо ДокСобытиеПисьмо
ON
	ДокСобытиеПисьмо.iddoc = ЖурналДок.iddoc
LEFT JOIN
	Документ_СобытиеЭлектронноеПисьмо ДокСобытиеЭлектронноеПисьмо
ON
	ДокСобытиеЭлектронноеПисьмо.iddoc = ЖурналДок.iddoc
LEFT JOIN
	Документ_Событие ДокСобытие
ON
	ДокСобытие.iddoc = ЖурналДок.iddoc
WHERE
(
	(ЖурналДок.iddocdef = :ВидДокумента.СобытиеВстреча)
OR
	(ЖурналДок.iddocdef = :ВидДокумента.СобытиеЗвонок)
OR
	(ЖурналДок.iddocdef = :ВидДокумента.СобытиеПисьмо)
OR
	(ЖурналДок.iddocdef = :ВидДокумента.СобытиеЭлектронноеПисьмо)
OR
	(ЖурналДок.iddocdef = :ВидДокумента.Событие)
)
AND
	ЖурналДок.Date BETWEEN @ДатаНач AND @ДатаКон

AND
	Контрагент = @Контрагент 



а вот ошибка получаемая
Код
Выбрать все
Данные.Документы::СгенерироватьПрямойЗапрос() : ambiguous column name: Контрагент 



Ему что наименование поля "Контрагент" слишком большим кажется или то что я запихнул в него так много реквизитов с разных таблиц?  Смущённый
  

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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #274 - 18. Июля 2008 :: 10:24
Печать  
А чего не через Union?
И проще и быстрее.
  
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #275 - 18. Июля 2008 :: 10:26
Печать  
Цитата:
Ему что наименование поля "Контрагент" слишком большим кажется или то что я запихнул в него так много реквизитов с разных таблиц?

Это он тебе говорит что не знает из какой таблицы контрагентов брать, видимо у тебя в нескольких таблицах есть поле контрагент
  
Наверх
ICQ  
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #276 - 18. Июля 2008 :: 10:26
Печать  
Ему видимо не нравится
Код
Выбрать все
Контрагент = @Контрагент  

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


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1sqlite
Ответ #277 - 18. Июля 2008 :: 10:33
Печать  
kiruha писал(а) 18. Июля 2008 :: 10:24:
А чего не через Union?
И проще и быстрее.

Переделаю Подмигивание сегодня

Nick писал(а) 18. Июля 2008 :: 10:26:
Цитата:
Ему что наименование поля "Контрагент" слишком большим кажется или то что я запихнул в него так много реквизитов с разных таблиц?

Это он тебе говорит что не знает из какой таблицы контрагентов брать, видимо у тебя в нескольких таблицах есть поле контрагент

Так и есть, это общий реквизит без признака отбора, он ведь в каждой таблице тогда существует вот я его и Coalesce сцепляю...

Chieftain писал(а) 18. Июля 2008 :: 10:26:
Ему видимо не нравится
Код
Выбрать все
Контрагент = @Контрагент  



Видимо прийдется при объединении, таблицы уже сразу через WHERE прогонять...

Думай Санька, думай  Подмигивание
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #278 - 18. Июля 2008 :: 10:41
Печать  
vandalsvq писал(а) 18. Июля 2008 :: 10:33:
Так и есть, это общий реквизит без признака отбора, он ведь в каждой таблице тогда существует вот я его и Coalesce сцепляю... 

А отбор поставить и брать из журнала?
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: 1sqlite
Ответ #279 - 18. Июля 2008 :: 10:59
Печать  
Chieftain писал(а) 18. Июля 2008 :: 10:41:
vandalsvq писал(а) 18. Июля 2008 :: 10:33:
Так и есть, это общий реквизит без признака отбора, он ведь в каждой таблице тогда существует вот я его и Coalesce сцепляю...  

А отбор поставить и брать из журнала?

+1 Так будет быстрее всего.
С Union не надо.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1sqlite
Ответ #280 - 18. Июля 2008 :: 11:03
Печать  
kiruha писал(а) 18. Июля 2008 :: 10:59:
Chieftain писал(а) 18. Июля 2008 :: 10:41:
vandalsvq писал(а) 18. Июля 2008 :: 10:33:
Так и есть, это общий реквизит без признака отбора, он ведь в каждой таблице тогда существует вот я его и Coalesce сцепляю...  

А отбор поставить и брать из журнала?

+1 Так будет быстрее всего.


Так и запишем "Отбор можно делать только по реквизитам с признаком "Сортировка = 1"" Улыбка
В общем то так и было, а потом я убрал признак "Сортировка" и построитель (КОП мой) построил мне его таким образом в итоге я получил то что получил.
Вариант решения или никаких отборов без сортировки, либо WHERE и тра-та-та...
Спасибо всем  Подмигивание
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: 1sqlite
Ответ #281 - 25. Июля 2008 :: 13:45
Печать  
Колеги, поделитесь опытом, кто-нибудь внедрял плотно эту компоненту для работы с DBF-базой?
Пробовал делать кое-какие не критичные отчетики, результат положительный.

Есть мысль конкретно отрефакторить свою конфу, от массированного использования OLEDB до сих пор останавливала необходимость использования монопольного режима, а тут вроде можно сделать практически тож самое, ну только возможно с прогирышем в производительности, на который я готов пойти.

Спрашиваю потому, что читал про проблемы при одновременном доступе в многопользовательской среде, но насколько я понял, проблемы не смертельные, тем более я собираюсь использовать SQLite исключительно для извлечяения данных (во вкяком случае пока).
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1sqlite
Ответ #282 - 25. Июля 2008 :: 14:28
Печать  
CaBaT писал(а) 25. Июля 2008 :: 13:45:
Колеги, поделитесь опытом, кто-нибудь внедрял плотно эту компоненту для работы с DBF-базой?
Пробовал делать кое-какие не критичные отчетики, результат положительный.

Есть мысль конкретно отрефакторить свою конфу, от массированного использования OLEDB до сих пор останавливала необходимость использования монопольного режима, а тут вроде можно сделать практически тож самое, ну только возможно с прогирышем в производительности, на который я готов пойти.

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


Я всю конфу на него перевел... однако в эксплуатацию пойдет в августе.... проблема есть, это факт, но в принципе если не очень сложные и долгие (большие) отчеты, шанс нарваться не оч. большой, да и Санька я думаю внесет изменения к моменту твоего релиза... все таки пиво и немецкие колбаски когда нибудь кончаться  Подмигивание
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: 1sqlite
Ответ #283 - 25. Июля 2008 :: 15:29
Печать  
гут, с понедельника и начем! Улыбка
такие перспективы открываются...
  
Наверх
 
IP записан
 
Elm
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 1
Зарегистрирован: 25. Июля 2008
Re: 1sqlite
Ответ #284 - 25. Июля 2008 :: 19:35
Печать  
Решил попоробовать эту компоненту. И вылезла такая странная штука.

Например, есть регистр остатков "ОстаткиТоваров" с измерениями:
ШтрихКод Число(13,0), Док (Документ), Склад, Товар (Справочники);
ресурсом Остаток Число(15).

Соответственно:      
базаДанных.Открыть(":memory:"); запрос_ = базаДанных.НовыйЗапрос();
запрос_.ВыполнитьЗапрос("create virtual table Ост using dbeng(РегистрИтоги.ОстаткиТоваров)");

Делаю запрос через компоненту, например, "SELECT * FROM Ост".
Выгружаю его в таблицу значений "тз".

Получаю тз.ШтрихКод = 2112860527,
при этом в индексе тз.idx_PERIOD_ШтрихКод_Док_Склад_Товар =
"20080201 3000000033135  7F    5S        1      1PK            1".

Т.е. 2112860527 вместо 3000000033135. При непосредственном указании в запросе "Ост.ШтрихКод [ШтрихКод :Число.13.0]" ничего не меняется.

Обычным запросом 1С в поле ШтрихКод получаю 3000000033135. Версия 1sqlite.dll - 1018f.
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #285 - 05. Августа 2008 :: 12:01
Печать  
В 1sqlite есть аналоги функций YEAR,MONTH,DAY ?
Если нет, то просьба добавить Нерешительный
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #286 - 05. Августа 2008 :: 15:30
Печать  
В  sqlite есть: http://www.sqlite.org/lang_datefunc.html
Но там входящая дата должна быть след. вида:
Цитата:
  • YYYY-MM-DD
  • YYYY-MM-DD HH:MM
  • YYYY-MM-DD HH:MM:SS
  • YYYY-MM-DD HH:MM:SS.SSS
  • YYYY-MM-DDTHH:MM
  • YYYY-MM-DDTHH:MM:SS
  • YYYY-MM-DDTHH:MM:SS.SSS
  • HH:MM
  • HH:MM:SS
  • HH:MM:SS.SSS
  • now
  • DDDDDDDDDD

  • Т.к. мы имеем дату в формате: YYYYMMDD , то и выкручиваемся через substr:
    Год - substr(ТвояДата,1,4)
    Month - substr(ТвояДата,5,2)
    ...
    ну или передавать в эти ф-ии следующее:
    (substr(ТвояДата,1,4) || '-' || substr(ТвояДата,5,2) || '-' || substr(ТвояДата,7,2))
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #287 - 05. Августа 2008 :: 17:33
    Печать  
    JohnyDeath, вроде не то  Озадачен

    Надо из поля типа Дата получать Месяц, например условие:
    WHERE MONTH(ДатаПродажи) = 3
    И получить в результате все даты, за все года, только по 3 месяцу.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #288 - 05. Августа 2008 :: 17:46
    Печать  
    Я ж тебе говорю, "напрямую" дату подставлять - не прокатит.
    Попробуй так:
    Код
    Выбрать все
    WHERE substr(ДатаПродажи,5,2) = '03' 
    
    

    или так:
    Код
    Выбрать все
    WHERE substr(ДатаПродажи,5,2) + 0 = 3 
    
    
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #289 - 05. Августа 2008 :: 17:50
    Печать  
    Хотя конечно можно месяц приводить к строке '03':

    WHERE substr(ДатаПродажи,5,2) = '03'
    но неудобно  Нерешительный

    О, с +0 может и удобней Улыбка
    Если у Александра будет возможность добавить эти функции, то будет гораздо удобнее  Подмигивание
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #290 - 05. Августа 2008 :: 17:55
    Печать  
    Если дело только в удобстве, то в исусах у Саши уже есть пометка на схожую тему.
    Я же сейчас  затаил дыхание и жду с нетерпением решение другой проблемы.
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #291 - 06. Августа 2008 :: 07:14
    Печать  
    Падение 1С при таком запросе:
    Код
    Выбрать все
    SELECT Спр.ID as [элемент :Справочник.Номенклатура],Спр.Descr as наименование,Спр.Code as код
    FROM
    	Справочник_Номенклатура as Спр
    WHERE
        Спр.IsFolder = 2 AND (Спр.датасоздания< :ВыбДата1) ORDER BY Спр.DESCR 
    
    


    :ВыбДата1 = ПолучитьПустоеЗначение("Дата");

    при других условиях больше,равно, не равно или <= все ОК.

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #292 - 06. Августа 2008 :: 08:17
    Печать  
    PVR писал(а) 06. Августа 2008 :: 07:14:
    Падение 1С при таком запросе:
    Код
    Выбрать все
    SELECT Спр.ID as [элемент :Справочник.Номенклатура],Спр.Descr as наименование,Спр.Code as код
    FROM
    	Справочник_Номенклатура as Спр
    WHERE
        Спр.IsFolder = 2 AND (Спр.датасоздания< :ВыбДата1) ORDER BY Спр.DESCR 
    
    


    :ВыбДата1 = ПолучитьПустоеЗначение("Дата");

    при других условиях больше,равно, не равно или <= все ОК.

    На условии меньше падает 1С  Круглые глаза

    А как это вообще понимать "ДатаСоздания меньше пустой даты"?
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #293 - 06. Августа 2008 :: 09:12
    Печать  
    Цитата:
    А как это вообще понимать "ДатаСоздания меньше пустой даты"?

    Логически ни как  Подмигивание
    Но пользователь, может придумать любую логику, даже если её нет Смех

    А как указать пустую дату, в тексте запроса?

    Например для FOX так {^0000-00-00}
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #294 - 06. Августа 2008 :: 11:43
    Печать  
    Пустая дата в 1sqlite это 8 пробелов.
    по поводу падения посмотрю.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #295 - 06. Августа 2008 :: 12:30
    Печать  
    orefkov писал(а) 06. Августа 2008 :: 11:43:
    Пустая дата в 1sqlite это 8 пробелов.
    по поводу падения посмотрю.

    Тов. hogik вроде что-то накопал по этому поводу. Не то?
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

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

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


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #297 - 15. Августа 2008 :: 08:26
    Печать  
    JohnyDeath писал(а) 15. Августа 2008 :: 07:40:
    и тут нету "SQLiteDataProvider"  Печаль


    orefkov

    Да, очень бы хотелось.
    И, кстати, Саша, в icpp добавлены пара интерфейсов

    icpp/Source/SQLITE1C/resultloader.h
    - IResultLoader
    - IResultPublisher

    Посмотри, может быть они тебе тоже подойдут.
    Они поддерживаются icpp в ряде объектов.
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #298 - 15. Августа 2008 :: 08:35
    Печать  
    kms писал(а) 15. Августа 2008 :: 08:26:
    JohnyDeath писал(а) 15. Августа 2008 :: 07:40:
    и тут нету "SQLiteDataProvider"  Печаль


    orefkov

    Да, очень бы хотелось.
    И, кстати, Саша, в icpp добавлены пара интерфейсов

    icpp/Source/SQLITE1C/resultloader.h
    - IResultLoader
    - IResultPublisher

    Посмотри, может быть они тебе тоже подойдут.
    Они поддерживаются icpp в ряде объектов.

    Ну я надеюсь всему виной:
    orefkov писал(а) 14. Августа 2008 :: 12:58:
    Вот попробуй решение на скорую руку.
    и это будет исправлено для последней сборки
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #299 - 18. Августа 2008 :: 06:14
    Печать  
    Всё тот же hogik делал Сравнение скорости чтения данных в 1SQLite и DBEng32
    Я его попросил сделать тоже самое с 1sqlite, где отключены вызовы Begin/End ReadSequence движка 1С. Вот его ответ:
    Цитата:
    Время выполнения запроса 2602 секунд.
    Я другого результата и не ожидал. Печаль((

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


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #300 - 18. Августа 2008 :: 06:34
    Печать  
    JohnyDeath писал(а) 18. Августа 2008 :: 06:14:
    Всё тот же hogik делал Сравнение скорости чтения данных в 1SQLite и DBEng32
    Я его попросил сделать тоже самое с 1sqlite, где отключены вызовы Begin/End ReadSequence движка 1С. Вот его ответ:
    Цитата:
    Время выполнения запроса 2602 секунд.
    Я другого результата и не ожидал. Печаль((

    Печаль


    А вот это уже  начинает пугать, если учесть что большая разработка для одной фирмы (которая к слову на ДБФ сидит) делается с помощью данной ВК...
    пошли пробовать пропатченный DBeng...

    П.с. жизнь иногда подкидывает нехилые сюрпризы  Нерешительный
      

    Отхожу от дел. Долго и мучительно.
    Наверх
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #301 - 18. Августа 2008 :: 11:25
    Печать  
    тестил 1sqlite с отключенным "Begin/End ReadSequence" на скорость http://www.1cpp.ru/forum/YaBB.pl?num=1218521958/25#25

    Очень довольный
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #302 - 18. Августа 2008 :: 11:37
    Печать  
    PVR писал(а) 18. Августа 2008 :: 11:25:
    тестил 1sqlite с отключенным "Begin/End ReadSequence" на скорость http://www.1cpp.ru/forum/YaBB.pl?num=1218521958/25#25

    Очень довольный


    но на VFP без доработки по индексам быстрее, за 1год 161 сек. и на VFP 102 сек.  Печаль
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #303 - 18. Августа 2008 :: 11:42
    Печать  
    PVR писал(а) 18. Августа 2008 :: 11:25:
    тестил 1sqlite с отключенным "Begin/End ReadSequence" на скорость http://www.1cpp.ru/forum/YaBB.pl?num=1218521958/25#25

    Очень довольный

    Так не пойдёт. Тестируй так, как это делает hogik http://infostart.ru/profile/2905/blogs/482/
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #304 - 18. Августа 2008 :: 11:51
    Печать  
    JohnyDeath писал(а) 18. Августа 2008 :: 11:42:
    Так не пойдёт. Тестируй так, как это делает hogik http://infostart.ru/profile/2905/blogs/482/


    А смысл есть?
    Если имеешь в виду много юзеров то я на терминале, по сетке мне не имеет смысла тестировать Улыбка

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



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #305 - 18. Августа 2008 :: 12:28
    Печать  
    Цитата:
    Отчет за 3 мес.
    Монопольно, без ReadSequence 11.311
    Монопольно, с ReadSequence 11.510
    Разд.режим, без ReadSequence 16.631
    Разд.режим, с ReadSequence 16.075


    Тестировал на терминалке в базе я и ещё 5 пользователей.
    Отчет за 3 мес.
    Разд.режим, без ReadSequence 54
    Разд.режим, с ReadSequence 36

    Тестировал на терминалке, копия базы, в базе только я (на серваке люди работают  Подмигивание ).
    Отчет за 3 мес.
    Разд.режим, без ReadSequence 45
    Разд.режим, с ReadSequence 40
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #306 - 18. Августа 2008 :: 13:24
    Печать  
    Цитата:
    но на VFP без доработки по индексам быстрее, за 1год 161 сек. и на VFP 102 сек.  Печаль


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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #307 - 19. Августа 2008 :: 07:46
    Печать  
    Хотелось бы посмотреть, что за запросы были.
    То, что фоксу проигрывает по скорости - естественно, я никогда не обещал, что фокс будет всегда обгоняем.
    Кроме того, раз запрос выполняется дольше минуты, как раз бы проверить на ошибку -56.

    (Хотя то, что запрос выполняется дольше минуты, еще не всегда значит, что 1С-ные таблицы будут находится в рамках Begin|EndReadSequence дольше минуты)
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #308 - 19. Августа 2008 :: 09:06
    Печать  
    orefkov писал(а) 19. Августа 2008 :: 07:46:
    Хотелось бы посмотреть, что за запросы были.
    То, что фоксу проигрывает по скорости - естественно, я никогда не обещал, что фокс будет всегда обгоняем.
    Кроме того, раз запрос выполняется дольше минуты, как раз бы проверить на ошибку -56.

    (Хотя то, что запрос выполняется дольше минуты, еще не всегда значит, что 1С-ные таблицы будут находится в рамках Begin|EndReadSequence дольше минуты)


    Отчет для ТиС.

    для проверки ошибки поделитесь ert в котором она воспроизводится.
      

    1.txt ( 12 KB | Загрузки )
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #309 - 21. Августа 2008 :: 07:16
    Печать  
    Как получить ошибку -56 !?

    Версия 1sqlite с провайдером ТП.

    Пытался завалить 1С  Улыбка

    Лок. комп, 3 пользователя:
    1 отчет по остаткам на 1С.
    2 обработка распроведения документов ОтчетККМ.
    3 отчет 1sqlite.

    Во время теста все три ползователя загружали проц Dual  2.4G на 10% Круглые глаза, иногда до 100%, но кратковременно Озадачен
    отчет 1sqlite, выполнялся за 18 мес. время 1094 сек.

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #310 - 21. Августа 2008 :: 07:28
    Печать  
    Читай вот: http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/270#271
    и вот:
    Цитата:
    Для того, что бы увидеть сбой надо проводить тестирования в сети.
    Или хотя бы в “MS Virtual PC”.
    Т.е. надо дать задачам выполняться параллельно. Подмигивание)))))
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #311 - 21. Августа 2008 :: 07:38
    Печать  
    Из прочитанного, вывод!
    Если я пользую 1С в терминалке, Время ожидания захвата по умолчанию, то я эту ошибку не поймаю?
    С какой вероятностью поймать при таких условиях, 1 на 1000000 !?  Улыбка
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #312 - 21. Августа 2008 :: 09:29
    Печать  
    orefkov, может сделать так:
    Цитата:
    7.0.0.3
    Реализована возможность управления использованием методов Begin/EndReadSequence() при выполнении запроса. Если запрос выполняется внутри транзакции, то эти методы исполняются с блокировкой таблиц. Если запрос выполняется вне транзакции, то эти методы не исполняются, даже если они вызываются в 1SQLite. Т.е. если запрос выполняется внутри модуля проведения документа, то эти методы будут исполняться, и запрос будет выполняться быстро. В остальных случаях пользователь может управлять режимом выполнения запроса с помощью функций Начать/Зафиксировать/ОтменитьТранзакцию().


    Или просто свойство ReadSequence 1/0.

    Так гораздо удобнее Подмигивание
      
    Наверх
     
    IP записан
     
    hogik
    Экс-Участник
    *



    Пол: Мужской
    Re: 1sqlite
    Ответ #313 - 23. Августа 2008 :: 19:49
    Печать  
    PVR писал(а) 21. Августа 2008 :: 09:29:
    orefkov, может сделать так:
    Цитата:
    7.0.0.3
    Реализована возможность управления использованием методов Begin/EndReadSequence() при выполнении запроса. Если запрос выполняется внутри транзакции, то эти методы исполняются с блокировкой таблиц. Если запрос выполняется вне транзакции, то эти методы не исполняются, даже если они вызываются в 1SQLite. Т.е. если запрос выполняется внутри модуля проведения документа, то эти методы будут исполняться, и запрос будет выполняться быстро. В остальных случаях пользователь может управлять режимом выполнения запроса с помощью функций Начать/Зафиксировать/ОтменитьТранзакцию().


    Или просто свойство ReadSequence 1/0.

    Так гораздо удобнее Подмигивание


    Можно еще попробовать вот это http://infostart.ru/profile/2905/projects/2418/
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #314 - 23. Августа 2008 :: 21:44
    Печать  
    hogik, это такой огромный подарок, для тех кто на DBF  Очень довольный
    FOX OLE DB теперь работает в монопольном Улыбка
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #315 - 25. Августа 2008 :: 23:58
    Печать  
    hogik писал(а) 23. Августа 2008 :: 19:49:
    Можно еще попробовать вот это http://infostart.ru/profile/2905/projects/2418/

    На dbeng32 8.0.0.2 и 7.0.0.3 (icpp 3.0.1.15, 1c 7.70.027, WinXP) у меня конструкция
    ИТЗ.ДобавитьИндекс("КолВоТоргТочек","Ходка,ТорговаяТочка",1);
    с чего-то стала работать раз в 50 медленнее: вместо 0.5с-0.7с целых ~4с  Нерешительный
      
    Наверх
    www  
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #316 - 26. Августа 2008 :: 05:13
    Печать  
    Djelf писал(а) 25. Августа 2008 :: 23:58:
    hogik писал(а) 23. Августа 2008 :: 19:49:
    Можно еще попробовать вот это http://infostart.ru/profile/2905/projects/2418/

    На dbeng32 8.0.0.2 и 7.0.0.3 (icpp 3.0.1.15, 1c 7.70.027, WinXP) у меня конструкция
    ИТЗ.ДобавитьИндекс("КолВоТоргТочек","Ходка,ТорговаяТочка",1);
    с чего-то стала работать раз в 50 медленнее: вместо 0.5с-0.7с целых ~4с  Нерешительный

    Ты тестировал, уверен что это dbeng32 8.0.0.2 виноват ?
      
    Наверх
     
    IP записан
     
    Nick
    God Member
    *****
    Отсутствует



    Сообщений: 1599
    Местоположение: г.Новокузнецк
    Зарегистрирован: 21. Февраля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #317 - 26. Августа 2008 :: 05:17
    Печать  
    Djelf писал(а) 25. Августа 2008 :: 23:58:
    hogik писал(а) 23. Августа 2008 :: 19:49:
    Можно еще попробовать вот это http://infostart.ru/profile/2905/projects/2418/

    На dbeng32 8.0.0.2 и 7.0.0.3 (icpp 3.0.1.15, 1c 7.70.027, WinXP) у меня конструкция
    ИТЗ.ДобавитьИндекс("КолВоТоргТочек","Ходка,ТорговаяТочка",1);
    с чего-то стала работать раз в 50 медленнее: вместо 0.5с-0.7с целых ~4с  Нерешительный


    Это действительно может быть, только я подозреваю что проблема будет ещё шире, можно попробовать какой-нибудь стандартный отчет погонять с патчем и без него
      
    Наверх
    ICQ  
    IP записан
     
    lustin
    1c++ power user
    Отсутствует


    1C *.*, ROR, Java - на
    этом остановимся

    Сообщений: 907
    Местоположение: Москва
    Зарегистрирован: 20. Октября 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #318 - 26. Августа 2008 :: 05:53
    Печать  
    А вот вопрос про использование ЖР
    для примера http://code.google.com/p/sqlite1c/issues/detail?id=12

    кто нибудь исследовал ???

    ЗЫ Тема разнеслась на 22 страницы - найти что-нибудь уже очень сложно  Улыбка
      

    бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
    Наверх
    GTalkSkype/VoIPICQ  
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #319 - 26. Августа 2008 :: 07:44
    Печать  
    PVR писал(а) 26. Августа 2008 :: 05:13:
    Djelf писал(а) 25. Августа 2008 :: 23:58:
    hogik писал(а) 23. Августа 2008 :: 19:49:
    Можно еще попробовать вот это http://infostart.ru/profile/2905/projects/2418/

    На dbeng32 8.0.0.2 и 7.0.0.3 (icpp 3.0.1.15, 1c 7.70.027, WinXP) у меня конструкция
    ИТЗ.ДобавитьИндекс("КолВоТоргТочек","Ходка,ТорговаяТочка",1);
    с чего-то стала работать раз в 50 медленнее: вместо 0.5с-0.7с целых ~4с  Нерешительный

    Ты тестировал, уверен что это dbeng32 8.0.0.2 виноват ?


    Тестировал на отчете построеном на сложных алгоритмах сортировки и группировки ИТ.

    Время работы ИТ не изменилось !  Подмигивание

    Возможно ты раньше использовал *-по внутреннему  Улыбка
      
    Наверх
     
    IP записан
     
    Nick
    God Member
    *****
    Отсутствует



    Сообщений: 1599
    Местоположение: г.Новокузнецк
    Зарегистрирован: 21. Февраля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #320 - 26. Августа 2008 :: 07:47
    Печать  
    А у тебя там индексы по внутреннему представлению или как?
      
    Наверх
    ICQ  
    IP записан
     
    Nick
    God Member
    *****
    Отсутствует



    Сообщений: 1599
    Местоположение: г.Новокузнецк
    Зарегистрирован: 21. Февраля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #321 - 26. Августа 2008 :: 07:49
    Печать  
    Федор, может всё про dbeng32 8.0.0.2 из этой ветки в отдельную скинуть?
      
    Наверх
    ICQ  
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #322 - 26. Августа 2008 :: 08:04
    Печать  
    Nick писал(а) 26. Августа 2008 :: 07:49:
    Федор, может всё про dbeng32 8.0.0.2 из этой ветки в отдельную скинуть?

    + 100

    Цитата:
    А у тебя там индексы по внутреннему представлению или как?

    Нет. Но строится по простым типам, Числа и Строки.

    Надо проверить на Справочнике!
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #323 - 26. Августа 2008 :: 08:08
    Печать  
    PVR писал(а) 26. Августа 2008 :: 07:44:
    Тестировал на отчете построеном на сложных алгоритмах сортировки и группировки ИТ.
    Время работы ИТ не изменилось !  Подмигивание
    Возможно ты раньше использовал *-по внутреннему  Улыбка

    Прелесть индексов "по внутреннему представлению", и индексов по простым типам - в том, что им база данных вообще нафиг не нужна.
    Т.е. от версии базы, SQL/DBF, а равно как и от версии dbeng, - никак не зависит.

    А вот обычные индексы - вовсю преобразуют значения в строку.
    Конечно, там влияет внутреннее для 1С кеширование значений, но на больших выборках - это уже не помогает.
    Так что время построения простого индекса по приличной выборке - действительно показывает что-то осмысленное в плане тестирования скорости доступа к БД.
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    kiruha
    1c++ power user
    Отсутствует



    Сообщений: 1249
    Зарегистрирован: 11. Апреля 2007
    Re: 1sqlite
    Ответ #324 - 26. Августа 2008 :: 08:08
    Печать  
    PVR писал(а) 26. Августа 2008 :: 08:04:
    Nick писал(а) 26. Августа 2008 :: 07:49:
    Федор, может всё про dbeng32 8.0.0.2 из этой ветки в отдельную скинуть?

    + 100

    Цитата:
    А у тебя там индексы по внутреннему представлению или как?

    Нет. Но строится по простым типам, Числа и Строки.

    Надо проверить на Справочнике!


    А смысл?
    Без * группировать может токо самоубийца, а с * - справочник и есть простой тип (строка)
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #325 - 26. Августа 2008 :: 08:11
    Печать  
    kiruha писал(а) 26. Августа 2008 :: 08:08:
    Без * группировать может токо самоубийца

    +1
    Цитата:
    а с * - справочник и есть простой тип (строка)

    даже лучше Улыбка
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    Nick
    God Member
    *****
    Отсутствует



    Сообщений: 1599
    Местоположение: г.Новокузнецк
    Зарегистрирован: 21. Февраля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #326 - 26. Августа 2008 :: 08:12
    Печать  
    Я вам не про то, скорее всего все родные запросы которые посылает 1с с этим патчем станут медленнее работат.
    А вид с "*" или без неё, короче говоря индексированная таблица здесь не причем.
      
    Наверх
    ICQ  
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #327 - 26. Августа 2008 :: 08:20
    Печать  
    kms писал(а) 26. Августа 2008 :: 08:11:
    Цитата:
    а с * - справочник и есть простой тип (строка)

    даже лучше Улыбка

    Поясню.
    сложность сравнения строк: O(n)
    сложность внутреннего сравнения справочников/документов: const
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #328 - 26. Августа 2008 :: 08:22
    Печать  
    Nick писал(а) 26. Августа 2008 :: 08:12:
    Я вам не про то, скорее всего все родные запросы которые посылает 1с с этим патчем станут медленнее работат.
    А вид с "*" или без неё, короче говоря индексированная таблица здесь не причем.

    Ну, если ты присмотришься, то согласишься, что и я о том же:
    http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/323#323
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    Nick
    God Member
    *****
    Отсутствует



    Сообщений: 1599
    Местоположение: г.Новокузнецк
    Зарегистрирован: 21. Февраля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #329 - 26. Августа 2008 :: 08:29
    Печать  
    kms писал(а) 26. Августа 2008 :: 08:22:
    Nick писал(а) 26. Августа 2008 :: 08:12:
    Я вам не про то, скорее всего все родные запросы которые посылает 1с с этим патчем станут медленнее работат.
    А вид с "*" или без неё, короче говоря индексированная таблица здесь не причем.

    Ну, если ты присмотришься, то согласишься, что и я о том же:
    http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/323#323

    Ага, видел. Просто изменения способа сортировки для ИТЗ конечно исправит эту проблему в каких-то отчетах, но не станит ли этот патчь тормозом в целом для конфигурации?
      
    Наверх
    ICQ  
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #330 - 26. Августа 2008 :: 08:39
    Печать  
    Nick писал(а) 26. Августа 2008 :: 08:29:
    Ага, видел. Просто изменения способа сортировки для ИТЗ конечно исправит эту проблему в каких-то отчетах, но не станит ли этот патчь тормозом в целом для конфигурации?

    Ну, я как раз делаю акцент не на том, что надо менять индекс.
    А на том, что построение простого индекса - это тоже тест.
    Причем, это, в определенном смысле, стресс-тест.

    Конечно, если страдает ИТ, то будет страдать и все остальное.
    Тут надо подумать, как составить тест для чистого 1С.
    Ну, например, взять в ТЗ тысяч 50 элементов справочника и рандомно в цикле преобразовывать элементы в строку.
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #331 - 26. Августа 2008 :: 08:41
    Печать  
    kiruha писал(а) 26. Августа 2008 :: 08:08:
    Без * группировать может токо самоубийца, а с * - справочник и есть простой тип (строка)

    Ну самоубийца... так был бы умный такого эффекта не обнаружил бы  Подмигивание

    ИТЗ.ДобавитьИндекс("КолВоТоргТочек","*Ходка,*ТорговаяТочка",1);
    родной dbeng32 0.001с
    dbeng32 8.0.0.2 0.002с

    ИТЗ.ДобавитьИндекс("КолВоТоргТочек","Ходка,ТорговаяТочка",1);
    родной dbeng32 0.456с
    dbeng32 8.0.0.2 3.994с

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


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #332 - 26. Августа 2008 :: 08:48
    Печать  
    Djelf писал(а) 26. Августа 2008 :: 08:41:
    Ну самоубийца... так был бы умный такого эффекта не обнаружил бы  Подмигивание

    Смех

    Цитата:
    ИТЗ.ДобавитьИндекс("КолВоТоргТочек","*Ходка,*ТорговаяТочка",1);
    родной dbeng32 0.001с
    dbeng32 8.0.0.2 0.002с

    Погрешность измерений.
    Ну, только ты в курсе, что порядок теперь у тебя другой?

    Цитата:
    ИТЗ.ДобавитьИндекс("КолВоТоргТочек","Ходка,ТорговаяТочка",1);
    родной dbeng32 0.456с
    dbeng32 8.0.0.2 3.994с

    Это под wine у тебя все крутится?
    База локально или по сети?
    Режим монопольный или разделенный?
    Сколько строк в тестовой выборке?

    P.S.
    Если будет время, попробуй, плз, сделать то, что я описал в предыдущем посте.
    С рандомным преобразованием в строку в цикле на той же выборке для какого-либо количества итераций.
    Для разных версий dbeng.
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    artbear
    1c++ developer
    1c++ moderator
    Отсутствует


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

    Сообщений: 6303
    Местоположение: Москва
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #333 - 26. Августа 2008 :: 08:49
    Печать  
    Djelf писал(а) 25. Августа 2008 :: 23:58:
    hogik писал(а) 23. Августа 2008 :: 19:49:
    Можно еще попробовать вот это http://infostart.ru/profile/2905/projects/2418/

    На dbeng32 8.0.0.2 и 7.0.0.3 (icpp 3.0.1.15, 1c 7.70.027, WinXP) у меня конструкция
    ИТЗ.ДобавитьИндекс("КолВоТоргТочек","Ходка,ТорговаяТочка",1);
    с чего-то стала работать раз в 50 медленнее: вместо 0.5с-0.7с целых ~4с  Нерешительный

    А ты случайно не юзаешь “SET DBEng32_Debug=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 записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #334 - 26. Августа 2008 :: 09:06
    Печать  
    kms писал(а) 26. Августа 2008 :: 08:48:
    Это под wine у тебя все крутится?
    База локально или по сети?
    Режим монопольный или разделенный?
    Сколько строк в тестовой выборке?

    Под wine замену dbeng32 еще не пробовал, база локально, замеры в монопольном, в разделенном (без *) 0.715с без замены и 3.611с c заменой dbeng32.
    Выборка 2000 строк, документов "Ходка" 300шт, "ТорговаяТочка" 1500шт

    kms писал(а) 26. Августа 2008 :: 08:48:
    Если будет время, попробуй, плз, сделать то, что я описал в предыдущем посте.
    С рандомным преобразованием в строку в цикле на той же выборке для какого-либо количества итераций.
    Для разных версий dbeng.

    Сейчас не успею, попробую вечером.

    artbear писал(а) 26. Августа 2008 :: 08:49:
    А ты случайно не юзаешь “SET DBEng32_Debug=1”, а ?

    Нет. В этом случае должно что-то в лог писаться, а он чист.
      
    Наверх
    www  
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #335 - 26. Августа 2008 :: 09:11
    Печать  
    Djelf писал(а) 26. Августа 2008 :: 09:06:
    Сейчас не успею, попробую вечером.

    ОК.

    В принципе, надо эту идею hogik'у предложить потестировать.
    А также всем, кому интересны DBF варианты баз.
    Ты не один Улыбка Надеюсь, люди поддержат.

    Кстати, непонятно, чего это я в эту тему влез.  Круглые глаза
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    hogik
    Экс-Участник
    *



    Пол: Мужской
    Re: 1sqlite
    Ответ #336 - 26. Августа 2008 :: 11:52
    Печать  
    Djelf писал(а) 25. Августа 2008 :: 23:58:
    hogik писал(а) 23. Августа 2008 :: 19:49:
    Можно еще попробовать вот это http://infostart.ru/profile/2905/projects/2418/

    На dbeng32 8.0.0.2 и 7.0.0.3 (icpp 3.0.1.15, 1c 7.70.027, WinXP) у меня конструкция
    ИТЗ.ДобавитьИндекс("КолВоТоргТочек","Ходка,ТорговаяТочка",1);
    с чего-то стала работать раз в 50 медленнее: вместо 0.5с-0.7с целых ~4с  Нерешительный

    Ответил тут: http://infostart.ru/projects/2418/
    Если потребуется мои ответы на вопросы, задавайте их, пожалуйста, на http://infostart.ru.
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #337 - 26. Августа 2008 :: 12:31
    Печать  
    Цитата:
    (12)(artbear)
    Посмотрел.
    Если ИТЗ.ДобавитьИндекс() работает с информационное базой данных то:
    1) Должно появиться замедление в монопольном режиме запуска 1Са при использовании версии 8.x.x.x.
    2) Замедление может быть связано с тем, что выполняется чтение DBFов с использованием Begin/EndReadSequence(), а в версиях 8.x.x.x и 7.0.0.3 эти методы активизируются только внутри транзакции.

    ИТ не работает с базой напрямую.
    При построении простого индекса она использует CValue::Format().
    Соответственно, дальше надо разбираться, что является причиной замедления CValue::Format(), если наши рассуждения корректны.

    hogik писал(а) 26. Августа 2008 :: 11:52:
    Если потребуется мои ответы на вопросы, задавайте их, пожалуйста, на http://infostart.ru.

    Сорри, в гостях хорошо, а дома лучше.
    Очень тяжело менять привычную площадку.
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    hogik
    Экс-Участник
    *



    Пол: Мужской
    Re: 1sqlite
    Ответ #338 - 26. Августа 2008 :: 13:14
    Печать  
    Если “ИТ не работает с базой напрямую”, то это уже не ко мне Подмигивание))
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #339 - 26. Августа 2008 :: 13:42
    Печать  
    hogik писал(а) 26. Августа 2008 :: 13:14:
    Если “ИТ не работает с базой напрямую”, то это уже не ко мне Подмигивание))

    Хых Подмигивание
    Ну, а CValue::Format(), который, являясь нативным методом 1С, с базой работает, - это к кому?
    1С использует Format() направо и налево - и если его скорость изменилась, кто ответит за эттто? Улыбка
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    hogik
    Экс-Участник
    *



    Пол: Мужской
    Re: 1sqlite
    Ответ #340 - 26. Августа 2008 :: 14:19
    Печать  
    kms писал(а) 26. Августа 2008 :: 13:42:
    hogik писал(а) 26. Августа 2008 :: 13:14:
    Если “ИТ не работает с базой напрямую”, то это уже не ко мне Подмигивание))

    Хых Подмигивание
    Ну, а CValue::Format(), который, являясь нативным методом 1С, с базой работает, - это к кому?
    1С использует Format() направо и налево - и если его скорость изменилась, кто ответит за эттто? Улыбка

    Давайте тогда определимся. Какую проблему мы обсуждаем – ошибку “CodeBase –56” при использовании 1SQLite или использование прямых запросов в монопольном режиме для 1С++? От меня требуется уточнение ответа http://infostart.ru/projects/2418/ ? Отвечу Подмигивание
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #341 - 26. Августа 2008 :: 14:33
    Печать  
    Мы сейчас обсуждаем (или пытаемся обсуждать) проблему замедления работы CValue::Format().
    http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/330#330
    + обсуждение чуть выше.

    Есть подозрение, что скорость штатных методов доступа к бд (типа получения представления объекта) также изменилась.
    Так что надо проверять.
    Методику я предложил (по ссылке), проверить может каждый.
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    hogik
    Экс-Участник
    *



    Пол: Мужской
    Re: 1sqlite
    Ответ #342 - 26. Августа 2008 :: 15:02
    Печать  
    Вот из этой фразы:

    “На dbeng32 8.0.0.2 и 7.0.0.3 (icpp 3.0.1.15, 1c 7.70.027, WinXP) у меня конструкция
    ИТЗ.ДобавитьИндекс("КолВоТоргТочек","Ходка,ТорговаяТочка",1);
    с чего-то стала работать раз в 50 медленнее: вместо 0.5с-0.7с целых ~4с”

    я делаю вывод, что у меня очень плохое описание разработок “DBEng32 Share” и “DBEng32 SEQ”. Это разные разработки. Они решают разные задачи. А чего тогда проверяется, сравнивается, выясняется и т.д.? Какие то прыжки в ширину…
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #343 - 26. Августа 2008 :: 15:13
    Печать  
    Давайте, я сначала отмечу, что я не говорю, что утверждение
    Цитата:
    Если Вы о вопросе из (12), то в ИТЗ (говорят на форуме 1С++) вообще нет обращений к БД.

    не вполне верно.
    ИТ не реализует своих средств доступа к БД, но является клиентом движка 1С.
    Соответственно, это разные утверждения.

    Ну а по поводу замедления - есть предложение взять таймаут.
    Я надеюсь на появление здесь независимых тестов, построенных на штатных для 1С методах доступа к БД (т.е. без ИТ и 1cpp вообще).
    Если они при использовании Вашего dbeng32 будут давать замедление, тогда и будет повод задуматься.

    Я не являюсь пользователем DBF, так что проблематика DBF для меня достаточно далека.
    Мне просто понятно, что происходит внутри ИТ при построении индекса, и что показывают результаты замеров данной операции.
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    hogik
    Экс-Участник
    *



    Пол: Мужской
    Re: 1sqlite
    Ответ #344 - 26. Августа 2008 :: 16:17
    Печать  
    Фразы:

    ‘Если ИТЗ.ДобавитьИндекс() работает с информационное базой данных”
    “ИТ не работает с базой напрямую”
    ”ИТ не реализует своих средств доступа к БД, но является клиентом движка 1С”

    На мой взгляд, есть полная путаница. В данном случае можно и нужно говорить о: “Выполняется ли операция ввода/вывода по отношению к CDX/DBF файлам? И каким способом?”.
    Я с Вами согласен, что имеет смысл подождать появление независимых тестов. Однако, так как Вы формулируете суть этих тестов - смысла в них нет никакого.
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #345 - 26. Августа 2008 :: 16:40
    Печать  
    А в чем именно Вы узрели путаницу?
    По-моему, там все предельно понятно.

    Более того, я даже Вам четко указал точку, в которой нужно искать проблему в вашей разработке.
    Эта точка - CValue::Format().
    И ее потомки в дереве выполнения.

    Информации для анализа - более, чем достаточно.
    Было бы желание, а уж профайлер, я надеюсь, найдется.
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #346 - 26. Августа 2008 :: 18:06
    Печать  
    hogik

    Вот, Володя, тебе тест.
    Все, забываем ИТ, 1cpp, такие непонятные слова как CValue и Format().

    Берем эти 9 кб и запускаем с родной dbeng32 и твоей dbeng32 с инфостарта.

    Мои результаты:
    Элементов в базе (тест): 100000
    База данных - локально.
    Все замеры - на инициализированной базе.


    Родной dbeng32, 7.70.014, монопольный

    Время выполнения запроса: 3846
    Итерация 1: 1330
    Итерация 2: 1329
    Итерация 3: 1329



    Родной dbeng32, 7.70.014, разделенный

    Время выполнения запроса: 5803
    Итерация 1: 1869
    Итерация 2: 1869
    Итерация 3: 1870



    dbeng32 8.0.0.2, dbeng33 7.70.014, монопольный

    Время выполнения запроса: 7822
    Элементов в базе (тест): 100000
    Итерация 1: 2473
    Итерация 2: 2478
    Итерация 3: 2481



    dbeng32 8.0.0.2, dbeng33 7.70.014, разделенный

    Время выполнения запроса: 7566
    Элементов в базе (тест): 100000
    Итерация 1: 2457
    Итерация 2: 2451
    Итерация 3: 2445


    Выводы сам делай.
    Особенно насчет "путаница", "методика не имеет смысла", "прыжки в ширину" и т.п.
    Мда...

    P.S.
    И еще, Володь.
    Я же на эту тему пару слов здесь сказал не для того, чтобы ты мне мозг выносил.
    То, что проблема есть, было понятно после первого поста Djelf.

    В таких случаях, я считаю, надо брать и разбираться.
    Несмотря на неточности указания версий, непонимание работы каких-либо компонент, несогласованные реальности в диалоге и отсутствие личного знакомства с авторами комментариев.

    Мне лично более понятен мат и коньяк в рабочее время, чем общение на "Вы", но без желания добраться до истины.
    Удачи. Улыбка

    P.P.S.
    Только еще давайте промолчим о том, что тесты надо повторить в сетевом режиме.
    Надеюсь, кому надо, сможет повторить в нужном контексте.
      

    dbeng1.rar ( 10 KB | Загрузки )

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    hogik
    Экс-Участник
    *



    Пол: Мужской
    Re: 1sqlite
    Ответ #347 - 26. Августа 2008 :: 20:24
    Печать  
    (kms)
    1) “Более того, я даже Вам четко указал точку, в которой нужно искать проблему в вашей разработке”
    Перед тем как “указывать точку” почитали бы о самой разработке. “DBEng32 Share” всегда работает в разделенном режиме. Вас даже не смутил тот факт, что при использовании моей разработки скорость работы в монопольном режиме ниже, чем в разделенном режиме.
    2) “То, что проблема есть, было понятно после первого поста Djelf”
    Напомню, что он написал: “стала работать раз в 50 медленнее”. Ваши замечательные тесты это подтверждают?
    3) “ В таких случаях, я считаю, надо брать и разбираться. Несмотря на неточности указания версий, непонимание работы каких-либо компонент, несогласованные реальности в диалоге… ”
    Похоже, у нас разное понимание “разбираться”. Особенно в части “ мата и коньяка в рабочее время”. В трезвом состоянии написать такой тест невозможно.

    И Вам, удачи.

    P.S. По моему мнению, если нет желание читать и напрягать свои мозги – лучше об этом сразу сказать. А не писать тестирование скорости выполнения машинных команд в системах, где основное время затрачивается на операции ввода/вывода.
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #348 - 26. Августа 2008 :: 22:24
    Печать  
    hogik писал(а) 26. Августа 2008 :: 20:24:
    Перед тем как “указывать точку” почитали бы о самой разработке. “DBEng32 Share” всегда работает в разделенном режиме. Вас даже не смутил тот факт, что при использовании моей разработки скорость работы в монопольном режиме ниже, чем в разделенном режиме.

    Почитал бы где?
    На той странице, где опубликована dll, очевидно, есть детальное описание?

    Предложение обернуть получение данных в транзакцию, впрочем, вижу.
    В комментариях.
    Замечательное предложение, прямо скажем.

    Цитата:
    2) “То, что проблема есть, было понятно после первого поста Djelf”
    Напомню, что он написал: “стала работать раз в 50 медленнее”. Ваши замечательные тесты это подтверждают?

    Если присмотреться, Djelf привел и абсолютные цифры изменения времени.
    При этом стоит заметить, что и тестовые стенды, и сами тесты у нас различны.

    Факт в том, что использование данной Вашей разработки замедляет штатную работу 1С.
    Характер замедления зависит от набора данных и типа активности.
    При желании можно и на порядок замедлиться, как показывает опыт построения индексов ИТ.

    Цитата:
    Похоже, у нас разное понимание “разбираться”. Особенно в части “ мата и коньяка в рабочее время”. В трезвом состоянии написать такой тест невозможно.

    Смешно.
    Я бы сказал "в трезвом состоянии" понять этот тест невозможно.

    Цитата:
    P.S. По моему мнению, если нет желание читать и напрягать свои мозги – лучше об этом сразу сказать.

    Верно; и самое главное - сделать это вовремя.

    Цитата:
    А не писать тестирование скорости выполнения машинных команд в системах, где основное время затрачивается на операции ввода/вывода.

    Замечательное изречение.
    Главное - по существу.

    --
    Владимир, у Вас может сложиться впечатление, что мне почему-то не нравится Ваша разработка.
    Это не так, хотя я не являюсь ее пользователем, ни сейчас, ни в перспективе.

    Мне, конечно, жаль, что понимания достичь не удается.
    Но в целом, это не та проблема, о которой стоит сильно переживать.

    P.S.
    Жаль, что Вы не любите коньяк Подмигивание
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    hogik
    Экс-Участник
    *



    Пол: Мужской
    Re: 1sqlite
    Ответ #349 - 27. Августа 2008 :: 00:24
    Печать  
    (kms)
    1) “Почитал бы где?”
    Вы прочтите хотя бы, то, что написано в данном форуме. Например, вот это:
    ““DBEng32 Share” и “DBEng32 SEQ”. Это разные разработки. Они решают разные задачи.”
    А если хотите разобраться в сути проблемы по 1SQLite, то прочтите вот это:
    http://infostart.ru/profile/2905/projects/2308/
    Если хотите понять мои сообщения в форуме, то прочтите еще вот это:
    http://infostart.ru/profile/2905/projects/2418/
    Возможно у Вас, тогда появится другая приписка к предложению “обернуть запрос в транзакцию”.
    2) “Факт в том, что использование данной Вашей разработки замедляет штатную работу 1С.”
    А что если Вам попробовать задать вопрос типа – “а что, вообще, делает твоя разработка?”
    3) “Замечательное изречение. Главное - по существу. ”
    Ну что ж ещё говорить, если Вы не в состоянии написать нормальный тест, поняв, что тестируется.
    4) “Мне, конечно, жаль, что понимания достичь не удается. ”
    Если Вы говорите о понимании в нашем с Вами общении – думаю, это, действительно, не удастся. Похоже, мы преследуем разные цели в обсуждении данной темы.
    5) “я не являюсь ее пользователем, ни сейчас, ни в перспективе. ”
    Возможно, прозвучит странно, но я тоже не являюсь пользователем этих разработок. И не буду им являться в перспективе.
    6) “у Вас может сложиться впечатление, что мне почему-то не нравится Ваша разработка.”
    Мне Ваше мнение в этом вопросе безразлично.

    P.S. На данное сообщение можете мне не отвечать. Меня больше в этом форуме Улыбка

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



    Сообщений: 1249
    Зарегистрирован: 11. Апреля 2007
    Re: 1sqlite
    Ответ #350 - 27. Августа 2008 :: 08:10
    Печать  
    hogik писал(а) 27. Августа 2008 :: 00:24:
    (kms)
    1) “Почитал бы где?”
    Вы прочтите хотя бы, то, что написано в данном форуме. Например, вот это:
    ““DBEng32 Share” и “DBEng32 SEQ”. Это разные разработки. Они решают разные задачи.”
    А если хотите разобраться в сути проблемы по 1SQLite, то прочтите вот это:
    http://infostart.ru/profile/2905/projects/2308/
    Если хотите понять мои сообщения в форуме, то прочтите еще вот это:
    http://infostart.ru/profile/2905/projects/2418/
    Возможно у Вас, тогда появится другая приписка к предложению “обернуть запрос в транзакцию”.
    2) “Факт в том, что использование данной Вашей разработки замедляет штатную работу 1С.”
    А что если Вам попробовать задать вопрос типа – “а что, вообще, делает твоя разработка?”
    3) “Замечательное изречение. Главное - по существу. ”
    Ну что ж ещё говорить, если Вы не в состоянии написать нормальный тест, поняв, что тестируется.
    4) “Мне, конечно, жаль, что понимания достичь не удается. ”
    Если Вы говорите о понимании в нашем с Вами общении – думаю, это, действительно, не удастся. Похоже, мы преследуем разные цели в обсуждении данной темы.
    5) “я не являюсь ее пользователем, ни сейчас, ни в перспективе. ”
    Возможно, прозвучит странно, но я тоже не являюсь пользователем этих разработок. И не буду им являться в перспективе.
    6) “у Вас может сложиться впечатление, что мне почему-то не нравится Ваша разработка.”
    Мне Ваше мнение в этом вопросе безразлично.

    P.S. На данное сообщение можете мне не отвечать. Меня больше в этом форуме Улыбка



    Очень похоже, что с автор модификации dbeng не готов поддерживать свою разработку на необходимом
    уровне.И как на зло она затрагивает недокуметированную правку основной библиотеки доступа 1С, а не написана на технологии внешних компонент.

    Проклятый человеческий фактор  Улыбка
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #351 - 27. Августа 2008 :: 08:41
    Печать  
    Собственно еще один тест, должен работать в любой конфигурации где есть документ "Реализация".
    Подтверждать тест "в 50 раз" не стал, хотя если напрячься...

    Если говорить о штатном режиме 1С, без ВК то ""+ТЗ.Реализация с dbeng32 стало работать в 5 раз медленнее, причем транзакции положение не исправляют.

    Разделенный режим, оригинальный dbeng32, 20000 документов
    Запрос.Выполнить(ТекстЗапроса): 7.66с
    ТЗ.СтрРеализация=""+ТЗ.Реализация (в цикле): 0.477с
    ТЗ.СтрРеализация=""+ТЗ.Реализация (в цикле в транзакции): 0.352с
    ИТЗ.СтрРеализация=""+ИТЗ.Реализация (в цикле): 0.485с
    ИТЗ.СтрРеализация=""+ИТЗ.Реализация (в цикле в транзакции): 0.366с
    ИТЗ.ДобавитьИндекс("Инд","*Реализация"): 0.02с
    ИТЗ.ДобавитьИндекс("Инд","Реализация"): 12.357с
    ИТЗ.ДобавитьИндекс("Инд","СтрРеализация"): 0.06с
    ИТЗ.ДобавитьИндекс("Инд","Реализация") (в транзакции): 8.37с

    Разделенный режим, dbeng32 8.0.0.2, 20000 документов
    Запрос.Выполнить(ТекстЗапроса): 11.864с
    ТЗ.СтрРеализация=""+ТЗ.Реализация (в цикле): 1.621с
    ТЗ.СтрРеализация=""+ТЗ.Реализация (в цикле в транзакции): 1.557с
    ИТЗ.СтрРеализация=""+ИТЗ.Реализация (в цикле): 1.589с
    ИТЗ.СтрРеализация=""+ИТЗ.Реализация (в цикле в транзакции): 1.456с
    ИТЗ.ДобавитьИндекс("Инд","*Реализация"): 0.021с
    ИТЗ.ДобавитьИндекс("Инд","Реализация"): 63.354с
    ИТЗ.ДобавитьИндекс("Инд","СтрРеализация"): 0.06с
    ИТЗ.ДобавитьИндекс("Инд","Реализация") (в транзакции): 60.427с
      

    DBEng32test.ert ( 58 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #352 - 27. Августа 2008 :: 09:32
    Печать  
    Странно на тесте Михаила, у меня в разд. режиме между
    родным без транзакции:
    Время выполнения запроса: 29542
    Элементов в базе (тест): 100000
    Итерация 1: 2676
    Итерация 2: 2659
    Итерация 3: 2672

    и с dbeng32 8.0.0.2 с транзакцией:
    Время выполнения запроса: 28680
    Элементов в базе (тест): 100000
    Итерация 1: 2684
    Итерация 2: 2684
    Итерация 3: 2669

    время практически совпадает  Озадачен

    dbeng32 8.0.0.2 без транзакции:
    Время выполнения запроса: 28868
    Элементов в базе (тест): 100000
    Итерация 1: 3537
    Итерация 2: 3550
    Итерация 3: 3553

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #353 - 27. Августа 2008 :: 12:30
    Печать  
    Ну господа, ну не бывает чудес - нельзя 1С заставить работать по настоящему монопольно, и в то же время разрешить фоксу тоже читать файлы.
    Можно только "обхитрить" 1С - чтобы она думала, что работает монопольно, но файлы открывать в разделенном режиме. То есть по определению в таком "псевдо-монопольном" режиме невозможна скорость выше чем в разделенном режиме.
    И в чем тогда изюм? В том что 1С запустится в разделенном режиме, просто другой экземпляр 1С нельзя будет запустить?
    Монопольный режим обычно применяется для ускорения группового перепроведения - а ускорения не будет.
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #354 - 27. Августа 2008 :: 15:40
    Печать  
    Позволю себе еще немного прокомментировать вот это: http://infostart.ru/profile/2905/projects/2418/

    Цитата:
    20. hogik 27.08.2008

    3) На тестирование этих разработок для маленьких БД в локальном режиме оказывает сильное влияние системный и аппаратный кэш. Например, в тесте от Михаила чтение информации из БД (обращение к методам DBEng32) осуществляется только в первой итерации. А скорость выполнения итераций одинаково в рамках одного запуска теста.

    К сожалению, автор так и не достиг понимания, что же на самом деле мы тестируем и как следует трактовать результаты.

    "Аппаратный и системный кэш" никакого отношения к данным тестам не имеют.
    Они вносят некую дельту (или коэффициент) в финальную оценку времени, не более того.

    Единственно, что необходимо рассматривать - это внутренний кэш объектов 1С.
    Который в силу определенных ограничений не работает в тесте, который был предложен к рассмотрению.

    Если бы автор задался целью и проверил бы собственные высказывания
    Цитата:
    Например, в тесте от Михаила чтение информации из БД (обращение к методам DBEng32) осуществляется только в первой итерации.

    он с удивлением бы обнаружил, что заблуждается.

    Однако для этого нужно некоторое понимание организации внутреннего кэша объектов 1С и - главное - желание докопаться до истины.
    И к не меньшему сожалению, данные заблуждения приводят к отсутствию информации либо к дезинформации пользователей.
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #355 - 28. Августа 2008 :: 05:32
    Печать  
    PVR писал(а) 27. Августа 2008 :: 09:32:
    Странно на тесте Михаила, у меня в разд. режиме между
    родным без транзакции:
    Время выполнения запроса: 29542
    Элементов в базе (тест): 100000
    Итерация 1: 2676
    Итерация 2: 2659
    Итерация 3: 2672

    и с dbeng32 8.0.0.2 с транзакцией:
    Время выполнения запроса: 28680
    Элементов в базе (тест): 100000
    Итерация 1: 2684
    Итерация 2: 2684
    Итерация 3: 2669

    время практически совпадает  Озадачен

    dbeng32 8.0.0.2 без транзакции:
    Время выполнения запроса: 28868
    Элементов в базе (тест): 100000
    Итерация 1: 3537
    Итерация 2: 3550
    Итерация 3: 3553

    Что интересно на 1С Запрос никоим боком не влияет, значит есть надежда  Улыбка


    dbeng32 8.0.0.3 без транзакции:
    Время выполнения запроса: 28518
    Элементов в базе (тест): 100000
    Итерация 1: 2671
    Итерация 2: 2685
    Итерация 3: 2668

    dbeng32 8.0.0.3 с транзакцией:
    Время выполнения запроса: 27637
    Элементов в базе (тест): 100000
    Итерация 1: 1856
    Итерация 2: 1856
    Итерация 3: 1853

    Улыбка
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #356 - 28. Августа 2008 :: 09:03
    Печать  
    Ну вот, теперь надо полагать, что не зря мы здесь топтались. Улыбка
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #357 - 28. Августа 2008 :: 09:14
    Печать  
    Кстати, из этого:

    Цитата:
    8.0.0.3 (бета-версия)
    1) Убраны отладочные операторы. Это снижает загрузку процессора примерно на 30%. При этом повышение общей производительности сильно зависит от условий запуска сессии 1С. Наибольший эффект достигается при использовании системы в локальном режиме одним пользователем. Т.к. доля времени, затрачиваемая на операции ввода/вывода, уменьшается в общем времени, за счет системного и аппаратного кэширования.
    2) Добавлена возможность вывода подробной отладочной информации: “SET DBEng32_Debug=2”.
    P.S. В разработке “DBEng32 SEQ” отладочные операторы убираться не будут.


    Из этого я заключаю, что разработка с "отладочными операторами", которая загружала cpu на 30%, - вообще не годилась для локальной работы.
    Когда время доступа к базе мало, и такие падения наиболее заметны.

    orefkov

    Саня, фиг ты угадал в своем разъяснении причин http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/353#353
    Это "отладочные операторы" оказались.

    Надо, видимо, и нам "отладочных операторов" на 30% добавить  Смех
    И при этом городо, с расстановкой произнести: "надежность превыше всего".
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #358 - 28. Августа 2008 :: 09:26
    Печать  
    Кстати, я реально под впечатлением.
    hogik наконец-то понял, что же я тестировал. Подмигивание

    Володя, если ты случайно это увидишь, то знай, я еще надеюсь на то, что ты поймешь свое заблуждение:
    Цитата:
    Например, в тесте от Михаила чтение информации из БД (обращение к методам DBEng32) осуществляется только в первой итерации.


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

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    hogik
    Экс-Участник
    *



    Пол: Мужской
    Re: 1sqlite
    Ответ #359 - 28. Августа 2008 :: 12:19
    Печать  
    Тов. kms, я увидел Ваше сообщения. И даже повторно зарегистрировался в данном форуме. И отвечу Вам здесь, дабы не загружать ерундой комментарии под моей разработкой на “Инфостарт”.
    1) “hogik наконец-то понял” - Если Вы хотите настроить против себя собеседника, то такие фразы этому очень способствуют.
    2) “что же я тестировал” - Я Вам и сказал, выше, что ЭТО тестировать не надо.
    3) “ты поймешь свое заблуждение” – Нет, не пойму. Но могу Вам пояснить Ваше заблуждение. Но только после того, как Вы начнете читать мои сообщения и задавать мне вопросы, если мне не удалось точно сформулировать свою мысль. Т.е. беседовать, а не поучать.
    P.S.
    Еще раз повторю свою фразу (не только для kms): “Если потребуется мои ответы на вопросы, задавайте их, пожалуйста, на http://infostart.ru”. А для kms поясню – я не призывал и не призываю перенести обсуждения на “Инфостарт”. Просто в силу моего преклонного возраста и связанными с этими болячками (склероз, зрение и т.д.) – мне трудновато скакать по сайтам. А разработка, то опубликована на “Инфостарт”. И я - там…
    P.P.S.
    Про коньяк. Я и так плохо соображаю, чтобы еще и коньком себя отуплять.
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #360 - 28. Августа 2008 :: 13:59
    Печать  
    hogik писал(а) 28. Августа 2008 :: 12:19:
    1) “hogik наконец-то понял” - Если Вы хотите настроить против себя собеседника, то такие фразы этому очень способствуют.

    Извиняюсь.
    Тов. hogik так и не понял. Смех

    В Совет Федерации обратились субъекты федерации с требованием о запрещении шовинистской поговорки "незваный гость хуже татарина".

    Слушали-постановили.
    Впредь говорить "незваный гость лучше татарина". Смех
    НЛ, разумеется.

    --
    Я слишком ленив, чтобы идти регистрироваться на инфостарт.
    Не нравится он мне.

    Я рад, что твоя разработка не нуждается в моих тестах.
    И в принципе, понятно, что мы оба не нуждаемся в информации и опыте собеседника.

    Мне просто хотелось по-возможности чем-то помочь, да пообщаться за чашкой водки.
    А к тому, что это не всегда удается, я давно уже привык.
    Ну что делать, возможности второй сигнальной на заре третьего тысячелетия по-прежнему ограничены.

    Независимо от всего этого, я рад, что вот есть ты и вот есть твои разработки.
    Которые нужны людям.
    Так что по-прежнему: "удачи" и "ю а велкам".
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #361 - 04. Сентября 2008 :: 08:19
    Печать  
    to Александр Орефков:
    Если можно, хотелось бы узнать, в связи с выявленными нюансами по работе 1sqlite, планируются ли какие либо радикальные изменения в функционале/интерфейсе компоненты?
    Если честно, очень чешутся руки переписать все под 1sqlite, и в принципе в рамках моей специфики я скорее всего не столкнусь с описанными выше в этой ветке проблемами, но все таки объем работы достаточно большой и переделывать потом все будет довольно хлопотно, поэтому если не сложно, как разработчик, не мог бы ты высказать свою точку зрения по этому вопросу по состоянию на текущий момент?
    Читал материалы по компонентам hogik-а, но если честно, как то не внушило...
    Заранее спасибо!
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #362 - 04. Сентября 2008 :: 12:44
    Печать  
    CaBaT писал(а) 04. Сентября 2008 :: 08:19:
    to Александр Орефков:
    Если можно, хотелось бы узнать, в связи с выявленными нюансами по работе 1sqlite, планируются ли какие либо радикальные изменения в функционале/интерфейсе компоненты?
    Если честно, очень чешутся руки переписать все под 1sqlite, и в принципе в рамках моей специфики я скорее всего не столкнусь с описанными выше в этой ветке проблемами, но все таки объем работы достаточно большой и переделывать потом все будет довольно хлопотно, поэтому если не сложно, как разработчик, не мог бы ты высказать свою точку зрения по этому вопросу по состоянию на текущий момент?


    Да в-принципе, пока только были проблемы с Begin/End ReadSequnce.

    Сегодня почти доделал борьбу с этим, и есть ряд нюансов, которые как раз хотелось бы обсудить с сообществом пользователей.

    Радикальных изменений в интерфейсе компоненты не будет.
    Возможны некоторые изменения в общении с поставщиком данных для sqlite, благо в официальных релизах он еще не засветился.

    Теперь по поводу ReadSequnce.
    Удалось технически сделать возможность указывать для таблиц, применять ли для них ReadSequnce.

    Работает это так:
    В монопольном режиме ReadSequnce применяется всегда.
    В разделенном режиме можно либо не применять ReadSequnce (меньше скорость последовательного чтения), либо применять (тогда таблица пытается заблокироватся на запись, и либо запрос вообще не сможет выполнится - не удалось заблокировать таблицу, либо другие юзеры не смогут писать в таблицу. Плюсы - увеличение скорости чтения).
    Я конечно, могу сделать для объекта SQLiteQuery флаг - блокировать таблицы или нет, и тогда он будет влиять на режим применения блокировок ко всем таблицам в запросе. Однако есть и пограничные случаи, например:
    Запрос в модуле проведения документа, что-нить читает из регистра и джойнится к справочнику. Очевидно, что в таком запросе в разделенном режиме хотелось бы к регистру применить ReadSequnce (потому что так и так в него никто не может в это время писать, а к таблице справочника не применять ReadSequnce, чтобы не мешать записывать в нее другим юзерам.
    То есть надо как-то давать информацию запросу, какие таблицы блокировать, а какие нет.
    SQLite не позволяет указывать хинты для таблиц, как MSSQL, типа (nolock).
    Могу предложить два варианта:
    1. В тексте запроса если хотим, чтобы для таблицы применялась блокировка, имя таблицы указывать с хитрым суффиксом/префиксом - например
    select from Справочник_Номенклатура_Locked

    2. К объекту запроса добавить метод
    Блокировать("Список,Таблиц")

    Какой из вариантов реализовать?
    Замечу, что по умолчанию в разделенном режиме таблицы будут всегда читаться БЕЗ ReadSequnce, тк ПМСМ небольшое снижение скорости последовательного чтения данных гораздо выгоднее, чем завал системы транзакциями.

    И спрошу еще у знатоков - при проведении 1С блокирует таблицы регистров сразу или при первой записи в них? Что-то там помню выясняли при попытках использовать фокс в модулях проведения.
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #363 - 04. Сентября 2008 :: 12:52
    Печать  
    Цитата:
    1. В тексте запроса если хотим, чтобы для таблицы применялась блокировка, имя таблицы указывать с хитрым суффиксом/префиксом - например
    select from Справочник_Номенклатура_Locked

    2. К объекту запроса добавить метод
    Блокировать("Список,Таблиц")


    А возможно реализовать оба варианта?
    Если нет, то 1 вариант.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #364 - 04. Сентября 2008 :: 12:55
    Печать  
    Спасибо за ответ, пошел работать Улыбка
    По поводу блокировок: на мой взгляд, первый вариант более красивый.
      
    Наверх
     
    IP записан
     
    Phoenix
    Senior Member
    ****
    Отсутствует


    itpath.ru

    Сообщений: 398
    Местоположение: Москва
    Зарегистрирован: 15. Июня 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #365 - 04. Сентября 2008 :: 13:00
    Печать  
    как минимум 1 вариант, оба еще лучше.
      

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


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #366 - 04. Сентября 2008 :: 13:17
    Печать  
    orefkov писал(а) 04. Сентября 2008 :: 12:44:
    1. В тексте запроса если хотим, чтобы для таблицы применялась блокировка, имя таблицы указывать с хитрым суффиксом/префиксом - например
    select from Справочник_Номенклатура_Locked

    Это более явный вариант - т.е. более очевидный.
    Второй может легко выпадать из поля зрения.
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #367 - 04. Сентября 2008 :: 13:20
    Печать  
    kms писал(а) 04. Сентября 2008 :: 13:17:
    Это более явный вариант - т.е. более очевидный.

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


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #368 - 05. Сентября 2008 :: 03:00
    Печать  
    Я верил в Александра и поэтому давно переписал много чего на 1sqlite.
    Что касается пути по которому идти...
    Я согласен с Михаилом что 1-й более очевидный. НО и второй был бы не плох. Но первого было бы достаточно для начала.  Подмигивание
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #369 - 05. Сентября 2008 :: 10:08
    Печать  
    Блин, эксперимент отец опыта.

    Вобщем, что выяснилось.
    Begin/End ReadSequnce к делу мало относится.
    Главное - Begin/EndTransaction !
    То есть, если я просто вызывал перед выполнением запроса BeginTransaction, то независимо от того, вызывался BeginReadSequnce или нет - время выполнения одинаково.

    Однако теперь засада такова - оказывается движок 1С, если начата транзакция, при ЛЮБОМ чтении из ЛЮБОЙ таблицы блокирует ее на запись. То есть разделять на уровне запроса какие таблицы блокировать, а какие нет - не имеет смысла, потому что как только что-либо прочиталось из таблицы, писать в нее не получится до завершения транзакции.

    Поэтому предлагаю такое поведения ВКшки:
    1. Если при начале выполнения запроса уже начата транзакция, то это хорошо, не делаем лишних телодвижений.
    2. Если при начале выполнения запроса транзакция не начата, и режим запуска монопольный - начинаем транзакцию, по завершению запроса - откатываем ее.
    3. Если при начале выполнения запроса транзакция не начата, и режим запуска разделенный, то если для объекта SQLiteQuery установлен флаг "Блокировать", начинаем транзакцию, по завершению запроса - откатываем ее, иначе - не начинаем транзакцию, выполняем запрос медленнее.

    По умолчанию при создании запроса методом база.НовыйЗапрос, в создаваемом запросе установить флаг Блокировка = 0.
      
    Наверх
     
    IP записан
     
    kiruha
    1c++ power user
    Отсутствует



    Сообщений: 1249
    Зарегистрирован: 11. Апреля 2007
    Re: 1sqlite
    Ответ #370 - 05. Сентября 2008 :: 10:43
    Печать  
    Имел достаточно большой практический опыт по ускорению стандартных запросов 1С при помощи обертки в транзакцию. Даже стандартный запрос при этом ускоряется на порядок (в многопользовательском режиме). До 10 пользователей - все ОК. При >>10 ошибки (Таблица: 1SJOURN Ошибка обращения к данным при транзакции, выполняемой другим пользователем) начинают сильно нарастать (видимо из за того, что очередь не успевает рассосаться ). И как правило такие заторы образовывались в пик отгрузок.
    Ругань пользователей, жалобы руководству и т.п.
    Параметр 10 человек для разных баз конечно может варьироваться.
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #371 - 05. Сентября 2008 :: 11:10
    Печать  
    orefkov писал(а) 05. Сентября 2008 :: 10:08:
    2. Если при начале выполнения запроса транзакция не начата, и режим запуска монопольный - начинаем транзакцию, по завершению запроса - откатываем ее.

    А зачем в монопольном режиме транзакция?

      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #372 - 05. Сентября 2008 :: 11:25
    Печать  
    kms писал(а) 05. Сентября 2008 :: 11:10:
    orefkov писал(а) 05. Сентября 2008 :: 10:08:
    2. Если при начале выполнения запроса транзакция не начата, и режим запуска монопольный - начинаем транзакцию, по завершению запроса - откатываем ее.

    А зачем в монопольном режиме транзакция?


    Я и сам не знаю.
    Но как показали эксперименты, если в монопольном режиме обернуть запрос в НачатьТранзакцию/ОтменитьТранзакцию - он выполняется быстрее !
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #373 - 05. Сентября 2008 :: 11:36
    Печать  
    Интересно.

    Скажи, Саша, а 1sqlite позволит DML запросы к таблицам 1С (типа update хотя бы)?
    Нет под рукой 1sqlite, а так не помню, потому спрашиваю.

    И если да, то не будет ли тут интерференции с автоматической отменой транзакции?
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #374 - 06. Сентября 2008 :: 04:06
    Печать  
    kms писал(а) 05. Сентября 2008 :: 11:36:
    Интересно.

    Скажи, Саша, а 1sqlite позволит DML запросы к таблицам 1С (типа update хотя бы)?
    Нет под рукой 1sqlite, а так не помню, потому спрашиваю.

    И если да, то не будет ли тут интерференции с автоматической отменой транзакции?


    insert/update/delete скорее всего не будет.
    Если только кто-нить не сделает.

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #375 - 08. Сентября 2008 :: 06:55
    Печать  
    Господа, прошу проверять.
    Версия без ReadSequnce.
    Добавлено:
    Объект SQLiteQuery. Метод ParseSqlText / ОбработатьТекстЗапроса("текст")
    Возвращает переданный текст, обработанный метапарсером.
    Установленые для запроса методом "Подставлять" текстовые параметры НЕ СБРАСЫВАЮТСЯ.
    Объект SQLiteQuery. Свойство NeedTransaction / ВыполнятьВТранзакции
    Позволяет прочитать/установить свойство.
    0 - не начинать транзакцию.
    Не 0 - автоматически начать транзакцию при первом обращении к таблицам 1С при выполнении запроса, если она не начата.
    В монопольном режиме независимо от значения свойства транзакция начинается ВСЕГДА.
    В немонопольном режиме выполнение запроса в транзакции позволяет ускорить выполнение запроса, однако блокирует используемые таблицы для записи.

    Поставщик данные для ТП наличествует.
      

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #376 - 08. Сентября 2008 :: 07:12
    Печать  
    Ух, спасибо. Вовремя я из отпуска вышел!
    orefkov писал(а) 08. Сентября 2008 :: 06:55:
    Объект SQLiteQuery. Метод ParseSqlText / ОбработатьТекстЗапроса("текст")
    Возвращает переданный текст, обработанный метапарсером.
    Установленые для запроса методом "Подставлять" текстовые параметры НЕ СБРАСЫВАЮТСЯ.

    А в "УстановитьПараметр" сбрасываются? Хотелось бы чтоб тоже не сбрасывались.

    И ещё для тех, кто в танке, объясни последний раз:
    1. я установливаю св-во ВыполнятьВТранзакции в 1, то после того, как я выполнил запрос, это св-во сбрасывается или нет?
    2. в транзакцию попадают ВСЕ таблицы 1с, даже те, которые не участвуют в запросе?

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #377 - 08. Сентября 2008 :: 07:19
    Печать  
    JohnyDeath писал(а) 08. Сентября 2008 :: 07:12:
    Ух, спасибо. Вовремя я из отпуска вышел!
    orefkov писал(а) 08. Сентября 2008 :: 06:55:
    Объект SQLiteQuery. Метод ParseSqlText / ОбработатьТекстЗапроса("текст")
    Возвращает переданный текст, обработанный метапарсером.
    Установленые для запроса методом "Подставлять" текстовые параметры НЕ СБРАСЫВАЮТСЯ.

    А в "УстановитьПараметр" сбрасываются? Хотелось бы чтоб тоже не сбрасывались.

    И ещё для тех, кто в танке, объясни последний раз:
    1. я установливаю св-во ВыполнятьВТранзакции в 1, то после того, как я выполнил запрос, это св-во сбрасывается или нет?
    2. в транзакцию попадают ВСЕ таблицы 1с, даже те, которые не участвуют в запросе?


    Параметры, передаваемые в УстановитьПараметр - это SQL-параметры, не текстовые, и естественно, они не сбрасываются.
    После выполнения запроса свойство ВыполнятьВТранзакции не изменяется. То есть если присвоили 1, то при выполнении запроса начинается транзакция, после выполнения запроса она завершается, свойство остается равным 1, то есть при следующем запросе все повторится.
    В транзакции блокируются таблицы 1С, из которых происходит чтение. Нет чтения - нет блокировки.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #378 - 08. Сентября 2008 :: 07:24
    Печать  
    orefkov писал(а) 08. Сентября 2008 :: 07:19:
    В транзакции блокируются таблицы 1С, из которых происходит чтение. Нет чтения - нет блокировки.

    Выборочной блокировки ("_Locked" в тексте запроса) не появится? (чтоб, например в модуле проведения, выполнять запросы с транзакцией для тех таблиц, которые уже в неё попали)
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #379 - 08. Сентября 2008 :: 07:37
    Печать  
    JohnyDeath писал(а) 08. Сентября 2008 :: 07:24:
    orefkov писал(а) 08. Сентября 2008 :: 07:19:
    В транзакции блокируются таблицы 1С, из которых происходит чтение. Нет чтения - нет блокировки.

    Выборочной блокировки ("_Locked" в тексте запроса) не появится? (чтоб, например в модуле проведения, выполнять запросы с транзакцией для тех таблиц, которые уже в неё попали)

    Нет. Как оказалось, движок 1С не позволяет этого. То есть если начата транзакция - любое чтение из таблицы приводит к ее блокировке на запись.
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #380 - 08. Сентября 2008 :: 08:11
    Печать  
    orefkov писал(а) 06. Сентября 2008 :: 04:06:
    insert/update/delete скорее всего не будет.
    Если только кто-нить не сделает.

    Тоесть для таблиц 1С или вообще?
    Печаль
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #381 - 08. Сентября 2008 :: 08:16
    Печать  
    PVR писал(а) 08. Сентября 2008 :: 08:11:
    orefkov писал(а) 06. Сентября 2008 :: 04:06:
    insert/update/delete скорее всего не будет.
    Если только кто-нить не сделает.

    Тоесть для таблиц 1С или вообще?
    Печаль

    Скорее всего для таблиц 1С, т.е. для ВИРТУАЛЬНЫХ таблиц sqlite. С остальными таблицами sqlite можешь с самого первого релиза проделывать эти мероприятия.
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #382 - 08. Сентября 2008 :: 08:19
    Печать  
    PVR писал(а) 08. Сентября 2008 :: 08:11:
    orefkov писал(а) 06. Сентября 2008 :: 04:06:
    insert/update/delete скорее всего не будет.
    Если только кто-нить не сделает.

    Тоесть для таблиц 1С или вообще?
    Печаль

    Для таблиц 1С.
    С таблицами SQLite делайте, что хотите Улыбка
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #383 - 08. Сентября 2008 :: 08:28
    Печать  
    orefkov писал(а) 08. Сентября 2008 :: 08:19:
    С таблицами SQLite делайте, что хотите Улыбка

    +1
    Я  лично уже месяца 4 как наваял на базе 1sqlite под 1С простенький таск-мененджер, ибо готовые, которые попались, чем-нибудь, да не устраивали. Улыбка
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #384 - 08. Сентября 2008 :: 08:39
    Печать  
    CaBaT писал(а) 08. Сентября 2008 :: 08:28:
    orefkov писал(а) 08. Сентября 2008 :: 08:19:
    С таблицами SQLite делайте, что хотите Улыбка

    +1
    Я  лично уже месяца 4 как наваял на базе 1sqlite под 1С простенький таск-мененджер, ибо готовые, которые попались, чем-нибудь, да не устраивали. Улыбка

    Так поделись  Улыбка
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #385 - 08. Сентября 2008 :: 09:03
    Печать  
    Честно говоря до ума пока никак не довести, работает практически "на коленке", доки никакой, да и тупит сильно из-за неоптимального алгоритма построения дерева элементов, стыдно такое выкладывать Улыбка
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #386 - 08. Сентября 2008 :: 09:10
    Печать  
    CaBaT писал(а) 08. Сентября 2008 :: 09:03:
    Честно говоря до ума пока никак не довести, работает практически "на коленке", доки никакой, да и тупит сильно из-за неоптимального алгоритма построения дерева элементов, стыдно такое выкладывать Улыбка

    Так темболее в курилку, совместными усилиями доведем Подмигивание
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #387 - 08. Сентября 2008 :: 09:55
    Печать  
    ок, постараюсь отвязать от моего набора классов и выложить то что есть на посмотреть
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #388 - 08. Сентября 2008 :: 11:47
    Печать  
    А можно в поставщике для ТП иметь доступ хотя бы к "ПриБыстромПоиске"?
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #389 - 08. Сентября 2008 :: 16:34
    Печать  
    JohnyDeath писал(а) 08. Сентября 2008 :: 11:47:
    А можно в поставщике для ТП иметь доступ хотя бы к "ПриБыстромПоиске"?

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #390 - 10. Сентября 2008 :: 10:08
    Печать  
    Ещё такой вопрос.
    Если выполнить запрос:
    Код
    Выбрать все
    Select Товар [Товар :Справочник.Товары]
    from РегистрИтоги_ОстаткиТоваров 
    
    

    в транзакции, то будет ли блокироваться Справочник Товаров?
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #391 - 10. Сентября 2008 :: 11:31
    Печать  
    Что-то мне никак не разобраться с "УложитьОбъекты" (sqllite 1.0.1.9)

    Код
    Выбрать все
    БД.УложитьОбъекты(ВыбКонтрагенты, "ВыбКонтрагенты",,"Контрагенты");
    
    ТекстЗапроса="
    |SELECT
    |val [Контрагент $Справочник.Контрагенты]
    |FROM ВыбКонтрагенты";
     
    
    

    Вроде должно выводить список выбранных элементов в подгруппах, некотрые выводит нормально, но на 95% строк запрос выдает "Объект не найден".
    Если просмотреть какие ID выводятся, то видно что не обрабатываются ID c русскими буквами они заменяются на "?"
    Может я что-то не так делаю?  Нерешительный

    « Последняя редакция: 10. Сентября 2008 :: 21:45 - Djelf »  

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #392 - 11. Сентября 2008 :: 09:58
    Печать  
    Распределенка?
    Коды ИБ с русскими буквами?
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #393 - 11. Сентября 2008 :: 10:01
    Печать  
    Господа!
    Что-то не вижу никаких отзывов более.
    Работает ли хоть?
    Нет больше никаких багов и хотелок ?
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #394 - 11. Сентября 2008 :: 10:25
    Печать  
    Конфу под 1sqlite пока не переточил, так что как следует не проверить, но то, что уже сделано на 1sqlite, вроде работает, по скорости пока не тестировал, у меня специфика такова, что в базе обычно работает один-два чела, поэтому с блокировками проблем пока нет.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #395 - 11. Сентября 2008 :: 10:27
    Печать  
    orefkov писал(а) 11. Сентября 2008 :: 09:58:
    Распределенка?
    Коды ИБ с русскими буквами?

    С русскими. Была распределенка, потом удалением 1sdbset.dbf и т.п. стала обычной. Видимо все таки не совсем обычной  Озадачен
      
    Наверх
    www  
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #396 - 11. Сентября 2008 :: 10:28
    Печать  
    Djelf писал(а) 11. Сентября 2008 :: 10:27:
    orefkov писал(а) 11. Сентября 2008 :: 09:58:
    Распределенка?
    Коды ИБ с русскими буквами?

    С русскими. Была распределенка, потом удалением 1sdbset.dbf и т.п. стала обычной. Видимо все таки почти обычной  Озадачен

    Ок, посмотрю. Прямо сейчас.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #397 - 11. Сентября 2008 :: 10:32
    Печать  
    Александр, так что, можно типизацию в блокировке приминять http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/390#390 ?
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #398 - 11. Сентября 2008 :: 10:37
    Печать  
    Djelf писал(а) 11. Сентября 2008 :: 10:27:
    orefkov писал(а) 11. Сентября 2008 :: 09:58:
    Распределенка?
    Коды ИБ с русскими буквами?

    С русскими. Была распределенка, потом удалением 1sdbset.dbf и т.п. стала обычной. Видимо все таки не совсем обычной  Озадачен


    Проверь.
    Исправлен косяк при укладке объектов, содержащих в идшнике русские буквы.
    Убраны Begin/End ReadSequnce при чтении длинных строк и таблиц справочников при укладке объектов.
      

    1sqlite_1019_fix.zip ( 344 KB | Загрузки )
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #399 - 11. Сентября 2008 :: 10:41
    Печать  
    orefkov писал(а) 11. Сентября 2008 :: 10:37:
    Исправлен косяк при укладке объектов, содержащих в идшнике русские буквы.

    Спасибо, заработало.
      
    Наверх
    www  
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #400 - 11. Сентября 2008 :: 10:45
    Печать  
    JohnyDeath писал(а) 10. Сентября 2008 :: 10:08:
    Ещё такой вопрос.
    Если выполнить запрос:
    Код
    Выбрать все
    Select Товар [Товар :Справочник.Товары]
    from РегистрИтоги_ОстаткиТоваров 
    
    

    в транзакции, то будет ли блокироваться Справочник Товаров?

    В данном запросе чтения таблицы справочника товаров не происходит, так что блокироваться она не будет.
    При типизации чтения таблиц не происходит.
    Просто ВК вместо строки "    AZ   " выдает 1Ске "ссылка на элемент справочника Товары с id=431 и префиксом ИБ "   ".
    Вот если после этого ты сделаешь

    Сообщить(Рез.Товар)
    или
    Если Рез.Товар.ВидТовара =

    тогда уже 1С будет читать таблицу справочника Товары, для поиска реквизитов элемента с id="    AZ   ".
    Если это делается в транзакции - таблица заблокируется.
    Ну, тут говорят еще, что в 1С есть внутренний кэш объектов, и не обязательно она сразу полезет читать таблицу, но сильно рассчитывать на это не нужно.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #401 - 11. Сентября 2008 :: 11:09
    Печать  
    Провел некоторые замеры.
    Есть отчет, формирует список движений по регистру по выбранному товару.
    По быстрому наклепал его аналог на базе 1sqlite, вот результаты:
    База DBF, лежит локально
    1. исходный отчет, монопольный режим: около 2с.
    2. исходный отчет, не монопольный режим: около 5с.
    3. 1sqlite, версия 18, монопольный режим: около 0,200с.
    4. 1sqlite, версия 18, не монопольный режим: около 0,200с.
    5. 1sqlite, версия 19, монопольный режим: около 0,200с.
    6. 1sqlite, версия 19, не монопольный режим: около 2,5с.
    Но! Я ничего дополнительно в параметрах 1sqlite не менял и в транзакцию не оборачивал, т.е. просто взял новую dll-ну

    Добавлено в 15:12
    7. 1sqlite, версия 19, не монопольный режим, запрос внутри транзации: около 0,200с. !!! Ура, товарищи!
      
    Наверх
     
    IP записан
     
    artbear
    1c++ developer
    1c++ moderator
    Отсутствует


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

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

    Народ, я за веткой не сильно следил, и хотелось бы какого-то итога.
    Как решить проблему с блокировками/грязным чтением при использовании ВК - как писать запрос в монопольном/разделенном режиме?
    Можно получить ответы - пусть краткий, но емкий желательно Улыбка без отсылок на другие посты!
      

    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
    Ответ #403 - 11. Сентября 2008 :: 14:46
    Печать  
    CaBaT писал(а) 11. Сентября 2008 :: 11:09:
    Провел некоторые замеры.
    Есть отчет, формирует список движений по регистру по выбранному товару.
    По быстрому наклепал его аналог на базе 1sqlite, вот результаты:
    База DBF, лежит локально
    1. исходный отчет, монопольный режим: около 2с.
    2. исходный отчет, не монопольный режим: около 5с.
    3. 1sqlite, версия 18, монопольный режим: около 0,200с.
    4. 1sqlite, версия 18, не монопольный режим: около 0,200с.
    5. 1sqlite, версия 19, монопольный режим: около 0,200с.
    6. 1sqlite, версия 19, не монопольный режим: около 2,5с.
    Но! Я ничего дополнительно в параметрах 1sqlite не менял и в транзакцию не оборачивал, т.е. просто взял новую dll-ну

    Добавлено в 15:12
    7. 1sqlite, версия 19, не монопольный режим, запрос внутри транзации: около 0,200с. !!! Ура, товарищи!


    8.Исходный запрос, не монопольный режим, запрос внутри транзации
    проверь пожалуйста, для чистоты эксперимента
    Код
    Выбрать все
    НачатьТранзакцию();
    Если Запрос.Выполнить(ТекстЗапроса)=0 тогда
    	// Уже транзакция неактивна
    Иначе
    	ОтменитьТранзакцию();
    КонецЕсли; 
    
    

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


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #404 - 11. Сентября 2008 :: 18:17
    Печать  
    orefkov писал(а) 11. Сентября 2008 :: 10:45:
    Ну, тут говорят еще, что в 1С есть внутренний кэш объектов, и не обязательно она сразу полезет читать таблицу, но сильно рассчитывать на это не нужно.

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

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #405 - 12. Сентября 2008 :: 04:35
    Печать  
    kms писал(а) 11. Сентября 2008 :: 18:17:
    orefkov писал(а) 11. Сентября 2008 :: 10:45:
    Ну, тут говорят еще, что в 1С есть внутренний кэш объектов, и не обязательно она сразу полезет читать таблицу, но сильно рассчитывать на это не нужно.

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

    Я проводил эксперимент, проводил документ, в модуле проведения которого обращался к реквизитам элемента справочника, лежащим в ТЧ документа. (ну там правда одна строка была).
    Так вот, если проведение запускалось из открытой формы документа (те на экране уже было наименование элемента справочника в ТЧ), то блокировки таблицы справочника не было. Если же проводил как

    доки.НайтиДокумент();
    доки.Провести();

    то таблица справочника блокировалась.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #406 - 12. Сентября 2008 :: 06:52
    Печать  
    kiruha писал(а) 11. Сентября 2008 :: 14:46:
    8.Исходный запрос, не монопольный режим, запрос внутри транзации
    проверь пожалуйста, для чистоты эксперимента

    Дело в том, что движения выбираются не запросом, а так:
    Код
    Выбрать все
    Рег = СоздатьОбъект("Регистр.ОстаткиТовара");
    Рег.УстановитьФильтр(,,Товар.ТекущийЭлемент(),);
    Рег.ВыбратьДвижения(ДатаС,ДатаПо,);
    Пока Рег.ПолучитьДвижение() > 0 Цикл
    ... 
    
    

    ну для чистоты эксперимента проверил, разница в пределах погрешности измерений:

    Исходный отчет, монопольный режим: ~1,750c.
    Исходный отчет, монопольный режим, внутри транзакции: ~1,750c.
    Исходный отчет, не монопольный режим: ~4,800c.
    Исходный отчет, не монопольный режим, внутри транзакции: ~1,750c.

    Сделал для себя полезный вывод, как то раньше не задумывался об этом:
    При работе в не монополном режиме в некоторых случаях стоит заключать 1С-ный запрос (и не только запрос)
    внутрь транзакции.
    Вещь в общем то очевидная, но как то за трудовыми буднями забываешь об этом Улыбка
      
    Наверх
     
    IP записан
     
    kiruha
    1c++ power user
    Отсутствует



    Сообщений: 1249
    Зарегистрирован: 11. Апреля 2007
    Re: 1sqlite
    Ответ #407 - 12. Сентября 2008 :: 06:57
    Печать  
    CaBaT писал(а) 12. Сентября 2008 :: 06:52:
    При работе в не монополном режиме в некоторых случаях стоит заключать 1С-ный запрос (и не только запрос)
    внутрь транзакции.
    Вещь в общем то очевидная, но как то за трудовыми буднями забываешь об этом Улыбка


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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #408 - 12. Сентября 2008 :: 06:59
    Печать  
    kiruha писал(а) 12. Сентября 2008 :: 06:57:
    CaBaT писал(а) 12. Сентября 2008 :: 06:52:
    При работе в не монополном режиме в некоторых случаях стоит заключать 1С-ный запрос (и не только запрос)
    внутрь транзакции.
    Вещь в общем то очевидная, но как то за трудовыми буднями забываешь об этом Улыбка


    Я заключал. При существенном увеличении количества пользователей нарвался на вал блокировок. Пришлось отказаться.

    Ты отказался вообще везде? Даже в модулях проведения? Если где-то оставил, то по какому принципу? В общем, расскажи поподробнее, если можешь. Думаю, что всем будет полезно почитать.
      
    Наверх
     
    IP записан
     
    kiruha
    1c++ power user
    Отсутствует



    Сообщений: 1249
    Зарегистрирован: 11. Апреля 2007
    Re: 1sqlite
    Ответ #409 - 12. Сентября 2008 :: 07:14
    Печать  
    JohnyDeath писал(а) 12. Сентября 2008 :: 06:59:
    kiruha писал(а) 12. Сентября 2008 :: 06:57:
    CaBaT писал(а) 12. Сентября 2008 :: 06:52:
    При работе в не монополном режиме в некоторых случаях стоит заключать 1С-ный запрос (и не только запрос)
    внутрь транзакции.
    Вещь в общем то очевидная, но как то за трудовыми буднями забываешь об этом Улыбка


    Я заключал. При существенном увеличении количества пользователей нарвался на вал блокировок. Пришлось отказаться.

    Ты отказался вообще везде? Даже в модулях проведения? Если где-то оставил, то по какому принципу? В общем, расскажи поподробнее, если можешь. Думаю, что всем будет полезно почитать.


    Везде. Я же на прямых(vfpoledb) почти везде работаю  Улыбка

    В модуле проведения оставлять конечно можно, но не нужно- там и так все блокируется при начале проведения,
    но  проведение и так входит в транзакцию
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #410 - 12. Сентября 2008 :: 07:27
    Печать  
    orefkov писал(а) 12. Сентября 2008 :: 04:35:
    Я проводил эксперимент, проводил документ, в модуле проведения которого обращался к реквизитам элемента справочника, лежащим в ТЧ документа. (ну там правда одна строка была).
    Так вот, если проведение запускалось из открытой формы документа (те на экране уже было наименование элемента справочника в ТЧ), то блокировки таблицы справочника не было. Если же проводил как

    доки.НайтиДокумент();
    доки.Провести();

    то таблица справочника блокировалась.

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

    Вот, набросал небольшой тест на эту тему.
    Надо запускать в двух разных сессиях 1С.
    Для меня было неожиданным, что последовательность "НайтиЭлемент" - "Изменить наименование (на другое)" дают в дампе разные значения.

    Ну а интереснее всего - это как раз тест влияния кеша (правда, этот набросок для SQL).
    (в одной сессии - "Тест влияния кеша", в другой - "Найти элемент" - "Изменить наименование").
    У меня выходит, что таблицы начинают блокироваться где-то после размера в 1000 элементов.

    Еще интересно, что замена типа обращения с "Строка(_т.Объект)" на "_т.Объект.Наименование" блокирует таблицу сразу (у меня нет объяснения).
      

    TestIsol.ert ( 9 KB | Загрузки )

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    kiruha
    1c++ power user
    Отсутствует



    Сообщений: 1249
    Зарегистрирован: 11. Апреля 2007
    Re: 1sqlite
    Ответ #411 - 12. Сентября 2008 :: 08:32
    Печать  
    orefkov писал(а) 12. Сентября 2008 :: 04:35:
    Я проводил эксперимент, проводил документ, в модуле проведения которого обращался к реквизитам элемента справочника, лежащим в ТЧ документа. (ну там правда одна строка была).
    Так вот, если проведение запускалось из открытой формы документа (те на экране уже было наименование элемента справочника в ТЧ), то блокировки таблицы справочника не было. Если же проводил как

    доки.НайтиДокумент();
    доки.Провести();

    то таблица справочника блокировалась.



    У меня была застарелая проблема - периодичесое зависалово (блокировка) спр номенклатуры. Программное проведение -обязательно для появления блокировки спр.?
    Может при других условиях при проведении через форму  тоже возможно появление блокировки?
    « Последняя редакция: 12. Сентября 2008 :: 10:31 - kiruha »  
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #412 - 12. Сентября 2008 :: 12:31
    Печать  
    kiruha писал(а) 12. Сентября 2008 :: 08:32:
    orefkov писал(а) 12. Сентября 2008 :: 04:35:
    Я проводил эксперимент, проводил документ, в модуле проведения которого обращался к реквизитам элемента справочника, лежащим в ТЧ документа. (ну там правда одна строка была).
    Так вот, если проведение запускалось из открытой формы документа (те на экране уже было наименование элемента справочника в ТЧ), то блокировки таблицы справочника не было. Если же проводил как

    доки.НайтиДокумент();
    доки.Провести();

    то таблица справочника блокировалась.



    У меня была застарелая проблема - периодичесое зависалово (блокировка) спр номенклатуры. Программное проведение -обязательно для появления блокировки спр.?
    Может при других условиях при проведении через форму  тоже возможно появление блокировки?

    Ну, имхо - если на экране видна ТЧ, и элементы в ней, то скорее всего, эти объекты лежат в кэше, и при обращении к их реквизитам 1С не полезет подчитывать данные из таблицы, и блокировки не будет. А если элементов больше, наверняка чтонить не найдется в кэше.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #413 - 14. Сентября 2008 :: 15:54
    Печать  
    1sqlite вылетает вместе с 1С на подключении таблиц если в документе нет реквизитов шапки (добавляю реквизит - работает).
    Выгрузка c глючным документом (12kb) приложена. Должно вылетать в 1sqlite.ert по кнопке "Подключаемые таблицы" Документ.ПлохойДокумент.
    С автоподключением: "select * from Документ_ПлохойДокумент" тоже вылетает.
      

    bugbase.zip ( 12 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #414 - 01. Ноября 2008 :: 11:31
    Печать  
    Скопирую и сюда:
    JohnyDeath писал(а) 01. Ноября 2008 :: 06:59:
    Тут небольшой баг нарисовался.
    Но меня другое немного пугает. Может кто-нибудь сказать (тут же есть люди, которые сидят бок о бок с ним  Круглые глаза ), Саша Орефков будет продолжать проект?

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


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #415 - 04. Ноября 2008 :: 15:42
    Печать  
    А вот и я тут свою "находку" покажу.
    Описал подробно тут - http://www.1cpp.ru/forum/YaBB.pl?num=1206042291/666#666
    В кратце: ИТЗ сформированная запросом чем-то отличается от ИТЗ "классической" и в итоге после подключения в ТП 1С-ка может падать. Причем не обязательно сразу же. А после нескольких обновлений ИТЗ (путем Запрос.Выполнить(ИТЗПоставщика)) и обновлений строк в ТП. В общем какого-то постоянного теста наваять не удается. Видимо это и от данных как то зависит.  Плачущий
      

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


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #416 - 04. Ноября 2008 :: 15:48
    Печать  
    Блин я запутался. С одной стороны сама ДЛЛ может лежать и в репозитории и проблемы с ней лучше писать тут. Обсуждение "запросов" через 1sqlite можно обсуждать там - http://www.1cpp.ru/forum/YaBB.pl?num=1192855975. Но в итоге мне кажется народ путается и не знает куда лучше написать чтобы не потерялось.
    Вернее всего конечно писать в google Улыбка наверное.  Класс
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #417 - 18. Ноября 2008 :: 09:17
    Печать  
    Выпущена официальная 1.0.1.9

        - Сделано принудительное округление чисел при типизации :Число, тк получатели
         результата (кроме ТаблицыЗначений) сами этого не делают.
        - Исправлена работа типизации при обработке NULL значений, тк получатели
         результата (кроме ТаблицыЗначений) сами этого не делают.
        - Изменена логика работы с Begin/EndReadSequnce. В немонопольном режиме падение
         производительности, зато не падает.
        - Добавлен метод SQLiteQuery::ОбработатьТекстЗапроса
        - Добавлено свойство SQLiteQuery::ВыполнятьВТранзакции
        - Исправлена ошибка программы при подключении таблиц шапки документа, не имеющего
         реквизитов шапки.
        - Исправлена ошибка при выборке из таблиц 1С, иногда могущая привести к зависанию
         программы.
        - Добавлено подключение таблиц ЖурналовРасчетов ДБФ версии 1С.
        - Исправлена укладка списка объектов при наличии иерархии - неверно укладывались
         объекты, содержащие в идентификаторе русские буквы (распределенка с русским
         префиксом ИБ).
        - Добавлен объект SQLiteDataProvider - поставщик данных табличного поля 1С++ для
         таблиц sqlite и таблиц 1С DBF-версии.

    Обновлена документация.

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #418 - 18. Ноября 2008 :: 09:58
    Печать  
    Спасибо!

    А БыстрогоПоиска в поставщике для ТП не будет?  Нерешительный
      
    Наверх
     
    IP записан
     
    Chieftain
    Senior Member
    ****
    Отсутствует


    ___

    Сообщений: 498
    Местоположение: Тула
    Зарегистрирован: 15. Февраля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #419 - 18. Ноября 2008 :: 10:25
    Печать  
    Может мне кто подскажет, в чем засада. Пробую два аналогичныйх запроса на Oledb и 1sqlite
    Код
    Выбрать все
    	НачВремя=_GetPerformanceCounter();
    	БазаОЛЕ					= СоздатьОбъект("OLEDBData");
    	БазаОЛЕ.Connect("Provider=VFPOLEDB.1;Data Source="+КаталогИБ()+"1Cv7.DBC;Mode=ReadWrite;Mask Password=False;Collating Sequence=MACHINE;");
    	Запрос					= БазаОЛЕ.СоздатьКоманду();
    	MetaDataWork			= СоздатьОбъект("MetaDataWork");
    
    	ТекстЗапроса			= "
    	|SELECT		Товары.Descr as [Наименование as $Строка],
    	|			Товары.IsMark as [Пометка as $Строка],
    	|			Остатки.Количество as [Остаток as $Число]
    	|FROM		$Справочник.Номенклатура as Товары
    	|LEFT JOIN
    	|	(	SELECT $врОст.Номенклатура as ID,SUM($врОст.Количество) as Количество
    	|		FROM $РегистрИтоги.ОстаткиТМЦ as врОст
    	|		WHERE period=:НачДата~~
    	|		GROUP BY 1
    	|		HAVING SUM($врОст.Количество)<>0
    	|	) as Остатки ON Остатки.ID=Товары.ID
    	|WHERE (Товары.IsMark<>'*')AND(Товары.IsFolder=2)
    	|ORDER BY 1
    	|";
    	Запрос.УстановитьТекстовыйПараметр("НачДата",НачМесяца(ТекущаяДата()));
    	Табл					= Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    	Сообщить("Прошло: "+(_GetPerformanceCounter()-НачВремя));
    	Табл.Выгрузить(Данные);
    КонецПроцедуры 
    
    

    Выводит "Прошло: 135"
    Код
    Выбрать все
    	НачВремя=_GetPerformanceCounter();
    	БазаSQLite				= СоздатьОбъект("SQLiteBase");
    	БазаSQLite.Открыть(":memory:");
    	Запрос					= БазаSQLite.НовыйЗапрос();
    	ТекстЗапроса			= "
    	|SELECT		Товары.Descr [Наименование:Строка],
    	|			Товары.IsMark as [Пометка as $Строка],
    	|			Остатки.Количество [Остаток:Число.19.3]
    	|FROM		Справочник_Номенклатура as Товары
    	|LEFT JOIN
    	|	(	SELECT врОст.Номенклатура as ID,SUM(врОст.Количество) as Количество
    	|		FROM РегистрИтоги_ОстаткиТМЦ as врОст
    	|		WHERE period=:НачДата
    	|		GROUP BY 1
    	|		HAVING SUM(врОст.Количество)<>0
    	|	) as Остатки ON Остатки.ID=Товары.ID
    	|WHERE (Товары.IsMark<>'*')AND(Товары.IsFolder=2)
    	|ORDER BY 1
    	|";
    	Запрос.Подставлять("НачДата",НачМесяца(ТекущаяДата()));
    	Табл					= Запрос.ВыполнитьЗапрос(ТекстЗапроса);
    	Сообщить("Прошло: "+(_GetPerformanceCounter()-НачВремя));
    	Табл.Выгрузить(Данные);
    КонецПроцедуры 
    
    

    Выводит "Прошло: 9286"
    База в обоих случаях локально на висте, пробовал и транзакции и вообще все подряд. Результат, с незначителными изменениями, одинаковый
      
    Наверх
    ICQ  
    IP записан
     
    kiruha
    1c++ power user
    Отсутствует



    Сообщений: 1249
    Зарегистрирован: 11. Апреля 2007
    Re: 1sqlite
    Ответ #420 - 18. Ноября 2008 :: 10:42
    Печать  
    Chieftain писал(а) 18. Ноября 2008 :: 10:25:
    Может мне кто подскажет, в чем засада. Пробую два аналогичныйх запроса на Oledb и 1sqlite

    База в обоих случаях локально на висте, пробовал и транзакции и вообще все подряд. Результат, с незначителными изменениями, одинаковый


    В SQLLite соединение с временными таблицами(вложенный подзапрос) идет по алгоритму полного перебора - а в Fox предварительно индексируется.
    Можно либо принудительно проиндексировать подзапрос до соединения или писать запрос без вложенного подзапроса (вышеприведенный пример это позволяет)
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #421 - 18. Ноября 2008 :: 10:44
    Печать  
    kiruha писал(а) 18. Ноября 2008 :: 10:42:
    Можно либо принудительно проиндексировать подзапрос

    а можно спросить, как это сделать? через временную таблицу?
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #422 - 18. Ноября 2008 :: 10:49
    Печать  
    Наверное как-то так: http://sb-news.net/sqlite.php?page=41
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #423 - 18. Ноября 2008 :: 11:00
    Печать  
    это то понятно, но для этого подзапрос нужно выкинуть видимо во временную таблицу, проиндексировать ее и потом в запросе с ней джойнить, я правильно понял мысль?
      
    Наверх
     
    IP записан
     
    kiruha
    1c++ power user
    Отсутствует



    Сообщений: 1249
    Зарегистрирован: 11. Апреля 2007
    Re: 1sqlite
    Ответ #424 - 18. Ноября 2008 :: 11:00
    Печать  
    CaBaT писал(а) 18. Ноября 2008 :: 10:44:
    kiruha писал(а) 18. Ноября 2008 :: 10:42:
    Можно либо принудительно проиндексировать подзапрос

    а можно спросить, как это сделать? через временную таблицу?


    Да. Во временную. Потом добавить индекс во временной по тем полям, по которым будет соединение.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #425 - 18. Ноября 2008 :: 11:03
    Печать  
    спасибо
    конечно по сравнению с OLEDB решение получается более громоздким...
    но я все равно сейчас всю конфу переделываю на 1sqilte Улыбка
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #426 - 18. Ноября 2008 :: 11:34
    Печать  
    Замер() только у меня отвалился?
    0% загрузки процессора и нет ответа от 1С (на любом запросе в 1sqlite_console).
      
    Наверх
    www  
    IP записан
     
    Chieftain
    Senior Member
    ****
    Отсутствует


    ___

    Сообщений: 498
    Местоположение: Тула
    Зарегистрирован: 15. Февраля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #427 - 18. Ноября 2008 :: 11:44
    Печать  
    kiruha писал(а) 18. Ноября 2008 :: 11:00:
    Да. Во временную. Потом добавить индекс во временной по тем полям, по которым будет соединение.


    Да, кстати... скорость выросла значительно. Хотя в предыдущие разы сокращалось до ~2000 мс

    Код
    Выбрать все
    НачВремя=_GetPerformanceCounter();
    БазаSQLite		    = СоздатьОбъект("SQLiteBase");
    БазаSQLite.Открыть(":memory:");
    Запрос			  = БазаSQLite.НовыйЗапрос();
    Запрос.ВыполнитьЗапрос("Create table SQL_OSTATKI (ID TEXT,Количество REAL)");
    Запрос.ВыполнитьЗапрос("Create index ID ON SQL_OSTATKI (ID)");
    Запрос.Подставлять("НачДата",НачМесяца(ТекущаяДата()));
    Запрос.ВыполнитьЗапрос("INSERT INTO SQL_OSTATKI
    |    SELECT врОст.Номенклатура,SUM(врОст.Количество)
    |	  FROM РегистрИтоги_ОстаткиТМЦ as врОст
    |		 WHERE врОст.period=:НачДата
    |	  GROUP BY 1
    |	  HAVING SUM(врОст.Количество)<>0
    |");
    
    ТекстЗапроса		= "
    |SELECT		Товары.Descr [Наименование:Строка],
    |			Товары.IsMark as [Пометка as $Строка],
    |			Остатки.Количество [Остаток:Число.19.3]
    |FROM		Справочник_Номенклатура as Товары
    |LEFT JOIN SQL_OSTATKI as Остатки ON Остатки.ID=Товары.ID
    |";
    Табл			  = Запрос.ВыполнитьЗапрос(ТекстЗапроса);
     
    
    

    Упало время выполнения в разделенном до 380, в монопольном до 170
      
    Наверх
    ICQ  
    IP записан
     
    artbear
    1c++ developer
    1c++ moderator
    Отсутствует


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

    Сообщений: 6303
    Местоположение: Москва
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #428 - 18. Ноября 2008 :: 12:17
    Печать  
    Полуофф.
    А разве сначала заполнение данных, а уж потом создание индекса/индексация не будет пошустрее?
      

    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
    Ответ #429 - 18. Ноября 2008 :: 13:52
    Печать  
    Chieftain писал(а) 18. Ноября 2008 :: 10:25:
    Может мне кто подскажет, в чем засада.

    Засада в том, что этот запрос для 1sqlite надо писать так:

    Код
    Выбрать все
    SELECT
    	Товары.Descr [Наименование:Строка],
    	Товары.IsMark as [Пометка as $Строка],
    	(
    		select SUM(врОст.Количество) FROM РегистрИтоги_ОстаткиТМЦ as врОст
    		WHERE period=:НачДата and врОст.Номенклатура = Товары.ID
    	) [Остаток:Число.19.3]
    FROM Справочник_Номенклатура as Товары
    WHERE (Товары.IsMark<>'*')AND(Товары.IsFolder=2)
    ORDER BY 1
     
    
    


    скорее всего, в данном случае куцый оптимизатор sqlite не смог втащить условие соединения внутрь позапроса, то есть на КАЖДУЮ запись из справочника товаров в памяти во временную таблицу суммируются ВСЕ записи из регистра с нужным периодом, и потом среди этих просуммированных записей ищется одна строка с нужным ID. Либо суммы просчитываются один раз, но поиск в них по ID неиндексирован.
    Более точно можно ответить, выполнив explain и explain query plan, либо включив замер.

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #430 - 18. Ноября 2008 :: 14:04
    Печать  
    Александр, так стОит ждать БыстрыйПоиск в поставщике для ТП? Без него, ИМХО, как без рук.
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #431 - 18. Ноября 2008 :: 14:05
    Печать  
    JohnyDeath писал(а) 18. Ноября 2008 :: 14:04:
    Александр, так стОит ждать БыстрыйПоиск в поставщике для ТП? Без него, ИМХО, как без рук.

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


    ___

    Сообщений: 498
    Местоположение: Тула
    Зарегистрирован: 15. Февраля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #432 - 21. Ноября 2008 :: 06:53
    Печать  
    orefkov писал(а) 18. Ноября 2008 :: 13:52:
    Chieftain писал(а) 18. Ноября 2008 :: 10:25:
    Может мне кто подскажет, в чем засада.

    Засада в том, что этот запрос для 1sqlite надо писать так:

    Код
    Выбрать все
    SELECT
    	Товары.Descr [Наименование:Строка],
    	Товары.IsMark as [Пометка as $Строка],
    	(
    		select SUM(врОст.Количество) FROM РегистрИтоги_ОстаткиТМЦ as врОст
    		WHERE period=:НачДата and врОст.Номенклатура = Товары.ID
    	) [Остаток:Число.19.3]
    FROM Справочник_Номенклатура as Товары
    WHERE (Товары.IsMark<>'*')AND(Товары.IsFolder=2)
    ORDER BY 1
     
    
    


    скорее всего, в данном случае куцый оптимизатор sqlite не смог втащить условие соединения внутрь позапроса, то есть на КАЖДУЮ запись из справочника товаров в памяти во временную таблицу суммируются ВСЕ записи из регистра с нужным периодом, и потом среди этих просуммированных записей ищется одна строка с нужным ID. Либо суммы просчитываются один раз, но поиск в них по ID неиндексирован.
    Более точно можно ответить, выполнив explain и explain query plan, либо включив замер.

    Ну и естественно, многое зависит от есть ли отбор итогов по измерению Номенклатура.


    Да, возможно такой варант был бы приемлим. Но этот пример решает проблему только с одним запросом. В реале вложенный запрос может иметь более сложную структуру с соединением движений регистра, а также получением итогов и движений по второму регистру. В такоем случае лучше подход как в
    http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/420#427
      
    Наверх
    ICQ  
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #433 - 21. Ноября 2008 :: 11:57
    Печать  
    Решил тут глянуть поставщика ТП для SQLite, обнаружил такое ограничение: в доке написано, что нельзя в запросе использовать конструкцию "order by".
    Возможно мой вопрос очень глупый, но все же - а как делать сортировку результата?
    Например если делать замену формы списка справочника "Номенклатура"?
      
    Наверх
     
    IP записан
     
    trad
    1c++ power user
    1c++ donor
    1c++ moderator
    Отсутствует



    Сообщений: 3046
    Местоположение: Киров
    Зарегистрирован: 23. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #434 - 21. Ноября 2008 :: 12:12
    Печать  
    сортировка в ТП определяется ключем порядка (метод УстКлючПорядка)
      

    1&&2&&3
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #435 - 21. Ноября 2008 :: 14:13
    Печать  
    спасибо, была мысль в этом направлении, но я думал, что это надо через поставщика как-то делать Улыбка
      
    Наверх
     
    IP записан
     
    trad
    1c++ power user
    1c++ donor
    1c++ moderator
    Отсутствует



    Сообщений: 3046
    Местоположение: Киров
    Зарегистрирован: 23. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #436 - 21. Ноября 2008 :: 16:04
    Печать  
    CaBaT писал(а) 21. Ноября 2008 :: 14:13:
    спасибо, была мысль в этом направлении, но я думал, что это надо через поставщика как-то делать Улыбка

    ну дык устключпорядка и есть метод поставщика
      

    1&&2&&3
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #437 - 21. Ноября 2008 :: 16:31
    Печать  
    trad писал(а) 21. Ноября 2008 :: 16:04:
    ну дык устключпорядка и есть метод поставщика

    кстати, у поставщика SQLite такого метода нет...
      
    Наверх
     
    IP записан
     
    trad
    1c++ power user
    1c++ donor
    1c++ moderator
    Отсутствует



    Сообщений: 3046
    Местоположение: Киров
    Зарегистрирован: 23. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #438 - 24. Ноября 2008 :: 06:16
    Печать  
    CaBaT писал(а) 21. Ноября 2008 :: 16:31:
    trad писал(а) 21. Ноября 2008 :: 16:04:
    ну дык устключпорядка и есть метод поставщика

    кстати, у поставщика SQLite такого метода нет...

    Смущённый Пардон. Оказывается я не в теме.
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #439 - 25. Ноября 2008 :: 06:10
    Печать  
    Смотри параметры метода УстановитьТекстЗапроса поставщика.
    Кроме того, я выкладывал в ветке примеры работы с поставщиком, там можно разобраться.
    Порядок задается ключевым полем.
    Хинт - для дбф таблиц 1С можно (вернее даже нужно) в качестве ключевого поля задавать виртуальное поле индекса, то есть надо упорядочить по наименованию - задаешь ключевое поле idx_descr, по коду - idx_code и тд.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #440 - 25. Ноября 2008 :: 07:42
    Печать  
    Александр, спасибо!
    Была догадка, что надо внимательнее поковырять метод "УстановитьТекстЗапроса", но проверить пока не успел Улыбка
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #441 - 28. Ноября 2008 :: 08:12
    Печать  
    Пытаюсь оптимизировать запрос, никто не подскажет, что означают сообщения при включенной отладке:
    Код
    Выбрать все
    Подбор индекса для таблицы RA22725:
    	Ограничения:
    	Найдено в кэше
    	Индекс не выбран.
    	Стоимость: 9980
    Подбор индекса для таблицы RA22725:
    	Ограничения: IDDOC=;
    	Найдено в кэше
    	Выбран индекс IDLINE: IDDOC+STR(LINENO,4)+STR(ACTNO,6)
    	Стоимость: 60
    Подбор индекса для таблицы RA48240:
    	Ограничения: SP48241[Товар]=; SP48243[Дата]<=;
    	Упорядочить: SP48243[Дата] desc,
    	Найдено в кэше
    	Выбран индекс VIA48242: SP48241+DTOS(SP48243)
    	Попадает в сортировку
    	Стоимость: 9 
    
    

    Смысл мне понятен, но как понять, что хорошо а что плохо?
    В частности не очень понятно, как оценивать величину "Стоимость"? Например 9 - это много или мало?
    "Найдено в кеше" - это наверное хорошо?
    "Попадает в сортировку" - ???
    Конечно мои познания в SQL не очень глубоки, но если кто-нибудь скажет на пальцах к чему надо стремиться, уже будет проще.
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #442 - 28. Ноября 2008 :: 16:37
    Печать  
    CaBaT писал(а) 28. Ноября 2008 :: 08:12:
    Пытаюсь оптимизировать запрос, никто не подскажет, что означают сообщения при включенной отладке:
    Код
    Выбрать все
    Подбор индекса для таблицы RA22725:
    	Ограничения:
    	Найдено в кэше
    	Индекс не выбран.
    	Стоимость: 9980
    Подбор индекса для таблицы RA22725:
    	Ограничения: IDDOC=;
    	Найдено в кэше
    	Выбран индекс IDLINE: IDDOC+STR(LINENO,4)+STR(ACTNO,6)
    	Стоимость: 60
    Подбор индекса для таблицы RA48240:
    	Ограничения: SP48241[Товар]=; SP48243[Дата]<=;
    	Упорядочить: SP48243[Дата] desc,
    	Найдено в кэше
    	Выбран индекс VIA48242: SP48241+DTOS(SP48243)
    	Попадает в сортировку
    	Стоимость: 9 
    
    

    Смысл мне понятен, но как понять, что хорошо а что плохо?
    В частности не очень понятно, как оценивать величину "Стоимость"? Например 9 - это много или мало?
    "Найдено в кеше" - это наверное хорошо?
    "Попадает в сортировку" - ???
    Конечно мои познания в SQL не очень глубоки, но если кто-нибудь скажет на пальцах к чему надо стремиться, уже будет проще.


    А покажи в чем разница между запросами выдающими такой результат?
      

    Отхожу от дел. Долго и мучительно.
    Наверх
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #443 - 28. Ноября 2008 :: 18:15
    Печать  
    дык это один запрос, причем самое интересное, там где стоимость 9980, работает быстро, а когда добавляю в запрос доп. условия, стоимость которых 100, запрос выполняется медленнее в 10 раз  Печаль
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #444 - 28. Ноября 2008 :: 18:53
    Печать  
    CaBaT писал(а) 28. Ноября 2008 :: 18:15:
    дык это один запрос, причем самое интересное, там где стоимость 9980, работает быстро, а когда добавляю в запрос доп. условия, стоимость которых 100, запрос выполняется медленнее в 10 раз  Печаль


    Слушай... надо бы на своем конструкторе посмотреть замеры и подумать на досуге что к чему...  Класс
      

    Отхожу от дел. Долго и мучительно.
    Наверх
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #445 - 28. Ноября 2008 :: 18:56
    Печать  
    во во, я вот тоже задумался, когда уперся в стену в стремлении оптимизировать запрос.
    пока все, чего я добился - это некоторое ускорение за счет создания вручную индексов через файл 1cv77.dd,
    но этот вариант связан с постоянным восстановлением этих индексов после изменения конфы.
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #446 - 30. Ноября 2008 :: 13:00
    Печать  
    2 Александр Орефков

    Хотел попросить добавить возможность типизации счета без указания конкретного вида в запросе при наличии колонки Идентификатор_Вид (_kind) аналогично тому как это сделано в документах. Есть надежда на благополучный исход?  Подмигивание
    Дело в том что если несколько планов счетов то таблица хранит вид плана счетов в соседней колонке а ID по прежнему колонка длиной 9 символов. И если типизируешь ее без указания вида то получаешь пустоту  Нерешительный
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #447 - 03. Декабря 2008 :: 12:59
    Печать  
    vandalsvq писал(а) 30. Ноября 2008 :: 13:00:
    2 Александр Орефков

    Хотел попросить добавить возможность типизации счета без указания конкретного вида в запросе при наличии колонки Идентификатор_Вид (_kind) аналогично тому как это сделано в документах. Есть надежда на благополучный исход?  Подмигивание
    Дело в том что если несколько планов счетов то таблица хранит вид плана счетов в соседней колонке а ID по прежнему колонка длиной 9 символов. И если типизируешь ее без указания вида то получаешь пустоту  Нерешительный

    Пока как вариант могу только предложить формировать 13-и символьное поле в запросе:

    select kind || acc [Счет :Счет]

    (|| - это операция сложения строк)
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #448 - 03. Декабря 2008 :: 13:22
    Печать  
    CaBaT писал(а) 28. Ноября 2008 :: 08:12:
    Пытаюсь оптимизировать запрос, никто не подскажет, что означают сообщения при включенной отладке:
    Код
    Выбрать все
    Подбор индекса для таблицы RA22725:
    	Ограничения:
    	Найдено в кэше
    	Индекс не выбран.
    	Стоимость: 9980
    Подбор индекса для таблицы RA22725:
    	Ограничения: IDDOC=;
    	Найдено в кэше
    	Выбран индекс IDLINE: IDDOC+STR(LINENO,4)+STR(ACTNO,6)
    	Стоимость: 60
    Подбор индекса для таблицы RA48240:
    	Ограничения: SP48241[Товар]=; SP48243[Дата]<=;
    	Упорядочить: SP48243[Дата] desc,
    	Найдено в кэше
    	Выбран индекс VIA48242: SP48241+DTOS(SP48243)
    	Попадает в сортировку
    	Стоимость: 9 
    
    

    Смысл мне понятен, но как понять, что хорошо а что плохо?
    В частности не очень понятно, как оценивать величину "Стоимость"? Например 9 - это много или мало?
    "Найдено в кеше" - это наверное хорошо?
    "Попадает в сортировку" - ???
    Конечно мои познания в SQL не очень глубоки, но если кто-нибудь скажет на пальцах к чему надо стремиться, уже будет проще.


    Это служебная информация при взаимодействии движка SQLite с моей ВК.
    Так как SQLite понятия не имеет о дбф-таблицах, то перед выборкой он запрашивает у меня, как я лучше смогу выбрать данные.
    Он мне передает ограничения, накладываемые на выборку, а я исходя из них должен ответить, какова стоимость выборки при таких ограничениях. То есть SQLite строит план выполнения запроса, и узнает у меня, как лучше его организовать. Он может для одной таблицы запросить несколько вариантов выборки и выберет тот, у которого наименьшая стоимость.
    Для примера рассмотрим запрос вида
    select ...
    from Регистр_Остатки Р inner join Журнал Ж on Ж.iddoc = Р.iddoc
    where Ж.date between :НачДата and :КонДата

    Выполнять его можно двумя способами:
    1. Выбрать все записи из регистра, для каждой записи найти по iddoc запись в Журнале, проверить, что дата попадает в условие
    2. Выбрать из журнала записи по дате, для каждой записи найти запись в регистре по iddoc

    Чтобы выбрать, как именно выполнять запрос, SQLite и запрашивает у меня стоимости разных индексов.
    Для этого запроса он спросит сначала стоимость выборки из журнала с ограничениями date >= и date <=, затем стоимость выборки из регистра без ограничений. Сравнив стоимости, он и выберет, что нужно идти по журналу.

    Таким образом, в отладке выдается:
    Ограничения - переданные от SQLite тестируемые ограничения для таблицы.
    Упорядочить - если SQLite нужно, чтобы данные были в каком-то порядке, то он передает список полей для сортировки
    Найдено в кэше - для ускорения вычисления, какой индекс можно использовать для заданных ограничений, я их кэширую, и если для этой таблицы SQLite уже спрашивал про выборку с такими же ограничениями, то я не подбираю индекс снова, а сразу выдаю готовый ответ.
    Попадает в сортировку - если SQLite нужно, чтобы выборка была упорядочена, и выбранный индекс как раз подходит под нужную сортировку, то я говорю ему об этом, и SQLite не сортирует то, что я ему выдам, те я гарантирую ему, что выдавать записи буду в нужном порядке.
    Стоимость - ну там рассчитана стоимость использования индекса по хитрой формуле, чем меньше, тем лучше.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #449 - 03. Декабря 2008 :: 16:28
    Печать  
    спасибо, в общем и целом понятно, буду дальше экспериментировать... Улыбка
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #450 - 20. Декабря 2008 :: 05:23
    Печать  
    Александр хотел спросить, в 1sqlite насколько я знаю версия SQLite - 3.5.9... а на сколько сложно обновить до текущей версии движка? Я просто почитал обновления на их сайте, в общем то есть ряд "критических" изменений.

    Пы.сы. хотя я пока багов в работе запросов особо не наблюдал.
      

    Отхожу от дел. Долго и мучительно.
    Наверх
    IP записан
     
    sashas09
    Full Member
    ***
    Отсутствует


    I Love YaBB 2!

    Сообщений: 148
    Местоположение: Киев
    Зарегистрирован: 26. Апреля 2007
    Пол: Мужской
    1sqlite
    Ответ #451 - 22. Декабря 2008 :: 14:03
    Печать  
    2 orefkov

    в последней версии наблюдается та же ситуация

    При выполнении запроса
    SELECT
      Фирма AS [Фирма $Справочник.Фирмы],
      ...
      Статус AS [Статус $Строка.1]
    FROM РегистрИтоги_Партии

    WHERE PERIOD= '20060701'
    AND (Статус ='А')

    такой запрос выполняется прекрасно

    в случае задания условия по статусу
      AND(Статус IN ('А','Б'))

    - начинаются чудеса

    Запрос выдает пустые данные ( т.е пустую тз)
    в среднем в 8-9 случаях из 10

    Замена букав с русских на английские полностью устранила
    эту ситуацию

    кроме collate_1c чего-нить планируется изменить?
      
    Наверх
    ICQ  
    IP записан
     
    sashas09
    Full Member
    ***
    Отсутствует


    I Love YaBB 2!

    Сообщений: 148
    Местоположение: Киев
    Зарегистрирован: 26. Апреля 2007
    Пол: Мужской
    1sqlite
    Ответ #452 - 22. Декабря 2008 :: 14:05
    Печать  
    версия 1sqlite 1.0.1.9
      
    Наверх
    ICQ  
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #453 - 06. Февраля 2009 :: 07:48
    Печать  
    Удалось нарисовать тест глюка работы с периодическими реквизитами.
    описание проблемы здесь: http://www.1cpp.ru/forum/YaBB.pl?num=1216729138/22#22
    версия 1sqlite: 1.0.1.9 от 18.11.2008

    В надежде на то, что Саша Орефков сюда заглянет и у него вдруг окажется немного времени, что бы глянуть на мой тест Улыбка
    А пока проблему придется обходить использованием двух условий.

    P.S.: если кто-нибудь проверит у себя, буду благодарен.
      

    SQLite_Bug_1.rar ( 13 KB | Загрузки )
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #454 - 06. Февраля 2009 :: 08:08
    Печать  
    Ну ты же сам ссылку привёл, а там дата "25.07.08", поэтому люди, работающие с 1sqlite, знают  об этом как минимум с той даты Подмигивание
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #455 - 06. Февраля 2009 :: 08:11
    Печать  
    это то да, но несколькими постами ниже Саша написал, что ему проблему не удалось воспроизвести, вот я и решил тест сделать, что бы если вдруг он сюда заглянет, то сможет быстро этот глюк увидеть...

    Артур бы меня похвалил... Улыбка
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #456 - 06. Февраля 2009 :: 08:17
    Печать  
    интересно, а насколько изменяется и изменяется ли вообще скорость запроса при замене условия "<=" на "< or =", никто не выяснял?
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #457 - 06. Февраля 2009 :: 12:44
    Печать  
    CaBaT писал(а) 06. Февраля 2009 :: 08:17:
    интересно, а насколько изменяется и изменяется ли вообще скорость запроса при замене условия "<=" на "< or =", никто не выяснял?


    Немного не в тему отвечу... в основном она про попадание в индекс + условия. Очень часто если нет ORDER BY и много условий оптимизатор не может найти подходящий индекс. На текущий момент чтобы оптимизатор не мучался я ему запрос даю после обработки в MetaDataWork, так надежнее и чаще в индекс попадаешь. Проверено несколько раз что один и тот же запрос может не попасть в индекс если его писать через параметры, а потом их подставлять, и попасть и на ура быстро взлететь если там уже все проставлено и параметров нет.

    Пы.сы. в смысле я не ОбрМетаСкл делаю а просто параметры заранее получаю и в запрос уже подставляю значение...
      

    Отхожу от дел. Долго и мучительно.
    Наверх
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #458 - 06. Февраля 2009 :: 12:58
    Печать  
    это касается 1sqlite или OLEDB?
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #459 - 06. Февраля 2009 :: 13:00
    Печать  
    CaBaT писал(а) 06. Февраля 2009 :: 12:58:
    это касается 1sqlite или OLEDB?


    1sqlite... там через отладчик я и смотрю стоимость выполнения и просто расчитываю время выполнения.
      

    Отхожу от дел. Долго и мучительно.
    Наверх
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #460 - 06. Февраля 2009 :: 18:26
    Печать  
    о, это интересно! как рассчитываешь?
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #461 - 06. Февраля 2009 :: 20:56
    Печать  
    Вопрос по поставщику.
    1. Можно ли задавать "составной ключ"??? (ну вроде DESCR,ISFOLDER,ISMARK)
    2. Можно ли сортировку сделать также и в противоположную сторону (т.е. по убыванию... ну тюею DESC) ?


    Набор ISFOLDER||DESCR(CODE)||ID AS [КлючПорядка] - вот так будет как надо, и порядок групп, и наименование (Код) и уникальность через ID  Очень довольный
    ОДНАКО: засада в том что в таком случае не попадаю в индекс и сразу стоимость выборки = 9998, а не 12...  Плачущий
    « Последняя редакция: 08. Февраля 2009 :: 12:13 - vandalsvq »  

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


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #462 - 06. Февраля 2009 :: 21:41
    Печать  
    И еще проблемы...
    В общем если вызвать метод "РедактироватьЗначение" у ТП с поставщиком SQLite то поле редактирования создается в первой строке. Но записывается в нужный нам реквизит. Т.е. видимо ТП не может понять текущую строку чтобы правильно подставить реквизит... вот так вот  Смущённый

    ПЫ.СЫ.
    Причина ясна... поскольку ключ не уникален поэтому и проблемы. Как только ключ уникален тогда все нормально. Ушел думать
      

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #463 - 08. Февраля 2009 :: 14:21
    Печать  
    vandalsvq писал(а) 06. Февраля 2009 :: 20:56:
    Вопрос по поставщику.
    1. Можно ли задавать "составной ключ"??? (ну вроде DESCR,ISFOLDER,ISMARK)
    2. Можно ли сортировку сделать также и в противоположную сторону (т.е. по убыванию... ну тюею DESC) ?


    Набор ISFOLDER||DESCR(CODE)||ID AS [КлючПорядка] - вот так будет как надо, и порядок групп, и наименование (Код) и уникальность через ID  Очень довольный
    ОДНАКО: засада в том что в таком случае не попадаю в индекс и сразу стоимость выборки = 9998, а не 12...  Плачущий

    А если задействовать виртуальное поле: "idx_PARENTID_ISFOLDER_CODE" или "idx_PARENTID_ISFOLDER_DESCR" ?
    Правда не знаю как тут с уникальностью будет..
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #464 - 08. Февраля 2009 :: 18:21
    Печать  
    JohnyDeath писал(а) 08. Февраля 2009 :: 14:21:
    А если задействовать виртуальное поле: "idx_PARENTID_ISFOLDER_CODE" или "idx_PARENTID_ISFOLDER_DESCR" ?
    Правда не знаю как тут с уникальностью будет..


    С уникальностью там будет плохо, очень плохо. А без уникальности однозначно никак. Иначе прямое редактирование сбивается... как я уже выше писал. Пока если честно ничего в голову не пришло. Необходимо тестировать, насколько сильно стоимость влияет на работу. Понятно что ничего хорошего, но и выхода пока другого нет.
      

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


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

    Сообщений: 6303
    Местоположение: Москва
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #465 - 10. Февраля 2009 :: 05:12
    Печать  
    CaBaT писал(а) 06. Февраля 2009 :: 08:11:
    это то да, но несколькими постами ниже Саша написал, что ему проблему не удалось воспроизвести, вот я и решил тест сделать, что бы если вдруг он сюда заглянет, то сможет быстро этот глюк увидеть...

    Артур бы меня похвалил... Улыбка

    Ага, все правильно. Разработчику будет намного легче Улыбка

    ЗЫ жаль только, что он не всегда быстро реагирует Печаль
      

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


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #466 - 10. Февраля 2009 :: 06:42
    Печать  
    ага, смотрю Саша давно сюда не заглядывал... Печаль
      
    Наверх
     
    IP записан
     
    mogaec
    YaBB Newbies
    *
    Отсутствует


    1C++ rocks!

    Сообщений: 1
    Зарегистрирован: 22. Января 2009
    Re: 1sqlite
    Ответ #467 - 11. Февраля 2009 :: 15:37
    Печать  
    Бросил на инфостар обработочку с использованием компоненты.
    /projects/3398/
    Позволяет во внешней базе записывать список изменившихся объектов. Полезна при синхронизации баз, между которыми настроен обмен данными.

    Подскажите как в неё добавить отбор по видам документов.

    Сильно не ругайте, так сказать проба пера.
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #468 - 18. Февраля 2009 :: 04:39
    Печать  
    ВСЕМ ДЛЯ ИНФОРМАЦИИ !!!!!!!!

    Для поставщика данных определение поля для КлючПорядка я советую сделать таким образом

    Код
    Выбрать все
    		ДобавлениеКИндексу = "";
    Если МетаСправочник.Владелец.Выбран() = 1 Тогда
    	ДобавлениеКИндексу = ДобавлениеКИндексу + "PARENTEXT_";
    КонецЕсли;
    Если МетаСправочник.КоличествоУровней > 1 Тогда
    	ДобавлениеКИндексу = ДобавлениеКИндексу + "PARENTID_";
    	Если МетаСправочник.ГруппыВпереди = 1 Тогда
    		ДобавлениеКИндексу = ДобавлениеКИндексу + "ISFOLDER_";
    	КонецЕсли;
    КонецЕсли;
    
    Если (МетаСправочник.ОсновноеПредставление = "ВВидеНаименования") и (МетаСправочник.ДлинаНаименования > 0) Тогда
    	КлючПорядка = КлючПорядка + "idx_"+ДобавлениеКИндексу+"DESCR AS [КлючПорядка]";
    ИначеЕсли (МетаСправочник.ОсновноеПредставление = "ВВидеКода") и (МетаСправочник.ДлинаКода > 0) Тогда
    	КлючПорядка = КлючПорядка + "idx_"+ДобавлениеКИндексу+"CODE AS [КлючПорядка]";
    Иначе
    	КлючПорядка = КлючПорядка + "idx_ID AS [КлючПорядка]";
    КонецЕсли;
    
    ПоставщикДанных.УстановитьТекстЗапроса(ТекстЗапроса,"[КлючПорядка]","[ТекущийЭлемент :Справочник."+ВидСправочника+"]"); 
    
    


    Т.о. вы и в индекс попадете и упорядочивание по наименованию или коду получите.
    Что касается сортировки в поставщике данных SQLite. К сожалению на текущий момент сортировать по полям у которых не стоит признак Сортировка = 1 (соответственно отсутствует индекс) невозможно. Сортировка же по этим полям (с признаком сортировка) осуществляется перестроением запроса и вместо приведенного выше кода надо писать

    Код
    Выбрать все
    СтрокаКлючаПорядка = "idx_"+ДобавлениеКИндексу+ИдентификаторРеквизита+" AS [КлючПорядка]"; 
    
    


    Большое спасибо за наведение на эту информацию JohnyDeath и kms.

    Если кому нибудь пригодится будет очень хорошо  Подмигивание
    « Последняя редакция: 18. Февраля 2009 :: 12:12 - vandalsvq »  

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


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #469 - 18. Февраля 2009 :: 05:08
    Печать  
    orefkov писал(а) 25. Ноября 2008 :: 06:10:
    Смотри параметры метода УстановитьТекстЗапроса поставщика.
    Кроме того, я выкладывал в ветке примеры работы с поставщиком, там можно разобраться.
    Порядок задается ключевым полем.
    Хинт - для дбф таблиц 1С можно (вернее даже нужно) в качестве ключевого поля задавать виртуальное поле индекса, то есть надо упорядочить по наименованию - задаешь ключевое поле idx_descr, по коду - idx_code и тд.

    А вот Александр сам советует так же делать. Эх... невнимательно я ранее тему читал.

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

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #470 - 16. Марта 2009 :: 12:12
    Печать  
    Для JohnyDeath.
    Проверь.
    Присланный тобой запрос выполняется.
    SQLite впихнул 3.6.11
      

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #471 - 16. Марта 2009 :: 12:25
    Печать  
    Саша, Огромное спасибо! Всё работает. По крайней мере, там, где не работало раньше!  Очень довольный
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #472 - 16. Марта 2009 :: 12:26
    Печать  
    а нам скажите о чем речь? Улыбка
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #473 - 16. Марта 2009 :: 12:33
    Печать  
    CaBaT писал(а) 16. Марта 2009 :: 12:26:
    а нам скажите о чем речь? Улыбка

    У меня не отрабатывались запросы определённой длины по созданию таблиц. Например Вот такой запрос:
    Код
    Выбрать все
    CREATE TABLE т(
    _111111111111111111111
    ,_222222222222222222222
    ,_333333333333333333333
    ,_444444444444444444444
    ,_555555555555555555555
    ,_666666666666666666666
    ,_777777777777777777777
    ,_888888888888888888888
    ,_999999999999999999999
    ,_101010101010101010101010101010101010101010
    ,_111111111111111111111111111111111111111111
    ,_121212121212121212121212121212121212121212
    ,_131313131313131313131313131313131313131313
    ,_141414141414141414141414141414141414141414
    ,_151515151515151515151515151515151515151515
    ,_161616161616161616161616161616161616161616
    ,_171717171717171717171717171717171717171717
    ,_181818181818181818181818181818181818181818
    ,_191919191919191919191919191919191919191919
    ,_202020202020202020202020202020202020202020
    ,_212121212121212121212121212121212121212121
    ,_222222222222222222222222222222222222222222
    ,_232323232323232323232323232323232323232323
    ,_242424242424242424242424242424242424242424
    ,_25252525252525252525252525252525252525)  
    
    

    Будет выпадать с ошибкой:
    Цитата:
    SQL logic error or missing database


    Причем если убрать из какого-нибудь имени поля пару символов, то будет работать нормально. У меня стабильно на всех машинах проявлялось на длине запроса=972
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #474 - 16. Марта 2009 :: 12:38
    Печать  
    Ясно, спасибо
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #475 - 16. Марта 2009 :: 12:39
    Печать  
    Кроме того, что сменил SQLite с 3.5.9 на 3.6.11 (текущий релиз sqlite) других изменений нет.
    Так что читайте http://sqlite.org/changes.html

    Вот например оттуда:
    Enhanced the query optimizer so that it is able to use multiple indices to efficiently process OR-connected constraints in a WHERE clause
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #476 - 16. Марта 2009 :: 12:45
    Печать  
    по багу с периодическими реквизитами ничего не прояснилось?
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #477 - 16. Марта 2009 :: 13:01
    Печать  
    Завтра гляну, раз уж снова влез в это дело.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #478 - 16. Марта 2009 :: 13:21
    Печать  
    спасиб Улыбка
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #479 - 17. Марта 2009 :: 07:34
    Печать  
    CaBaT писал(а) 16. Марта 2009 :: 12:45:
    по багу с периодическими реквизитами ничего не прояснилось?

    Багу подтверждаю.
    Источник найден.
    Работаю над исправлением.
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #480 - 17. Марта 2009 :: 11:19
    Печать  
    Вот проверяйте.
    Косяк был в случае выборки по индексу в обратном порядке при наличии условия "поле <=" в некоторых пограничных случаях.
    Связано оказалось с тем, что на самом деле индекс в дбф-файлах упорядочен не по win-1251, а в каком-то другом порядке.
    Привел сранение строк в компоненте в соответствиие с этим порядком
    (например, символ № у 1С попадает рядом с латинской N и тп).
      

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #481 - 17. Марта 2009 :: 11:33
    Печать  
    Отлично!

    Может тогда дело и до БыстрогоПоиска в поставщике для ТП дойдёт?
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #482 - 17. Марта 2009 :: 11:35
    Печать  
    на моей тестовой конфе глюк ушел, погоняю на боевых
    большое спасибо! Улыбка
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #483 - 17. Марта 2009 :: 19:05
    Печать  
    JohnyDeath писал(а) 17. Марта 2009 :: 11:33:
    Отлично!

    Может тогда дело и до БыстрогоПоиска в поставщике для ТП дойдёт?


    +1000 очень не хватает
    очень, очень, очень  Подмигивание
      

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


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #484 - 17. Марта 2009 :: 19:44
    Печать  
    Кстати Саша, хотел спросить у ODBC есть очень занимательная возможность типизация классом. А в 1sqlite это возможно реализовать?  Улыбка
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #485 - 17. Марта 2009 :: 21:00
    Печать  
    vandalsvq писал(а) 17. Марта 2009 :: 19:44:
    Кстати Саша, хотел спросить у ODBC есть очень занимательная возможность типизация классом. А в 1sqlite это возможно реализовать?  Улыбка

    Сейчас ODBC интегрирован в 1С++, моя же компонента как-бы отдельно, хотелось бы сохранить в ее архитектуре независимость от других компонент. В идеале 1sqlite не должен знать ни о каких классах и 1С++. Но. Допустим выгрузку в ИТЗ все же сделали, благодаря вынесению переноса результатов запроса в объект-приемник через спец-интерфейс. Можно подумать и либо как-то расширить этот интерфейс, чтобы 1С++ могла принять результат запроса и типизировать его дополнительно, либо придумать еще один интерфейс. Надо обсуждать с Артуром и Михаилом.
      
    Наверх
     
    IP записан
     
    Chieftain
    Senior Member
    ****
    Отсутствует


    ___

    Сообщений: 498
    Местоположение: Тула
    Зарегистрирован: 15. Февраля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #486 - 18. Марта 2009 :: 06:26
    Печать  
    А хотелку Пользовательские функции будешь реализовывать?
      
    Наверх
    ICQ  
    IP записан
     
    butrinovv
    YaBB Newbies
    *
    Отсутствует


    I Love YaBB 2!

    Сообщений: 5
    Местоположение: Москва
    Зарегистрирован: 08. Августа 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #487 - 23. Марта 2009 :: 16:02
    Печать  
    Подскажите пожалуйста, как с помощью 1sqlite правильно организовать выборку всех документов или документов нескольких видов с наложением условий на реквизиты и упорядочиванием по позиции документа (как в штатных журналах), и вывести результат в ТП.

    Попробовал следующий код :
    Код
    Выбрать все
    Процедура ПослеОткрытия()
    	БазаДанных = СоздатьОбъект("SQLiteBase");
    	// Откроем пустую базу данных в памяти
    	БазаДанных.Открыть(":memory:");
    	// Создадим выполнитель запросов.
    	Запрос = БазаДанных.НовыйЗапрос();
    	// Так как база в памяти, то журналирование нам ни к чему, только зря будет отнимать время
    	Запрос.ВыполнитьЗапрос("PRAGMA journal_mode = OFF");
    
    	// Подключим таблицы документов заданных в конфигурации к SQLite
    	// и составим запрос
    	Запрос.ВыполнитьЗапрос("create virtual table Накл_ТД using dbeng(Документ.ТранзитнаяДистрибьютерская)");
    	Запрос.ВыполнитьЗапрос("create virtual table Накл_ТДС using dbeng(Документ.ТранзитнаяДистрибьютерскаяСуммовая)");
    	Запрос.ВыполнитьЗапрос("create virtual table Накл_ЗМ using dbeng(Документ.ЗакупкаМатериалов)");
    
    	ТекстЗапроса="
    	|select IDDOC [Ключ],
    	|IDDOC [Документ $Документ.ТранзитнаяДистрибьютерская],
    	|Поставщик [Поставщик $Справочник.Клиенты]
    	|from Накл_ТД
    	|
    	|UNION ALL
    	|
    	|select IDDOC [Ключ],
    	|IDDOC [Документ $Документ.ЗакупкаМатериалов],
    	|Поставщик [Поставщик $Справочник.Клиенты]
    	|from Накл_ЗМ
    	|
    	|UNION ALL
    	|
    	|select IDDOC [Ключ],
    	|IDDOC [Документ $Документ.ТранзитнаяДистрибьютерскаяСуммовая],
    	|Поставщик [Поставщик $Справочник.Клиенты]
    	|from Накл_ТДС
    	|
    	|where 1=1
    	|";
    
    	АтрФормы=СоздатьОбъект("Форма");
    	АтрФормы.УстановитьФорму(Форма);
    	ТабличноеПоле=АтрФормы.СоздатьЭлементУправления("ТабличноеПоле","РеквизитТП");
    
    	Колонки=ТабличноеПоле.Колонки;  
    	//Добавление Колонки "Ключ"
    	Колонка=Колонки.Добавить("Ключ");
    	Колонка.Данные="Ключ";
    	Колонка.Заголовок="Ключ";
    	Колонка.Ширина=12;
    	Колонка.ГоризонтальноеВыравнивание=1;
    	//Добавление прочих Колонок
    	Колонка=Колонки.Добавить("Документ");
    	Колонка.Данные="Документ";
    	Колонка.Заголовок="Документ";
    	Колонка.Ширина=120;
    	Колонка.ГоризонтальноеВыравнивание=1;
    
    	Колонка=Колонки.Добавить("Поставщик");
    	Колонка.Данные="Поставщик";
    	Колонка.Заголовок="Поставщик";
    	Колонка.Ширина=30;
    	Колонка.ГоризонтальноеВыравнивание=2;
    
    
    	//Опции отображения
    	ТабличноеПоле.ТаймаутБыстрогоПоиска=1;
    	ТабличноеПоле.РежимВыделенияСтроки=1;
    	ТабличноеПоле.ИзменятьПозициюКолонок=0;
    	ТабличноеПоле.ТаймаутОбновления=0;
    	//ТабличноеПоле.НачальноеПредставление=1;
    
    
    	Поставщик=СоздатьОбъект("SQLiteDataProvider");
    	Поставщик.УстановитьБД(БазаДанных);
    	Поставщик.УстановитьТекстЗапроса(ТекстЗапроса,"[Ключ]");
    	Поставщик.Отладка(32,1);
    	ТабличноеПоле.ПоставщикДанных=Поставщик;
    
    КонецПроцедуры  
     
    
    


    Попытка привела к странному результату : один и тот же документ в ТП стал повторяться по несколко раз в разных строках (изображение прилагаю).
    Если из запроса убрать UNION ALL и оставить один select то вроде
    выдается нормальный результат, но только по определенному виду документов, а необходимо по всем.

    Работаю на ДБФ-версии 1С, 1sqlite Версия 1.0.1.9, 1CPP 3.0.1.22
    « Последняя редакция: 23. Марта 2009 :: 23:17 - butrinovv »  

    screen_5.gif ( 12 KB | Загрузки )
    screen_5.gif
    Наверх
     
    IP записан
     
    leonvlas
    Junior Member
    **
    Отсутствует


    I Love YaBB 2!

    Сообщений: 47
    Зарегистрирован: 03. Августа 2007
    Re: 1sqlite
    Ответ #488 - 24. Марта 2009 :: 06:08
    Печать  
    в этой выборке нет вида документа , тогда собственно вопрос как определить какого вида это документ. правильнее это делать через журнал.
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #489 - 24. Марта 2009 :: 06:53
    Печать  
    Дело в том, что при union all названия полей запроса берутся из первого selecta, соответсвенно, для всех документов применяется типизация Документ.ТранзитнаяДистрибьютерская, что неверно.
    Перепиши так:
    Код
    Выбрать все
    |select IDDOC [Док :Документ],
    |:ВидДокумента.ТранзитнаяДистрибьютерская [Док_вид],
    |Поставщик [Поставщик $Справочник.Клиенты]
    |from Накл_ТД
    |
    |UNION ALL
    |
    |select IDDOC,
    |:ВидДокумента.ЗакупкаМатериалов,
    |Поставщик
    |from Накл_ЗМ
    и тд
     
    
    


    В качестве ключа используй поле [Док :Документ]
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #490 - 24. Марта 2009 :: 06:55
    Печать  
    Саша, а последнюю сборку 1sqlite можно считать стабильной, или ты будешь еще что в ней менять?
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #491 - 24. Марта 2009 :: 07:15
    Печать  
    Блин, туплю чето.
    Такой запрос - с union all - вообще очень плохо использовать для поставщика ТП - потому как он получается должен сперва отобрать все записи из разных таблиц, отсортировать их по iddoc, потом взять из них первые нужные.

    Такой запрос лучше делать выборкой из общего журнала, с ограничением по видам документов. При этом отлично отсортируется по datetime, как в журналах 1С:
    Код
    Выбрать все
    select
    idx_DATE_TIME_IDDOC [Ключ],
    iddoc [Док :Документ],
    iddocdef [Док_вид],
    case iddocdef
    when :ВидДокумента.ТранзитнаяДистрибьютерская then
        (select Поставщик from Документ_ТранзитнаяДистрибьютерская Д where Д.iddoc = Ж.iddoc limit 1)
    when :ВидДокумента.ЗакупкаМатериалов then
        (select Поставщик from Документ_ЗакупкаМатериалов Д where Д.iddoc = Ж.iddoc limit 1)
    .... для других видов доков
    end [Поставщик :Справочник.Клиенты]
    
    from Журнал Ж
    where
    iddocdef = :ВидДокумента.ТранзитнаяДистрибьютерская
    or iddocdef = :ВидДокумента.ЗакупкаМатериалов
    ... и тд
     
    
    

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #492 - 24. Марта 2009 :: 07:18
    Печать  
    CaBaT писал(а) 24. Марта 2009 :: 06:55:
    Саша, а последнюю сборку 1sqlite можно считать стабильной, или ты будешь еще что в ней менять?

    Последняя это которую недавно тут клал, с исправленным косяком с периодикой ?
    Боле-менее стабильная. Буду немного менять поставщика данных, в плане быстрого поиска.
    По мере выхода новых релизов SQLite буду стараться обновлять их и в компоненте.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #493 - 24. Марта 2009 :: 07:25
    Печать  
    да, я о ней...
    спросил потому, что в списке изменений библиотеки sqlite видимо есть ряд довольно существенных, например
    http://sqlite.org/35to36.html
    я не настолько силен в понимании, что из этого функционала используется при работе с DBF-таблицами 1С
      
    Наверх
     
    IP записан
     
    butrinovv
    YaBB Newbies
    *
    Отсутствует


    I Love YaBB 2!

    Сообщений: 5
    Местоположение: Москва
    Зарегистрирован: 08. Августа 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #494 - 24. Марта 2009 :: 07:54
    Печать  
    Спасибо, leonvlas, orefkov.

    Александр, вечером попробую Ваш код.
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #495 - 24. Марта 2009 :: 07:58
    Печать  
    Александр (Orefkov) а почему бы не использовать запрос вроде

    Код
    Выбрать все
    SELECT
    J.DATE AS Date,
    J.TIME AS Time,
    J.IDDOC AS IDDOC,
    COALESCE(D1.Contr, D2.Contr) AS Contr
    J.idx_IDDOC AS [КлючПорядка]
    FROM
    Журнал AS J
    LEFT JOIN
    Документ_Один AS D1
    ON
    D1.IDDOC = J.IDDOC
    LEFT JOIN
    Документ_Два AS D2
    ON
    D2.IDDOC = J.IDDOC
    WHERE
    J.IDDOCDEF = :ВидДокумента.Один
    OR
    J.IDDOCDEF = :ВидДокумента.Два 
    
    


    Какие ты видишь минусы или проблемы?
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #496 - 24. Марта 2009 :: 08:09
    Печать  
    CaBaT писал(а) 24. Марта 2009 :: 07:25:
    я не настолько силен в понимании, что из этого функционала используется при работе с DBF-таблицами 1С

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #497 - 24. Марта 2009 :: 08:26
    Печать  
    vandalsvq писал(а) 24. Марта 2009 :: 07:58:
    Александр (Orefkov) а почему бы не использовать запрос вроде

    Код
    Выбрать все
    SELECT
    J.DATE AS Date,
    J.TIME AS Time,
    J.IDDOC AS IDDOC,
    COALESCE(D1.Contr, D2.Contr) AS Contr
    J.idx_IDDOC AS [КлючПорядка]
    FROM
    Журнал AS J
    LEFT JOIN
    Документ_Один AS D1
    ON
    D1.IDDOC = J.IDDOC
    LEFT JOIN
    Документ_Два AS D2
    ON
    D2.IDDOC = J.IDDOC
    WHERE
    J.IDDOCDEF = :ВидДокумента.Один
    OR
    J.IDDOCDEF = :ВидДокумента.Два 
    
    


    Какие ты видишь минусы или проблемы?


    Минусы - то что независимо от вида документа, по каждому iddoc из общего журнала sqlite будет ломится в каждую из таблиц шапок документов в поисках iddoc в шапке. Ведь как будет выполнятся этот запрос:
    сначала во внешнем цикле перебираются строки в журнале.
    Если iddocdef не попадает в where, строка журнала пропускается, переходим на следующую строку.
    Иначе - берется iddoc из журнала и выполняется поиск этого iddoc в каждой из таблиц шапок документов, с вытаскиванием из них поля Поставщик.
    Когда получили всех Поставщиков (либо NULL) из всех шапок, вычисляем coalesce.
    Кроме того, это мы знаем, что данные left join'ы не изменят количество строк в выборке, потому как iddoc в шапках не повторяется.
    SQLite этого не знает, и строит план выполнения с учетом того, что из таблиц шапок может быть получено несколько записей с указанным iddoc, то есть накручивает вложенные циклы.
    А в моем варианте - при переборе строк журнала взависимости от iddocdef выполняется один подзапрос только к нужной таблице шапок.
    Из минусов - так можно извернутся, когда требуется только одно поле из шапки документов, если так получать несколько полей, на каждое поле будет свой подзапрос к таблице шапки документов.
    Ща я думаю, как оптимальней реализовать такую ситуацию.
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #498 - 24. Марта 2009 :: 08:29
    Печать  
    Было бы интересно выслушать твой пример  Подмигивание
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #499 - 24. Марта 2009 :: 09:28
    Печать  
    Долбил и мучал я ща SQLite, однако если несколько полей надо тянуть из шапки, оптимальнее, чем left join + coalesce не получится.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #500 - 24. Марта 2009 :: 14:32
    Печать  
    А возможно ли из одной базы sqlite выполнить запрос к другой с помощью этой компоненты (другими програмами - можно, пробывал)?
    примерно так:
    Код
    Выбрать все
    База1=СоздатьОбъект("SQLiteBase");
    	База1.Открыть("d:\база1.sq3");
    	База2=СоздатьОбъект("SQLiteBase");
    	База2.Открыть("d:\база2.sq3");
    
    	Запрос1=База1.НовыйЗапрос();
    	Запрос1.ВыполнитьЗапрос("CREATE TABLE if not exists Табл1 (ИД)");
    	Запрос2=База2.НовыйЗапрос();
    	Запрос2.ВыполнитьЗапрос("CREATE TABLE if not exists Табл2 (ИД)");
    
    	тз=Запрос1.выполнитьзапрос("select * from [База2].[Табл2]"); 
    
    
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #501 - 25. Марта 2009 :: 07:05
    Печать  
    ATTACH DATABASE / DETACH DATABASE тебе поможет.
    Вообще не надо заводить два объекта для двух баз данных.
    Открываешь одну базу (хоть :memory:), остальные просто аттачишь к ней по мере надобности.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #502 - 25. Марта 2009 :: 07:12
    Печать  
    Самое то! Спасибо.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #503 - 26. Марта 2009 :: 08:28
    Печать  
    Подскажите, пожалуйста, ещё такой момент.
    Имеем запрос на поиск элемента справочника по его коду:
    Код
    Выбрать все
    Запрос.Подставлять("ВнешКод", ВнешКод);
    			Запрос.Отладка(1);
    			итРезультат=Запрос.ВыполнитьЗапрос("
    			|SELECT id [Объект :Справочник."+Вид+"]
    			|	,code Код
    			|	,descr Наименование
    			|FROM Справочник_"+СтрЗаменить(Вид,"_","__")+"
    			|Where code = :ВнешКод") 
    
    

    Всё хорошо работает, если тип кода - текстовый.
    Если же он числовой, то в базе он хранится всё равно как строка с недостающими пробелами в НАЧАЛЕ. Т.е. если у справочника длина кода=5 и тип кода=числовой, то в базе Элемент с кодом=1 хранится как '    1'.
    Вижу только два выхода из этой ситуации:
    1) Проверять длину и тип кода, потом добавлять пробелы слева и на основе этого строить запрос.
    2) Сделать условие: "Where code like '%"+ВнешКод+"'". Так мы пролетаем с индексом по коду.
    Можно ли как-нибудь выкрутиться простым путём?
      
    Наверх
     
    IP записан
     
    leov-001
    Full Member
    ***
    Отсутствует


    1C++ rocks!

    Сообщений: 150
    Зарегистрирован: 05. Марта 2009
    Re: 1sqlite
    Ответ #504 - 26. Марта 2009 :: 08:53
    Печать  
    Код
    Выбрать все
    |Where code = RIGHT(('    '+STR(ВнешКод)),5)")  
    
    


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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #505 - 26. Марта 2009 :: 08:57
    Печать  
    leov-001 писал(а) 26. Марта 2009 :: 08:53:
    Код
    Выбрать все
    |Where code = RIGHT(('    '+STR(ВнешКод)),5)")  
    
    


    Так попробуй

    Так всё равно надо узнавать дину и тип кода.
    Я просто привел пример одного справочника.
      
    Наверх
     
    IP записан
     
    leov-001
    Full Member
    ***
    Отсутствует


    1C++ rocks!

    Сообщений: 150
    Зарегистрирован: 05. Марта 2009
    Re: 1sqlite
    Ответ #506 - 26. Марта 2009 :: 09:00
    Печать  
    Почму узнавать, добавляем 4 пробела '    '+ И отрезаем справа 5 символов. Это и будет твой код который хранится в таблице ИБ.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #507 - 26. Марта 2009 :: 09:02
    Печать  
    А если длина кода = 10?
      
    Наверх
     
    IP записан
     
    leov-001
    Full Member
    ***
    Отсутствует


    1C++ rocks!

    Сообщений: 150
    Зарегистрирован: 05. Марта 2009
    Re: 1sqlite
    Ответ #508 - 26. Марта 2009 :: 09:06
    Печать  
    Цитата:
    Я просто привел пример одного справочника.


    Передавай через парамтр в форму обработки.
    Длинна кода = N
    Тип  если Тип Число тогда N-Пробелов
    Иначе N-нулей
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #509 - 26. Марта 2009 :: 09:11
    Печать  
    leov-001 писал(а) 26. Марта 2009 :: 09:06:
    Цитата:
    Я просто привел пример одного справочника.


    Передавай через парамтр в форму обработки.
    Длинна кода = N
    Тип  если Тип Число тогда N-Пробелов
    Иначе N-нулей

    Да это понятно. Поэтому и написал такое решение в первом пункте:
    Цитата:
    1) Проверять длину и тип кода, потом добавлять пробелы слева и на основе этого строить запрос.

    Просто у меня код берётся из внешней базы. И я не хотел делать лишних телодвижений по проверке кода в справочнике. Но пока другого решения нет, так и сделал.
      
    Наверх
     
    IP записан
     
    leov-001
    Full Member
    ***
    Отсутствует


    1C++ rocks!

    Сообщений: 150
    Зарегистрирован: 05. Марта 2009
    Re: 1sqlite
    Ответ #510 - 26. Марта 2009 :: 09:33
    Печать  
    Код
    Выбрать все
    Where LTrim(code) = :ВнешКод
     
    
    


    Попробуй еще так.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #511 - 26. Марта 2009 :: 09:36
    Печать  
    Так не попадает в индекс "UPPER(CODE)"
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #512 - 26. Марта 2009 :: 14:26
    Печать  
    Только ручками создавать правильный код.
    как-то так:
    Код
    Выбрать все
    если Метаданные.Справочник(Вид).ТипКода = "Числовой" тогда
        запрос.Подставлять(":ВнешКод", Формат(Число(Код), "Ч" + Метаданные.Справочник(Вид).ДлинаКода));
    иначе
        запрос.Подставлять(":ВнешКод", Строка(Код));
     
    
    
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #513 - 26. Марта 2009 :: 14:31
    Печать  
    Примерно так сейчас и делается. Думал, может, если всё проходит через родной dbeng, то и этот нюанс можно как-то учесть
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #514 - 02. Апреля 2009 :: 11:27
    Печать  
    Потестируйте версию 1.0.2.0

    - Переделан поставщик данных.
    - Добавлено автоматическое изменение текста запроса при изменении состава отображаемых колонок.
    Оптимизирована подготовка запросов данных. Теперь разные запросы на выборку данных (получить первые данные, получить последние данные, получить следующие данные и тп) создаются и подготавливаются не сразу, а по мере надобности.

    - Добавлена возможность использовать ключ порядка, состоящий из нескольких полей.
    Сделано в основном для отображения родных таблиц sqlite, имеющих уникальный индекс по нескольким полям, генерится боле-менее оптимальный план выполнения запроса. Для таблиц 1С все равно лучше использовать виртуальные поля индекса.

    - Добавлена возможность быстрого поиска.

    Изменения в методах объекта SQLiteDataProvider:

    Метод УстановитьТекстЗапроса
    Параметр ТекстЗапроса - обязательный, должен быть select'ом без order by.
    Может заканчиваться на "Where условия", а может и не заканчиваться (только FROM часть)
    Все поля должны быть прописаны, использовать * для указания полей нельзя.
    Если для поля задается алиас, он обязан быть в [].
    Параметр КлючевоеПоле - обязательный, задает список полей ключа порядка через запятую.
    Для имен полей можно использовать как полный алиас имени поля, как указано в select-листе (те "[Имя :Типизация]"), так и имя поля, каким оно будет после обработки типизатором (те просто Имя, без [] и типизации).
    Параметр ИдПоле - необязательный. Может быть именем ид-поля, предназначенного для работы ТекущаяСтрока. Правила задания имени поля см. в предыдущем параметре.
    Параметр МодификаторИдПоля - отсутствует. Поставщик сам выбирает нужный модификатор на основе его типизации.

    Метод Отладка(ВклВыкл)
    Теперь имеет только один необязательный параметр - 1 вкл, 0 выкл.

    Добавлены методы:
    НеУдалятьПоля(СписокПолей)
    СписокПолей - строка с перечисленными через запятую полями, которые нельзя удалять из select-листа запроса, даже если для них нет отображаемой колонки. Поля ключа порядка и ид-поле не удаляются никогда, то есть указывать их в этом методе ненадо.

    ПоляБыстрогоПоиска(СписокПолей)
    СписокПолей - строка с перечисленными через запятую полями, для которых разрешен быстрый поиск.

      

    1sqlite_003.zip ( 390 KB | Загрузки )
    Наверх
     
    IP записан
     
    ZOOBR
    Junior Member
    **
    Отсутствует



    Сообщений: 22
    Зарегистрирован: 17. Апреля 2008
    Re: 1sqlite
    Ответ #515 - 02. Апреля 2009 :: 11:35
    Печать  
    Спасибо! Будем тестировать. Быстрого поиска я очень ждал. Надеюсь все заработает так как нужно.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #516 - 02. Апреля 2009 :: 11:36
    Печать  
    Вот это подарочек! Круть! Бум смотреть  Очень довольный
    Событие "ПриБыстромПоиске" тоже работает?

    а вот это:
    Цитата:
    Если для поля задается алиас, он обязан быть в [].

    даже для таблиц sqlite (не 1С)?
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #517 - 02. Апреля 2009 :: 11:45
    Печать  
    JohnyDeath писал(а) 02. Апреля 2009 :: 11:36:
    Событие "ПриБыстромПоиске" тоже работает?

    Даже не знаю...
    Пока я просто реализовал методы интерфейса поствщика данных, нужные для работы быстрого поиска.

    JohnyDeath писал(а) 02. Апреля 2009 :: 11:36:
    Цитата:
    Если для поля задается алиас, он обязан быть в [].

    даже для таблиц sqlite (не 1С)?

    Да.
    Только не надо это понимать как "Для каждого поля обязательно должен быть задан алиас"
    то есть вот так можно писать

    select t.field1, t.field2, t.f3 + t.f4 from...
    select t.field1 [поле1], t.field2, t.f3 + t.f4 as [Поле2] from...

    а так нельзя:

    select t.field1 поле1, t.field2, t.f3 + t.f4 as Поле2 from...
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #518 - 03. Апреля 2009 :: 06:59
    Печать  
    А, забыл добавить.
    В тексте запроса можно использовать только именнованные sql-параметры, те например так можно:

    Код
    Выбрать все
    ....
    where spr.parentid = @parentid
    ....
    Пост.УстановитьПараметр("@parentid", ТекРодитель);
     
    
    


    а так нельзя:

    Код
    Выбрать все
    ....
    where spr.parentid = ?
    ....
    Пост.УстановитьПараметр(1, ТекРодитель);
     
    
    


    Также в методе УстановитьПараметр поставщика данных не будет выдаваться ошибка, если передано имя несуществующего параметра.
    Возможно, это будет исправлено.
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #519 - 03. Апреля 2009 :: 08:32
    Печать  
    А у меня проблема....

    вот текст запроса

    Код
    Выбрать все
    SELECT
    	CASE WHEN ЖурналДокументов.ISMARK = '*' THEN 7 ELSE CASE WHEN ЖурналДокументов.CLOSED = 1 THEN 8 ELSE 6 END END AS [Пиктограмма]
    	,ЖурналДокументов.DOCNO AS [НомерДокумента]
    	,ЖурналДокументов.DATE AS [ДатаДокумента :Дата]
    	,ЖурналДокументов.IDDOC AS [ТекущийДокумент :Документ]
    	,ЖурналДокументов.IDDOCDEF AS [ТекущийДокумент_вид :ВидДокумента]
    	,ЖурналДокументов.IDDOCDEF AS [ВидДокумента :ВидДокументаПредставление]
    	,ЖурналДокументов.ТестовыйРеквизит AS [ТестовыйРеквизит :Справочник.Тестовый]
    	т) AS [Контрагент :Справочник.Контрагенты]
    	,COALESCE(ДокДокументПриходОстатки.Договор,ДокДокументРасходОстатки.Договор) AS [Договор :Справочник.Договоры]
    	рий) AS [Комментарий :Строка]
    	,ЖурналДокументов.idx_DATE_TIME_IDDOC AS [КлючПорядка]
    FROM
    	Журнал AS ЖурналДокументов
    LEFT JOIN
    	Документ_ДокументПриходОстатки AS ДокДокументПриходОстатки
    ON
    	ЖурналДокументов.IDDOC = ДокДокументПриходОстатки.IDDOC
    LEFT JOIN
    	Документ_ДокументРасходОстатки AS ДокДокументРасходОстатки
    ON
    	ЖурналДокументов.IDDOC = ДокДокументРасходОстатки.IDDOC
    WHERE
    	ЖурналДокументов.IDDOCDEF = :ВидДокумента.ДокументПриходОстатки
    OR
    	ЖурналДокументов.IDDOCDEF = :ВидДокумента.ДокументРасходОстатки 
    
    


    Вот установка и создания поставщика

    Код
    Выбрать все
    ПоставщикДанных.Отладка(РежимОтладки);
    ПоставщикДанных.УстановитьТекстЗапроса(ТекстЗапроса,"[КлючПорядка]","[ТекущийДокумент :Документ]"); 
    
    


    Потом присвоение в ТП и сразу вот такая вот ошибка и вылет:

    Код
    Выбрать все
    ПоставщикДанных.Журнал::УстановитьПоставщикаДанных() : unrecognized token: "'  1C'')
     order by
    ЖурналДокументов.idx_DATE_TIME_IDDOC  asc
     limit @sqlite_data_provider_rowcount"
    ТабличноеПоле.ПоставщикДанных = ПоставщикДанных;
    {G:\03. Разработки\Текущ 
    
    


    Я что-то делаю не так? (на предыдущей все путем было Улыбка)
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #520 - 03. Апреля 2009 :: 11:00
    Печать  
    Упс, вот попробой это.
      

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #521 - 03. Апреля 2009 :: 11:44
    Печать  
    orefkov писал(а) 03. Апреля 2009 :: 11:00:
    Упс, вот попробой это.

    Попробывал простейший вариант:
    Код
    Выбрать все
    ТекстЗапроса="
    	|SELECT id as [Элемент :Справочник.Сотрудники]
    	|	,isfolder [ЭтоГруппа]
    	|	,idx_CODE [КлючПорядка]
    	|FROM Справочник_Сотрудники"; 
    
    

    Что-то ты с WHERE перемудрил по-моему. Оно вообще пропало:
    Цитата:
    Поставщие данных SQLite: обновить строку
    Поставщие данных SQLite: Формирование запроса 'обновление строки'
    select
    idx_CODE [КлючПорядка],
    id as [Элемент :Справочник.Сотрудники],
    isfolder [ЭтоГруппа]
    from
    Справочник_Сотрудники
    idx_CODE = @sqlite_data_provider_key0
    limit 1

    Даже если добавить в исходный запрос "WHERE 1=1", то в отладке имеем:
    Цитата:
    Поставщие данных SQLite: обновить строку
    Поставщие данных SQLite: Формирование запроса 'обновление строки'
    select
    idx_CODE [КлючПорядка],
    id as [Элемент :Справочник.Сотрудники],
    isfolder [ЭтоГруппа]
    from
    Справочник_Сотрудники
    (1=1)
    and
    idx_CODE = @sqlite_data_provider_key0
    limit 1
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #522 - 03. Апреля 2009 :: 12:26
    Печать  
    Да, косяк.
    Вот поправил.
      

    1sqlite_005.zip ( 390 KB | Загрузки )
    Наверх
     
    IP записан
     
    ZOOBR
    Junior Member
    **
    Отсутствует



    Сообщений: 22
    Зарегистрирован: 17. Апреля 2008
    Re: 1sqlite
    Ответ #523 - 03. Апреля 2009 :: 14:59
    Печать  
    Недавно только стал разбираться с 1sqlite и возник такой казалось бы детский вопрос. Вот есть у меня к примеру такой запрос(текст запроса выдернул из какого-то примера):
    Код
    Выбрать все
    	|SELECT
    	|О.idx_MDID_PARENTVAL_CHILDDATE_CHILDTIME_CHILDID [key]
    	|,Ж.iddoc [Док :Документ]
    	|,Ж.iddocdef [Док_вид :ВидДокументаПредставление]
    	|,Ж.DocNo Номер
    	|,Ж.date [Дата :Дата]
    	|,Ж.time [Время :Время]
    	|,Ж.Автор as [Автор :Справочник.Пользователи]
    	|FROM __1S_Crdoc О inner join Журнал Ж
    	|  ON О.ChildID=Ж.IdDoc
    	|WHERE
    		|О.childdate BETWEEN @НачДата AND @КонДата
    	|", "key", "[Док :Документ]"); 
    
    

    Запрос как видите довольно простой и я захотел его немного усложнить Улыбка. Но по причине своей слабой осведомленности по работе с запросами с помощью данной компоненты я споткнулся еще в самом начале Печаль. Так как масштабных примеров готовых запросов я на форуме не нашел, то может быть кто-нибудь посвятит меня в премудрости составления запросов, т.е. требуется небольшой экскурс по основному синтаксису составления запросов (может где нибудь уже выкладывалось).
       Вот например в приведенном выше примере я делаю запрос который получает данные общего журнала документов. Все вроде как работает, но есть много нюансов:
    1) Как получить в запросе реквизиты документов и справочников( С полями таблиц которые указываются в явном виде все понятно и с типизацией тоже(это все в доке описано) ну и с общими реквизитами документов тоже).
    2) Насколько я понял для быстрой работы отбор должен производится либо по общему реквизиту либо по графе отбора, а в случае справочников по реквизиту с установленным признаком "Отбор по реквизиту". Естественно получение таких данных должно производится через индексы. Ну так вот вопрос: как это грамотно описать в запросе.
    3) Как грамотно организовать множественный отбор по одному или нескольким реквизитам, чтобы запрос выполнялся максимально быстро.
    4) Как прикрутить пиктограммы к ТП(ну например для обозначения статуса документа). Как отображать картинки в ТП я знаю, но как наиболее оптимально получить цифры статуса документа?

    Уж простите если что за такие вопросы Круглые глаза
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #524 - 03. Апреля 2009 :: 15:32
    Печать  
    Санька... ну я взял 5-ю версию и знаешь что то странное творится... база падает... иногда с out of memory иногда что память не может read... а иногда все путем...
    могу показать и запрос и все... но может просто где то утечка...

    пы.сы. запрос как представленный выше (мною)

    По наблюдениям:
    1. Почему то удаляется из запроса поле ТекущийДокумент_вид хотя в переданном оно есть и в списке неудаляемых значится... посмотри может проблема какая
    2. Есть подозрение что проблема именно в том что поле ТекущийДокумент :Документ не типизированно и является ТекущаяСтрока.
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #525 - 06. Апреля 2009 :: 06:45
    Печать  
    Точно, была небольшая трабла с неудаляемыми полями.
    Попробуй вот с этой.
      

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


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #526 - 06. Апреля 2009 :: 08:14
    Печать  
    Пойдем дальше?
    В общем запрос есть, текст запроса устанавливается один раз, потом он переформируется и при повторной установке (в т.ч. и поставщика данных в ТП) 1С зависает долго думает и падает
      

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #527 - 06. Апреля 2009 :: 08:32
    Печать  
    vandalsvq писал(а) 06. Апреля 2009 :: 08:14:
    Пойдем дальше?
    В общем запрос есть, текст запроса устанавливается один раз, потом он переформируется и при повторной установке (в т.ч. и поставщика данных в ТП) 1С зависает долго думает и падает

    Тоже примерно такое пытался пробывать, но списал всё на свои руки и недоученность.
    В общем делаю пример по справочнику Сотрудники. Хочу, чтобы при быстром поиске табличное поле оставляла только нужные строки (=удовлетворяющие критерию поиска). Делаю так:
    Код
    Выбрать все
    //===========================================================
    Процедура СоздатьТП()
    	ТекстЗапроса="
    	|SELECT id as [Элемент :Справочник.Сотрудники]
    	|	,isfolder [ЭтоГруппа]
    	|	,idx_CODE [КлючПорядка]
    	|FROM Справочник_Сотрудники
    	|";
    	Провайдер=СоздатьОбъект("SQLiteDataProvider");
    	Провайдер.УстановитьБД(_БазаЛайт);
    	Провайдер.Отладка(флОтладка);
    	Провайдер.УстановитьТекстЗапроса(ТекстЗапроса, "[КлючПорядка]", "[Элемент :Справочник.Сотрудники]");
    	тпНаФорме.ПоставщикДанных="";
    
    	ДобавитьКолонкуТП(тпНаФорме, "Элемент");
    	ДобавитьКолонкуТП(тпНаФорме, "ЭтоГруппа");
    
    	тпНаФорме.ПоставщикДанных=Провайдер;
    	тпНаФорме.ОбновитьСтроки();
    КонецПроцедуры	// СоздатьТП
    
    //===========================================================
    Процедура тпНаФормеПриБыстромПоиске(ТабличноеПоле, чТипБыстрогоПоиска, нДанные, чФСО)
    	ИмяКолонки=ТабличноеПоле.ТекущаяКолонка.Имя;
    	Если ИмяКолонки="Элемент" Тогда
    		ТекстЗапроса="
    		|SELECT id as [Элемент :Справочник.Сотрудники]
    		|	,isfolder [ЭтоГруппа]
    		|	,idx_CODE [КлючПорядка]
    		|FROM Справочник_Сотрудники
    		|WHERE descr like '"+нДанные+"%'";
    		тпНаФорме.ПоставщикДанных.УстановитьТекстЗапроса(ТекстЗапроса, "[КлючПорядка]", "[Элемент :Справочник.Сотрудники]");
    		тпНаФорме.ОбновитьСтроки();
    	КонецЕсли;
    КонецПроцедуры	// тпНаФормеПриБыстромПоиске
    
    //===========================================================
    Процедура тпНаФормеПриОкончанииБыстрогоПоиска(ТабличноеПоле, флРезультат, флПерепозиционировано)
    	ТекСтрока=тпНаФорме.ТекущаяСтрока;
    	ТекстЗапроса="
    	|SELECT id as [Элемент :Справочник.Сотрудники]
    	|	,isfolder [ЭтоГруппа]
    	|	,idx_CODE [КлючПорядка]
    	|FROM Справочник_Сотрудники";
    	тпНаФорме.ПоставщикДанных.УстановитьТекстЗапроса(ТекстЗапроса, "[КлючПорядка]", "[Элемент :Справочник.Сотрудники]");
    	тпНаФорме.ОбновитьСтроки();
    	тпНаФорме.ТекущаяСтрока=ТекСтрока;
    КонецПроцедуры	// ПриОкончанииБыстрогоПоиска(ТабличноеПоле, флРезультат, флПерепозиционировано) 
    
    

    В общем падает. Что я делаю не так и как надо правильно?
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #528 - 06. Апреля 2009 :: 08:57
    Печать  
    Да в общем то все правильно вроде. (у себя не проверял).
    Просто я тестирую на уже отлаженном коде работающем на "старом" поставщике. Малость модифицировал под то что Александр написал и по старому и по новому работает, но старый при изменении текста и переустановке все делает хорошо, а новый падает... не хорошо это.
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #529 - 06. Апреля 2009 :: 09:29
    Печать  
    пока как вариант обхода:
    Код
    Выбрать все
    п = ТП.ПоставщикДанных;
    ТП.ПоставщикДанных = "";
    п.УстановитьТекстЗапроса(...);
    ТП.ПоставщикДанных = п;
     
    
    
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #530 - 06. Апреля 2009 :: 09:54
    Печать  
    Проблему выяснил - когда после новой установки текста запроса при подключенном ТП, я вызываю ему ResetData - чтобы инициализировать заполнение ТП, оно не вызывает у меня QueryField, для своих колонок, и они у меня не помечаются, как используемые в запросе, и не включаются в текст запроса, а ТП потом просит данные для этих колонок.
    Ща буду выяснять, как это поправить.

    Зарегил баг http://www.1cpp.ru/bugs/show_bug.cgi?id=4269
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #531 - 06. Апреля 2009 :: 10:47
    Печать  
    orefkov писал(а) 06. Апреля 2009 :: 09:29:
    пока как вариант обхода:
    Код
    Выбрать все
    п = ТП.ПоставщикДанных;
    ТП.ПоставщикДанных = "";
    п.УстановитьТекстЗапроса(...);
    ТП.ПоставщикДанных = п;
     
    
    


    Вроде такое было с другими поставщиками,
    kms тоже советовал сначала отключать поставщика от ТП.
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #532 - 06. Апреля 2009 :: 10:57
    Печать  
    Вот переделал.
    Теперь на момент переустановки текста запроса у подключенного к ТП поставщика, автоматом включаются те поля из нового запроса, которые были включены в старом запросе на момент переустановки.
    Однако, если в новом запросе какого-либо поля не хватит (по сравнению со старым запросом), то все равно вылетит.

      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #533 - 06. Апреля 2009 :: 11:01
    Печать  
    PVR писал(а) 06. Апреля 2009 :: 10:47:
    Вроде такое было с другими поставщиками,
    kms тоже советовал сначала отключать поставщика от ТП.


    Оно конечно понятно, но для меня то, что глюк может быть обойден пользователем, не показатель.
    Все должно работать без танцев с бубном.
    В доке нигде не написано, что ТП требует отключать предварительно поставщика.
    Также в доке сказано -
    Код
    Выбрать все
    ResetData
    Описание: позволяет инициализировать заполнение ЭУ. 
    
    

    Однако отрабатывает не совсем так, как должно.
      
    Наверх
     
    IP записан
     
    PVR
    God Member
    *****
    Отсутствует



    Сообщений: 622
    Зарегистрирован: 19. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #534 - 06. Апреля 2009 :: 11:21
    Печать  
    orefkov писал(а) 06. Апреля 2009 :: 11:01:
    PVR писал(а) 06. Апреля 2009 :: 10:47:
    Вроде такое было с другими поставщиками,
    kms тоже советовал сначала отключать поставщика от ТП.


    Оно конечно понятно, но для меня то, что глюк может быть обойден пользователем, не показатель.
    Все должно работать без танцев с бубном.
    В доке нигде не написано, что ТП требует отключать предварительно поставщика.
    Также в доке сказано -
    Код
    Выбрать все
    ResetData
    Описание: позволяет инициализировать заполнение ЭУ. 
    
    

    Однако отрабатывает не совсем так, как должно.


    Согласен на все 100 Подмигивание
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #535 - 06. Апреля 2009 :: 13:22
    Печать  
    orefkov писал(а) 06. Апреля 2009 :: 10:57:
    Однако, если в новом запросе какого-либо поля не хватит (по сравнению со старым запросом), то все равно вылетит.


    Ты имеешь в виду что КОЛОНКИ в тексте запроса или КОЛОНКИ в табличном поле? Если в табличном поле, то проблема, а если в тексте запроса, то можно запросто пережить, ибо если колонка.видимость = 0 то новый поставщик ее не обработает кроме случаев когда принудительно установлен сбор.
    Я правильно понял?  Улыбка
      

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


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #536 - 06. Апреля 2009 :: 13:29
    Печать  
    Саша... слушай давай я тебе хорошую демку дам для тестирования поставщика? Улыбка по крайней мере я на ней тестирую и получаю все что написал выше.
    Только мылом поделись Улыбка

    Пы.сы. плюс я получил счас еще раз вылет с темой что память не может быть read.
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #537 - 07. Апреля 2009 :: 02:55
    Печать  
    почта - orefkov на гмаиле.
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #538 - 07. Апреля 2009 :: 04:05
    Печать  
    Отправил. Посмотри... я там в письме описание дал если вдруг понадобится.
    Письмо правда весит не мало (пости 6 метров).

    Надеюсь поможет в твоем ратном труде  Подмигивание

    Пы.сы. хотел сказать что проблемы ловил на поставщике справочника при комбинации разных отборов или настройки видимости колонок.  Подмигивание
    « Последняя редакция: 07. Апреля 2009 :: 05:52 - vandalsvq »  

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #539 - 07. Апреля 2009 :: 08:00
    Печать  
    Вот еще чутка поправил.
    Вроде на твоей обработке как только не изголялся с отборами и колонками, уронить не удалось.

    Хотя имхо пока ТП не доделают нормально (чтобы при сбросе данных поставщиком оно информировало поставщика о необходимых полях, лучше менять текст запроса у отключенного от ТП поставщика)
      

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #540 - 07. Апреля 2009 :: 08:12
    Печать  
    А можно ещё в провайдер метод "ПолучитьТекстЗапроса" добавить? Аналогию http://www.1cpp.ru/docum/icpp/html/TableField.html#getquerytext
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #541 - 07. Апреля 2009 :: 08:20
    Печать  
    JohnyDeath писал(а) 07. Апреля 2009 :: 08:12:
    А можно ещё в провайдер метод "ПолучитьТекстЗапроса" добавить? Аналогию http://www.1cpp.ru/docum/icpp/html/TableField.html#getquerytext

    Опиши подробнее, что он должен делать.
    Я переданный текст запроса целиком не храню, только отдельные куски - поля, from кусок, where кусок.
    Опять же вопрос - текст запроса обработанный метапарсером или нет?
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #542 - 07. Апреля 2009 :: 08:30
    Печать  
    Например, пользователь накидывает разные фильтры, добавляя/удаляя куски запроса. Потом в определённый момент он захотел всё это дело распечатать. Значит мне надо где-то отдельно хранить текущий текст запроса, по которому формируется ТП, или же попросить его у провайдера.
    В каком виде он будет отметапарсеный или нет, думаю, не важно. Главное, чтоб его можно было выполнить, т.е. примерно так:
    Код
    Выбрать все
    ТекстЗапроса=тп.ПоставщикДанных.ПолучитьТекстЗапроса();
    тзРезультат=ЗапросЛайт.ВыполнитьЗапрос(ТекстЗапроса);
    //дальше работаем уже со статической тзРезультат 
    
    
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #543 - 07. Апреля 2009 :: 10:03
    Печать  
    Александр а тебя как авторитетного человека хотел спросить сам принцип построения и работы класса тебе как?

    Ну если не затрудняет ответить (ОФФТОП конечно ну все же)  Подмигивание
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #544 - 07. Апреля 2009 :: 11:05
    Печать  
    vandalsvq писал(а) 07. Апреля 2009 :: 10:03:
    Александр а тебя как авторитетного человека хотел спросить сам принцип построения и работы класса тебе как?

    Ну если не затрудняет ответить (ОФФТОП конечно ну все же)  Подмигивание

    Ну, в дебри я не лез, но результат внушает.
    Только не понял, почему по регистру нельзя сделать фильтр Приход/Расход
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #545 - 07. Апреля 2009 :: 11:20
    Печать  
    orefkov писал(а) 07. Апреля 2009 :: 11:05:
    Только не понял, почему по регистру нельзя сделать фильтр Приход/Расход

    Улыбка посмотрим... впрочем это наверное для отдельной темы. Жаль закрытую часть сайта отключили Печаль
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #546 - 07. Апреля 2009 :: 13:08
    Печать  
    Залил исходники, бинарник, доку на гуглекод.

    Качать http://code.google.com/p/sqlite1c/downloads/list

    - **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::ПолучитьТекстЗапроса

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


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #547 - 07. Апреля 2009 :: 14:33
    Печать  
    Большое спасибо! Завтра начну тестировать новую версию.
    (И как ты все успеваешь? Просто завидую белой завистью! Улыбка)
      
    Наверх
     
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #548 - 07. Апреля 2009 :: 18:22
    Печать  
    Сборка с добавленным QueryFields, как предложено в http://www.1cpp.ru/bugs/show_bug.cgi?id=4269#c5.
    Александру для тестов и прочего препарирования.
    С точки зрения провайдера ODBC - нерабочая (рабочая, но неэффективная, что есть одно то же).
      

    icpp-tb-4269.rar ( 549 KB | Загрузки )

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #549 - 08. Апреля 2009 :: 03:16
    Печать  
    Саша, слушай я вот думаю... а не должен ли поставщик данных (1sqlite) автоматом обновлять строки в случае изменения видимости колонок. А то получается после программного или пользовательского изменения приходится вызывать "ОбновитьСтроки". Насколько я помню (и знаю) в ODBC этого не приходится делать.
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #550 - 08. Апреля 2009 :: 05:29
    Печать  
    vandalsvq писал(а) 08. Апреля 2009 :: 03:16:
    Саша, слушай я вот думаю... а не должен ли поставщик данных (1sqlite) автоматом обновлять строки в случае изменения видимости колонок. А то получается после программного или пользовательского изменения приходится вызывать "ОбновитьСтроки". Насколько я помню (и знаю) в ODBC этого не приходится делать.


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


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #551 - 08. Апреля 2009 :: 05:48
    Печать  
    Проверь плиз. А то я счас тестировал и у меня не обновлялись.


    Пы.сы. в конце настройку колонок открой туда сюда колонки поскрывай... если все нормально значит меня с утра поряньше "проглючило"
      

    Отхожу от дел. Долго и мучительно.
    Наверх
    IP записан
     
    Virusaka
    YaBB Newbies
    *
    Отсутствует


    1C++ rocks!

    Сообщений: 7
    Местоположение: Киев
    Зарегистрирован: 08. Апреля 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #552 - 08. Апреля 2009 :: 07:17
    Печать  
    Не знаю насколько это принципиально, но у меня если не указать третий параметр УстановитьТекстЗапроса(), 1с успешно ложится без вопросов. На версии 1.0.19 всё нормально.
      
    Наверх
    ICQ  
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #553 - 08. Апреля 2009 :: 07:42
    Печать  
    Virusaka писал(а) 08. Апреля 2009 :: 07:17:
    Не знаю насколько это принципиально, но у меня если не указать третий параметр УстановитьТекстЗапроса(), 1с успешно ложится без вопросов. На версии 1.0.19 всё нормально.

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #554 - 09. Апреля 2009 :: 06:26
    Печать  
    vandalsvq писал(а) 08. Апреля 2009 :: 03:16:
    Саша, слушай я вот думаю... а не должен ли поставщик данных (1sqlite) автоматом обновлять строки в случае изменения видимости колонок. А то получается после программного или пользовательского изменения приходится вызывать "ОбновитьСтроки". Насколько я помню (и знаю) в ODBC этого не приходится делать.

    Выяснил, когда это бывает - если колонку сначала сделали невидимой, затем изменили текст запроса, не отключая поставщика от ТП, затем сделали колонку видимой.

    Исправил.

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


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #555 - 09. Апреля 2009 :: 10:38
    Печать  
    Стабильный релиз еще на шаг ближе Подмигивание
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #556 - 09. Апреля 2009 :: 11:24
    Печать  
    Как вам такая идея:
    Реализовать в провайдере дополнительные поля и подзапросы.
    На словах пока сложно объяснить, покажу как примерно вижу использование

    Код
    Выбрать все
    ИсточникЗапроса.ОсновнойЗапрос("
    |select
    |	idx_date_time_iddoc [Ключ],
    |	iddoc 		[Док :Документ],
    |	iddocdef	[Док_вид :ВидДокументаПредставление],
    |	date		[ДатаДок :Дата],
    |	docno		[НомерДок],
    |	closed		[Флаг]
    |from Журнал
    |where iddocdef in (:ВидДокумента.ПКО, :ВидДокумента.Реализация, :ВидДокумента.ПоступлениеТМЦ)
    |", "Ключ", "Док");
    
    ИсточникЗапроса.ДобавитьПоля("Контрагент, Договор, Сумма,
    |СуммаУпрПоКассе, СуммаРубПоКассе, СуммаВалПоКассе");
    
    ИсточникЗапроса.ДобавитьПодзапрос("
    |select
    |	Контрагент	[Контрагент :Справочник.Контрагенты],
    |	Договор		[Договор :Справочник.Договоры],
    |	Сумма		[Сумма :Число.15.2]
    |from Документ_ПКО
    |where iddoc = @Док	-- Подставиться значение из поля Док строки основного запроса
    |limit 1", "ПоПКО");
    
    ИсточникЗапроса.ДобавитьПодзапрос("
    |select
    |	Контрагент	[Контрагент :Справочник.Контрагенты],
    |	Договор		[Договор :Справочник.Договоры],
    |	СуммаВзаиморасчетов	[Сумма :Число.15.2]
    |from Документ_Реализация
    |where iddoc = @Док
    |limit 1", "ПоРеализация");
    
    ИсточникЗапроса.ДобавитьПодзапрос("
    |select
    |	Контрагент	[Контрагент :Справочник.Контрагенты],
    |	Договор		[Договор :Справочник.Договоры],
    |	СуммаВзаиморасчетов	[Сумма :Число.15.2]
    |from Документ_ПоступлениеТМЦ
    |where iddoc = @Док
    |limit 1", "ПоПоступлениеТМЦ");
    
    ИсточникЗапроса.ДобавитьПодзапрос("
    |select
    |	sum(СуммаВал) [СуммаВалПоКассе :Число.15.2],
    |	sum(СуммаРуб) [СуммаРубПоКассе :Число.15.2],
    |	sum(СуммаУпр) [СуммаУпрПоКассе :Число.15.2]
    |from Регистр_Касса
    |where iddoc = @Док
    |");
    
    ИсточникЗапроса.ДобавитьВыбирательПодЗапроса("
    |case @Док_вид
    |when :ВидДокумента.ПКО then 'ПоПКО'
    |when :ВидДокумента.Реализация then 'ПоРеализация'
    |when :ВидДокумента.ПоступлениеТМЦ then 'ПоПоступлениеТМЦ'
    |end
    |");
    
    Поставщик.УстановитьИсточникЗапроса(ИсточникЗапроса);
     
    
    


    Суть в том, что для каждой записи, полученной из основного запроса, вычисляются выражения - "выбиратели подзапросов", которые должны вернуть идентификатор подзапроса, который необходимо выполнить для этой записи.
    Подзапросы без идентификаторов выполняются всегда.
    Подзапросы должны быть либо "горизонтальные" - возвращают 1 строку, имена полей подзапроса определяют для каких доп.полей они предназначены, либо "вертикальные" - возвращают несколько строк, две колонки: Значение, ИмяДопПоля (ну например выводить остатки по складам в отдельные колонки).

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #557 - 09. Апреля 2009 :: 11:36
    Печать  
    Я так понимаю, сечас это всё можно сделать в "ПриВыводеСтроки", а данный подход немного упрощает работу?
    Это случаем никак с Пользовательскими ф-иями пересечься не может?
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #558 - 09. Апреля 2009 :: 11:46
    Печать  
    Вот, именно чтобы не маятся в ПриВыводеСтроки, выводя это все кодом 1С и задумывается.
    Кроме того, значения этих доп-полей будут просто доступны через ТекущиеДанные.
    Кроме того, можно еще и доп.фильтры так организовать, для условий, которые задавать в where основного запроса либо геморно, либо очень неоптимально.
    А пользовательские функции пока вроде и не причем, но вполне могут пригодится в выбирателях подзапросов.
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #559 - 09. Апреля 2009 :: 13:22
    Печать  
    Идея хорошая жаль только что она в ODBC будет недоступна.
    Но это я о своем  Очень довольный о, универсальном  Круглые глаза

    И интерфейс который ты написал в принципе понятен и пока нареканий нет, разве что, а дополнительные параметры? кроме тех которые пересекаются с запросом?
    Ну что то вроде
    SELECT ... FROM ... WHERE iddoc = @doc AND date < :РабочаяДата()
      

    Отхожу от дел. Долго и мучительно.
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #560 - 09. Апреля 2009 :: 13:51
    Печать  
    orefkov писал(а) 09. Апреля 2009 :: 11:24:
    Как вам такая идея:

    Идея просто замечательная: где то в глубине души такое хотел очень давно, но (представляя объем работ разработчика) боялся об этом просить.
      
    Наверх
    www  
    IP записан
     
    kms
    1c++ power user
    1c++ moderator
    Отсутствует


    я хочу, чтоб сюда проложили
    дорогу оттуда...

    Сообщений: 4632
    Зарегистрирован: 19. Мая 2006
    Re: 1sqlite
    Ответ #561 - 09. Апреля 2009 :: 16:53
    Печать  
    Идея охренительная.
    Чтобы сказать что-нибудь умное, предлагаю Выбиратель назвать Селектором. Улыбка
      

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    kiruha
    1c++ power user
    Отсутствует



    Сообщений: 1249
    Зарегистрирован: 11. Апреля 2007
    Re: 1sqlite
    Ответ #562 - 10. Апреля 2009 :: 07:39
    Печать  
    kms писал(а) 09. Апреля 2009 :: 16:53:
    Идея охренительная.
    Чтобы сказать что-нибудь умное, предлагаю Выбиратель назвать Селектором. Улыбка


    Все что не в основном запросе увеличивает время выполнения.
    Соответственно данная опция может провоцировать к неэффективному коду.
    Потом пойдут вопросы - а чего тормозит.

    Или собираешься автоматом конструировать оптимальный запрос ?
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #563 - 10. Апреля 2009 :: 08:20
    Печать  
    Дык если эти данные выводить всё равно надо.
    Сейчас это можно делать через "ПриВыводеСтроки". Думаю, что реализация от Орефкова хуже точно не будет.
      
    Наверх
     
    IP записан
     
    kiruha
    1c++ power user
    Отсутствует



    Сообщений: 1249
    Зарегистрирован: 11. Апреля 2007
    Re: 1sqlite
    Ответ #564 - 10. Апреля 2009 :: 08:34
    Печать  
    JohnyDeath писал(а) 10. Апреля 2009 :: 08:20:
    Дык если эти данные выводить всё равно надо.
    Сейчас это можно делать через "ПриВыводеСтроки". Думаю, что реализация от Орефкова хуже точно не будет.


    В восьмерке это реализовано, насколько помню, не в провайдере, а в табличном поле,
    в событии ПриПолученииДанных - вызывается один раз при получении данных.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #565 - 10. Апреля 2009 :: 10:53
    Печать  
    kiruha писал(а) 10. Апреля 2009 :: 08:34:
    JohnyDeath писал(а) 10. Апреля 2009 :: 08:20:
    Дык если эти данные выводить всё равно надо.
    Сейчас это можно делать через "ПриВыводеСтроки". Думаю, что реализация от Орефкова хуже точно не будет.


    В восьмерке это реализовано, насколько помню, не в провайдере, а в табличном поле,
    в событии ПриПолученииДанных - вызывается один раз при получении данных.

    Всё равно не пойму, почему такая реализация будет НЕ оптимальнее события "ПриПолученииДанных".
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #566 - 13. Апреля 2009 :: 07:50
    Печать  
    2 Александр Орефков
    В приложенном архиве два запроса
    1. До передачи в поставщика
    2. После передачи в поставщике (в режиме отладки)
    Классно его отклобасило.
    Выкладывать сюда не стал ибо очень большие.

    Пы.сы. за то что я в поставщика подсунул в качестве запроса прошу не пинать сильно ногами  Очень довольный
      

    SQLite.rar ( 1 KB | Загрузки )

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #567 - 14. Апреля 2009 :: 05:54
    Печать  
    Исправил.
      

    1sqlite_1020_bf3.zip ( 391 KB | Загрузки )
    Наверх
     
    IP записан
     
    andrmit
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 24
    Зарегистрирован: 23. Августа 2010
    Re: 1sqlite
    Ответ #568 - 23. Августа 2010 :: 18:04
    Печать  
    Спасибо. Это я всё изучил... но что-то видимо глубоко в танке сижу... Вожно что-то попроще... может для старта готовые примеры по выбору подчинённых доков и пр.
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #569 - 24. Августа 2010 :: 05:50
    Печать  
    Эээ.. а куда делись странички ?
      
    Наверх
     
    IP записан
     
    andrmit
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 24
    Зарегистрирован: 23. Августа 2010
    Re: 1sqlite
    Ответ #570 - 24. Августа 2010 :: 06:23
    Печать  
    Вот же задал вопрос... форум подвис... Очень довольный
      
    Наверх
     
    IP записан
     
    Aleksey
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 46
    Зарегистрирован: 12. Марта 2009
    PRAGMA journal_mode = WAL или OFF
    Ответ #571 - 28. Августа 2010 :: 06:13
    Печать  
    PRAGMA journal_mode = WAL или OFF
         
    Для внешней SQLite базы понятно. А если запрос выполняется к таблицам 1С?
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: PRAGMA journal_mode = WAL или OFF
    Ответ #572 - 30. Августа 2010 :: 19:36
    Печать  
    Aleksey писал(а) 28. Августа 2010 :: 06:13:
    PRAGMA journal_mode = WAL или OFF
         
    Для внешней SQLite базы понятно. А если запрос выполняется к таблицам 1С?

    Тогда фиолетово.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #573 - 07. Октября 2010 :: 07:03
    Печать  
    Никто на вскидку не подскажет - как извлечь значение периодического реквизита типа "Строка"?

    Так понимаю - храниться в виде нескольких записей, вот как бы это в рамках одного запроса в одну строку склеить, что то не соображу..
      
    Наверх
     
    IP записан
     
    Alex_Bob
    Full Member
    ***
    Отсутствует



    Сообщений: 136
    Местоположение: Липецк
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #574 - 07. Октября 2010 :: 10:00
    Печать  
    Например, так (синтаксис для OLEDB, но принцип тот же)
    Код
    Выбрать все
    SELECT c1.Value + c2.Value + c3.Value + c4.Value
    FROM
    (SELECT value
     FROM 1SCONST
    WHERE objid = '     0   ' AND id = ' 9PS' AND partno = 0) AS c1,
    (SELECT value
    FROM 1SCONST
    WHERE objid = '     0   ' AND id = ' 9PS' AND partno = 1) AS c2,
    (SELECT value
     FROM 1SCONST
    WHERE objid = '     0   ' AND id = ' 9PS' AND partno = 2) AS c3,
    (SELECT value
    FROM 1SCONST
    WHERE objid = '     0   ' AND id = ' 9PS' AND partno = 3) AS c4
    
     
    
    
      

    Необходимо время, чтобы восстановить хаос. (с) Дж. Буш (младший)
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #575 - 07. Октября 2010 :: 13:03
    Печать  
    Улыбкатакой вариант мне в голову приходил, думал может тут что похитрее можно придумать..
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #576 - 08. Октября 2010 :: 05:25
    Печать  
    На кубани была длиииинная ветка про блоб.
    Там всё через left join
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #577 - 08. Октября 2010 :: 05:33
    Печать  
    Ну это вроде как не блоб, строка лежит в поле value таблицы 1sconst, порезанная на несколько частей..
    Но принцип видимо такой же..
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #578 - 08. Октября 2010 :: 05:36
    Печать  
    Да без разницы, в блобе такие строки хранятся аналогично..
    Просто кубань лежит, так бы кинул ссылку, там была куча вариантов, и через хранимки и так..
    + замеры производительности.
    В общем, народ искал самый быстрый алгоритм.
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #579 - 08. Октября 2010 :: 06:05
    Печать  
    На вот, нашел ветку, там даже не блоб, а всё же 1сконст был Улыбка

    http://forums.kuban.ru/forum/viewtopic_new.php?t=2676470&page=1#15568907
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #580 - 08. Октября 2010 :: 06:37
    Печать  
    спасиб, ща гляну  Улыбка
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #581 - 08. Октября 2010 :: 06:40
    Печать  
    вот же блин, полез добавить ссылку в закладки, а она у меня уже есть..
    как я проглядел.. Улыбка
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #582 - 13. Октября 2010 :: 20:37
    Печать  
    CaBaT писал(а) 07. Октября 2010 :: 07:03:
    Никто на вскидку не подскажет - как извлечь значение периодического реквизита типа "Строка"?

    Так понимаю - храниться в виде нескольких записей, вот как бы это в рамках одного запроса в одну строку склеить, что то не соображу..


    Из моего ответа vandalsvg в личку на такой же вопрос:
    Цитата:
    Вот, ща для теста создал строковую периодическую константу (40 симвоов), запросом получается так:
    Код
    Выбрать все
    select group_concat(C.value, '') from
    (select date, time, docid from [_1S.Const] where objid='     0   ' and id = '   Q' and date <= '20100719' order by date desc limit 1) aa inner join [_1S.Const] C
    on (C.date = aa.date and C.time=aa.time and C.docid=aa.docid and C.ID='   Q'
    and C.OBJID = '     0   ')
    order by C.partno 
    
    

    В индексы попадает великолепно, строку получает.

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


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #583 - 14. Октября 2010 :: 05:28
    Печать  
    Спасибо, ща буду пробовать Улыбка
    ..
    Супер, все работает, да еще и довольно быстро!!
    Закинул себе в FAQ.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #584 - 03. Ноября 2010 :: 09:22
    Печать  
    Который раз сталкиваюсь с такой проблемой: при получении реквизита типа "Дата" с типизацией "Дата" в случае, если он пустой, неправильно работает метод "ПустоеЗначение".
    При этом визуально значение вроде как правильное.
    Вот что у меня под отладчиком получается:

    Код
    Выбрать все
    _Опись.Вложен = '  .  .    '
    ПолучитьПустоеЗначение("Дата") = '  .  .    '
    ПустоеЗначение(ПолучитьПустоеЗначение("Дата")) = 1
    ПустоеЗначение(_Опись.Вложен) = 0
    ТипЗначенияСтр(_Опись.Вложен) = "Дата"
    ТипЗначенияСтр(ПолучитьПустоеЗначение("Дата")) = "Дата" 
    
    

    здесь _Опись.Вложен - это результат выборки из справочника реквизита типа "Дата"

    Вроде бы значения одинаковые, а "ПустоеЗначение" выдает разный результат..
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #585 - 03. Ноября 2010 :: 20:57
    Печать  
    CaBaT писал(а) 03. Ноября 2010 :: 09:22:
    Который раз сталкиваюсь с такой проблемой: при получении реквизита типа "Дата" с типизацией "Дата" в случае, если он пустой, неправильно работает метод "ПустоеЗначение".

    Посмотрю, проверю
      
    Наверх
     
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    1sqlite - Сложение строк
    Ответ #586 - 07. Ноября 2010 :: 02:34
    Печать  
    Как реализовать в 1sqlite сложение строк?
    Самый простой пример: для связи между объектами по ссылкам приходится использовать несколько условий сравнения через SUBSTR ... Если использовать OLEDBData - там идет в условиях простое сложение строк идентификаторов типа, вида и самого значения, что в 1sqlite не работает ... или же я не знаю спец.оператора для сего дела, т.к. простой знак "плюс" для этого явно не подходит...

    P.S.: Хотелось бы еще ints-ки по 1sqlite Подмигивание
    « Последняя редакция: 07. Ноября 2010 :: 05:23 - Dmitry The Wing »  
    Наверх
     
    IP записан
     
    sava
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 56
    Зарегистрирован: 18. Февраля 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #587 - 07. Ноября 2010 :: 16:20
    Печать  
    a||b
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Быстродействие при доступе по сети
    Ответ #588 - 09. Ноября 2010 :: 08:12
    Печать  
    Столкнулся с проблемой быстродействия..
    Реализовал внешнюю базу в sqlite, размер пока смешной - 50кб
    (база - типа небольшого планировщика встреч в поздразделениях)
    При работе с ней с локального диска все летает, выложил на сетевой ресурс - тормоза дикие..
    Даже не знаю, как бороться..
    В основном идет выборка данных, много маленьких запросов..
    Может кто подскажет - как бы порешать, может подкрутить где чего в настройках SQLite-а можно?
    А то надо запускать, а работать нереально.. Печаль
      
    Наверх
     
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: Быстродействие при доступе по сети
    Ответ #589 - 09. Ноября 2010 :: 08:21
    Печать  
    Это задача не для SQLite. Используй полноценную серверную СУБД, благо бесплатных теперь много: MySQL, FirBird, PostgreSQL и куча всяких экспрессов.
    Всякий механизм хорош на своем месте. SQLite хороша при локальной работе одного пользователя.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #590 - 09. Ноября 2010 :: 08:56
    Печать  
    Да, уже задумался об этом..
    Да там задача то смешная, файл БД больше 1Мб и не вырастет никогда..
    Не ожидал наступить на такие грабли..
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #591 - 09. Ноября 2010 :: 09:00
    Печать  
    Прям хоть копируй локально во временный файл..
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #592 - 09. Ноября 2010 :: 13:32
    Печать  
    В итоге решил проблему загрузкой всех таблиц из файла в базу в памяти, своеобразный кеш получился..
    Скорость последующей выборки выросла на порядок..

    Так как ожидаю, что файл базы будет не очень большой (вряд ли больше 1Мб), пока на этом остановлюсь..
      
    Наверх
     
    IP записан
     
    ТочноеЯдро
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 21
    Зарегистрирован: 28. Января 2010
    Re: 1sqlite
    Ответ #593 - 24. Ноября 2010 :: 12:24
    Печать  
    Стоит зада ча закинуть много строк в таблицу SQLite.
    Заполняю ТЗ, укладываю во временную таблицу, Запросом Insert Select * вношу всю временную таблицу в основную.  Но есть проблема.
    Создаю ТЗ:
    ТЗ.НоваяКолонка("code","Число",15);
    Заполняю строки:
    ТЗ.code = 25639874165897
    делаю загрузку во временную таблицу:
    База.УложитьТЗ(ТЗ,"tempTZ");
    делаю запрос
    ТЗ2=запрос.ВыполнитьЗапрос("Select * From tempTZ")
    и в колонке code вижу мусор типа 1345051224  Ужас
    УложитьТЗ понимает числа больше 2^32 ?

    PS. Пока выхожу из ситуации так
    ТЗ.НоваяКолонка("code","Строка",15);
    _____________________________________

    упссс.... и тут грабли.
    Теперь запрос типа Select Where code = 123 не выдаёт результат. Только так : Select Where code = '123                 '
    Хотя колонка code объявлена как  bigint
    « Последняя редакция: 24. Ноября 2010 :: 16:04 - ТочноеЯдро »  
    Наверх
     
    IP записан
     
    ТочноеЯдро
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 21
    Зарегистрирован: 28. Января 2010
    Re: 1sqlite
    Ответ #594 - 24. Ноября 2010 :: 16:57
    Печать  
    Продолжение.
    Создал таблицу в SQLite с      code bigint not null
    сделал запись из SQLite Developer со значением code=123
    запрос Select '_' || code || '_' From MyTab
    выдал _123_
    Теперь делаю инсерт из временной таблицы как постом выше и этот же запрос выдаёт
    _123_
    _25639874165897 _
    Теперь ТЗ формирую так: ТЗ.code = " "+25639874165897
    и запрос теперь выдаёт
    _123_
    _25639874165897 _
    _ 25639874165897_
    В DDL по-прежнему написано [code] bigint NOT NULL
    Получается типизация идёт известным маршрутом ?  Печаль
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #595 - 25. Ноября 2010 :: 06:26
    Печать  
    В sqlite вообще нет типизации.
    Для совместимости при создании таблицы можно указывать тип полей, но на самом деле в любое поле можно ложить любые данные.
    те можно объявить поле как int, но вставлять туда текст, пофигу. Вобщем, что на самом деле лежит в поле определяется самими данными при вставке.
    Сам sqlite оперирует всего с 4мя типами данных - integer (int64), real (double), text (utf-16 или utf-8), blob (массив байтов).

    По поводу укладки из ТЗ больших чисел посмотрю, сам sqlite работает с 64битными целыми, значит, что-то в моем коде.
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #596 - 25. Ноября 2010 :: 06:31
    Печать  
    Посмотрел, да, есть косяк. При установке sql-параметра, если значение параметра - целое число, то берется long значение. Ща подумаю, как исправить.
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #597 - 25. Ноября 2010 :: 06:41
    Печать  
    Вот вроде поправил. Проверь, как укладываются большие значения.
      

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #598 - 25. Ноября 2010 :: 07:09
    Печать  
    Вот еще добавил функционал для проверки.
    В методе УложитьОбъекты если указана иерархия для разворота справочника по группам, и она начинается со знака '+', то в таблицу укладываются не только элементы, но и группы. Для счетов это правило не действует.
    Пример:
    Код
    Выбрать все
    УложитьОбъекты(сзИсключить, "тИсключить",, "+Номенклатура");
    ....
    select
    ...
    from [Справочник.Номенклатура] Товары
    where Товары.id not in (select val from тИсключить)
     
    
    

      

    1sqlite_010.zip ( 425 KB | Загрузки )
    Наверх
     
    IP записан
     
    ТочноеЯдро
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 21
    Зарегистрирован: 28. Января 2010
    Re: 1sqlite
    Ответ #599 - 25. Ноября 2010 :: 10:34
    Печать  
    ыыыыыы Печаль
    первое же обращение к базе SQLite ложит её намертво.
    При попытке подключиться к ней после этого через SQLite Dev выдаёт ошибку "ERROR: file is encrypted or is not a database"
    Плачущий
    Кстати чем реанимировать базу SQLite в случае чего-то подобного ?
    Бэкап само собой, но если нжно поднять то что есть на сию минуту.  Улыбка
    _________

    PS рядом с файлами базы начали создаваться файлы типа
    ИмяБазы.db3-shm и ИмяБазы.db3-wal
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #600 - 25. Ноября 2010 :: 13:21
    Печать  
    ТочноеЯдро писал(а) 25. Ноября 2010 :: 10:34:
    ыыыыыы Печаль
    первое же обращение к базе SQLite ложит её намертво.
    При попытке подключиться к ней после этого через SQLite Dev выдаёт ошибку "ERROR: file is encrypted or is not a database"
    Плачущий
    Кстати чем реанимировать базу SQLite в случае чего-то подобного ?
    Бэкап само собой, но если нжно поднять то что есть на сию минуту.  Улыбка
    _________

    PS рядом с файлами базы начали создаваться файлы типа
    ИмяБазы.db3-shm и ИмяБазы.db3-wal

    Попробуй первым обращением к базе данных пошли запрос
    Код
    Выбрать все
    pragma journal_mode=delete
     
    
    

    или вместо delete - одно из TRUNCATE | PERSIST | MEMORY | OFF
    См. http://www.sqlite.org/pragma.html#pragma_journal_mode
    Походу у тебя пытается базу открыть в WAL режиме
    http://www.sqlite.org/wal.html

    И походу у тебя база не накрылась, а просто SQLite Dev не может работать с новым форматом баз.
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #601 - 30. Ноября 2010 :: 09:53
    Печать  
    Выкладываю на тест еще одну доработку.
    Научил функцию date понимать входную дату в формате 1С - YYYYMMDD.
    Если на вход поступает строка длиной 8 символов, то в нее вставляются '-' в нужных местах (приводится к формату YYYY-MM-DD) и при возврате они убираются. В остальных случаях все работает как раньше.
    Теперь можно просто писать
    Код
    Выбрать все
    date(Ж.date, '+5 days') 
    
    

      

    1sqlite_011.zip ( 426 KB | Загрузки )
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #602 - 30. Ноября 2010 :: 10:21
    Печать  
    Прикольно!
    А то у меня даже спец. метод был написан "ДатаВSQL()", который то же самое делал..
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #603 - 30. Ноября 2010 :: 11:48
    Печать  
    Спасиб!
    У меня тоже есть ф-ия под названием "ДатаВФорматБД"
      
    Наверх
     
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    1sqlite и дата
    Ответ #604 - 02. Декабря 2010 :: 01:53
    Печать  
    CaBaT писал(а) 30. Ноября 2010 :: 10:21:
    Прикольно!
    А то у меня даже спец. метод был написан "ДатаВSQL()", который то же самое делал..
    JohnyDeath писал(а) 30. Ноября 2010 :: 11:48:
    Спасиб!
    У меня тоже есть ф-ия под названием "ДатаВФорматБД"

    Может, я немного отстал от жизни, нго приведите, пожалуйста, пример, где подобный метод затребован?
    Всегда передавал дату параметром и не возникало вопросов...
      
    Наверх
     
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    1sqlite и --
    Ответ #605 - 02. Декабря 2010 :: 03:40
    Печать  
    Обнаружил зависание 1sqlite при попытке комментирования строки в запросе при помощи "--" в начале строки.
    Ошибки не вызвало, но 1С зависла и начала зверзки жрать память.
    Комментарий добавил на автомате, отлаживая запрос в консольке, но такое поведение нелогично, ИМХО - или пусть оно ругается или же пусть комментирует.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite и дата
    Ответ #606 - 02. Декабря 2010 :: 07:00
    Печать  
    Dmitry The Wing писал(а) 02. Декабря 2010 :: 01:53:
    CaBaT писал(а) 30. Ноября 2010 :: 10:21:
    Прикольно!
    А то у меня даже спец. метод был написан "ДатаВSQL()", который то же самое делал..
    JohnyDeath писал(а) 30. Ноября 2010 :: 11:48:
    Спасиб!
    У меня тоже есть ф-ия под названием "ДатаВФорматБД"

    Может, я немного отстал от жизни, нго приведите, пожалуйста, пример, где подобный метод затребован?
    Всегда передавал дату параметром и не возникало вопросов...

    Саша один из вариантов уже написал:
    Код
    Выбрать все
    date(Ж.date, '+5 days') //СмещениеДаты5дней 
    
    

    раньше приходилось выкручиваться через substr, отчего записи становились громоздкими и нечитаемыми
      
    Наверх
     
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: 1sqlite и дата
    Ответ #607 - 02. Декабря 2010 :: 07:27
    Печать  
    JohnyDeath писал(а) 02. Декабря 2010 :: 07:00:
    раньше приходилось выкручиваться через substr, отчего записи становились громоздкими и нечитаемыми

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #608 - 02. Декабря 2010 :: 07:54
    Печать  
    Еще, например, необходимо получить в запросе номер недели или возвращать 1/0 в зависимости от того был ли день выходным или нет. Много всякого...
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #609 - 02. Декабря 2010 :: 07:57
    Печать  
    Кстати, Саш, а можешь добавить ф-ию, возвращающую номер квартала?
    Или по аналогии с этим:
    Цитата:
    %d            day of month: 00
    %f            fractional seconds: SS.SSS
    %H            hour: 00-24
    %j            day of year: 001-366
    %J            Julian day number
    %m            month: 01-12
    %M            minute: 00-59
    %s            seconds since 1970-01-01
    %S            seconds: 00-59
    %w            day of week 0-6 with Sunday==0
    %W            week of year: 00-53
    %Y            year: 0000-9999
    %%            %

    Добавить какой-нибудь %q, который бы это делал?
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #610 - 02. Декабря 2010 :: 14:34
    Печать  
    попробую.
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #611 - 03. Декабря 2010 :: 06:28
    Печать  
    В функцию strftime добавлен модификатор %q - выводит номер квартала переданной даты: 1-4

    Пример:
    Код
    Выбрать все
    select
        date,
        date [Дата :Дата],
        strftime("%q квартал %Y года", date)  Квартал
    from Журнал
    limit 500 
    
    

      

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



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #612 - 03. Декабря 2010 :: 06:42
    Печать  
    Класс! Спасибо.
      
    Наверх
     
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #613 - 03. Декабря 2010 :: 06:57
    Печать  
    orefkov писал(а) 03. Декабря 2010 :: 06:28:
    добавлен модификатор

    А про комментарии можешь что рассказать?
    Почему оно повисло?
    вот: Dmitry The Wing писал(а) 02. Декабря 2010 :: 03:40:
    --

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


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #614 - 03. Декабря 2010 :: 07:07
    Печать  
    Dmitry The Wing писал(а) 03. Декабря 2010 :: 06:57:
    А про комментарии можешь что рассказать?
    Почему оно повисло?

    Постоянно использую комментарии в запросах, ни разу ничего не висло..
    Правда пока все еще использую версию 1.0.2.3
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #615 - 03. Декабря 2010 :: 07:24
    Печать  
    Вот как бы корректно отработать ситуацию при множественном доступе к файлу, когда один читает, а другой пытается записать и отваливается с ошибкой..
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #616 - 03. Декабря 2010 :: 07:32
    Печать  
    По-моему как раз для таких случаев создан WAL режим (не будет работать если обращение идет с разных компов)
      
    Наверх
     
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #617 - 03. Декабря 2010 :: 07:37
    Печать  
    CaBaT писал(а) 03. Декабря 2010 :: 07:07:
    Dmitry The Wing писал(а) 03. Декабря 2010 :: 06:57:
    А про комментарии можешь что рассказать?
    Почему оно повисло?

    Постоянно использую комментарии в запросах, ни разу ничего не висло..
    Правда пока все еще использую версию 1.0.2.3

    Именно "--"?
    Если так, то может дело в том, что комментарий был в полях запроса?
    типа:
    SELECT
    field
    ,field2
    --,field3
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #618 - 03. Декабря 2010 :: 07:40
    Печать  
    JohnyDeath писал(а) 03. Декабря 2010 :: 07:32:
    По-моему как раз для таких случаев создан WAL режим (не будет работать если обращение идет с разных компов)


    Мне именно с разных надо..
    А почему не будет работать при обращении с разных компов?
    А, все, нашел..
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #619 - 03. Декабря 2010 :: 07:41
    Печать  
    Dmitry The Wing писал(а) 03. Декабря 2010 :: 07:37:
    Если так, то может дело в том, что комментарий был в полях запроса?


    Обычно у меня как раз комментарий был в полях запроса..
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #620 - 03. Декабря 2010 :: 07:50
    Печать  
    Вопрос к Саше Орефкову: а метод "ПоследняяОшибка" нигде не документирован?
    Смотрю у меня в коде он есть, а в доках нигде не нашел, видимо из чужого кода когда-то выдернул..
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #621 - 03. Декабря 2010 :: 08:00
    Печать  
    Dmitry The Wing писал(а) 03. Декабря 2010 :: 07:37:
    CaBaT писал(а) 03. Декабря 2010 :: 07:07:
    Dmitry The Wing писал(а) 03. Декабря 2010 :: 06:57:
    А про комментарии можешь что рассказать?
    Почему оно повисло?

    Постоянно использую комментарии в запросах, ни разу ничего не висло..
    Правда пока все еще использую версию 1.0.2.3

    Именно "--"?
    Если так, то может дело в том, что комментарий был в полях запроса?
    типа:
    SELECT
    field
    ,field2
    --,field3

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #622 - 03. Декабря 2010 :: 08:21
    Печать  
    Dmitry The Wing писал(а) 03. Декабря 2010 :: 07:37:
    CaBaT писал(а) 03. Декабря 2010 :: 07:07:
    Dmitry The Wing писал(а) 03. Декабря 2010 :: 06:57:
    А про комментарии можешь что рассказать?
    Почему оно повисло?

    Постоянно использую комментарии в запросах, ни разу ничего не висло..
    Правда пока все еще использую версию 1.0.2.3

    Именно "--"?
    Если так, то может дело в том, что комментарий был в полях запроса?
    типа:
    SELECT
    field
    ,field2
    --,field3

    Постоянно в консоли ченить верчу и также поля комментирую.
    Можешь выслать текст запроса, на котором зависло?
      
    Наверх
     
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #623 - 03. Декабря 2010 :: 08:36
    Печать  
    orefkov писал(а) 03. Декабря 2010 :: 08:21:
    Постоянно в консоли ченить верчу и также поля комментирую.
    Можешь выслать текст запроса, на котором зависло?

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #624 - 03. Декабря 2010 :: 08:36
    Печать  
    CaBaT писал(а) 03. Декабря 2010 :: 07:50:
    Вопрос к Саше Орефкову: а метод "ПоследняяОшибка" нигде не документирован?
    Смотрю у меня в коде он есть, а в доках нигде не нашел, видимо из чужого кода когда-то выдернул..

    Не знаю я такого метода, э..., Казань брал, ПоследнююОшибку не брал...
    Может в первых версиях была, еще до выкладывания на гуглесорце?
    Сейчас все ошибки выкидывают исключения сразу.
    Кстати, если для базы сделать .ТаймаутЗапроса(ТаймаутВмиллисекундах), то когда читатель не может читать из-за писателя или наоборот,  тоже должно вывалиться исключение, которое можно отловить в Попытке.
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #625 - 03. Декабря 2010 :: 08:39
    Печать  
    Dmitry The Wing писал(а) 03. Декабря 2010 :: 08:36:
    orefkov писал(а) 03. Декабря 2010 :: 08:21:
    Постоянно в консоли ченить верчу и также поля комментирую.
    Можешь выслать текст запроса, на котором зависло?

    К сожалению, нет. Проблема была в том, что запрос тестировался в консольке и нигде не был еще сохранен... Вполне может быть, что я там указал что-то не совсем верно, но теперь уже не скажу, что. Решил, что дело в комментарии. После перезапуска 1С доработал запрос и внедрил в конфу... А каким тот был в момент зацикливания - уже нереально восстановить...

    Возможно чтонить неудачно закоментил и получилась бяка, типа
    Код
    Выбрать все
    from Журнал Ж1
    inner join Журнал Ж2
    -- on Ж1.iddoc = Ж2.iddoc
     
    
    

    Что понятно, приведет к ощущению зависания.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #626 - 03. Декабря 2010 :: 08:54
    Печать  
    orefkov писал(а) 03. Декабря 2010 :: 08:36:
    Не знаю я такого метода, э..., Казань брал, ПоследнююОшибку не брал...
    Может в первых версиях была, еще до выкладывания на гуглесорце?

    похоже я это откуда то дернул не подумав, похоже этот код никогда и не отрабатывал у меня:
    Код
    Выбрать все
    _Результат = _Запрос.ВыполнитьЗапрос(_Текст);
    Если ТипЗначения(_Результат) = 1 Тогда Возврат _Результат;
    ИначеЕсли ТипЗначенияСтр(_Результат) = "ТаблицаЗначений" Тогда Возврат _Результат;
    Иначе Сообщить(_БД.ПоследняяОшибка()); Возврат 0; КонецЕсли; 
    
    


    orefkov писал(а) 03. Декабря 2010 :: 08:36:
    Кстати, если для базы сделать .ТаймаутЗапроса(ТаймаутВмиллисекундах), то когда читатель не может читать из-за писателя или наоборот,  тоже должно вывалиться исключение, которое можно отловить в Попытке.

    Спасибо, посмотрю, поковыряю..
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #627 - 03. Декабря 2010 :: 09:09
    Печать  
    А где взять эту версию:
    http://www.forum.mista.ru/topic.php?id=497391#17
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #628 - 03. Декабря 2010 :: 09:57
    Печать  
    CaBaT писал(а) 03. Декабря 2010 :: 09:09:
    А где взять эту версию:
    http://www.forum.mista.ru/topic.php?id=497391#17

    здесь http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/611#611
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #629 - 03. Декабря 2010 :: 10:18
    Печать  
    заменил dll-ку, при запуске конфы вижу следующее:
    Код
    Выбрать все
    insert into events (event_date,event_time,event_text) values ('2010-12-03','13:01:31','Начало работы подсистемы SLT')
    ) : database disk image is malformed 
    
    

    возвращаю в зад 1.0.2.3 - все гут.

    Пояснение: это кусок кода записи в лог-файл, который представляет собой внешнюю SQLite-базу.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #630 - 03. Декабря 2010 :: 12:06
    Печать  
    Что-то похожее: http://www.sqlite.org/faq.html#q21
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #631 - 03. Декабря 2010 :: 12:11
    Печать  
    JohnyDeath писал(а) 03. Декабря 2010 :: 12:06:
    Что-то похожее: http://www.sqlite.org/faq.html#q21

    Это не совсем то, у меня ведь после возврата старой dll-ки все в норме.
    Похоже что то не так с форматом базы, новая версия почему то не может открыть базу, созданную в версии 1.0.2.3
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #632 - 06. Декабря 2010 :: 05:55
    Печать  
    CaBaT писал(а) 03. Декабря 2010 :: 12:11:
    JohnyDeath писал(а) 03. Декабря 2010 :: 12:06:
    Что-то похожее: http://www.sqlite.org/faq.html#q21

    Это не совсем то, у меня ведь после возврата старой dll-ки все в норме.
    Похоже что то не так с форматом базы, новая версия почему то не может открыть базу, созданную в версии 1.0.2.3

    Ок, попробую посмотреть.
    А ты все таки попробуй УстановитьТаймаут, вроде я его еще в 1.0.2.3 тайно добавлял.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #633 - 06. Декабря 2010 :: 06:48
    Печать  
    orefkov писал(а) 06. Декабря 2010 :: 05:55:
    А ты все таки попробуй УстановитьТаймаут, вроде я его еще в 1.0.2.3 тайно добавлял.

    Попробовал, ни "ТаймаутЗапроса" ни "УстановитьТаймаут" не срабатывает.
    Версия 1.0.2.3 от 04.02.2010 (версия sqlite 3.6.22)
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #634 - 07. Декабря 2010 :: 06:41
    Печать  
    Вот очередная тестовая версия.
    Обновил sqlite до 3-7-3
      

    1sqlite_013.zip ( 429 KB | Загрузки )
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #635 - 07. Декабря 2010 :: 07:00
    Печать  
    orefkov писал(а) 07. Декабря 2010 :: 06:41:
    Вот очередная тестовая версия.

    Поставил на свою рабочую базу, вроде взлетело..
    Погоняю, потестирую.
    Спасибо.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #636 - 07. Декабря 2010 :: 07:00
    Печать  
    А в инфо по dll так и стоит:
    Цитата:
    Comments      : sqlite 3.6.22


    Ну и Цитата:
    FileVersion      : 1, 0, 2, 4

    тоже б поменять, а то уже какая сборка под одним и тем же номером.
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #637 - 07. Декабря 2010 :: 07:05
    Печать  
    JohnyDeath писал(а) 07. Декабря 2010 :: 07:00:
    А в инфо по dll так и стоит:
    Цитата:
    Comments      : sqlite 3.6.22


    Ну и Цитата:
    FileVersion      : 1, 0, 2, 4

    тоже б поменять, а то уже какая сборка под одним и тем же номером.

    Это еще не релиз, так что на версии не смотрите, там же написано - Вариант: pre-build.
    Когда исправлю баги, о которых отпишутся в течении недели, тогда и выйдет нормальный билд с документацией.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #638 - 28. Декабря 2010 :: 15:25
    Печать  
    Вот интересно, при работе с базой на сетевом ресурсе 1sqlite может проигрывать стандартному способу доступа к данным (выборка, запрос)?

    Просто сейчас сравниваю быстродействие 1sqlite при работе по сети и в терминале - разница просто катастрофическая!
    При этоv как то база шевелится до сих пор, при кол-ве пользователей в среднем 10-15.
    До этого использовались только стандартные механизмы доступа к данным, я сейчас потихоньку внедряю 1sqlite.
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #639 - 28. Декабря 2010 :: 20:39
    Печать  
    CaBaT писал(а) 28. Декабря 2010 :: 15:25:
    Вот интересно, при работе с базой на сетевом ресурсе 1sqlite может проигрывать стандартному способу доступа к данным (выборка, запрос)?

    Просто сейчас сравниваю быстродействие 1sqlite при работе по сети и в терминале - разница просто катастрофическая!
    При этоv как то база шевелится до сих пор, при кол-ве пользователей в среднем 10-15.
    До этого использовались только стандартные механизмы доступа к данным, я сейчас потихоньку внедряю 1sqlite.

    Ты имеешь ввиду доступ к таблицам 1С ?
    По идее, 1sqlite не может быть медленнее, чем сама 1С, ведь для доступа используются сам родной движок 1С.
    Покажи для примера код на языке 1С и соответствующий запрос на sqlite, на котором катастрофическая разница.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #640 - 29. Декабря 2010 :: 06:58
    Печать  
    Я неправильно выразился - разница катастрофическая между работой по сети и в терминале, и сравнивал я именно работу запроса 1sqlite.

    Т.е. один и тот же запрос через 1sqlite когда база открыта с сетевого ресурса, выполняется 30 сек, а когда эта же база открыта на сервере, где она лежит, в терминальной сессии, то 0,100 сек.

    Просто подумалось, что может 1sqlite по сети не любит работать, хотя, действительно, ведь он использует движок 1С.

    Просто до сих пор не могу понять, как наша база еще не умерла - лежит на сетевом ресурсе, пользователей 5-15, размер маленький (500Мб на все таблицы с индексами), а любой мало-мальский сложный запрос через 1sqlite тупит не по детски..
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #641 - 29. Декабря 2010 :: 07:16
    Печать  
    Тут надобно запросы смотреть, возможно они неоптимальны.
    Просто методы языка 1С уже заточены для работы по нужным индексам (или индексы заточены под методы языка 1С), а в запросах 1sqlite можно написать что угодно. то есть, с одной стороны запросы sqlite дают бОльшую свободу в обращении к данным, но и накладывают бОльшую ответственность за их написание.
    Показателен твой же пример в ветке по выборке по графе отбора - один и тот же конечный результат может быть достигнут разными способами, с разницей по скорости на порядки.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #642 - 29. Декабря 2010 :: 07:39
    Печать  
    Полностью согласен, но тут речь идет о том, что даже простейшие запросы, ну например, просто выборка элементов справочника по родителю, где в индекс не попасть надо постараться, работает очень медленно при работе по сети..
    (но надо признать, что в данном конкретном случае, конечно, чуть быстрее, чем стандартный код 1С Улыбка)
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #643 - 29. Декабря 2010 :: 07:43
    Печать  
    Если у тебя много пользователей работают именно по сети, то может стоит подумать, например об этом http://www.1cpp.ru/forum/YaBB.pl?num=1279614832/0 (страница самой программы http://www.wirth.ru/load/v7dbnet/1-1-0-2 ). Автор также смотрел и работу с 1sqlite. На основе его тестов можно сделать вывод, что наиболее быстроее решение - это V7DBNet + 1sqlite.
    Вот результаты его тестирования:
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #644 - 29. Декабря 2010 :: 08:51
    Печать  
    Ну вообще сейчас в разработке переход на терминал, думаю решение будет положительным Улыбка
    А про V7DBNet ветку читал, но что как то стрёмно в продакшн ставить..
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #645 - 29. Декабря 2010 :: 12:56
    Печать  
    CaBaT писал(а) 29. Декабря 2010 :: 08:51:
    Ну вообще сейчас в разработке переход на терминал, думаю решение будет положительным Улыбка
    А про V7DBNet ветку читал, но что как то стрёмно в продакшн ставить..

    Если на терминал переходите, то V7DBNet и не нужна, она дает прирост при работе по сети, за счет обхода проблемы "отключение файлового кэша при подключении второго юзера".
      
    Наверх
     
    IP записан
     
    sava
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 56
    Зарегистрирован: 18. Февраля 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #646 - 14. Января 2011 :: 17:48
    Печать  
    1sqlite под Винь 9х  работает или есть какие- то ньюансы?
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #647 - 16. Января 2011 :: 21:34
    Печать  
    sava писал(а) 14. Января 2011 :: 17:48:
    1sqlite под Винь 9х  работает или есть какие- то ньюансы?

    Э....
    Даже не проверял, как-то в голову не приходило.
    Про сам sqlite написано на офф.сайте, что поддерживается Win32 и WinCE.
    У меня есть несколько вызовов юникодных. По-моему на голой Win98 не месте этих функций - пустые заглушки, но если поставить IE с какой-то (вроде 5ой) версии, то они начинают работать. Завтра на работе гляну подробнее.
      
    Наверх
     
    IP записан
     
    ТочноеЯдро
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 21
    Зарегистрирован: 28. Января 2010
    Re: 1sqlite
    Ответ #648 - 17. Января 2011 :: 23:55
    Печать  
    Добрый день.
    Есть оборотный регистр типа
    Клиент, товар, ценаЗакупки
    кво, сумма.
    как отследить изменения цен между двумя датами при наличии оборотов одним запросом?
    При этом цена может поменяться посреди дня и закупки всегда ведутся по одной цене (на текущий момент).
    Пишу
    Select
         РОВ.КодПост [Товар:Справочник.ТМЦ],
         СпрТМЦ.Code КодТовара,
         Case Date When '20110101' Then ЦенаПост Else 0 End ЦенаПост1,
         Case Date When '20110101' Then 0 Else ЦенаПост End ЦенаПост2,
         РОВ.Поставщик [Пост:Справочник.Клиенты],
         Sum(Case Date When '20110101' Then ПриходКво Else 0 End) ПриходКво1,
         Sum(Case Date When '20110101' Then ПриходОсн Else 0 End) ПриходОсн1,
         Sum(Case Date When '20110101' Then 0 Else ПриходКво End) ПриходКво2,
         Sum(Case Date When '20110101' Then 0 Else ПриходОсн End) ПриходОсн2,
         СпрТМЦ.Descr ТоварИмя,
         Клиенты.Descr КлиентИмя
    From
         Регистр_Обороты РОВ
         Left Join Справочник_Клиенты Клиенты On РОВ.Поставщик=Клиенты.ID
         Left Join Справочник_ТМЦ СпрТМЦ On РОВ.КодПост=СпрТМЦ.ID
    Where
         (Date='20110101' Or Date='20110105')
         And (РасходКво<>0 or РасходОсн<>0 or ПриходКво<>0 or ПриходОсн<>0)
    Group by РОВ.КодПост, РОВ.Поставщик, ЦенаПост1, ЦенаПост2
    Order by РОВ.КодПост, ЦенаПост1

    выдаёт таблицу вида
    Товар Поставщик Цена1 Цена2 Кво1 Сумма1 Кво2 Сумма2
    1 Поставщик1 1 0 10 10 0 0
    2 Поставщик2 1 0 10 10 0 0
    1 Поставщик1 0 1 0 0 10 10
    1 Поставщик1 0 1.5 0 0 10 15
    2 Поставщик2 0 1.4 0 0 5 7
    как получить таблицу вида
    Товар Поставщик Цена1 Цена2 Кво1 Сумма1 Кво2 Сумма2
    1 Поставщик1 1 1.5 10 10 20 25 (либо 10/15 или что угодно еще для случая изменения цены в течении дня)
    2 Поставщик2 1 1.4 10 10 5 7
    ?
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #649 - 18. Января 2011 :: 06:21
    Печать  
    Зачетное условие в case ...

    А так, не совсем ясно, причем тут цена и регистр и что получить хочешь.
      
    Наверх
     
    IP записан
     
    ТочноеЯдро
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 21
    Зарегистрирован: 28. Января 2010
    Re: 1sqlite
    Ответ #650 - 18. Января 2011 :: 10:31
    Печать  
    Зачет без пояснений не зачтен.
    Цены хранятся в регистре. Не спрашивайте о причинах.
    Хочу получить табличку с изменениями цен по поставщикам и товарам. Если цена изменилась в начале/конце дня, то из регистра вытащится одна строка на одну дату по одному клиенту/товару. Свернув ТЗ (или обернув предыдущий запрос в еще один селект) я получу требуемый результат (см. поставщик2 в таблицах выше). Но если цена поменялась в течении дня, а обороты были и до этого момента и после, то запрос выдаёт две строки на эту дату и одну строку на вторую дату (см. первую таблицу пред. поста). И тогда после свёртки получается неверная цена за день. Нужно чтобы в результате была одна строка с изменённой ценой.
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #651 - 18. Января 2011 :: 11:27
    Печать  
    Ну возьми одну запись, через top 1 к примеру, а так, один чорт не понял что делаешь.
      
    Наверх
     
    IP записан
     
    ТочноеЯдро
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 21
    Зарегистрирован: 28. Января 2010
    Re: 1sqlite
    Ответ #652 - 18. Января 2011 :: 16:04
    Печать  
    топ 1 не для этой задачи
    Не ленись, прочти хотя бы концовку поста с таблицами
      
    Наверх
     
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #653 - 19. Января 2011 :: 01:50
    Печать  
    ТочноеЯдро писал(а) 18. Января 2011 :: 16:04:
    Не ленись, прочти хотя бы концовку поста с таблицами
    И он еще обвиняет других в том, что сам не сформулировал задачу...
    Казнить! Только казнить!
    Ты не сможешь составить запрос до тех пор, пока сам не поймешь, что тебе надо ... самый простой способ понять - объяснить другим (с) Любой препод ВУЗа.
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #654 - 19. Января 2011 :: 06:36
    Печать  
    ТочноеЯдро писал(а) 18. Января 2011 :: 16:04:
    топ 1 не для этой задачи
    Не ленись, прочти хотя бы концовку поста с таблицами


    Мне непонятен вообще смысл твоего запроса.
    Какой период между датами, если ты просто складываешь движения всегда в одной дате, а условием ограничил не выборку в периоде, а просто выборку в 2-х датах.
    Что сделать надо - не ясно.
      
    Наверх
     
    IP записан
     
    ТочноеЯдро
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 21
    Зарегистрирован: 28. Января 2010
    Re: 1sqlite
    Ответ #655 - 21. Января 2011 :: 15:40
    Печать  
    ок, казнить нельзя помиловать.  Подмигивание
    есть поставщик - фирма "1Ц" и у неё я покупаю коробки с известным продуктом.
    Позавчера я купил 10 коробок у 1Ц по 100 р. Это зафиксировано в регистре.
    Вчера я купил 20 коробок по 95 р., а сегодня до обеда 4 по 95, а после обеда 5 по 110р.
    Итого 4 записи в регистре.

    Мне нужно сравнить позавчерашние закупки с сегодняшними. Т.е. Вторая запись из регистра даже не должна рассматриваться.

    Итого нужно увидеть такую таблицу :

    Товар  Поставщик  Цена1  Цена2  Кво1  Сумма1  Кво2  Сумма2
    Коробка   "1Ц"         100      110       10     1000       5        550
    (цена 95 выпала т.к. промежуточная)

    соответственно послезавтра если у меня цена будет 120 то таблица должна будет стать такой:

    Товар  Поставщик  Цена1 Цена2  Кво1  Сумма1  Кво2  Сумма2
    Коробка   "1Ц"           95     120      4        380        1        120
      
    Наверх
     
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #656 - 24. Января 2011 :: 02:12
    Печать  
    ТочноеЯдро писал(а) 21. Января 2011 :: 15:40:
    ок, казнить нельзя помиловать.  Подмигивание
    есть поставщик - фирма "1Ц" и у неё я покупаю коробки с известным продуктом.
    Позавчера я купил 10 коробок у 1Ц по 100 р. Это зафиксировано в регистре.
    Вчера я купил 20 коробок по 95 р., а сегодня до обеда 4 по 95, а после обеда 5 по 110р.
    Итого 4 записи в регистре.

    Мне нужно сравнить позавчерашние закупки с сегодняшними. Т.е. Вторая запись из регистра даже не должна рассматриваться.

    Итого нужно увидеть такую таблицу :

    Товар  Поставщик  Цена1  Цена2  Кво1  Сумма1  Кво2  Сумма2
    Коробка   "1Ц"         100      110       10     1000       5        550
    (цена 95 выпала т.к. промежуточная)

    соответственно послезавтра если у меня цена будет 120 то таблица должна будет стать такой:

    Товар  Поставщик  Цена1 Цена2  Кво1  Сумма1  Кво2  Сумма2
    Коробка   "1Ц"           95     120      4        380        1        120

    Т.е. тебе надо сравнить первую запись от ТекДата-2 с последней записью от ТекДата?
    Тогда топ 1 здесь именно к месту, только сортировка разная...

    И в этом случае тебе не в case надо даты передавать, а в where!
      
    Наверх
     
    IP записан
     
    ТочноеЯдро
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 21
    Зарегистрирован: 28. Января 2010
    Re: 1sqlite
    Ответ #657 - 28. Января 2011 :: 16:36
    Печать  
    Спасибо всем за конструктивные замечания.
      
    Наверх
     
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Время в параметре
    Ответ #658 - 02. Февраля 2011 :: 05:50
    Печать  
    Как передать время в запрос?
    Пример: надо отобрать документы, введенные после обеда в определенную дату.
    Индексом idx_DATE_TIME_IDDOC пользоваться умею, но не понимаю, как туда кроме даты передать еще и время... уж очень оно жутковато там хранится (например: 8FK2HS).
      
    Наверх
     
    IP записан
     
    trad
    1c++ power user
    1c++ donor
    1c++ moderator
    Отсутствует



    Сообщений: 3046
    Местоположение: Киров
    Зарегистрирован: 23. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #659 - 02. Февраля 2011 :: 06:03
    Печать  
    14:09:46
    _idtostr((14*3600 + 9*60 + 46)*10000) = "8FK2HS"
      

    1&&2&&3
    Наверх
     
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Время в параметре
    Ответ #660 - 02. Февраля 2011 :: 06:10
    Печать  
    trad писал(а) 02. Февраля 2011 :: 06:03:
    14:09:46
    _idtostr((14*3600 + 9*60 + 46)*10000) = "8FK2HS"

    Спасибо! Надо бы это куда-то в общедоступное место поместить...
      
    Наверх
     
    IP записан
     
    HeiHeShang
    Full Member
    ***
    Отсутствует


    I Love YaBB 2!

    Сообщений: 101
    Зарегистрирован: 01. Августа 2006
    Re: 1sqlite
    Ответ #661 - 08. Февраля 2011 :: 02:08
    Печать  
    Добрый день.
    При попытке вызвать УложитьТЗ вылетает такая ошибка.
    Код
    Выбрать все
    database disk image is malformed
     
    
    

    Как бороться ? База висит в памяти.
      
    Наверх
     
    IP записан
     
    CaBaT
    God Member
    *****
    Отсутствует


    I Love YaBB 2!

    Сообщений: 718
    Местоположение: Санкт-Петербург
    Зарегистрирован: 26. Октября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #662 - 08. Февраля 2011 :: 06:43
    Печать  
    может версия 1sqlite не последняя?
    было что то похожее, связано с обновлением движка sqlite
    (здесь http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/634#634)
      
    Наверх
     
    IP записан
     
    HeiHeShang
    Full Member
    ***
    Отсутствует


    I Love YaBB 2!

    Сообщений: 101
    Зарегистрирован: 01. Августа 2006
    Re: 1sqlite
    Ответ #663 - 08. Февраля 2011 :: 08:13
    Печать  
    Вроде последнюю качнул
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #664 - 08. Февраля 2011 :: 11:37
    Печать  
    А в тз то что ?
    размера то она какого ?..
      
    Наверх
     
    IP записан
     
    HeiHeShang
    Full Member
    ***
    Отсутствует


    I Love YaBB 2!

    Сообщений: 101
    Зарегистрирован: 01. Августа 2006
    Re: 1sqlite
    Ответ #665 - 08. Февраля 2011 :: 12:59
    Печать  
    Маленькая ТЗ, всего одна строчка. Из табличной части ЧекККМ выгружаю.
      
    Наверх
     
    IP записан
     
    alest
    Senior Member
    ****
    Отсутствует



    Сообщений: 380
    Местоположение: Гродно, Беларусь
    Зарегистрирован: 22. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #666 - 13. Марта 2011 :: 12:55
    Печать  
    С помощью этой компоненты можно blob поля заполнять? Пробовал через
    Код
    Выбрать все
    Данные=СоздатьОбъект("BinaryData");
    Данные.ЗагрузитьИзФайла(СокрЛП(ВыбФайл));
     
    
    

    - не работает, пишет:
    запрос.УстановитьПараметр("@bin", Данные);
    {D:\DEV\ЗАПИСЬ ФАЙЛОВ В 1SQLITE.ERT(21)}: Ошибка установки sql-параметра @bin - Неизвестный тип значения
      
    Наверх
    ICQ  
    IP записан
     
    Sserj
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 77
    Зарегистрирован: 25. Октября 2010
    Re: 1sqlite
    Ответ #667 - 07. Апреля 2011 :: 22:43
    Печать  
    Задействовал объект SQLiteDataProvider компоненты как источник для табличного поля, но периодически начало вылетать окошко с ошибкой "database is locked", при обычных запросах это нормально перехватывается в конструкции Попытка Исключение, но из поставщика это вроде недоступно, можно добавить свойство/реквизитик в этот объект, для перехвата/подавления этого предупреждения?
      
    Наверх
     
    IP записан
     
    Cthulhu
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 77
    Зарегистрирован: 04. Апреля 2010
    Re: 1sqlite
    Ответ #668 - 24. Мая 2011 :: 11:59
    Печать  
    Код
    Выбрать все
    Неудачная попытка создания объекта (SQLiteBase) 
    
    

    чего в правах может не хватать?  Смущённый

    Upd:
    ничего не менял - заработало. не-по-нят-но.
    прим: два пользователя в базе, 027, все компоненты если что.
      
    Наверх
     
    IP записан
     
    nicolas
    Full Member
    ***
    Отсутствует


    I Love YaBB 2!

    Сообщений: 148
    Зарегистрирован: 24. Мая 2006
    Re: 1sqlite
    Ответ #669 - 07. Июля 2011 :: 07:25
    Печать  
    Скажите пожалуйста, а есть ли в Поставщике данных "SQLiteDataProvider" возможность выбора  строк, т.е. Пользователь отмечает нужные ему строки. В ODBC  есть, а в 1CSQLite ? Вроде все прошерстил. Не нашел...
      
    Наверх
     
    IP записан
     
    Sserj
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 77
    Зарегистрирован: 25. Октября 2010
    Re: 1sqlite
    Ответ #670 - 08. Июля 2011 :: 01:11
    Печать  
    nicolas писал(а) 07. Июля 2011 :: 07:25:
    Скажите пожалуйста, а есть ли в Поставщике данных "SQLiteDataProvider" возможность выбора  строк, т.е. Пользователь отмечает нужные ему строки. В ODBC  есть, а в 1CSQLite ? Вроде все прошерстил. Не нашел...


    Это разве к провайдеру относится?
    Может быть путаешь с самим табличным полем и его свойству РежимВыделения
      
    Наверх
     
    IP записан
     
    nicolas
    Full Member
    ***
    Отсутствует


    I Love YaBB 2!

    Сообщений: 148
    Зарегистрирован: 24. Мая 2006
    Re: 1sqlite
    Ответ #671 - 08. Июля 2011 :: 06:18
    Печать  
    Цитата:
    Это разве к провайдеру относится?
    Может быть путаешь с самим табличным полем и его свойству РежимВыделения


    Вполне может быть, давно не писал на 7-ке.
      
    Наверх
     
    IP записан
     
    nicolas
    Full Member
    ***
    Отсутствует


    I Love YaBB 2!

    Сообщений: 148
    Зарегистрирован: 24. Мая 2006
    Re: 1sqlite
    Ответ #672 - 10. Июля 2011 :: 19:11
    Печать  
    Все перерыл, не получатеся, причем программно пожалуйста, но визуально не видно это...
    Может кто кинет примером, или пнет в нужное направление, пример Михаила на SQL работает прекрасно.

    Отбой. Найдено РежимВыделения по умолчанию равен 0.
      
    Наверх
     
    IP записан
     
    Daszip
    YaBB Newbies
    *
    Отсутствует


    1C++ rocks!

    Сообщений: 2
    Зарегистрирован: 18. Февраля 2010
    Re: 1sqlite
    Ответ #673 - 22. Июля 2011 :: 02:53
    Печать  
    Доброго времени суток!
    Работаю в дбф можно сказать изучаю склайт. Сделал запрос, в котором получаю временную табличку с поставщиками.
    Код
    Выбрать все
    			ТекстЗапроса = "CREATE TEMP TABLE Поставщики AS  
    			|SELECT ID FROM (    
    			|SELECT ID,SUM(1)      
    			|FROM (
    			|SELECT ID
    			|FROM Справочник_Контрагенты
    			|WHERE PARENTID IN (SELECT VAL FROM СписокГрупп) AND ISFOLDER = 2
    
    			|UNION ALL
    
    			|SELECT val AS ID
    			|FROM СписокЭлементов)  
    			|GROUP BY ID)
    			|";
     
    
    

    Далее строю запрос с его использованием.
    Код
    Выбрать все
    	ТекстЗапроса = "
    	|SELECT PARENTEXT,КодПозиции,Артикул,ШК,НаименованиеПозиции,Цена,ДатаПоявления,Статус [Статус :Перечисление.СтатусыПозицийПрайса],КодСопоставленногоТовара
    	|FROM Справочник_ПозицииПрайсов
    	|WHERE PARENTEXT IN (SELECT ID FROM Поставщики)"
    	|";              
     
    
    


    По отладке получаю
    Подбор индекса для таблицы SC10303:
         Ограничения:
         Найдено в кэше
         Индекс не выбран.
         Стоимость: 9988
    Насколько я понимаю условие будет работать быстрее если индекс будет подбираться.
    После первого запроса делаю.
    Код
    Выбрать все
    			Запрос.ВыполнитьЗапрос("CREATE INDEX PARENTEXT ON Поставщики(ID)");  
     
    
    

    но ситуация не меняется, хотя по логике вещей вроде бы должна.
    Вопрос в том что нужно сделать чтобы индекс подобрался?
      
    Наверх
     
    IP записан
     
    Salimbek
    God Member
    *****
    Отсутствует



    Сообщений: 862
    Зарегистрирован: 06. Июня 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #674 - 22. Июля 2011 :: 05:13
    Печать  
    Единственное, что пока могу посоветовать, собрать контрагентов так:
    Код
    Выбрать все
    БД.УложитьОбъекты(СписокТоваровСГруппами,"Поставщики",0,"Номенклатура"); 
    
    

    Что же касается индекса, то непонятно, для какого из запросов он не подбирается, также непонятно - "быстрее будет работать запрос" - а что? Сейчас работает медленно? Может запустить в Отладчике замер производительности и найти реально тормозной код, вместо оптимизации запроса на 0,05 секунды?
      
    Наверх
    ICQ  
    IP записан
     
    Chieftain
    Senior Member
    ****
    Отсутствует


    ___

    Сообщений: 498
    Местоположение: Тула
    Зарегистрирован: 15. Февраля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #675 - 26. Июля 2011 :: 20:34
    Печать  
    Интересную штуку заметил. При использовании "УложитьТЗ" все колонки становятся "not null". Долго думал в чем засада после этого, когда пытался вставлять строку только с одним полем из нескольких. Задрал с ошибкой "constraint failed" вылетать.
      
    Наверх
    ICQ  
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #676 - 27. Июля 2011 :: 05:47
    Печать  
    Daszip писал(а) 22. Июля 2011 :: 02:53:
    но ситуация не меняется, хотя по логике вещей вроде бы должна.
    Вопрос в том что нужно сделать чтобы индекс подобрался?

    Заменить where parentext in
    на inner join
      
    Наверх
     
    IP записан
     
    sokir
    YaBB Newbies
    *
    Отсутствует


    1C++ rocks!

    Сообщений: 1
    Зарегистрирован: 25. Августа 2011
    Re: 1sqlite
    Ответ #677 - 25. Августа 2011 :: 13:14
    Печать  
    А возможен ли Множественный отбор в журналах и справочниках 7.7 с помощью 1sqlite на дбф как в kb.mista.ru/article.php?id=361 ?

    просто я увидел похожие методы: УстановитьТекстЗапроса и ПолучитьТекстЗапроса.
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #678 - 25. Августа 2011 :: 13:40
    Печать  
    Смотри в эту сторону: http://www.1cpp.ru/forum/YaBB.pl?num=1285520767
      
    Наверх
     
    IP записан
     
    ziflex
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 76
    Местоположение: Владивосток
    Зарегистрирован: 05. Мая 2011
    Пол: Мужской
    Re: 1sqlite
    Ответ #679 - 07. Ноября 2011 :: 07:30
    Печать  
    Доброго времени суток!
    А будет ли обновлена версия ВК в связи с выходом свежих релизов SQLite?
      
    Наверх
     
    IP записан
     
    HeiHeShang
    Full Member
    ***
    Отсутствует


    I Love YaBB 2!

    Сообщений: 101
    Зарегистрирован: 01. Августа 2006
    Re: 1sqlite
    Ответ #680 - 19. Ноября 2011 :: 04:22
    Печать  
    Подскажите в чем трабла ?
    Имеем запрос
    Код
    Выбрать все
    insert into reffirms (id,Name,idDistributor) values (10097250000217350,"алалал",1)
     
    
    

    и имеет ошибку
    Код
    Выбрать все
    SQL logic error or missing database
     
    
    
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #681 - 19. Ноября 2011 :: 07:10
    Печать  
    Пишет, что скорее всего не установлена БД. Полностью весь код покажи.
      
    Наверх
     
    IP записан
     
    HeiHeShang
    Full Member
    ***
    Отсутствует


    I Love YaBB 2!

    Сообщений: 101
    Зарегистрирован: 01. Августа 2006
    Re: 1sqlite
    Ответ #682 - 19. Ноября 2011 :: 12:09
    Печать  
    Код
    Выбрать все
    базаlite.open(КаталогИБ()+"\stmobile.db3");
    Если базаlite.isOpen()=0 Тогда
    	Сообщить("База не открыта");
    КонецЕсли;
    
    Запрос=базаlite.НовыйЗапрос();
      Запрос.Отладка(1);
      Запрос.ВыполнитьЗапрос("insert into reffirms (id,Name,idDistributor) values ("+Продавец.IDD+","""+Продавец.Наименование+""",1);");
     
    
    
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #683 - 02. Декабря 2011 :: 17:39
    Печать  
    А табличка то reffirms создана хоть в этой бд ?!
      
    Наверх
     
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #684 - 03. Декабря 2011 :: 05:03
    Печать  
    Там бы другая ошибка вылезла. Скорее всего эта БД сделана чем-то другим, с другой версией sqlite или зашифрована.
      
    Наверх
     
    IP записан
     
    Salimbek
    God Member
    *****
    Отсутствует



    Сообщений: 862
    Зарегистрирован: 06. Июня 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #685 - 03. Декабря 2011 :: 12:30
    Печать  
    Я б для начала попробовал SELECT-ом хоть что-то получить из этой таблицы
      
    Наверх
    ICQ  
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #686 - 03. Декабря 2011 :: 16:24
    Печать  
    А ёпт, ошибка в двойных ковычках..
    И всего лишь:

    Цитата:
    """+Продавец.Наименование+"""

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #687 - 13. Декабря 2011 :: 11:18
    Печать  
    ziflex писал(а) 07. Ноября 2011 :: 07:30:
    Доброго времени суток!
    А будет ли обновлена версия ВК в связи с выходом свежих релизов SQLite?

    Постараюсь в ближайшее время.
      
    Наверх
     
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Как получить ... используя 1sqlite?
    Ответ #688 - 29. Декабря 2011 :: 01:38
    Печать  
    Как получить бухгалтерские итоги?
    Как получить историю изменения константы?
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #689 - 29. Декабря 2011 :: 06:45
    Печать  
    Dmitry The Wing, а чем класс "ПрямойЗапрос" в соседней ветке не устроил? (ах да, изменение константы у меня нет, есть только история реквизитов справочников Улыбка)
      

    Отхожу от дел. Долго и мучительно.
    Наверх
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #690 - 29. Декабря 2011 :: 09:02
    Печать  
    Я уже получил историю константы. Неудобно, но работает:
    Код
    Выбрать все
    ТекстЗапроса = "
    	|SELECT " + Значение + Представление + ", date
    	|FROM __1S_Const
    	|WHERE objid = :ПустойИД AND id = :id AND date <= :ДатаСвертки
    	|ORDER BY date DESC LIMIT 1"; 
    
    
    Неудобство заключается в том, что идентификатор константы приходится получать через MetaDataWork, а не напрямую...

    А вот с бухитогами пока ничего не нашел...

    vandalsvq писал(а) 29. Декабря 2011 :: 06:45:
    Dmitry The Wing, а чем класс "ПрямойЗапрос" в соседней ветке не устроил? (ах да, изменение константы у меня нет, есть только история реквизитов справочников Улыбка)
    Думаю тем, что привык работать напрямую. Ведь можно и так все получить штатными средствами, 1sqlite же сей процесс несколько ускоряет ... когда знаешь, из каких таблиц и как чего добыть ...
      
    Наверх
     
    IP записан
     
    vandalsvq
    1c++ power user
    Отсутствует


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

    Сообщений: 2487
    Местоположение: Уфа
    Зарегистрирован: 18. Июля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #691 - 29. Декабря 2011 :: 09:44
    Печать  
    С бухитогами не так все "просто". Посмотри как реализованы ВТ у меня или у berezdetsky (собственно я нагло у него слизал почти все Улыбка).

    Погоди, а как ты снимаешь остатки по регистрам? Там ведь тоже надо использовать то остатки, то остатки + обороты.
      

    Отхожу от дел. Долго и мучительно.
    Наверх
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #692 - 30. Декабря 2011 :: 01:15
    Печать  
    vandalsvq писал(а) 29. Декабря 2011 :: 09:44:
    С бухитогами не так все "просто". Посмотри как реализованы ВТ у меня или у berezdetsky (собственно я нагло у него слизал почти все Улыбка).

    Погоди, а как ты снимаешь остатки по регистрам? Там ведь тоже надо использовать то остатки, то остатки + обороты.
    С остатками то все просто. Есть простенькая функция, которая анализирует метаданные и автоматом формирует запрос. Если дата не совпадает с началом периода, то имеем запрос вида
    Код
    Выбрать все
    SELECT
    	Зап.Продукция [Продукция :Справочник.Номенклатура]
    	, Зап.Подразделение [Подразделение :Справочник.Подразделения]
    	, Зап.Заказ [Заказ :Документ]
    	, Зап.Владелец [Владелец :Справочник.Контрагенты]
    	, Зап.Количество [Количество :Число.14.3]
    FROM
    	(SELECT
    		Рег.Продукция
    		, Рег.Подразделение
    		, Рег.Заказ
    		, Рег.Владелец
    		, SUM(Рег.Количество) [Количество]
    	FROM
    		(SELECT
    			Итоги.Продукция
    			, Итоги.Подразделение
    			, Итоги.Заказ
    			, Итоги.Владелец
    			, Итоги.Количество
    		FROM
    			[РегистрИтоги.ВыпускПродукции] AS Итоги
    		WHERE
    			Итоги.period = '20101201'
    	   UNION ALL
    		SELECT
    			Движения.Продукция
    			, Движения.Подразделение
    			, Движения.Заказ
    			, Движения.Владелец
    			, Движения.Количество * (1 - Движения.debkred * 2) [Количество]
    		FROM
    			[Регистр.ВыпускПродукции] AS Движения
    	   INNER JOIN [Журнал] Жур ON Жур.iddoc = Движения.iddoc AND Жур.date BETWEEN '20110101' AND '20110105'
    	) Рег
    	GROUP BY Рег.Продукция, Рег.Подразделение, Рег.Заказ, Рег.Владелец
    ) Зап
    WHERE
    	(Зап.Количество <> 0) 
    
    
    При совпадении же даты (как раз случай свертки) запрос сильно упрощяется, и (что очень радует) заметно ускоряется
    Код
    Выбрать все
    SELECT
    	Зап.Продукция [Продукция :Справочник.Номенклатура]
    	, Зап.Подразделение [Подразделение :Справочник.Подразделения]
    	, Зап.Заказ [Заказ :Документ]
    	, Зап.Владелец [Владелец :Справочник.Контрагенты]
    	, Зап.Количество [Количество :Число.14.3]
    FROM
    	(SELECT
    		Рег.Продукция
    		, Рег.Подразделение
    		, Рег.Заказ
    		, Рег.Владелец
    		, SUM(Рег.Количество) [Количество]
    	FROM
    		(SELECT
    			Итоги.Продукция
    			, Итоги.Подразделение
    			, Итоги.Заказ
    			, Итоги.Владелец
    			, Итоги.Количество
    		FROM
    			[РегистрИтоги.ВыпускПродукции] AS Итоги
    		WHERE
    			Итоги.period = '20110101'
    	) Рег
    	GROUP BY Рег.Продукция, Рег.Подразделение, Рег.Заказ, Рег.Владелец
    ) Зап
    WHERE
    	(Зап.Количество <> 0) 
    
    
    Оба варианта запроса выполняются на несколько порядков быстрее штатных.
    С периодикой ненамного сложнее... минус только в том, что нельзя получить сразу всю периодику с группировкой по объектам, т.к. коды этих объектов запросом никак не получить... потому приходится отдельно для каждого объекта получать его историю.

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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #693 - 01. Февраля 2012 :: 06:29
    Печать  
    Несколько новостей.
    Проект переехал сюда.
    Выпущена версия 1.0.2.5 - sqlite обновлен до 3.7.10
    Документация по добавленным в 1.0.2.4 фичам - готовится.
      
    Наверх
     
    IP записан
     
    ziflex
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 76
    Местоположение: Владивосток
    Зарегистрирован: 05. Мая 2011
    Пол: Мужской
    Re: 1sqlite
    Ответ #694 - 01. Февраля 2012 :: 07:09
    Печать  
    На радостях поставил а 1С начала падать при запуске Печаль
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #695 - 01. Февраля 2012 :: 07:36
    Печать  
    ziflex писал(а) 01. Февраля 2012 :: 07:09:
    На радостях поставил а 1С начала падать при запуске Печаль

    Подробнее можно?
    В момент загрузки длл или на каком-то запросе?
      
    Наверх
     
    IP записан
     
    ziflex
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 76
    Местоположение: Владивосток
    Зарегистрирован: 05. Мая 2011
    Пол: Мужской
    Re: 1sqlite
    Ответ #696 - 01. Февраля 2012 :: 09:18
    Печать  
    orefkov писал(а) 01. Февраля 2012 :: 07:36:
    ziflex писал(а) 01. Февраля 2012 :: 07:09:
    На радостях поставил а 1С начала падать при запуске Печаль

    Подробнее можно?
    В момент загрузки длл или на каком-то запросе?


    в момент загрузки.
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #697 - 01. Февраля 2012 :: 11:40
    Печать  
    Последовательность загрузок ВК какая у тебя ?
    Какие еще есть вк и каких они версий ?
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #698 - 01. Февраля 2012 :: 12:01
    Печать  
    ziflex писал(а) 01. Февраля 2012 :: 09:18:
    orefkov писал(а) 01. Февраля 2012 :: 07:36:
    ziflex писал(а) 01. Февраля 2012 :: 07:09:
    На радостях поставил а 1С начала падать при запуске Печаль

    Подробнее можно?
    В момент загрузки длл или на каком-то запросе?


    в момент загрузки.

    Хм, у меня не падает. Кто-то еще проверял, у когонить падает?
      
    Наверх
     
    IP записан
     
    ziflex
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 76
    Местоположение: Владивосток
    Зарегистрирован: 05. Мая 2011
    Пол: Мужской
    Re: 1sqlite
    Ответ #699 - 01. Февраля 2012 :: 22:14
    Печать  
    Eprst писал(а) 01. Февраля 2012 :: 11:40:
    Последовательность загрузок ВК какая у тебя ?
    Какие еще есть вк и каких они версий ?


    1) 1CPP (3.2.3.19)
    2) 1sqlite
    3) FormEx (2.0.5.101)
    4) TurboMD (1.0.1.1)

    Код
    Выбрать все
    Если гл1sqlite = 1 Тогда
    		глКаталогВнешнихИБ 	= КаталогИБ()+"ExtDb\";
    		глКаталогSQLiteИБ 	= глКаталогВнешнихИБ+"DB_SQLite\";
    		SQLLite = СоздатьОбъект("SQLiteBase");
    
    		Если ФС.СуществуетФайл(глКаталогВнешнихИБ)=0 Тогда
    			ФС.СоздатьКаталог(глКаталогВнешнихИБ);
    		КонецЕсли;
    
    		Если ФС.СуществуетФайл(глКаталогSQLiteИБ)=0 Тогда
    			ФС.СоздатьКаталог(глКаталогSQLiteИБ);
    		КонецЕсли;
    
    		ИмяБД = глКаталогSQLiteИБ + "BaseBlock.db3";
    		глМД = СоздатьОбъект("MetaDataWork");
    		SQLLite.Открыть(ИмяБД);
    		запросSQLLite = SQLLite.НовыйЗапрос();
    		запросSQLLite.ВыполнитьЗапрос("PRAGMA journal_mode=WAL"); //это прописать, ежели база в терминале
    		//запросSQLLite.ВыполнитьЗапрос("PRAGMA journal_mode=OFF");
    		ТекстЗапроса ="
    		|Create  table if not EXISTS
    		|БазаБлокировок (
    		|   ИДОбъекта varchar(13) primary key not null,
    		|   Пользователь TEXT
    		|)";
    		фл = 0;
    		Пока фл=0 Цикл
    			Попытка
    				запросSQLLite.ВыполнитьЗапрос(ТекстЗапроса);
    				фл=1;
    			Исключение
    			КонецПопытки;
    		КонецЦикла;
    		Если МонопольныйРежим()=1 Тогда
    			запросSQLLite.ВыполнитьЗапрос("delete from БазаБлокировок");
    		КонецЕсли;
    	КонецЕсли;
    
     
    
    



    Извиняюсь, дезинформировал.  Смущённый
    Забыл, что у меня после загрузки выполняется выше указанный запрос. 1С таки падает при попытки открыть базу (SQLLite.Открыть(ИмяБД);).
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #700 - 02. Февраля 2012 :: 04:18
    Печать  
    Можешь на orefkov gmail.com выслать свой файлик базы данных ?
    Дальше меня не уйдет.
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #701 - 02. Февраля 2012 :: 06:19
    Печать  
    Цитата:
    TurboMD (1.0.1.1)


    вот Из-за этого может быть, ибо турбо мд должна быть
    1.0.0.1

    именно этот релиз нормально работает с остальными ВК
    валяется тут в первом посте
    http://www.1cpp.ru/forum/YaBB.pl?num=1160630298
      
    Наверх
     
    IP записан
     
    ziflex
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 76
    Местоположение: Владивосток
    Зарегистрирован: 05. Мая 2011
    Пол: Мужской
    Re: 1sqlite
    Ответ #702 - 02. Февраля 2012 :: 06:59
    Печать  
    Убрал вообще загрузку TurboMD.
    Результат тот же - падает.
    При чем падает во время выполнения запросов к таблицам .db3.
    К таблицам 1С все ок.
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #703 - 02. Февраля 2012 :: 07:09
    Печать  
    чорт, это же мой код у тебя в примере..
    Новую вк еще не тестил, ща проверю, падает ли с ней, если запрос к базе sqllite или нет
    Улыбка
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #704 - 02. Февраля 2012 :: 07:16
    Печать  
    Да, падает...
    Ща разберусь.
      
    Наверх
     
    IP записан
     
    ziflex
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 76
    Местоположение: Владивосток
    Зарегистрирован: 05. Мая 2011
    Пол: Мужской
    Re: 1sqlite
    Ответ #705 - 02. Февраля 2012 :: 07:17
    Печать  
    Eprst писал(а) 02. Февраля 2012 :: 07:09:
    чорт, это же мой код у тебя в примере..
    Новую вк еще не тестил, ща проверю, падает ли с ней, если запрос к базе sqllite или нет
    Улыбка

    Я этот код c infostart стянул )))

    Странно. Вот другой пример запроса. Тут он открывает таблицу, но падает во время выполнения запроса:
    Код
    Выбрать все
            
    	SQLLite = СоздатьОбъект("SQLiteBase");
    	SQLLite.Открыть(ИмяБД);
    	запросSQLLite = SQLLite.НовыйЗапрос();
    	запросSQLLite.ВыполнитьЗапрос("PRAGMA journal_mode=WAL"); //это прописать, ежели база в терминале
    	//запросSQLLite.ВыполнитьЗапрос("PRAGMA journal_mode=OFF");
    
    	//Если таблицы нет, то создаем формируя структуру
    	//{
    
    	//Таблица "Контрагенты"
    	ТекстЗапроса ="
    	|Create table if not EXISTS
    	|"+табКонт+" (
    	|	Code varchar(24) primary key not null,
    	|	Descr TEXT,
    	|	Agent TEXT,
    	|	Route varchar(50),
    	|	City varchar(50),
    	|	Street varchar(50),
    	|	Building varchar(10),
    	|	Housing varchar(10),
    	|	Comment TEXT,
    	|	EditStamp NUMERIC
    	|)
    	|";
    
    	Попытка
    		запросSQLLite.ВыполнитьЗапрос(ТекстЗапроса);
    	Исключение
    		Сообщить(ОписаниеОшибки());
    		Возврат 0;
    	КонецПопытки;
    	//}
    	...
     
    
    
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #706 - 02. Февраля 2012 :: 07:18
    Печать  
    Подтверждаю, с новой 1sqlite
    любое открытие бд кладет 1с-ину в даун (у меня не падает, просто зависает на долго, т.е навсегда:

     
    Код
    Выбрать все
    ИмяБД = КаталогИБ()+"ExtForms\DB_SQLite\baza.db1";
      база.Открыть(ИмяБД); 
    
    


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


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #707 - 03. Февраля 2012 :: 04:28
    Печать  
    Исправил.
    Брать здесь
      
    Наверх
     
    IP записан
     
    orefkov
    1c++ developer
    1c++ moderator
    Отсутствует


    I Love YaBB 2!

    Сообщений: 896
    Зарегистрирован: 20. Мая 2006
    Re: 1sqlite
    Ответ #708 - 03. Февраля 2012 :: 11:02
    Печать  
    Вот наконец-то пытаюсь уйти от старой шестой студии 98 года, и пересобрать библиотеку современными средствами, в Visual Studio 2008. Размером получается чуть меньше, работает чуть пошустрее.
    Кому охота, может затестить.
    http://snegopat.ru/downloads/1sqlite/1sqlite_1026_2008.zip
      
    Наверх
     
    IP записан
     
    sashas09
    Full Member
    ***
    Отсутствует


    I Love YaBB 2!

    Сообщений: 148
    Местоположение: Киев
    Зарегистрирован: 26. Апреля 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #709 - 05. Февраля 2012 :: 22:19
    Печать  
    orefkov писал(а) 03. Февраля 2012 :: 11:02:
    Вот наконец-то пытаюсь уйти от старой шестой студии 98 года, и пересобрать библиотеку современными средствами, в Visual Studio 2008. Размером получается чуть меньше, работает чуть пошустрее.
    Кому охота, может затестить.
    http://snegopat.ru/downloads/1sqlite/1sqlite_1026_2008.zip


    1sqlite_1026_2008.zip - запуск в терминале 2003

    Неудачная попытка создания объекта
    База=СоздатьОбъект("SQLiteBase");

    1sqlite_1026 - вроде ок


      
    Наверх
    ICQ  
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #710 - 12. Марта 2012 :: 12:23
    Печать  
    Такая же фигня... не работает Печаль
      
    Наверх
     
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #711 - 22. Мая 2012 :: 20:24
    Печать  
    Доброй ночи. Подскажите пожалуйста как правильно сделать запрос в 1sqlite на примере стандартной ТИС . Необходимо выбрать документы реализации за определенный период времени по 2м условиям: контрагент в документе и товар. Я новичок в этом деле. Ничего не получается.
      
    Наверх
     
    IP записан
     
    zk96
    Senior Member
    ****
    Отсутствует


    1C++ rocks!

    Сообщений: 320
    Местоположение: Киев
    Зарегистрирован: 15. Ноября 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #712 - 22. Мая 2012 :: 22:25
    Печать  
    Grey77 писал(а) 22. Мая 2012 :: 20:24:
    ...Необходимо выбрать документы реализации за определенный период времени по 2м условиям: контрагент в документе и товар. Я новичок в этом деле. Ничего не получается.

    По контрагенту и товару есть графа отбора?
      
    Наверх
     
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #713 - 23. Мая 2012 :: 03:27
    Печать  
    по контрагенту графа отбора, а по товару список значений
      
    Наверх
     
    IP записан
     
    zk96
    Senior Member
    ****
    Отсутствует


    1C++ rocks!

    Сообщений: 320
    Местоположение: Киев
    Зарегистрирован: 15. Ноября 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #714 - 23. Мая 2012 :: 21:35
    Печать  
    Не понял что значит
    Grey77 писал(а) 23. Мая 2012 :: 03:27:
    ... а по товару список значений
    ?
    Да и какие виды документов?
      
    Наверх
     
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #715 - 24. Мая 2012 :: 16:29
    Печать  
    Возможно я как-то неправильно формулирую свои мысли. Тогда можно представленный ниже запрос перевести в формат 1sqlite?
    ТекстЗапроса = "
    |SELECT
    |      $ДокР.Номенклатура as [Номенклатура $Справочник.Номенклатура],
    |      SUM($ДокР.Количество) as Количество
    |FROM
    |      $ДокументСтроки.Реализация as ДокР
    |INNER JOIN
    |      $Документ.Реализация as Док ON Док.IDDoc = ДокР.IDDoc
    |                                  AND $Док.Контрагент = :ВыбПоставщик  AND $ДокР.Номенклатура = :ВыбТовар
    |INNER JOIN
    |      1SJourn as Жур ON Жур.IDDoc = ДокР.IDDoc
    |WHERE                 Жур.Date BETWEEN :НачДата~~ AND :КонДата~~ AND
    |                         Жур.Closed = 1
    |GROUP BY
    |      $ДокР.Номенклатура";
    Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата);
    Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата-1);
    Запрос.УстановитьТекстовыйПараметр("ВыбПоставщик", ВыбПоставщик);
    Запрос.УстановитьТекстовыйПараметр("ВыбТовар", ВыбТовар);

    ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
    ТЗ.ВыбратьСтроку();

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


    1C++ rocks!

    Сообщений: 320
    Местоположение: Киев
    Зарегистрирован: 15. Ноября 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #716 - 24. Мая 2012 :: 20:48
    Печать  
    Что-то типа такого:

         ТекстЗапроса = "
         |SELECT
         |      ДокР.Номенклатура as [Номенклатура $Справочник.Номенклатура],
         |      SUM(ДокР.Количество) as Количество
         |FROM
         |      ДокументСтроки_Реализация as ДокР
         |INNER JOIN
         |      Документ_Реализация as Док ON Док.IDDoc = ДокР.IDDoc
         |                                  AND Док.Контрагент = :ВыбПоставщик  AND ДокР.Номенклатура = :ВыбТовар
         |INNER JOIN
         |      Журнал as Жур ON Жур.IDDoc = ДокР.IDDoc
         |WHERE                 Жур.Date BETWEEN :НачДата AND :КонДата AND
         |                         Жур.Closed = 1
         |GROUP BY
         |      ДокР.Номенклатура";
         
         БазаДанных = СоздатьОбъект("SQLiteBase");
         БазаДанных.Открыть(":memory:");
         Запрос = БазаДанных.НовыйЗапрос();
         Запрос.Подставлять("НачДата", НачДата);
         Запрос.Подставлять("КонДата", КонДата);
         Запрос.Подставлять("ВыбПоставщик", ВыбПоставщик);
         Запрос.Подставлять("ВыбТовар", ВыбТовар);
         ит = СоздатьОбъект("ИндексированнаяТаблица");
         ит = запрос.ВыполнитьЗапрос(ТекстЗапроса,ит);
         ит.ВыбратьСтроку();      
      
    Наверх
     
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #717 - 26. Мая 2012 :: 06:14
    Печать  
    Спасибо огромное. Все работает
      
    Наверх
     
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #718 - 30. Мая 2012 :: 17:57
    Печать  
    zk96 писал(а) 24. Мая 2012 :: 20:48:
    Что-то типа такого:

         ТекстЗапроса = "
         |SELECT
         |      ДокР.Номенклатура as [Номенклатура $Справочник.Номенклатура],
         |      SUM(ДокР.Количество) as Количество
         |FROM
         |      ДокументСтроки_Реализация as ДокР
         |INNER JOIN
         |      Документ_Реализация as Док ON Док.IDDoc = ДокР.IDDoc
         |                                  AND Док.Контрагент = :ВыбПоставщик  AND ДокР.Номенклатура = :ВыбТовар
         |INNER JOIN
         |      Журнал as Жур ON Жур.IDDoc = ДокР.IDDoc
         |WHERE                 Жур.Date BETWEEN :НачДата AND :КонДата AND
         |                         Жур.Closed = 1
         |GROUP BY
         |      ДокР.Номенклатура";
         
         БазаДанных = СоздатьОбъект("SQLiteBase");
         БазаДанных.Открыть(":memory:");
         Запрос = БазаДанных.НовыйЗапрос();
         Запрос.Подставлять("НачДата", НачДата);
         Запрос.Подставлять("КонДата", КонДата);
         Запрос.Подставлять("ВыбПоставщик", ВыбПоставщик);
         Запрос.Подставлять("ВыбТовар", ВыбТовар);
         ит = СоздатьОбъект("ИндексированнаяТаблица");
         ит = запрос.ВыполнитьЗапрос(ТекстЗапроса,ит);
         ит.ВыбратьСтроку();      


    Подскажите еще плиз. Как в этом запросе поставить еще фильтрацию по фирме. Фирма является общим реквизитом для документов. Галка отбор не установлена. Заранее благодарен.
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #719 - 04. Июня 2012 :: 08:36
    Печать  
    where Док.Фирма = ....
      
    Наверх
     
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #720 - 04. Июня 2012 :: 17:40
    Печать  
    Увы такой номер не проходит. "Фирма" это общий реквизит и в самой форме (шапке) документа этого реквизита этого нет.
      
    Наверх
     
    IP записан
     
    zk96
    Senior Member
    ****
    Отсутствует


    1C++ rocks!

    Сообщений: 320
    Местоположение: Киев
    Зарегистрирован: 15. Ноября 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #721 - 04. Июня 2012 :: 20:41
    Печать  
    Ты же написал, что общего реквизита "Галка отбор не установлена", если это так, то Eprst тебе все правильно написал, это поле хранится в таблице шапки документа.
    А если для общего реквизита отбор установлен, то это поле в таблице 1SJourn.
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #722 - 05. Июня 2012 :: 05:17
    Печать  
    Grey77 писал(а) 04. Июня 2012 :: 17:40:
    Увы такой номер не проходит. "Фирма" это общий реквизит и в самой форме (шапке) документа этого реквизита этого нет.


    Ошибаешься. В вопросе явно звучало - нет отбора у реквизита.
    Следовательно, он находится в Шапке документа.
      
    Наверх
     
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #723 - 05. Июня 2012 :: 19:30
    Печать  
    Я извиняюсь перед Вами, возможно я не так выразился. Я не спорю с Вами. Если для примера открыть стандартную ТИС 1с 7.7, то там в конфигураторе в закладке документы -> Общие реквизиты - есть реквизит "Фирма", но в самом документе такого реквизита нет. Я пробовал как Вы мне посоветовали и получил ошибку "no such column: ДокР.Фирма"
      
    Наверх
     
    IP записан
     
    zk96
    Senior Member
    ****
    Отсутствует


    1C++ rocks!

    Сообщений: 320
    Местоположение: Киев
    Зарегистрирован: 15. Ноября 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #724 - 05. Июня 2012 :: 20:40
    Печать  
    Значит у этого реквизита установлен флажок "Отбор".
    Тогда нужно писать:
    where Жур.Фирма = ...
      
    Наверх
     
    IP записан
     
    Sserj
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 77
    Зарегистрирован: 25. Октября 2010
    Re: 1sqlite
    Ответ #725 - 06. Июня 2012 :: 01:21
    Печать  
    Ну зачем человека в заблуждения вводить )
    Просто общие реквизиты документов хранятся не в таблице шапки, а в таблице общего журнала.
      
    Наверх
     
    IP записан
     
    zk96
    Senior Member
    ****
    Отсутствует


    1C++ rocks!

    Сообщений: 320
    Местоположение: Киев
    Зарегистрирован: 15. Ноября 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #726 - 06. Июня 2012 :: 05:59
    Печать  
    Sserj писал(а) 06. Июня 2012 :: 01:21:
    Ну зачем человека в заблуждения вводить )
    Просто общие реквизиты документов хранятся не в таблице шапки, а в таблице общего журнала.

    Ты уверен?
    Сними флажок "Отбор" и поищи после этого общий реквизит в общем журнале. Удивишся, но там его не будет.
      
    Наверх
     
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #727 - 10. Сентября 2012 :: 14:45
    Печать  
    Реализован ли метод ТаймаутЗапроса() в 1.0.2.4? Если да, то в какой сборке?

    А то прописал:
    Код
    Выбрать все
    глБДЖурналРегистрации.ТаймаутЗапроса(3000); 
    
    


    но выдает ошибку:

    Aggregate object property has not been found (ТаймаутЗапроса)
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    pisarev
    Full Member
    ***
    Отсутствует


    1C++ rocks!

    Сообщений: 150
    Местоположение: Новосибирск
    Зарегистрирован: 09. Августа 2013
    Пол: Мужской
    Re: 1sqlite
    Ответ #728 - 12. Августа 2013 :: 13:38
    Печать  
    привествую друзья! где можно посмотреть примеры работы с 1sqlite в качестве поставщика для ТП? не могу разобраться с Объектом SQLiteDataProvider...?
      

    хотел как лучше, а получилось как всегда Печаль
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #729 - 11. Июля 2014 :: 14:20
    Печать  
    Я так понял вопрос с УложитьТЗ с числовыми значениями больше 10 знаков, что приводит к неправильной укладке, так и не решен. Вопрос поднимался здесь: http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/593#593

    Сейчас мы наткнулись на это....

    1sqlite 1.0.2.4
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    JohnyDeath
    1c++ power user
    1c++ donor
    Отсутствует



    Сообщений: 3050
    Местоположение: Волгоград
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #730 - 12. Июля 2014 :: 06:56
    Печать  
    Попробуй на 1.0.2.6 https://snegopat.ru/downloads/1sqlite/
    Ну и вопросы по 1sqlite наверное стоит задать на форуме автора: https://snegopat.ru/forum/
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #731 - 14. Июля 2014 :: 07:09
    Печать  
    1.0.2.6 не рекомендую, в нём есть ошибки и он валится, даже на примитивном запросе
      
    Наверх
     
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #732 - 14. Июля 2014 :: 08:13
    Печать  
    Да, вот в том то и дело, что 1.0.2.6 пока недоработана.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #733 - 27. Октября 2014 :: 07:47
    Печать  
    Eprst писал(а) 14. Июля 2014 :: 07:09:
    1.0.2.6 не рекомендую, в нём есть ошибки и он валится, даже на примитивном запросе


    Валится или некорректно работает? Если валится можно примерчик?

    В том что 1sqlite 1.0.2.6 работает не всегда корректно виноват баг sqlite 3.7.10 http://www.sqlite.org/src/info/b7c8682cc1
    Вместо left join выполняется inner join

    Во вложении обработка проверки бага.
      

    1sqlite_bug_ert.zip ( 11 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #734 - 27. Октября 2014 :: 07:49
    Печать  
    Обновил движок sqlite на 3.7.11 в котором этого бага нет.
    Вроде работает  Круглые глаза
      

    1sqlite_1026_3711.zip ( 429 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #735 - 27. Октября 2014 :: 07:55
    Печать  
    Я не помню ужо, давно это было.
    Откатился в своё время на 24 релиз.
    Как-нить потестю твою вк на досуге - щас просто не на чем, все на снеговике ужо.
      
    Наверх
     
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #736 - 31. Октября 2014 :: 08:32
    Печать  
    Djelf, можешь посмотреть по поводу ошибки метода УложитьТЗ для больших чисел? Может у тебя получится ее исправить.

    И еще  вопрос - а почему именно 3.7.11, а не последняя (уже 3.8.7.1 http://www.sqlite.org/changes.html)?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #737 - 31. Октября 2014 :: 08:43
    Печать  
    alyuev писал(а) 31. Октября 2014 :: 08:32:
    Djelf, можешь посмотреть по поводу ошибки метода УложитьТЗ для больших чисел? Может у тебя получится ее исправить.

    И еще  вопрос - а почему именно 3.7.11, а не последняя (уже 3.8.7.1 http://www.sqlite.org/changes.html)?

    Тест с ошибкой, плиз. Посмотрю.

    Ну а по поводу 3.8.7 тут такое дело:
    всегда проще обновлять до ближайшей версии
    ну 3.8.7 то я завел... но там изменился планировщик и 1sqlite ему уже не правильные подсказки дает, поэтому запросы не взлетают, а медленно ползают.


      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #738 - 31. Октября 2014 :: 09:01
    Печать  
    Здесь упоминали об ошибке с примером: http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/593#593
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #739 - 31. Октября 2014 :: 09:54
    Печать  
    УложитТЗ укладывает ничего не обрезая, но тип ставит LargeInt в соответствии со своей документацие, и если засовывать не 25639874165897, а 25639874165897.1 то тип будет Float
    ну в общем вместо
    Select code From tempTZ
    пишем
    Select cast(code as float) as code From tempTZ
    и не мучаемся
      
    Наверх
    www  
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #740 - 31. Октября 2014 :: 10:19
    Печать  
    Ошибка была другая. 26 валился ну на совсем примитивных запросах. Просто форум поломался и половины сообщений потерялись, в том числе, в ветке про 1sqlite

    +Были ошибки с граничными значениями в запросе
      
    Наверх
     
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #741 - 31. Октября 2014 :: 11:42
    Печать  
    Интересно, а на старой версии 1.0.2.4 этот финт
    Код
    Выбрать все
    cast(code as float) 
    
    
    не проходит - не ругается, но возвращает неверное значение для длинных чисел. За решение - Спасибо!
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    MegaDimich
    YaBB Newbies
    *
    Отсутствует


    1C++ rocks!

    Сообщений: 6
    Местоположение: Киев
    Зарегистрирован: 26. Июня 2011
    Пол: Мужской
    Re: 1sqlite
    Ответ #742 - 31. Октября 2014 :: 12:17
    Печать  
    Добрый день!
    Помогите преобразовать запрос под 1sqlite
    Код
    Выбрать все
    	//Создание объекта типа Запрос
    	Запрос = СоздатьОбъект("Запрос");
    	ТекстЗапроса =
    	"//{{ЗАПРОС(Сформировать)
    	|Обрабатывать НеПомеченныеНаУдаление;
    	|ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
    	|ДатаИзмЦены = Справочник.Номенклатура.ДатаИзмЦены;
    	|АС = Справочник.Номенклатура.Catalog.Number_Part;
    	|Model = Справочник.Номенклатура.Catalog.Model;    
    	|Груп = Справочник.Номенклатура.Catalog.ГруппаТовара;
    	|Марка = Справочник.Номенклатура.Catalog.Model.Марка;
    	|Группировка ТекущийЭлемент без групп;
    	|"//}}ЗАПРОС
    	;                                                      
    
    	Если ПустоеЗначение(ВыбАС) = 0 Тогда
    		ТекстЗапроса = ТекстЗапроса + "Условие(АС = ВыбАС);";    
    	КонецЕсли;
    	Если ВыбМарка.Выбран() = 1 Тогда
    		ТекстЗапроса = ТекстЗапроса + "Условие(Марка = ВыбМарка);";
    	КонецЕсли;  
    	Если ВыбМодель.Выбран() = 1 Тогда
    		ТекстЗапроса = ТекстЗапроса + "Условие(Model = ВыбМодель);";
    	КонецЕсли;    
    	Если ВыбГруппа.Выбран() = 1 Тогда
    		ТекстЗапроса = ТекстЗапроса + "Условие(Груп = ВыбГруппа);";
    	КонецЕсли;
    	Если Акт = 1 Тогда
    		ТекстЗапроса = ТекстЗапроса + "Условие((ТекущаяДата() - ДатаИзмЦены) <= Константа.АктуальностьПрайсаДней);";    
    	КонецЕсли;
    
    	// Если ошибка в запросе, то выход из процедуры
    	Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    		Возврат;
    	КонецЕсли;
    
    	Пока Запрос.Группировка() = 1 Цикл    
    		Если ПустоеЗначение(Запрос.ТекущийЭлемент) = 0 Тогда  
    			СпГруппы.ДобавитьЗначение(Запрос.ТекущийЭлемент);
    		КонецЕсли;
    	КонецЦикла;	  
     
    
    
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #743 - 16. Ноября 2014 :: 16:32
    Печать  
    Eprst писал(а) 31. Октября 2014 :: 10:19:
    Ошибка была другая. 26 валился ну на совсем примитивных запросах. Просто форум поломался и половины сообщений потерялись, в том числе, в ветке про 1sqlite

    +Были ошибки с граничными значениями в запросе

    Это очень печально, что все потерялось... Погуглил по сабжу, но нашел только сообщения такого вида "Eprst > 1.0.2.6 глючная" Подмигивание
    Судя по изменениям в 1sqlite 1.0.2.3 от 1.0.2.5 не сильно отличаюся (1.0.2.4 нету в svn, а репозитарий на fosill сдох), кроме замены движка sqlite т.е. виноват был все таки он.

    alyuev писал(а) 31. Октября 2014 :: 11:42:
    Интересно, а на старой версии 1.0.2.4 этот финт
    Код
    Выбрать все
    cast(code as float) 
    
    
    не проходит - не ругается, но возвращает неверное значение для длинных чисел. За решение - Спасибо!

    Так и должно быть. Передача таких чисел между 1sqlite и sqlite была добавлена в неопубликованной версии 1.0.2.5

    Проверил несколько движков sqlite 3.8.*, пошаманил с оптимизатором, все равно получается какая то ерунда, я ему вес 1 даю на индекс по Документ_Строки, а он все равно выберает сырое чтение... На одном моем запросе падение скорости в 100500 раз. Где косяк спрятался не очень пока понятно.

    Ну да ладно, обновил движок sqlite до 3.7.17.0 (последний где оптимизатор не глючит).
    Забавно, постенький запрос стал раза в полтора быстрее.
    Код
    Выбрать все
    SELECT
    	РегПар.Номенклатура	 [Номенклатура $Справочник.Номенклатура],
    	sum(case DEBKRED when 1 then 0 else РегПар.Количество end)	 [КоличествоПриход $Число.15.5],
    	sum(case DEBKRED when 1 then РегПар.Количество else 0 end)	 [КоличествоРасход $Число.15.5]
    FROM Регистр_ПартииНаличие AS РегПар
    WHERE РегПар.date BETWEEN :НачДата AND :КонДата
    GROUP BY РегПар.Номенклатура
     
    
    


    на более сложных запросах +10-15%

    + заработала оптимизация по IN (запросы на выбор индекса стали поступать в 1sqlite).

    - оптимизация по IN может быть не адекватно обработана планировщиком sqlite http://www.1cpp.ru/forum/YaBB.pl?num=1418818749/6#6
    « Последняя редакция: 20. Февраля 2015 :: 10:45 - Djelf »  

    1sqlite_3_7_17_bf1_002.zip ( 306 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #744 - 17. Ноября 2014 :: 08:06
    Печать  
    Спасибо, потестю на досуге (если не лень будет)
      
    Наверх
     
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #745 - 21. Ноября 2014 :: 11:36
    Печать  
    С новой версией перестал работать запрос (на старой 1.0.2.4 с sqlite 3.6.22 работает):

    Код
    Выбрать все
    Select
    	--Клиенты.СчетОсн as СчетОсн	-- Так работает
    	Дв.Клиенты.СчетОсн as СчетОсн   -- Так не работает
    From
    	Регистр_Кредиты Дв
    	Left Join Справочник_Клиенты Клиенты On Дв.Клиент=Клиенты.ID
    LIMIT 1
     
    
    


    Выдает ошибку: "no such column: Дв.Клиенты.СчетОсн"

    Обратите внимание - "Клиенты" - это Таблица, а не поле! Я обращаюсь к ней как Дв.Клиенты.

    Если определять поле не через двойную точку, а просто Клиенты.СчетОсн, то всё работает
    « Последняя редакция: 21. Ноября 2014 :: 13:07 - alyuev »  

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #746 - 21. Ноября 2014 :: 13:26
    Печать  
    Запрос sql это же не запрос 1С, он 3 точки не понимает.

    В 1.0.2.4/3.6.22 и 1.0.2.6/3.7.10-3.7.11 sqlite игнорировал первый параметр в таком запросе, т.е. можно даже было написать
    АТакТожеРаботает.Клиенты.СчетОсн as СчетОсн
    все равно оно выполнялось как
    Клиенты.СчетОсн as СчетОсн

    Раз sqlite ругается значит где то между 3.7.11 и 3.7.17 сделали проверку на такую штуку, не отключать же ее?
    Хотя, может  3.7.17 ищет в таблице Дв поле "Клиенты.СчетОсн" что тоже правдоподобно...


    Разобрался. sqlite разирает эту строку так:
    Дв.Клиенты.СчетОсн разбирается как
    База данные = Дв, Таблица Клиенты, Поле СчетОсн



      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #747 - 21. Ноября 2014 :: 14:04
    Печать  
    А как же в старой-то версии работает? В этой версии как раз игнорируется первая часть?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #748 - 21. Ноября 2014 :: 15:53
    Печать  
    Все верно.
    До версии sqlite 3.7.11 воспринимаются только 2 последних параметра разделенных точкой, в 3.7.17 уже 3 параметра, где первый имя базы, что логично, т.к. sqlite умеет подключать несколько баз.
    В какой именно промежуточной версии было изменено поведение я не вижу смысла искать.
    Плохо что в старой такое вообще работало.
    Это не правильно, когда какая то часть запроса игнорируется и никаких сообщений об этом нет.

    P.S. в sqlite 3.8.7.2 точно такая же реакция как и в 3.7.17, т.е. это не баг, а намеренное изменение.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #749 - 21. Ноября 2014 :: 16:18
    Печать  
    Так это парсит sqlite? Не 1sqlite?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #750 - 21. Ноября 2014 :: 17:06
    Печать  
    Да, этим занимается движок sqlite.
      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #751 - 20. Декабря 2014 :: 08:03
    Печать  
    Ситуация с sqlite 3.8.х прояснилась,
    http://www.mail-archive.com/sqlite-users@sqlite.org/msg87754.html
    возьмем такой запрос

    Код
    Выбрать все
    SELECT
    	СН1.ID [ID1 $Справочник.Номенклатура],
    	СН2.ID [ID2 $Справочник.Номенклатура],
    	СН3.ID [ID3 $Справочник.Номенклатура]
    FROM Справочник_Номенклатура AS СН1
    LEFT JOIN Справочник_Номенклатура AS СН2 ON СН1.ID=СН2.ID
    LEFT JOIN Справочник_Номенклатура AS СН3 ON СН2.ID=СН3.ID
     
    
    


    3.7 использует сырое сканирование по СН1, и индексы СН1.ID и СН2.ID при join`ах. Результат <100мс
    3.8 не хочет понимать СН2.ID=СН3.ID т.е. использует только индексы из первой таблицы СН1 Результат >8000мс

    Проверяем это так
    Код
    Выбрать все
    SELECT
    	СН1.ID [ID1 $Справочник.Номенклатура],
    	СН2.ID [ID2 $Справочник.Номенклатура],
    	СН3.ID [ID3 $Справочник.Номенклатура]
    FROM Справочник_Номенклатура AS СН1
    LEFT JOIN Справочник_Номенклатура AS СН2 ON СН1.ID=СН2.ID
    LEFT JOIN Справочник_Номенклатура AS СН3 ON СН1.ID=СН3.ID
     
    
    

    ЧТД на 3.8 Результат <100мс

    Другой вариант - подсказать планировщику sqlite использовать индекс СН2.ID установкой перед ним плюсика.
    Код
    Выбрать все
    SELECT
    	СН1.ID [ID1 $Справочник.Номенклатура],
    	СН2.ID [ID2 $Справочник.Номенклатура],
    	СН3.ID [ID3 $Справочник.Номенклатура]
    FROM Справочник_Номенклатура AS СН1
    LEFT JOIN Справочник_Номенклатура AS СН2 ON СН1.ID=СН2.ID
    LEFT JOIN Справочник_Номенклатура AS СН3 ON +СН2.ID=СН3.ID
     
    
    

    на 3.8 Результат <100мс

    Итог такой: если не переделают планировщик использовать 3.8.х будет затруднительно, т.к. придется переписывать почти все запросы.

      
    Наверх
    www  
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #752 - 06. Февраля 2015 :: 08:34
    Печать  
    alyuev писал(а) 31. Октября 2014 :: 11:42:
    Код
    Выбрать все
    cast(code as float) 
    
    
    не проходит - не ругается, но возвращает неверное значение для длинных чисел. За решение - Спасибо!


    можно попробовать
    Код
    Выбрать все
    cast(code as double) 
    
    
    или
    Код
    Выбрать все
    code+0.0 
    
    
      
    Наверх
     
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #753 - 14. Февраля 2015 :: 02:27
    Печать  
    в сообщение постоянно выводится "Найдено в кэше".
    возвращаю оригинальную компоненту от Орефкова 1.0.2.6 и все нормально.
      
    Наверх
     
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #754 - 14. Февраля 2015 :: 02:41
    Печать  
    Djelf писал(а) 20. Декабря 2014 :: 08:03:
    Код
    Выбрать все
    SELECT
    	СН1.ID [ID1 $Справочник.Номенклатура],
    	СН2.ID [ID2 $Справочник.Номенклатура],
    	СН3.ID [ID3 $Справочник.Номенклатура]
    FROM Справочник_Номенклатура AS СН1
    LEFT JOIN Справочник_Номенклатура AS СН2 ON СН1.ID=СН2.ID
    LEFT JOIN Справочник_Номенклатура AS СН3 ON СН2.ID=СН3.ID
     
    
    



    а если попробовать
    Код
    Выбрать все
    SELECT
    	СН1.ID [ID1 $Справочник.Номенклатура],
    	СН2.ID [ID2 $Справочник.Номенклатура],
    	СН3.ID [ID3 $Справочник.Номенклатура]
    FROM Справочник_Номенклатура AS СН1
    LEFT JOIN Справочник_Номенклатура AS СН2 ON СН2.ID=СН1.ID
    LEFT JOIN Справочник_Номенклатура AS СН3 ON СН3.ID=СН2.ID
     
    
    

    какой результат?
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #755 - 14. Февраля 2015 :: 07:07
    Печать  
    Asakra писал(а) 14. Февраля 2015 :: 02:27:
    в сообщение постоянно выводится "Найдено в кэше".
    возвращаю оригинальную компоненту от Орефкова 1.0.2.6 и все нормально.

    Да, с отладкой переборшил... Закачай заново из того же сообщения.

    Asakra писал(а) 14. Февраля 2015 :: 02:41:
    [quote author=Djelf link=1214205575/750#751 date=1419062608]
    какой результат?

    То же самое будет. Индексы используется только у первой таблицы.
      
    Наверх
    www  
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #756 - 14. Февраля 2015 :: 07:37
    Печать  
    Djelf писал(а) 14. Февраля 2015 :: 07:07:
    Закачай заново из того же сообщения.


    теперь гуд.

    Djelf писал(а) 14. Февраля 2015 :: 07:07:
    То же самое будет. Индексы используется только у первой таблицы.


    лучше проверить. я с индексированными временными таблицами в inner join только так и поступаю, иначе sqlite неверный план строит. делает полный скан таблички, не используя индекс.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #757 - 14. Февраля 2015 :: 08:10
    Печать  
    Проверил. Как я и говорил - чихать оно на эту перестановку хотело.
      
    Наверх
    www  
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #758 - 14. Февраля 2015 :: 08:12
    Печать  
    яфно. жаль.
      
    Наверх
     
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #759 - 23. Февраля 2015 :: 02:58
    Печать  
    поймал ошибку.
    не правильно отрабатывают запросы с условием IN (SELECT val FROM vt)
    если это условие изменить на =, то запрос отработает правильно.
    vt проверял, заполняется верно.
    откатился на оригинальную компоненту.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #760 - 24. Февраля 2015 :: 08:14
    Печать  
    Ниче не понял   Круглые глаза

    Ну вот запрос с условием IN (SELECT val FROM vt)
    Код
    Выбрать все
    |SELECT
    	|sn.ID  [Номенклатура :Справочник.Номенклатура]
    	|FROM Справочник_Номенклатура as sn
    	|WHERE sn.ID IN (SELECT val FROM vt)";
     
    
    

    все  работает... что в него надо добавить чтобы он не работал?
      
    Наверх
    www  
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #761 - 24. Февраля 2015 :: 11:23
    Печать  
    Это же очевидно - в список уложить мусор..
    Смех
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #762 - 24. Февраля 2015 :: 15:09
    Печать  
    Eprst писал(а) 24. Февраля 2015 :: 11:23:
    Это же очевидно - в список уложить мусор..


    Не угадал  Очень довольный

    Засунул в список для комплекта еще 900к документов, чем не рандом? Не прокатило...

    Можно, например, перед "sn.ID IN" поставить "-"
    Теоретически "-" должен отключать использование индекса, но тут оно как то отключает вложенный select вообще, он получается пустой, и это на всех всех версиях sqlite Ужас Красота!

    Все не правлино я написал, отключение индекса "+" перед названием переменной.

    P.S. где то там у них читал что и как они тестируют. Виртуальные таблицы имеют приоритет ниже плинтуса, а у нас все таблицы 1С виртуальные, а тестирование их соединения с временными таблицами... это наверное уже из области мифологии.
    « Последняя редакция: 27. Сентября 2015 :: 13:52 - Djelf »  
    Наверх
    www  
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #763 - 28. Февраля 2015 :: 16:47
    Печать  
    Djelf писал(а) 24. Февраля 2015 :: 08:14:
    все  работает... что в него надо добавить чтобы он не работал?


    точный запрос прилагать не буду. типо того:
    Код
    Выбрать все
    SELECT IDDOC FROM [Регистр.ОстаткиТМЦ] WHERE Номенклатура IN (SELECT val FROM vt_ТМЦ)
    Запрос.УложитьОбъекты(ВыбТМЦ,"vt_ТМЦ",0,"Номенклатура"); 
    
    


    ВыбТМЦ - поле на форме, там выбрана группа
    старая компонента возвращала 19 документов, а новая 6
    если в поле выбрать элемент или убрать условие, то все работает как надо.
    « Последняя редакция: 28. Февраля 2015 :: 18:28 - Asakra »  
    Наверх
     
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #764 - 28. Февраля 2015 :: 16:50
    Печать  
    Eprst писал(а) 24. Февраля 2015 :: 11:23:
    Это же очевидно - в список уложить мусор..
    Смех


    список проверял, там все нормально.
    Код
    Выбрать все
    SELECT val AS [ТМЦ :Справочник.Номенклатура] FROM vt_ТМЦ
    Результат.ВыбратьСтроку(); 
    
    
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #765 - 01. Марта 2015 :: 10:10
    Печать  
    Asakra писал(а) 28. Февраля 2015 :: 16:47:
    точный запрос прилагать не буду. типо того:

    Давай все таки точный запрос... ну никак повторить не удается  Злой

    Надо найти причину. 3.7.17 раз в 50 на таком запросе быстрее - овчинка выделки то стоит.
    « Последняя редакция: 01. Марта 2015 :: 12:23 - Djelf »  
    Наверх
    www  
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #766 - 06. Марта 2015 :: 02:16
    Печать  
    вот
    Код
    Выбрать все
    CREATE TABLE vt_ДанныеОтчета AS
    
    SELECT
    	Рег.Должность		AS Должность,
    	Рег.Сотрудник		AS Сотрудник,
    	Рег.Контрагент		AS Контрагент,
    	Рег.ВидСтавки		AS ВидСтавки,
    	Рег.Ставка			AS Ставка,
    	Рег.ТекущийДокумент	AS Документ,
    	Рег.ВидДокумента	AS ВидДокумента,
    	Рег.СуммаЗарплатыОстатки	AS НачОстСуммаЗП,
    	Рег.СуммаЗарплатыПриход		AS ПриходСуммаЗП,
    	Рег.СуммаЗарплатыРасход		AS ДвРасходСуммаЗП,
    	Рег.СуммаПродажиОстаток		AS НачОстСумПродажи,
    	Рег.СуммаПродажиПриход		AS ПриходСумПродажи,
    	Рег.СуммаПродажиРасход		AS ДвРасходСумПродажи,
    	Рег.СуммаПоступлениеДенег	AS ПоступлениеДенег,
    	Рег.СуммаЗарплатыОбороты	AS СуммаЗарплатыОбороты,
    	Рег.СуммаПродажиОбороты		AS СуммаПродажиОбороты,
    	Рег.ПозицияДокумента		AS ПозицияДокумента,
    	Рег.КодОперации				AS КодОперации
    
    FROM
    	(SELECT
    		CASE
    			WHEN Остатки.ТОПМенеджер = '     0   '
    				THEN 'Менеджеры'
    			ELSE 'ТОР-Менеджеры'
    		END AS Должность,
    
    		CASE
    			WHEN Остатки.ТОПМенеджер = '     0   '
    				THEN Остатки.Сотрудник
    			ELSE Остатки.ТОПМенеджер
    		END AS Сотрудник,
    
    		Остатки.Контрагент,
    		Остатки.ВидСтавки,
    		Остатки.Ставка,
    		'     0   ' AS ТекущийДокумент,
    		'    ' AS ВидДокумента,
    		Остатки.СуммаЗарплатыОстаток AS СуммаЗарплатыОстатки,
    		0 AS СуммаЗарплатыПриход,
    		0 AS СуммаЗарплатыРасход,
    		Остатки.СуммаПродажиОстаток,
    		0 AS СуммаПродажиПриход,
    		0 AS СуммаПродажиРасход,
    		0 AS СуммаПоступлениеДенег,
    		0 AS СуммаЗарплатыОбороты,
    		0 AS СуммаПродажиОбороты,
    		'' AS ПозицияДокумента,
    		'     0   ' AS КодОперации
    
    	FROM
    		(
    	SELECT
    		Сотрудник
    		,Контрагент
    		,ТОПМенеджер
    		,ВидСтавки
    		,Ставка
    		,SUM(СуммаЗарплатыОстаток) AS СуммаЗарплатыОстаток
    		,SUM(СуммаПродажиОстаток) AS СуммаПродажиОстаток
    
    	FROM
    		(SELECT
    			rg_9713.Сотрудник AS Сотрудник
    			,rg_9713.Контрагент AS Контрагент
    			,rg_9713.ТОПМенеджер AS ТОПМенеджер
    			,rg_9713.ВидСтавки AS ВидСтавки
    			,rg_9713.Ставка AS Ставка
    			,rg_9713.СуммаЗарплаты AS СуммаЗарплатыОстаток
    			,rg_9713.СуммаПродажи AS СуммаПродажиОстаток
    
    		FROM
    			[РегистрИтоги.ЗарплатаОтПродаж] AS rg_9713
    		WHERE
    			rg_9713.PERIOD = '20150101'
    		AND
    			(rg_9713.Сотрудник = '     V   ' AND  rg_9713.Контрагент IN (SELECT val FROM vt_СписокКонтрагент))
    		) AS vt_ra_9713
    	GROUP BY
    		Сотрудник
    		,Контрагент
    		,ТОПМенеджер
    		,ВидСтавки
    		,Ставка
    	HAVING (SUM(СуммаЗарплатыОстаток) <> 0)
    	OR (SUM(СуммаПродажиОстаток) <> 0)
    
    ) AS Остатки
    
    	UNION ALL
    
    	SELECT
    		CASE
    			WHEN Обороты.ТОПМенеджер = '     0   '
    				THEN 'Менеджеры'
    			ELSE 'ТОР-Менеджеры'
    		END,
    
    		CASE
    			WHEN Обороты.ТОПМенеджер = '     0   '
    				THEN Обороты.Сотрудник
    			ELSE Обороты.ТОПМенеджер
    		END,
    
    		Обороты.Контрагент,
    		Обороты.ВидСтавки,
    		Обороты.Ставка,
    		Обороты.ТекущийДокумент,
    		Обороты.ВидДокумента,
    		0,
    		Обороты.СуммаЗарплатыПриход,
    		Обороты.СуммаЗарплатыРасход,
    		0,
    		Обороты.СуммаПродажиПриход,
    		Обороты.СуммаПродажиРасход,
    
    		CASE
    			WHEN ROUND(Обороты.СуммаПродажиРасход, 2) > 0 AND Обороты.КодОперации = '   1MN   '
    				THEN Обороты.СуммаПродажиРасход
    			ELSE 0
    		END,
    
    		Обороты.СуммаЗарплатыПриход - Обороты.СуммаЗарплатыРасход,
    		Обороты.СуммаПродажиПриход - Обороты.СуммаПродажиРасход,
    		Обороты.ПозицияДокумента,
    		Обороты.КодОперации
    
    	FROM
    		(
    	SELECT
    		ТекущийДокумент
    		,ВидДокумента
    		,ПозицияДокумента
    		,Сотрудник
    		,Контрагент
    		,ТОПМенеджер
    		,ВидСтавки
    		,Ставка
    		,КодОперации
    		,SUM(СуммаЗарплатыПриход) AS СуммаЗарплатыПриход
    		,SUM(СуммаЗарплатыРасход) AS СуммаЗарплатыРасход
    		,SUM(СуммаЗарплатыОборот) AS СуммаЗарплатыОборот
    		,SUM(СуммаПродажиПриход) AS СуммаПродажиПриход
    		,SUM(СуммаПродажиРасход) AS СуммаПродажиРасход
    		,SUM(СуммаПродажиОборот) AS СуммаПродажиОборот
    
    	FROM
    		(SELECT
    			ra_9713.IDDOC AS ТекущийДокумент
    			,ra_9713.IDDOCDEF AS ВидДокумента
    			,SUBSTR(ra_9713.idx_DATE_TIME_IDDOC_LINENO_ACTNO,1,23) AS ПозицияДокумента
    			,ra_9713.Сотрудник AS Сотрудник
    			,ra_9713.Контрагент AS Контрагент
    			,ra_9713.ТОПМенеджер AS ТОПМенеджер
    			,ra_9713.ВидСтавки AS ВидСтавки
    			,ra_9713.Ставка AS Ставка
    			,ra_9713.КодОперации AS КодОперации
    			,CASE WHEN ra_9713.debkred = 0 THEN ra_9713.СуммаЗарплаты ELSE 0 END AS СуммаЗарплатыПриход
    			,CASE WHEN ra_9713.debkred = 1 THEN ra_9713.СуммаЗарплаты ELSE 0 END AS СуммаЗарплатыРасход
    			,CASE WHEN ra_9713.debkred = 0 THEN ra_9713.СуммаЗарплаты ELSE -ra_9713.СуммаЗарплаты END AS СуммаЗарплатыОборот
    			,CASE WHEN ra_9713.debkred = 0 THEN ra_9713.СуммаПродажи ELSE 0 END AS СуммаПродажиПриход
    			,CASE WHEN ra_9713.debkred = 1 THEN ra_9713.СуммаПродажи ELSE 0 END AS СуммаПродажиРасход
    			,CASE WHEN ra_9713.debkred = 0 THEN ra_9713.СуммаПродажи ELSE -ra_9713.СуммаПродажи END AS СуммаПродажиОборот
    
    		FROM
    			[Регистр.ЗарплатаОтПродаж] AS ra_9713
    		WHERE (ra_9713.idx_DATE_TIME_IDDOC_LINENO_ACTNO >= '20150201     0     0   ')
    		AND (ra_9713.idx_DATE_TIME_IDDOC_LINENO_ACTNO < '20150301     0     0   ')
    		AND
    			(ra_9713.Сотрудник = '     V   ' AND  ra_9713.Контрагент IN (SELECT val FROM vt_СписокКонтрагент))
    		) AS vt_ra_9713
    	GROUP BY
    		ТекущийДокумент
    		,ВидДокумента
    		,ПозицияДокумента
    		,Сотрудник
    		,Контрагент
    		,ТОПМенеджер
    		,ВидСтавки
    		,Ставка
    		,КодОперации
    	HAVING (SUM(СуммаЗарплатыПриход) <> 0)
    	OR (SUM(СуммаЗарплатыРасход) <> 0)
    	OR (SUM(СуммаЗарплатыОборот) <> 0)
    	OR (SUM(СуммаПродажиПриход) <> 0)
    	OR (SUM(СуммаПродажиРасход) <> 0)
    	OR (SUM(СуммаПродажиОборот) <> 0)
    
    ) AS Обороты
    	) AS Рег
     
    
    
      
    Наверх
     
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #767 - 06. Марта 2015 :: 02:18
    Печать  
    Djelf писал(а) 01. Марта 2015 :: 10:10:
    3.7.17 раз в 50 на таком запросе быстрее


    чет я не ощутил разницы
      
    Наверх
     
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #768 - 06. Марта 2015 :: 02:24
    Печать  
    проверял после выполнения этого запроса так:

    Код
    Выбрать все
    SELECT * FROM vt_ДанныеОтчета 
    
    


    Код
    Выбрать все
    Результат.ВыбратьСтроку() 
    
    
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #769 - 06. Марта 2015 :: 06:25
    Печать  
    Код
    Выбрать все
    CASE WHEN ra_9713.debkred = 0 THEN ra_9713.СуммаЗарплаты ELSE 0 END AS СуммаЗарплатыПриход 
    
    


    case не нужен в таких местах, проще писать

    Код
    Выбрать все
    СуммаЗарплаты*(1-debkred) as СуммаЗарплатыПриход 
    
    

    и т.д
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #770 - 06. Марта 2015 :: 08:54
    Печать  
    Asakra писал(а) 06. Марта 2015 :: 02:18:
    Djelf писал(а) 01. Марта 2015 :: 10:10:
    3.7.17 раз в 50 на таком запросе быстрее


    чет я не ощутил разницы


    Запрос то большой. 1500мс и 37мс разницы на IN съедаются остальными операциями.

    А в какой именно строке запроса IN глючит?
      
    Наверх
    www  
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #771 - 06. Марта 2015 :: 09:12
    Печать  
    Djelf писал(а) 06. Марта 2015 :: 08:54:
    А в какой именно строке запроса IN глючит?


    я ж примерчик бросал Улыбка
    Код
    Выбрать все
    ra_9713.Контрагент IN (SELECT val FROM vt_СписокКонтрагент) 
    
    
      
    Наверх
     
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #772 - 06. Марта 2015 :: 09:13
    Печать  
    на оборотах.
      
    Наверх
     
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #773 - 06. Марта 2015 :: 09:22
    Печать  
    Eprst писал(а) 06. Марта 2015 :: 06:25:
    case не нужен в таких местах


    я в курсе. это класс "Прямой запрос". остатки ломы самому писать  Круглые глаза
    если есть проблемы с производительностью, пишу сам...
      
    Наверх
     
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #774 - 06. Марта 2015 :: 09:27
    Печать  
    Djelf писал(а) 06. Марта 2015 :: 08:54:
    1500мс и 37мс разницы на IN съедаются остальными операциями.


    ну не знаю. этот запрос <200 мс выполняется
    может это если табличка в IN большая!?
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #775 - 06. Марта 2015 :: 09:50
    Печать  
    Asakra писал(а) 06. Марта 2015 :: 09:27:
    Djelf писал(а) 06. Марта 2015 :: 08:54:
    1500мс и 37мс разницы на IN съедаются остальными операциями.


    ну не знаю. этот запрос <200 мс выполняется
    может это если табличка в IN большая!?


    Ну я без фильтра по дате проверял. Тогда существенная разница получается. Если меньше 200мс то и так хорошо. А отбор в регистре по Контрагенту то есть?

    На оборотах... ага... Уже ближе к телу. А если отдельно подзапрос проверить что будет? Сузить поиски.

      
    Наверх
    www  
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #776 - 06. Марта 2015 :: 10:02
    Печать  
    Djelf писал(а) 06. Марта 2015 :: 09:50:
    А отбор в регистре по Контрагенту то есть?

    На оборотах... ага... Уже ближе к телу. А если отдельно подзапрос проверить что будет? Сузить поиски.


    отборов нет, не было необходимости.

    я как бы сразу писал, что в оборотах Улыбка
    щас попробую
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #777 - 06. Марта 2015 :: 10:17
    Печать  
    Asakra писал(а) 06. Марта 2015 :: 10:02:
    [quote author=Djelf link=1214205575/765#775 date=1425635405]
    щас попробую


    Стопэ! Поймал баг! Пошел курить почему так...

    upd:
    Вкурил...
    Вот и минимальный запрос приводящий к этому багу с sqlite 3.7.15-3.7.17
    Код
    Выбрать все
    SELECT
        iddoc,
        Номенклатура
    FROM [Регистр.ОстаткиТМЦ]
    WHERE
        (idx_DATE_TIME_IDDOC_LINENO_ACTNO >= '20140101     0     0   ')
        AND (idx_DATE_TIME_IDDOC_LINENO_ACTNO < '20141201     0     0   ')
        AND Номенклатура in (SELECT val FROM vt)
    GROUP BY
        iddoc,
        Номенклатура
     
    
    

    sqlite 3.7.17, зараза такая, использует в этом запросе индекс по idx_DATE_TIME_IDDOC_LINENO_ACTNO, а потом похоже по нему же и сворачивает, но в каком то обрезанном варианте  Злой
    ну тут еще планировщик 1sqlite подкачал, т.к. не вычислил что есть более подходящий индекс: Номенклатура,DATE,TIME,IDDOC,LINENO,ACTNO

    Кстати, если бы в запросе было указано DATE BETWEN вместо то ошибки бы не было, но зато попало бы в индекс Номенклатура,DATE,TIME,IDDOC,LINENO,ACTNO что на 3.7.17 раз в 10 быстрее.

    upd2:
    Кажется нашел где отключить эту фигню (backport 1й строчки из 3.7.14)  Круглые глаза
    Фактически отключаются некоторые оптимизации внутри sqlite по IN (что и сбивало планировщик), при этом план запросов становятся более похож на оригинальные версии 1sqlite.
    Запросы по подбору индекса по IN в 3.7.17 все равно поступают в 1sqlite, в отличие от оригинальных версий, что позволяет 1sqlite предложить в данном запросе (если условие будет на DATE BETWEN) индекс Номенклатура,DATE,TIME,IDDOC,LINENO,ACTNO, что в оригинальной версии невозможно.
    « Последняя редакция: 06. Марта 2015 :: 16:32 - Djelf »  

    1sqlite_3_7_17_bf2_001.zip ( 307 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #778 - 08. Марта 2015 :: 05:13
    Печать  
    Djelf писал(а) 06. Марта 2015 :: 10:17:
    если условие будет на DATE BETWEN


    т.е. если нужны остатки на позицию документа, то лучше писать date between :начДата and :конДата and time <:время and ididoc < :док
    или это касается только использования IN по измерению с отбором?
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #779 - 08. Марта 2015 :: 06:59
    Печать  
    Asakra писал(а) 08. Марта 2015 :: 05:13:
    Djelf писал(а) 06. Марта 2015 :: 10:17:
    если условие будет на DATE BETWEN


    т.е. если нужны остатки на позицию документа, то лучше писать date between :начДата and :конДата and time <:время and ididoc < :док
    или это касается только использования IN по измерению с отбором?


    IN тут ни при чем, он рассматривается планировщиком как = и вложенный подзапрос.
    вот индексы таблицы движений
    Код
    Выбрать все
    I=IDLINE	    IDDOC,LINENO,ACTNO
    I=DATETIME   DATE,TIME,IDDOC,LINENO,ACTNO
    I=VIA408       SP408,DATE,TIME,IDDOC,LINENO,ACTNO
     
    
    

    где SP408 - Номенклатура

    Есть 2 ограничения на таблицу DATE,TIME,IDDOC и SP408

    Если указать ограничение по составному полю idx_DATE_TIME_IDDOC_LINENO_ACTNO и SP408 то будет выбран индекс DATETIME, а если указывать DATE,TIME,IDDOC,SP408 раздельно, то должен быть выбран индекс VIA408
    Ну а эффективность выборки зависит от базы. У меня VIA408 в этом запросе быстрее чем DATETIME, но в какой то ситуации может быть и наоборот.
    EXPLAIN QUERY PLAN в помощь...
      
    Наверх
    www  
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #780 - 08. Марта 2015 :: 16:27
    Печать  
    Djelf писал(а) 08. Марта 2015 :: 06:59:
    Asakra писал(а) 08. Марта 2015 :: 05:13:
    Djelf писал(а) 06. Марта 2015 :: 10:17:
    если условие будет на DATE BETWEN


    т.е. если нужны остатки на позицию документа, то лучше писать date between :начДата and :конДата and time <:время and ididoc < :док
    или это касается только использования IN по измерению с отбором?


    IN тут ни при чем, он рассматривается планировщиком как = и вложенный подзапрос.
    вот индексы таблицы движений
    Код
    Выбрать все
    I=IDLINE	    IDDOC,LINENO,ACTNO
    I=DATETIME   DATE,TIME,IDDOC,LINENO,ACTNO
    I=VIA408       SP408,DATE,TIME,IDDOC,LINENO,ACTNO
     
    
    

    где SP408 - Номенклатура

    Есть 2 ограничения на таблицу DATE,TIME,IDDOC и SP408

    Если указать ограничение по составному полю idx_DATE_TIME_IDDOC_LINENO_ACTNO и SP408 то будет выбран индекс DATETIME, а если указывать DATE,TIME,IDDOC,SP408 раздельно, то должен быть выбран индекс VIA408
    Ну а эффективность выборки зависит от базы. У меня VIA408 в этом запросе быстрее чем DATETIME, но в какой то ситуации может быть и наоборот.
    EXPLAIN QUERY PLAN в помощь...


    понятно. сенкс, за развернутый ответ!
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #781 - 12. Июня 2015 :: 15:27
    Печать  
    1sqlite на движке 3.8.x таки будет!

    http://www.sqlite.org/src/info/80ee56dda7db3860
    http://www.sqlite.org/src/info/0d9edfab9fb61322

    Альфа версия с этими патчами уже есть, некоторые странности в ней еще присутствуют (но я не все патчи из ветки наложил).
    Вкусностей в 3.8.х много есть, оснавная вкусняшка - рекурсивные запросы (это позволит, например, получить дерево справочника одним запросом sql, без цикла 1С по метаданным и кучи union`ов).

    Вопрос к сообществу насчет Пользовательских функций и Агрегатов.

    Функция DedCred(0/1, значение) особого выиграша не дает. Есть ли смысл в таких функциях?

    Агрегат SumByKey(ключ, число) интересно получилось. Если ключ номенклатура, а записи выбираются в 1с в порядке даты, то это дикое ускорение получения начальных или конечных остатков на день. Не очень правильно с точки зрания sql, но оно в наших условиях работает!

    А вот и сам вопрос: еще идеи есть?

    P.S. вторую точку не просите!  Очень довольный
    « Последняя редакция: 12. Июня 2015 :: 17:12 - Djelf »  
    Наверх
    www  
    IP записан
     
    vladimirmir2012
    Senior Member
    ****
    Отсутствует


    1C++ rocks!

    Сообщений: 426
    Зарегистрирован: 18. Мая 2011
    Re: 1sqlite
    Ответ #782 - 14. Июня 2015 :: 07:38
    Печать  
    Djelf писал(а) 12. Июня 2015 :: 15:27:
    А вот и сам вопрос: еще идеи есть?
    У меня пока только одно пожелание - наличие хорошей документации по 1sqlite.
    Текущая документация более похожа на памятки автора для себя .
    Не мне тебе объяснять сколько тонкостей нужно знать и понимать для того, чтобы полноценно использовать 1sqlite.
    Как по мне когда начинал использовать 1sqlite, то много времени тратилось на то, чтобы уразуметь их.

    PS:  Может быть конечно это от моей тупости /если в каких-то вопросах может быть и подхожу под определение - профи,
          то это скорее исключение из правила/.
          Вообщем для ламеров типа меня pls хорошую документацию.



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


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #783 - 14. Июня 2015 :: 15:09
    Печать  
    vladimirmir2012 писал(а) 14. Июня 2015 :: 07:38:
    Не мне тебе объяснять сколько тонкостей нужно знать и понимать для того, чтобы полноценно использовать 1sqlite.

    Даже не знаю... 99% тонкостей 1sqlite растут из самого языка sql и структуры баз 1С.
    Тут вопрос то из 3х частей состоит. 1: howto по sql. 2: howto по структуре баз 1C. 3: howto по 1sqlite.
    3й вопрос chm`ом по 1sqlite, мне так кажется, решен не плохо.
    Ну да, модификаторы ~~~~~ периодически вводят в ступор, но это к п.2, который тут http://www.script-coding.com/v77tables.html неплохо разжеван. Можно, конечно, все примеры из script-coding`а переписать на sqlite, а толку то? Новичку без знания п.1 и п.2 это поможет слабо.


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


    1C++ rocks!

    Сообщений: 426
    Зарегистрирован: 18. Мая 2011
    Re: 1sqlite
    Ответ #784 - 14. Июня 2015 :: 16:08
    Печать  
    Djelf писал(а) 14. Июня 2015 :: 15:09:
    3й вопрос chm`ом по 1, мне так кажется, решен не плохо.
    Ну это обычное дело, что когда разберешься, то все так просто и ясно.
    Вообщем то предлагал "разжевать" пункт 3 /именно по особенностям использования sqlite в 1С/.


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


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #785 - 14. Июня 2015 :: 17:38
    Печать  
    Ок. Выйдет 3.8.х с патчами для виртуальных таблиц, посмотрю на особенности (их должно стать поменьше), добавлю в chm что вспомню.
    Ну там страничка/две же будет - не больше. Переводить 500+ страниц O`Reilly "Using sqlite" я не осилю  Нерешительный
      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #786 - 18. Июня 2015 :: 12:42
    Печать  
    Ну вот и работоспособный 1sqlite 1.0.2.6 на движке 3.8.11 (из транка).

    CTE это круто! Возможностей появляется огромное количество.
    Тут хорошая статья по сте http://www.sqlbooks.ru/printarticle.aspx?part=02&file=sql200509

    Пример
    Код
    Выбрать все
    WITH cte(d) AS (VALUES(:НачДата) UNION ALL SELECT date(d,'+1 day') FROM cte WHERE d<:КонДата)
    SELECT d [Дата $Дата] FROM cte
     
    
    

    Выдаст таблицу дат для реализации "группировка даты все"

    Только учтите - планировщик в 3.8.x совершенно другой!
    Да 3.8 он был линейный, т.е. оценка времени происходила еще при подготовки какой то стадии оптимизации.
    В 3.8 все стадии оптимизации сваливают свои оценки в одну кучу, а уже потом выбирается оптимальный путь выполнения запроса.
    Статья по планировщику: http://habrahabr.ru/post/193238/
    С таблицами sqlite все хорошо, на них можно натравить analyse, а вот с 1С`овскими все хуже - статистики попадания в индексы нет.




    « Последняя редакция: 18. Июня 2015 :: 16:53 - Djelf »  

    1sqlite_1026_3_8_11_a.7z ( 272 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #787 - 18. Июня 2015 :: 12:47
    Печать  
    А здесь во вложении пример построения дерева справочника номенклатура запросом cte.
    Отображение в табличное поле поставщиком данных 1sqlite (насколько помню такого еще не было).
    Работа с группами запросами sql, свертка групп с использованием cte.
    На 1С кода получается заметно больше...

    Картинку не привожу... дерево как дерево.
    « Последняя редакция: 18. Июня 2015 :: 16:29 - Djelf »  

    TreeCTE.7z ( 15 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #788 - 19. Июня 2015 :: 05:05
    Печать  
    Ага, потестим, спасибо.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #789 - 20. Июня 2015 :: 11:35
    Печать  
    Подводный камень предсказуемости поведения разных версий 1sqlite.
    многобукафок

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

    Запрос №1
    Код
    Выбрать все
    SELECT
    	р.IDDOC [Реализация :Документ.Реализация],
    	sum(р.Количество*р.Коэффициент/е.Коэффициент) as Коробки
    FROM
    	ДокументСтроки_Реализация as р
    INNER JOIN (SELECT
    		х.Накладная
    		FROM ДокументСтроки_Ходка as х
    		WHERE х.IDDOC=' 11WRO   ') as s
    		ON s.Накладная = р.IDDOC
    LEFT JOIN Справочник_Номенклатура as н ON р.Номенклатура = н.ID
    LEFT JOIN Справочник_Единицы as е ON е.ID = н.ОсновнаяЕдиница
    GROUP BY р.IDDOC 
    
    


    Оптимизатор может сначала выбрать ходки, а потом реализации (что хотелось бы), а может все сделать наоборот.

    1sqlite/sqlite - время
    1.0.2.3/3.6.33 - 3мс
    1.0.2.4/3.7.0 - 24000мс
    1.0.2.6/3.7.10 - 24000мс
    1.0.2.6/3.7.11 - 24000мс
    1.0.2.6/3.7.17 - 3мс
    1.0.2.6/3.8.11.b - 24000мс
    1.0.2.6/3.8.11.1.bf0 - 3мc

    И это несмотря на то, что стоимость у Ходок 36, а у Реализаций 40

    Заменим в 2х строках LEFT JOIN на INNER JOIN, дадим оптимизатору порезвится!
    Код
    Выбрать все
    INNER JOIN Справочник_Номенклатура as н ON р.Номенклатура = н.ID
    INNER JOIN Справочник_Единицы as е ON е.ID = н.ОсновнаяЕдиница 
    
    


    1sqlite/sqlite - время
    1.0.2.3/3.6.33 - 3мс
    1.0.2.4/3.7.0 - 45000мс
    1.0.2.6/3.7.10 - 15000мс
    1.0.2.6/3.7.11 - 16000мс
    1.0.2.6/3.7.17 - 3мс
    1.0.2.6/3.8.11.b - 647мс
    1.0.2.6/3.8.11.1.bf0 - 550мc

    Все стало еще непредсказуемее. А все потому, что в дело вступили еще два ограничения и оптимизатор может сначала пройти по номенклатуре потом по ходке, потом по реализации (1.0.2.6/3.8.11.b) или по номенклатуре, реализации и ходке (1.0.2.4/3.7.0)
    Кстати если сделать фильтр по номенклатуре, то в этом запросе 1.0.2.6/3.8.11.1.bf0 победит всех в легкую!.

    Заменим RIGHT JOIN на IN, это должно выправить мозги оптимизатору.
    Код
    Выбрать все
    SELECT
    	р.IDDOC [Реализация :Документ.Реализация],
    	sum(р.Количество*р.Коэффициент/е.Коэффициент) as Коробки
    FROM
    	ДокументСтроки_Реализация as р
    LEFT JOIN Справочник_Номенклатура as н ON р.Номенклатура = н.ID
    LEFT JOIN Справочник_Единицы as е ON е.ID = н.ОсновнаяЕдиница
    WHERE р.IDDOC IN
    	(SELECT
    		х.Накладная	 val
    		FROM ДокументСтроки_Ходка as х
    		WHERE х.IDDOC=' 11WRO   ')
    GROUP BY р.IDDOC 
    
    


    1sqlite/sqlite - время
    1.0.2.3/3.6.33 - 1500мс
    1.0.2.4/3.7.0 - 1500мс
    1.0.2.6/3.7.10 - 1500мс
    1.0.2.6/3.7.11 - 1500мс
    1.0.2.6/3.7.17 - 3мс вычеркнут из за багов по IN
    1.0.2.6/3.8.11.b - 3мс
    1.0.2.6/3.8.11.1.bf0 - 3мc

    Более предсказуемое поведение. Заметно, что до 3.7.17 нет оптимизации по IN.

    Вот такая вот проблема в предсказуемости поведения запросов разных версий 1sqlite.

    Чтения без индекса нет ни в одном из этих запросов, все эти запросы, во всех вариантах попадают в индекс, вот только перфразирую слегка: "Все говорят что смысл есть в индексе, но не многие знают в каком"  Смех

    Победительем вышел 1.0.2.6/3.7.17, показавший во всех вариантах 3мс. Был снят с призового места, т.к. был уличен в багах по оптимизаии IN.

    Уговорить 1.0.2.4/3.7.0-1.0.2.6/3.7.11 на 3мс не удалось (не совсем это правда, это сделать можно, добавив группировку по номенклатуре и засунув всю эту конструкцию как вложенный запрос, но это не красиво!).

    Новый победитель 1.0.2.6/3.8.11.1.bf0

    3.8.11 можно уговорить и через cte, но это не 3мс, а 5мс, что тоже не так плохо!
    Код
    Выбрать все
    WITH  cte(Реализация, Номенклатура, Коробки) AS (
    	SELECT
    		х.Накладная,0,0
    	FROM ДокументСтроки_Ходка as х
    	WHERE х.IDDOC=' 11WRO   '
    
    	UNION
    	SELECT
    		р.IDDOC as IDDOC,
    		р.Номенклатура,
    		sum(р.Количество*р.Коэффициент/е.Коэффициент) as Коробки
    	FROM
    		ДокументСтроки_Реализация as р
    	INNER JOIN cte on cte.Реализация=р.IDDOC
    	LEFT JOIN Справочник_Номенклатура as н ON р.Номенклатура = н.ID
    	LEFT JOIN Справочник_Единицы as е ON е.ID = н.ОсновнаяЕдиница
    )
    SELECT
    cte.Реализация [Реализация $Документ.Реализация],
    cte.Коробки
    FROM cte
    WHERE cte.Номенклатура<>0
     
    
    


    С 1.0.2.6/3.8.11.b надо сильно подумать!
    Возможно нужно задействовать новое в 3.8.х, не заполняющееся поле (количество строк таблицы) при ответе выбора индекса.
    Или (вариант максимум) сделать аналог analyse и хранить это в базе sqlite, но разумеется уже не в :memory: базе.

    P.S. да, это дебильный запрос, с "умными" запросами дело обстоит несколько легче.
    « Последняя редакция: 25. Сентября 2015 :: 08:36 - Djelf »  
    Наверх
    www  
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #790 - 22. Июня 2015 :: 07:19
    Печать  
    Прикрепите 1.0.2.6/3.7.17, чтоб не искать
    Улыбка
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #791 - 22. Июня 2015 :: 08:35
    Печать  
    1.0.2.6/3.7.17
      

    1sqlite_3_7_17_bf2.zip ( 307 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    sava
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 56
    Зарегистрирован: 18. Февраля 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #792 - 25. Июня 2015 :: 07:54
    Печать  
    1.0.2.6 / 3.8.11.0 - нелокализованный вылет 1с Память не может быть...
    Появляется при нескольких открытиях/закрытиях формы "Дерево СТЕ"
    и неопределенному количеству щелчков на таб. поле
    срр - 3.2.3.16
    формекс - 2.0.5.98.
    С версией 1024 такого не наблюдалось
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #793 - 25. Июня 2015 :: 13:32
    Печать  
    sava писал(а) 25. Июня 2015 :: 07:54:
    1.0.2.6 / 3.8.11.0 - нелокализованный вылет 1с Память не может быть...
    Появляется при нескольких открытиях/закрытиях формы "Дерево СТЕ"
    и неопределенному количеству щелчков на таб. поле
    срр - 3.2.3.16
    формекс - 2.0.5.98.
    С версией 1024 такого не наблюдалось


    Понятно что не наблюдалось, в ней cte то не было.
    А так возможно... sqlite 3.8.11 из транка, надо было релиза дождаться, но не сдержался.

    Попробовал с 1cpp 3.2.3.16 и formex 2.0.5.99, (2.0.5.98 не нашел) не упала пока...
    1cpp грузится до formex? Два раза sqlite.dll случаем не пытается грузится?
    Справочник большой? Сортировка строк может очень много памяти сожрать.
    На выложенной обработке падает или что-то в ней менял?
    По времени сколько заняло уронить? 1С падает сразу или перед этим задумывается?
    А DEP отключен?
    « Последняя редакция: 25. Июня 2015 :: 16:27 - Djelf »  
    Наверх
    www  
    IP записан
     
    sava
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 56
    Зарегистрирован: 18. Февраля 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #794 - 25. Июня 2015 :: 16:26
    Печать  
    Выложенная обработка. не менялось ничего.
    Справочник - порядка 5000.
    С загрузкой длл - порядок.
    Падает сразу. Причина - не понятна - для повторения - несколько раз переоткрывал форму, потом несколько десятков раз щелчек мышью на ТП. - Пямять не может быть рид/рерайт....
    Есть подозрение на поставщика. Поставил спп 3.2.4 - не помогло.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #795 - 25. Июня 2015 :: 17:14
    Печать  
    Добавил кнопочку с процедурой

    Процедура Завалить()
         Флаг=0;
         Для ии=1 По 1000 Цикл
               Флаг=1-Флаг;
               СвернутьРазвернуть(Флаг);
               Состояние("заваливаем "+ии);
         КонецЦикла;
    КонецПроцедуры

    Увеличил длину наименования до 100. В справочнике 10 уровеней и 6к позиций.
    Не, хочет падать  Печаль

    Надо проверить на wine, если там что то не падает, это должно работать везде.
    « Последняя редакция: 25. Июня 2015 :: 18:51 - Djelf »  
    Наверх
    www  
    IP записан
     
    sava
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 56
    Зарегистрирован: 18. Февраля 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #796 - 26. Июня 2015 :: 04:55
    Печать  
    Простым развернуть/свернуть не получается.
    пару десятков раз закрыть/открыть форму, свернуть/развернуть, клики на ТП. Результат -
    Утечки памяти не наблюдается
      

    _____.bmp ( 2421 KB | Загрузки )
    _____.bmp
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #797 - 26. Июня 2015 :: 10:15
    Печать  
    На Win7 не падает, на Wine не падает, на WinXP четко падает.
    Но дело imho не в sqlite 3.8.11. Во вложении дерево без cte, оно тоже стабильно падает на WinXP на 1sqlite 1.0.2.4
    P.S. Трогать код 1sqlite не хочу, пока 3.8.х не докажет, что он работоспособный. Да вот так... сам пускай и доказывает  Нерешительный
    « Последняя редакция: 26. Июня 2015 :: 18:26 - Djelf »  

    TreeNoCTE.7z ( 18 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #798 - 26. Июня 2015 :: 17:54
    Печать  
    sava Для чистоты эксперимента! Гибридное дерево.
    Требует 1.0.2.6/3.8.11.b для запросов cte, хранения временной таблицы, и свертки/развертки sql запросами.
    И ИндексированнуюТаблицу как поставщик данных.
    Не сильно медленне, мутного кода тоже не пришлось писать.
      

    TreeCTE2.7z ( 15 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #799 - 26. Июня 2015 :: 18:21
    Печать  
    Зачем очень это сте хочется...
    Для всяких интеграций, которыми в последнее время сильно утомляют, нужно что то типа:

    Запрос1С
    Код
    Выбрать все
    Период с ВыбНачПериода по ВыбКонПериода;
    Без итогов;
    Номенклатура = Регистр.Продажи.Номенклатура;
    Количество = Регистр.Продажи.Количество;
    КоличествоВ = Регистр.Продажи.КоличествоВ;
    Функция КоличествоСумма = Сумма(Количество);
    Функция КоличествоВСумма = Сумма(КоличествоВ);
    Группировка Номенклатура без упорядочивания без групп;
    Группировка День все; 
    
    


    Аналогичен следующему запросу 1sqlite
    Код
    Выбрать все
    WITH
    cte1(Номенклатура) AS (
    	SELECT
    		rp.Номенклатура
    	FROM Регистр_Продажи AS rp
    	WHERE rp.date BETWEEN :НачДата AND :КонДата
    	GROUP BY rp.Номенклатура
    ),
    cte2(Дата) AS (
    	VALUES(:НачДата)
    	UNION
    	SELECT date(Дата,'+1 day')
    	FROM cte2
    	WHERE Дата<:КонДата
    )
    
    SELECT
    	cte1.Номенклатура  [Номенклатура $Справочник.Номенклатура],
    	cte2.Дата [Дата :Дата],
    	sum(case rp.DEBKRED when 1 then -rp.Количество else rp.Количество end) [Количество $Число.15.5],
    	sum(case rp.DEBKRED when 1 then -rp.КоличествоВ else rp.КоличествоВ end) [КоличествоВ $Число.15.5]
    FROM
    	cte1
    CROSS JOIN cte2
    LEFT JOIN Регистр_Продажи AS rp
    	ON rp.Номенклатура  = cte1.Номенклатура
    	AND rp.DATE = cte2.Дата
    
    GROUP by cte1.Номенклатура,cte2.Дата
    ORDER by cte1.Номенклатура,cte2.Дата 
    
    


    1C 33c, 1sqlite 12c за одинаковый период.
    ВАЖНО: cte1 перед cte2, иначе будет 18с (sqlite, я так понимаю, cte не кеширует и для каждой строки номенклатуры cte2 вызывается заново, если это будет наоборот, то придется для каждой даты сканировать справочник Номенклатура, что не есть хорошо.

    Не такая уж и большая разница, но с установкой дополнительных фильтров и использования регистра ПартииНаличие все значительно веселее (в том смысле что это медленнее РегистраПродаж, но и разница значительно больше, да и список Номенклатуры тоже не из регистра).
    « Последняя редакция: 29. Июня 2015 :: 17:54 - Djelf »  
    Наверх
    www  
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Наткнулся на ошибку 1SQLite
    Ответ #800 - 05. Сентября 2015 :: 09:57
    Печать  
    Может я гоню, но на всех доступных мне релизах 1SQLite (от 1.0.2.0 до 1.0.2.6 разных видов) неверно типизируется неопределенное значение в случае Перечисления.

    Запрос простенький:

    SELECT
    Спр.ID as [ТекущийЭлемент $Справочник.СоставныеРезультаты],
    Спр.КомпонентаРезультата as [КомпонентаРезультата $Справочник.СоставРезультатов],
    Спр.Результат as [Результат $Неопределенный]
    FROM Справочник_СоставныеРезультаты as Спр
    WHERE
    (Спр.ParentExt = '   XTA   ') AND
    (Спр.IsMark = '')

    Анализ одного из значений Результат:

    ТипЗнач = Перечисление
    Значение =
    Пустое значение = 0
    ИД =     8B   
    ИД13 =   89    8B   
    ИД23 = E1  89    8B          
    Обратная конвертация ИД = Отриц.

    Программа определяет, что вернулось непустое значение типа Перечисление. Можно определить у этого значения ИДы (они корректные - проверил обратной конвертацией), но Метод Вид() значения использовать нельзя - ругается на ошибку "Значение не представляет агрегатный объект". Представление значения получается пустым.

    Если выполнить этот же запрос, но по другому владельцу, где значения Результата имеют другой вид (Справочник, Число), то все нормально работает.

    Этот же запрос на SQL версии отрабатывает безупречно на всех типах (1С++).
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: Наткнулся на ошибку 1SQLite
    Ответ #801 - 05. Сентября 2015 :: 11:40
    Печать  
    Ветер в поле писал(а) 05. Сентября 2015 :: 09:57:
    Может я гоню, но на всех доступных мне релизах 1SQLite (от 1.0.2.0 до 1.0.2.6 разных видов) неверно типизируется неопределенное значение в случае Перечисления.

    Не гонишь, есть такая ошибка. Для неопределенных перечеслений mdID не заполняется. Фикс такой:
    Код
    Выбрать все
    valuework.hpp
    inline static void str2val(CValue* pValue, LPCSTR str, Types1C type = typeUndefined, long mdID = 0)
    + if(type == typeEnum){mdID = str2id(ptr, 4);} 
    
    

    Вот так работает нормально.
    « Последняя редакция: 05. Сентября 2015 :: 19:00 - Djelf »  

    1sqlite_3_7_17_bf3_001.zip ( 306 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #802 - 08. Сентября 2015 :: 15:25
    Печать  
    Спасибо! Очень оперативно!
      
    Наверх
     
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #803 - 14. Сентября 2015 :: 12:30
    Печать  
    Нашел ошибку именно в последнем релизе 1SQLite

    Такой запрос всегда возвращает 0 строк:

    SELECT
      Спр.ID as [Элемент $Справочник.РеференсныеЗначения]
    FROM Справочник_РеференсныеЗначения as Спр
    WHERE
    (Спр.НаборРефЗначений = '    BC   ') AND
    (Спр.Пол IN ('     0   ','    5L   ')) AND
    (Спр.IsMark = '')

    Проблема в том, что IsMark для неудаленного элемента равно " " (пробел), а не пустой строке как в более ранних версиях
      
    Наверх
     
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: 1sqlite
    Ответ #804 - 14. Сентября 2015 :: 12:43
    Печать  
    проще писать <>'*'
      
    Наверх
     
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #805 - 14. Сентября 2015 :: 13:29
    Печать  
    Eprst писал(а) 14. Сентября 2015 :: 12:43:
    проще писать <>'*'


    Согласен, но разные версии должны вести себя одинаково, чтобы не переписывать (пересматривать) ранее написанное.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #806 - 14. Сентября 2015 :: 19:49
    Печать  
    Ветер в поле писал(а) 14. Сентября 2015 :: 12:30:
    Нашел ошибку именно в последнем релизе 1SQLite
    Проблема в том, что IsMark для неудаленного элемента равно " " (пробел), а не пустой строке как в более ранних версиях


    Спасибо за баг. Сам бы я такое не выловил.

    Это не пробел. Все несколько хуже... Это сочетание хотфикса бага http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/777#777 оператора IN и ''
    По факту там все таки пробел, а не пустое значение (в старых версиях тоже пробел), и если написать IsMark = ' ' то работает (причем на всех версиях 1sqlite).
    А '' и ' '  равны между собой из-за collate1c, а вот почему хотфикс это ломает пока непонятненько.
    Если хотфикс откатить то тоже работает, но тогда глючит оптимизация по in
    Это же расширение virtual table, в sqlite они их тестами покрывают не очень плотно так что версии, конечно должны вести себя одинаково, но увы не обязаны. Секретный релиз 1с для MSSQL тому подтверждение (легкое с мягким я не путаю, это просто пример).

    В 3.8.х работает и то и другое одновременно, но и планировщик совершенно другой т.е. оттуда фикс не вытянуть.

    Поищу... может и найду где косяк (мутно там очень).
    « Последняя редакция: 14. Сентября 2015 :: 22:09 - Djelf »  
    Наверх
    www  
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #807 - 15. Сентября 2015 :: 07:13
    Печать  
    Я пока просто переписал все места сравнения с пустой строкой.
    Благо я очень редко напрямую использую запросы на 1SQLite - в основном свой класс запроса по справочникам (для унификации SQL и DBF версий).
      
    Наверх
     
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #808 - 15. Сентября 2015 :: 15:45
    Печать  
    Все оказалось совсем грустным с релизом 1sqlite_3_7_17_bf3_001...

    Вот такой запрос не всегда выдает все подходящие строки:

    Код
    Выбрать все
    SELECT
    Спр.Врач as [Врач $Справочник.Врачи],
    Спр.Кабинет as [Кабинет $Справочник.Кабинеты],
    Спр.ВремяС as ВремяС,
    Спр.ВремяПо as ВремяПо,
    Спр.ID as [Элемент $Справочник.РасписаниеРаботы],
    СпрВрачи.Descr as Врач_Наименование,
    СпрКабинеты.Descr as Кабинет_Наименование
    FROM Справочник_РасписаниеРаботы as Спр
    LEFT JOIN Справочник_Врачи as СпрВрачи ON (СпрВрачи.ID=Спр.Врач)
    LEFT JOIN Справочник_Кабинеты as СпрКабинеты ON (СпрКабинеты.ID=Спр.Кабинет)
    WHERE
    (Спр.ДатаПриема = '20150915') AND
    (Спр.ВидРасписания = '   1FI   ') AND
    (Спр.Филиал = '     6   ') AND
    (Спр.Врач IN ('    PI   ','    TE   ','   3OX   ','   3G4   ','   2BZ   ','   3EN   ','   1Q1   ','   1HF   ','   1ZC   ','   1TF   ','   1L4   ','    22   ','   1QO   ','   24L   ','    EJ   ','     9   ','    85   ','    21   ','   3RS   ','   37Q   ','   2RX   ','   4AI   ','    DD   ')) AND
    (Спр.IsMark <> '*')
    ORDER BY СпрВрачи.Descr ASC 
    
    


    Т.е. IN не работает правильно. Почему-то выдает только по избранным врачам. Например, в этом запросе выдал только по Спр.Врач = '     9   '.
    С версией 2.6 выдает всех (около 10).
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #809 - 15. Сентября 2015 :: 17:28
    Печать  
    Да я уже понял... Оптимизацию по IN, как ни печально, придется отключить.
    Пытался починить но пока безрезультатно.
    Вот тут, надеюсь, она отключена полностью (во всяком случае и баг по IN, который я ранее пытался пофиксить не проявляется и IsMark='' без пробела работает, ну и этот IN не ищет больше индексы в таблицах 1с). Недоглядел в прошлый раз, вырубать IN надо не в одном месте, там стадийный алгоритм.
    Надо, конечно 3.8.11 приводить в чувство, но оно сопротивляется.
    « Последняя редакция: 15. Сентября 2015 :: 20:58 - Djelf »  

    1sqlite_3_7_17_bf4.zip ( 307 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #810 - 16. Сентября 2015 :: 07:11
    Печать  
    Спасибо за исправление!

    А с чем связано, что размер оригинальной версии 2.6 878 КБ, а новой 584?
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #811 - 16. Сентября 2015 :: 08:35
    Печать  
    Ветер в поле писал(а) 16. Сентября 2015 :: 07:11:
    Спасибо за исправление!
    А с чем связано, что размер оригинальной версии 2.6 878 КБ, а новой 584?

    Версия движка то другая, разработчики за размером следят. И ключи компиляции чуток другие. Но на скорость они почти не влияют, все таки sqlite чистый си, его заоптимизировать сложно.
    В процессе экспериментов получил как то мутанта в 2.5мб, собирая sqlite icc15, а 1с`овскую часть на vc6. Линкуется однако!
    Даже удалось заcтавить sqlite работать в многопоточном варианте и сожрать все 4 ядра в процессе работы - не впечетлило.
    Откатился на vc6.
      
    Наверх
    www  
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #812 - 16. Сентября 2015 :: 10:02
    Печать  
    Понятно, спасибо за ответ!
      
    Наверх
     
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #813 - 17. Сентября 2015 :: 00:01
    Печать  
    Djelf писал(а) 15. Сентября 2015 :: 17:28:
    Да я уже понял... Оптимизацию по IN, как ни печально, придется отключить.
    Пытался починить но пока безрезультатно.
    Вот тут, надеюсь, она отключена полностью (во всяком случае и баг по IN, который я ранее пытался пофиксить не проявляется и IsMark='' без пробела работает, ну и этот IN не ищет больше индексы в таблицах 1с). Недоглядел в прошлый раз, вырубать IN надо не в одном месте, там стадийный алгоритм.
    Надо, конечно 3.8.11 приводить в чувство, но оно сопротивляется.


    подскажите в 1sqlite_3_7_17_bf2 такая же проблема с IN?
    для работы ее использовать можно? вы сейчас в работе какаю используете?
    спасибо.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #814 - 17. Сентября 2015 :: 00:40
    Печать  
    Asakra писал(а) 17. Сентября 2015 :: 00:01:
    [quote author=Djelf link=1214205575/795#809 date=1442338114]
    подскажите в 1sqlite_3_7_17_bf2 такая же проблема с IN?
    для работы ее использовать можно? вы сейчас в работе какаю используете?
    спасибо.

    Лично я IN в sqlite вообще не перевариваю. Пытаюсь выкручиваться RIHT JOIN`ами. Поэтому проблема и не была мной замечена.
    В 3.7.17.бф2 оптимизация по IN была недоубита и работает только если на эту недоубитость не наступить.
    Мой косяк, виноват, не догладел.
    Использовать бф2-бф3 можно, но очень осторожно!!! Баг проявляется, если после IN использовать еще несколько условий в WHERE для той же таблицы.
    бф2 - попытка фикса IN, работает, но не во всех случаях.
    бф3 - микрофикс к 1sqlte по поводу неправильной типизации неопределенного перечисления - ничего сломать не может.
    бф4 - для IN выключен подбор индекса для виртуальных таблиц (сделано по коду аналогично отключению поиска индекса по NULL, по NULL индекса то нет).
    Т.е. сейчас бф4 - сэйф моде, бф3 - турбо моде, но возможныы глюки.
      
    Наверх
    www  
    IP записан
     
    Asakra
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 83
    Местоположение: Иркутск
    Зарегистрирован: 28. Августа 2012
    Пол: Мужской
    Re: 1sqlite
    Ответ #815 - 17. Сентября 2015 :: 02:10
    Печать  
    Djelf писал(а) 17. Сентября 2015 :: 00:40:
    Asakra писал(а) 17. Сентября 2015 :: 00:01:
    [quote author=Djelf link=1214205575/795#809 date=1442338114]
    подскажите в 1sqlite_3_7_17_bf2 такая же проблема с IN?
    для работы ее использовать можно? вы сейчас в работе какаю используете?
    спасибо.

    Лично я IN в sqlite вообще не перевариваю. Пытаюсь выкручиваться RIHT JOIN`ами. Поэтому проблема и не была мной замечена.
    В 3.7.17.бф2 оптимизация по IN была недоубита и работает только если на эту недоубитость не наступить.
    Мой косяк, виноват, не догладел.
    Использовать бф2-бф3 можно, но очень осторожно!!! Баг проявляется, если после IN использовать еще несколько условий в WHERE для той же таблицы.
    бф2 - попытка фикса IN, работает, но не во всех случаях.
    бф3 - микрофикс к 1sqlte по поводу неправильной типизации неопределенного перечисления - ничего сломать не может.
    бф4 - для IN выключен подбор индекса для виртуальных таблиц (сделано по коду аналогично отключению поиска индекса по NULL, по NULL индекса то нет).
    Т.е. сейчас бф4 - сэйф моде, бф3 - турбо моде, но возможныы глюки.


    эх... яфно. спасибо за ответ!
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #816 - 19. Сентября 2015 :: 19:59
    Печать  
    Нормально работающая с виртуальными таблицами и их индексами в 1С версии 3.8.х - 1.0.2.6/3.8.11.1 наконец испеклась!

    Изменения:
    bf0
    1. 1sqlite - исправлен баг с типизацией неопределенных перечислений (уже было в 3.7.17.bf3-bf4);
    2. 1sqlite - изменен возврат информации об индексах из 1sqlite в sqlite, из-за изменений оптимизатора запросов в 3.8.х:
      - 3.8.11 запрашивает индекс по сортировке, но без наложения условий, оригинальный планировщик выдает log(КолВоСтрок), измененный просто КолВоСтрок;
      - при не подании в индекс возвращалось 10000-log(КолВоСтрок), сейчас просто КолВоСтрок
      - при попадании в индекс возвращалось log(КолВоСтрок)*f(вхождения в индекс), сейчас просто log(КолВоСтрок)
    При таких условиях планировщик работает достаточно предсказуемо.
    Тест идиотского, но нужного запроса обновлен http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/789#789
    bf1
    sqlite - регистронезависимые поля в запросе.
    bf2
    sqlite - фикс вылета при запросе к базам sqlite (которые не :memory:), появившийся после bf1 (не учел некоторые оптимизации в коде sqlite). фикс определения типа данных в таблицах.
    bf3
    1sqlite - фикс SQLiteDataProvider для ТабличногоПоля. ТекущаяСтрока в табличном поле теперь работает на чтение/запись.
    bf5
    sqlite - фикс патча регистронезависимости like

    P.S. Баги по IN (пока?) не провяляются. В отличие от 3.7.17, индекс по IN работает.

    P.P.S. Изменения планировщика еще в процесс продумывания...
    Классический пример: регистр продажи и 2 условия номенклатура и склад. По обоим есть индекс. Стоимость индекса по методике Орефкова одинакова, преимущество получает первый в списке WHERE. Есть и плюсы и минусы в таком решении.
    Можно же и потелапатировать - взять 20% от справочника, по аналогии с АБС-анализом считаем что 80% мусор, поделить продажи на эти 20% и взять с них логарифм (или еще какой то бред вычисления). Нужно ли вообще предсказываение от зависимых таблиц, или это все от лукавого? Будет менее зависимо от расположения строк, но зато расположением строк поиграть не удасться.
    Компромисc - сделать переменную ВерсияПланировщика. Что думаете?
    « Последняя редакция: 12. Октября 2015 :: 18:58 - Djelf »  

    1sqlite_3_8_11_1_bf5_001.zip ( 333 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #817 - 20. Сентября 2015 :: 18:39
    Печать  
    Ветер в поле писал(а) 15. Сентября 2015 :: 15:45:
    SELECT ... FROM Справочник_РасписаниеРаботы as Спр ...

    Сколько по времени выполняется?
      
    Наверх
    www  
    IP записан
     
    nicesc
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 53
    Зарегистрирован: 13. Июня 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #818 - 21. Сентября 2015 :: 10:29
    Печать  
    Получается запросы стали регистрозависимые?

    Так уже не работает:
    $спр.номер = :стрПоиска

    а так работает
    $спр.Номер = :стрПоиска

    // Добавлено
    супер! запросы стали выполнятся быстрее, ушла задержка при первом обращении. Большое спасибо!  Очень довольный
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #819 - 21. Сентября 2015 :: 11:17
    Печать  
    nicesc писал(а) 21. Сентября 2015 :: 10:29:
    Получается запросы стали регистрозависимые?

    Спасибо! Очень много изменений 3.7>3.8 в самом sqlite, с регистрозависимостью кое-где значит не допилил. Это я поправлю.  
    Поправленная версия 1.0.2.6/3.8.11.1 тут http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/816#816

    P.S. Особенно радует рабочий сте.
    Код
    Выбрать все
    -- Все товары в группе, +_Родитель  для ускоренной группировки в ИндексированнойТаблице
    WITH RECURSIVE Goods(ID,PARENTID,ISFOLDER) AS (
    	SELECT ID,PARENTID,ISFOLDER
    	FROM [Справочник.Номенклатура]
    	WHERE ID   IN('     2Б  ')
    	UNION SELECT Спр.ID,Спр.PARENTID,Спр.ISFOLDER
    	FROM [Справочник.Номенклатура] AS Спр
        INNER JOIN Goods ON Goods.ID = Спр.PARENTID
    )
    SELECT
    	Goods.ID  [Номенклатура $Справочник.Номенклатура],
    	Goods.PARENTID [Номенклатура_Родитель $Справочник.Номенклатура]
    FROM Goods
    WHERE Goods.ISFOLDER=2
     
    
    
    « Последняя редакция: 23. Сентября 2015 :: 17:45 - Djelf »  
    Наверх
    www  
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #820 - 24. Сентября 2015 :: 16:31
    Печать  
    Djelf писал(а) 20. Сентября 2015 :: 18:39:
    Ветер в поле писал(а) 15. Сентября 2015 :: 15:45:
    SELECT ... FROM Справочник_РасписаниеРаботы as Спр ...

    Сколько по времени выполняется?


    Использую последнюю 3.7.
    Обоими версиями запрос выполняется в пределах 1 мс
    Справочник слишком маленький (6000 элементов), а селективность условия ДатаПриема очень хорошая - в день примерно 200 элементов. Даже банальным перебором будет очень быстро.

    В будущем постараюсь обратить внимание на производительность, но пока к ней не было претензий. А на действительно больших объемах у меня стоит SQL, т.к. его плюшки вкуснее и он банально быстрее после перехода на прямые запросы. Реально бесит только реструктуризация базы - после добавления одного поля может целый час молотить - руки бы оторвал разработчикам...
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #821 - 24. Сентября 2015 :: 17:49
    Печать  
    Ветер в поле писал(а) 24. Сентября 2015 :: 16:31:
    [quote author=Djelf link=1214205575/810#817 date=1442774356]
    Использую последнюю 3.7. Обоими версиями запрос выполняется в пределах 1 мс

    А, ну тогда отлично. Мне показалось что справочник дикий по объему, и это побудило на sqlite переползти. Подумал о вариантах ускорения, они есть, но раз 1мс то и так сойдет.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #822 - 25. Сентября 2015 :: 08:24
    Печать  
    Djelf, в тесте, что по ссылке - http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/789#789, в последних измерениях времени выполнения указан результат "1.0.2.6/3.8.11.1.bf0 - 3c" - я правильно понял, что это 3 секунды? Или это опечатка и должно быть мс - милисекунды. И в предыдущем замере указано 550с - что, таки да секунд?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #823 - 25. Сентября 2015 :: 08:37
    Печать  
    alyuev писал(а) 25. Сентября 2015 :: 08:24:
    Djelf, в тесте, что по ссылке - http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/789#789, в последних измерениях времени выполнения указан результат "1.0.2.6/3.8.11.1.bf0 - 3c" - я правильно понял, что это 3 секунды? Или это опечатка и должно быть мс - милисекунды. И в предыдущем замере указано 550с - что, таки да секунд?

    Очепятка конечно, поправил. Было бы в секундах, я бы 3.8 не занимался.
      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #824 - 27. Сентября 2015 :: 13:35
    Печать  
    1sqlite 1.0.2.6/3.8.11.1.bf3
    Исправлена ошибка в SQLiteDataProvider, приводящая к вылету при попытке установки текущей строки в табличном поле, а также к тому что тп.ТекущаяСтрока выводила пустое значение.
    Так что ТекущаяСтрока в табличном поле для постащика SQLiteDataProvider теперь доступна на чтение/запись.
    Брать тут: http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/816#816

    С этим же багом был связан вылет в обработке ДеревоНаCTE
    http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/787#787
    http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/792#792

    upd: багов в этой сборке пока не нашел...
    « Последняя редакция: 28. Сентября 2015 :: 19:41 - Djelf »  
    Наверх
    www  
    IP записан
     
    nicesc
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 53
    Зарегистрирован: 13. Июня 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #825 - 07. Октября 2015 :: 05:27
    Печать  
    Djelf писал(а) 27. Сентября 2015 :: 13:35:
    1sqlite 1.0.2.6/3.8.11.1.bf3

    Вылез непонятный баг, у меня используется класс поставщик и в коде:
    ТекущаяСтрока      = ТабличноеПоле.ТекущаяСтрока;
    в текущей строке вместо ссылки на элемент справочника, лежит:
    "ТабличноеПоле.ТекущаяСтрока = "   L8GЧП      4   Закупочная                                             10961""
    и появляется слово "упали"
    такое ощущение, что не происходит типизация значения
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #826 - 07. Октября 2015 :: 09:32
    Печать  
    Извиняюсь, забыл эту строку закомментировать. В ТекущаяСтрока лежит индекс строки так что там правильно.
    Кроме "упали" что нибудь еще не правильное происходит?

    вложенный файл удален, последняя версия тут http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/816#816
    « Последняя редакция: 12. Октября 2015 :: 18:57 - Djelf »  
    Наверх
    www  
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #827 - 12. Октября 2015 :: 10:05
    Печать  
    Все же в 3.8 collate_1C не работает... Запрос возвращает пустой результат.
    В чистой версии 1.0.2.6 все отлично отрабатывает.

    Код
    Выбрать все
    ГДЕ	$ДокКарточка.Пациент collate_1C LIKE '" + СокрЛП(ПодСтрокаПоиска) + "%'" 
    
    
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #828 - 12. Октября 2015 :: 15:19
    Печать  
    collate _1C то работает (это переопределение операторов = > < ) и на like вообще никогда не действует, like и glob отдельные операторы/функции.

    Надо, надо нарисовать тесты по всем случаям выявившимся в портировании 3.7.17 и 3.8.11, тем более что 3.9 на подходе, но времени, как всегда маловато.

    И 3.9 не в планах, там добавлена возможность создавать таблицы в стиле "от этой даты и по каждому +1 до следующей" но через С-дополнения (это можно сделать через CTE, не велика потеря), и хранение данных типа JSON и обработка таких данных. Для 7.7 это мало интересно.

    1sqlite_3.8.11.1.bf5.zip
    исправлен недоделанный регистронезависимый like
    « Последняя редакция: 12. Октября 2015 :: 23:49 - Djelf »  

    1sqlite_3_8_11_1_bf5.zip ( 333 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #829 - 13. Октября 2015 :: 07:03
    Печать  
    Спасибо! Буду тестировать.
      
    Наверх
     
    IP записан
     
    Kalen
    Full Member
    ***
    Отсутствует


    1C++ rocks!

    Сообщений: 185
    Зарегистрирован: 29. Марта 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #830 - 16. Октября 2015 :: 11:18
    Печать  
    Djelf писал(а) 07. Октября 2015 :: 09:32:
    ...В ТекущаяСтрока лежит индекс строки так что там правильно.

    А можно поподробнее? Раньше в ТекущаяСтрока была ссылка на сам объект в типизированном виде. Как теперь-то объект получить? С какой целью было изменено поведение? Можно как-нибудь вернуть прежний вариант? ПоставщикДанных http://www.1cpp.ru/forum/YaBB.pl?num=1273512019, например, не работает с последней версией 1sqlite Печаль
      
    Наверх
    GTalkICQ  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #831 - 16. Октября 2015 :: 17:43
    Печать  
    Kalen писал(а) 16. Октября 2015 :: 11:18:
    Djelf писал(а) 07. Октября 2015 :: 09:32:
    ...В ТекущаяСтрока лежит индекс строки так что там правильно.

    А можно поподробнее? Раньше в ТекущаяСтрока была ссылка на сам объект в типизированном виде. Как теперь-то объект получить? С какой целью было изменено поведение? Можно как-нибудь вернуть прежний вариант? ПоставщикДанных http://www.1cpp.ru/forum/YaBB.pl?num=1273512019, например, не работает с последней версией 1sqlite Печаль

    Сообщение изменено

    Чинилось из-за этого:

    Во вложении (справочник номенклатура должен быть в базе)
      Сообщить("ПриВыбореСистемнойКартинки ТекущаяСтрока = "+тпТаблицы.ТекущаяСтрока);
           выдает пустое значение на оригинальной версии 1.0.2.6
      тпТаблицы.ТекущаяСтрока=тпТаблицы.ТекущаяСтрока;
           гарантировано приводит к вылету

    Нашел варианты некорректной работы, фикс был не верным. Буду чинить заново. Т.к. вылеты меня никак не устраивают.
    « Последняя редакция: 17. Октября 2015 :: 16:41 - Djelf »  

    DataProviderBug.zip ( 21 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #832 - 18. Октября 2015 :: 09:50
    Печать  
    Kalen писал(а) 16. Октября 2015 :: 11:18:
    Можно как-нибудь вернуть прежний вариант? ПоставщикДанных например, не работает с последней версией 1sqlite Печаль


    Проверяй.
    1.0.2.6/3.8.11.1.bf6
    Откачен кривой патч на ТекущаяСтрока, но заблокирована установка ТекущейСтроки в случае отсутствия ключа.
    « Последняя редакция: 18. Октября 2015 :: 13:03 - Djelf »  

    1sqlite_3_8_11_1_bf6_001.zip ( 333 KB | Загрузки )
    Наверх
    www  
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #833 - 13. Сентября 2016 :: 15:17
    Печать  
    В какой-то момент поломался патч по неопределенным значениям типа перечисление Печаль
    1.0.2.6/3.8.11.1.bf5 - 1.0.2.6/3.8.11.1.bf6  - здесь уже этот патч не работает.
    Откатился на 1.0.2.6/3.7.17.bf4
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #834 - 13. Сентября 2016 :: 19:40
    Печать  
    Ветер в поле писал(а) 13. Сентября 2016 :: 15:17:
    В какой-то момент поломался патч по неопределенным значениям типа перечисление Печаль
    1.0.2.6/3.8.11.1.bf5 - 1.0.2.6/3.8.11.1.bf6  - здесь уже этот патч не работает.
    Откатился на 1.0.2.6/3.7.17.bf4


    А все потому что бэкапить надо не только базы 1с, но и все остальное ;(
    Ну и форум лежал ниже уровня Марианской впадины, поэтому как то подзабыл что это надо фиксить.

    Спасибо! Сделал наконец тест на типизацию перечисления и нашел еще 1 баг - типизацию перечисления из id13.

    * 1sqlite 1.0.2.6/3.8.11.1 bf6
    + В провайдер таблицного поля добавлено свойство ОбратныйПорядок
    http://www.forum.mista.ru/topic.php?id=770036

    * 1sqlite 1.0.2.6/3.8.11.1 bf7
    + исправлена загрузка целночисленных переменных из sqlite в 1с
    http://www.forum.mista.ru/topic.php?id=774403

    * 1sqlite 1.0.2.6/3.8.11.1 bf8
    + Исправлено поведение УложитьОбъекты в том случае, если справочник является подчиненным
    http://www.forum.mista.ru/topic.php?id=550161

    * 1sqlite 1.0.2.6/3.14.1 bf9
    + перевод движка на 3.14.1
    + добавлена обработка  новых переменных sqlite

      #define SQLITE_INDEX_CONSTRAINT_LIKE   65     /* 3.10.0 and later only */
      #define SQLITE_INDEX_CONSTRAINT_GLOB   66     /* 3.10.0 and later only */
      #define SQLITE_INDEX_CONSTRAINT_REGEXP 67     /* 3.10.0 and later only */
      #define SQLITE_INDEX_SCAN_UNIQUE        1     /* Scan visits at most 1 row */

    * 1sqlite 1.0.2.6/3.14.1 bf10
    + изменена схема подключения виртуальных таблиц 1с, теперь они подключаются как таблицы во временной схеме
    + добавлен флаг выгрузки в УложитьОбъекты как 6й параметр
         0 - выгружать объекты в неопределенном виде tos23, длинные строки как tos23+хвост
         1 - при выгрузке по иерархиии выгружать только элемены
         2 - при выгрузке по иерархиии выгружать только группы
         3 - при выгрузке по иерархиии выгружать группы и элементы
    + изменена типизация  :Неопределенный для поддержки  tos23+хвост

    * 1sqlite 1.0.2.6/3.14.1 bf11
    + восстановлены потеренные при портировании движка sqlite функции upper и lower
    + восстановлена потерянная типизация перечисления из tos23
    + добавлена типизация перечисления из tos 13

    Файлы не вкладываются, поэтому https://cloud.mail.ru/public/9znr/ZJ6ULE9aR



      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #835 - 15. Октября 2016 :: 18:13
    Печать  
    * 1sqlite 1.0.2.6/3.15.0.12
    обновлен движок sqlite, других изменений нет.

    А в движке 3.15.0 было добавлено: Row Values Это позволит упросить некоторые мутные запросы как то так:
    Код (SQL)
    Выбрать все
    select Что from Откуда
    where (Откуда.Склад,Откуда.Номенклатура) IN (SELECT Склад,Номенклатура FROM Ограничения)
     
    
    

    Не то чтобы я был сильный поклонник IN и NOT IN, они все равно разворачиваются в какие то JOIN`ы, но такой запрос действительно выглядит проще и читается легче.

    и Deterministic SQL Functions заработали как частичные индексы, но увы, на виртуальных таблицах 1С это не сработает. А вот тем кто пользуется внешними базами sqlite, это может кое-где дать значительный буст.

    Сборка там же: https://cloud.mail.ru/public/9znr/ZJ6ULE9aR
    « Последняя редакция: 16. Октября 2016 :: 11:38 - Djelf »  
    Наверх
    www  
    IP записан
     
    Salimbek
    God Member
    *****
    Отсутствует



    Сообщений: 862
    Зарегистрирован: 06. Июня 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #836 - 07. Ноября 2016 :: 10:12
    Печать  
    Что-то у меня странное Печаль Подключаю 1sqlite и пробую через 1sqlite.ert протестировать элементарный запрос:
    Код (SQL)
    Выбрать все
    select * from [Документ.Остатки]
     
    
    
    в ответ no such table.
    Попробовал через кнопочку "Подключаемые таблицы" - тоже ни один Документ не подключается, с ошибкой vtable constructor failed: Документ_Остатки
    К Справочникам подключается без проблем.
      
    Наверх
    ICQ  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #837 - 07. Ноября 2016 :: 10:50
    Печать  
    Действительно странное... какая версия 1sqlite? Что выводит SELECT sqlite_version()?
    Кусок из 1Cv7.DD от Документ.Остатки можешь выложить?
      
    Наверх
    www  
    IP записан
     
    Salimbek
    God Member
    *****
    Отсутствует



    Сообщений: 862
    Зарегистрирован: 06. Июня 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #838 - 07. Ноября 2016 :: 11:10
    Печать  
    Любопытно... Документ у меня фактически пустой, там просто обнуление некоторых данных по регистру на нужную дату. В итоге и Шапка и Табличная часть - пустые. Поэтому и нет ничего в табличках, точнее - табличек самих вообще нет (са-а-авсем 7-ка забывается уже)
      
    Наверх
    ICQ  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #839 - 07. Ноября 2016 :: 11:17
    Печать  
    Ага, есть такое. С пустой т.ч. подключается, а без реквизитов нет. Посмотрю что можно сделать.
    upd: Посмотрел. Без реквизитов документ и его таблица вообще не создается. Т.е. его действительно нет.
      
    Наверх
    www  
    IP записан
     
    Mink Snopes
    Junior Member
    **
    Отсутствует


    bookkeeping considered
    harmful

    Сообщений: 30
    Местоположение: Dombabwe
    Зарегистрирован: 05. Ноября 2013
    Re: 1sqlite
    Ответ #840 - 09. Ноября 2016 :: 06:38
    Печать  
    Djelf, а есть возможность прикрутить чтение произвольнольного dbf?
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #841 - 09. Ноября 2016 :: 09:19
    Печать  
    Mink Snopes писал(а) 09. Ноября 2016 :: 06:38:
    Djelf, а есть возможность прикрутить чтение произвольнольного dbf?

    Через механизм виртуальных таблиц прикрутить к sqlite можно почти все.
    Есть вот такое расширение https://www.gaia-gis.it/fossil/libspatialite/index
    Я не пробовал, но есть инструкция для linux (принцип в win тот же) https://gist.github.com/maxp/6f9ff80825666102f446
    И библиотека для win https://www.gaia-gis.it/spatialite-2.3.0/binaries.html

    Для загрузки расширений нужно сначала их разрешить!

    База = СоздатьОбъект("SQLiteBase");
    База.Открыть(":memory:");
    База.РазрешитьЗагрузкуРасширений(1);
    потом
    SELECT load_extension('libspatialite-2.dll');
    и по инструкции...
      
    Наверх
    www  
    IP записан
     
    Mink Snopes
    Junior Member
    **
    Отсутствует


    bookkeeping considered
    harmful

    Сообщений: 30
    Местоположение: Dombabwe
    Зарегистрирован: 05. Ноября 2013
    Re: 1sqlite
    Ответ #842 - 10. Ноября 2016 :: 07:21
    Печать  
    No luck.
    У них даже бинари отюда не работают:
    http://www.gaia-gis.it/gaia-sins/windows-bin-x86/


    > spatialite
    SpatiaLite version ..: 4.3.0a   Supported Extensions:
            - 'VirtualShape'        [direct Shapefile access]
            - 'VirtualDbf'          [direct DBF access]
            - 'VirtualXL'           [direct XLS access]
    ...
    spatialite> create virtual table lood using virtualdbf('c:\tmp\bdp.dbf', 'cp866');
    spatialite> select * from lood;
    spatialite>

    То есть таблица создается, но ни данных, ни структуры там нет.

    Собственно вопрос был, можно ли по-быстрому натравить движок 1с на сторонний ДБФ, ну нет, так нет.

    UPD На dbf из исходников libspatialite все взлетает, вообще весело.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #843 - 10. Ноября 2016 :: 11:55
    Печать  
    Mink Snopes писал(а) 10. Ноября 2016 :: 07:21:
    No luck.
    UPD На dbf из исходников libspatialite все взлетает, вообще весело.

    Глянул исходники. Не поддерживается формат dBASE 7 и еще пара форматов. Печально...

    сигнатуры поддерживаемые libspatialite
    Код (C++)
    Выбрать все
        switch (*bf)
          {
    	  /* checks the DBF magic number */
          case 0x03:
          case 0x83:
    	  break;
          case 0x02:
          case 0xF8:
    	  sprintf (errMsg, "'%s'\ninvalid magic number %02x [FoxBASE format]",
    		   path, *bf);
    	  goto dbf_bad_magic;
          case 0xF5:
    	  sprintf (errMsg,
    		   "'%s'\ninvalid magic number %02x [FoxPro 2.x (or earlier) format]",
    		   path, *bf);
    	  goto dbf_bad_magic;
          case 0x30:
          case 0x31:
          case 0x32:
    	  sprintf (errMsg,
    		   "'%s'\ninvalid magic number %02x [Visual FoxPro format]",
    		   path, *bf);
    	  goto dbf_bad_magic;
          case 0x43:
          case 0x63:
          case 0xBB:
          case 0xCB:
    	  sprintf (errMsg, "'%s'\ninvalid magic number %02x [dBASE IV format]",
    		   path, *bf);
    	  goto dbf_bad_magic;
          default:
    	  sprintf (errMsg, "'%s'\ninvalid magic number %02x [unknown format]",
    		   path, *bf);
    	  goto dbf_bad_magic;
          };
     
    
    

    сигнатуры dbf http://www.autopark.ru/ASBProgrammerGuide/DBFSTRUC.HTM
      
    Наверх
    www  
    IP записан
     
    Mink Snopes
    Junior Member
    **
    Отсутствует


    bookkeeping considered
    harmful

    Сообщений: 30
    Местоположение: Dombabwe
    Зарегистрирован: 05. Ноября 2013
    Re: 1sqlite
    Ответ #844 - 10. Ноября 2016 :: 12:28
    Печать  
    Ага, но дело в том, что и с сигнатурой 0x03 не все читает. Разбираться в таком коде мне как-то стремно.
    Код (C++)
    Выбрать все
    	  /* something is going the wrong way; creating a stupid default table */
    	  xname = gaiaDoubleQuotedSql ((const char *) argv[2]);
    	  sql = sqlite3_mprintf ("CREATE TABLE \"%s\" (PKUID INTEGER)", xname); 
    
    

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


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #845 - 10. Ноября 2016 :: 12:43
    Печать  
    Да, забавный комментарий  Улыбка
    О... да там все совсем плохо...
    Код (C++)
    Выбрать все
     \note supported DBF data types are:
     \li 'C' text string [default]
     \li 'N' numeric
     \li 'D' date
     \li 'L' boolean
     
    
    


    К сожалению, другого расширения к sqlite для чтения dbf я не нашел.
      
    Наверх
    www  
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #846 - 19. Ноября 2016 :: 13:07
    Печать  
    Добрый день. Подскажите как сделать запрос в 1sqlite на ТИС. Нужно сделать отбор товаров номенклатуры с ценами сразу.
    текст="SELECT
         |Товары.code КодТовара,
         |Товары.id     [Номенклатура :Справочник.Номенклатура]
    а что далее написать не знаю.
    Например нужно сделать отбор всех товаров с закупочной и оптовой ценой
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #847 - 19. Ноября 2016 :: 16:28
    Печать  
    Наоборот надо. Сначала выбираем цены по типу, потом к ним клеим константы. Благодаря тому что sqlite умеет GROUP BY sort цена будет выбрана из нужной строки. Ну а потом если нужна номенклатура без цен клеим ее union`ом. Если нужны 2 колонки с ценами то либо case, либо 2 запроса с union. tmpНоменклатура - список значений выгруженный во временную таблицу.

    Пример:
    Код
    Выбрать все
    SELECT
    max(Константы.DATE||Константы.TIME)
    ,Цены.PARENTEXT [Номенклатура $Справочник.Номенклатура]
    ,Цены.ТипЦен [ТипЦен $Справочник.ТипыЦен]
    ,Константы.VALUE [Цена $Число]
    
    FROM  Справочник_Цены AS Цены
    LEFT JOIN [_1S.Const] AS Константы
    	ON Цены.ID=Константы.OBJID
    	AND Константы.ID=:ИсторияРеквизита.Цены.Цена
    	AND Константы.DATE<=:НачДата
    WHERE Цены.ТипЦен = :Цена1 OR Цены.ТипЦен = :Цена2
     AND Цены.PARENTEXT IN (SELECT val FROM tmpНоменклатура)
    GROUP by Цены.ТипЦен,Цены.PARENTEXT
    HAVING Константы.VALUE NOTNULL
     
    
    

      
    Наверх
    www  
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #848 - 20. Ноября 2016 :: 15:23
    Печать  
    Если не сложно, приведите рабочий пример. Вообще не понял про константы.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #849 - 20. Ноября 2016 :: 16:54
    Печать  
    Это рабочий пример для тис.

    Чтобы понять про константы нужно прочитать описание таблицы констант, понять ее структуру и только потом делать запросы http://www.script-coding.com/v77tables.html
    « Последняя редакция: 20. Ноября 2016 :: 18:50 - Djelf »  
    Наверх
    www  
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #850 - 26. Ноября 2016 :: 19:43
    Печать  
    Добрый день. Подскажите как в запросе сделать проверку что значение реквизита не пустая строка.
    Есть у справочника номенклатура реквизит КодыПоставщика - тип строка (80) символов
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #851 - 26. Ноября 2016 :: 20:17
    Печать  
    Grey77 писал(а) 26. Ноября 2016 :: 19:43:
    Добрый день. Подскажите как в запросе сделать проверку что значение реквизита не пустая строка.
    Есть у справочника номенклатура реквизит КодыПоставщика - тип строка (80) символов

    WHERE trim(КодыПоставщика)  != ''
    Или
    WHERE КодыПоставщика  > ''
    Второй вариант интереснее, collate в стиле 1с пробелы не учитывает, следовательно все что не пробел - больше! И сможет использовать индекс по полю КодыПоставщика если у поля установлен признак (сортировка/отбор).

      
    Наверх
    www  
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #852 - 28. Ноября 2016 :: 14:39
    Печать  
    Djelf писал(а) 26. Ноября 2016 :: 20:17:
    Grey77 писал(а) 26. Ноября 2016 :: 19:43:
    Добрый день. Подскажите как в запросе сделать проверку что значение реквизита не пустая строка.
    Есть у справочника номенклатура реквизит КодыПоставщика - тип строка (80) символов

    WHERE trim(КодыПоставщика)  != ''
    Или
    WHERE КодыПоставщика  > ''
    Второй вариант интереснее, collate в стиле 1с пробелы не учитывает, следовательно все что не пробел - больше! И сможет использовать индекс по полю КодыПоставщика если у поля установлен признак (сортировка/отбор).


    Спасибо большое за быструю помощь
      
    Наверх
     
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #853 - 29. Ноября 2016 :: 14:38
    Печать  
    Добрый день. Снова нужна помощь.
    Подскажите как в запросе сделать проверку, что значение реквизита "Число"?
    Есть у справочника номенклатура реквизит КодыПоставщика - тип строка (80) символов. Нужно отобрать все товары, в которых строка "КодыПоставщика" состоит только из цифр.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #854 - 29. Ноября 2016 :: 19:02
    Печать  
    Grey77 писал(а) 29. Ноября 2016 :: 14:38:
    Добрый день. Снова нужна помощь.
    Подскажите как в запросе сделать проверку, что значение реквизита "Число"?
    Есть у справочника номенклатура реквизит КодыПоставщика - тип строка (80) символов. Нужно отобрать все товары, в которых строка "КодыПоставщика" состоит только из цифр.

    Штатно можно, но перебирать все лишние символы в case слишком громоздко. Остальные варианты при возможной длине числа в 80 символов не надежны (будет переполнение).
    Можно еще попробовать upper(Перем)=lower(Перем) + фильр на спец символы...

    Проще нарисовать функцию-расширение на си...
      
    Наверх
    www  
    IP записан
     
    leov-001
    Full Member
    ***
    Отсутствует


    1C++ rocks!

    Сообщений: 150
    Зарегистрирован: 05. Марта 2009
    Re: 1sqlite
    Ответ #855 - 30. Ноября 2016 :: 06:06
    Печать  
    Код (SQL)
    Выбрать все
    select 'r   123'*1 -- Получаем 0 или NULL не понятно
    select '   123'*1 -- Получаем 123
     
    
    
      
    Наверх
     
    IP записан
     
    leov-001
    Full Member
    ***
    Отсутствует


    1C++ rocks!

    Сообщений: 150
    Зарегистрирован: 05. Марта 2009
    Re: 1sqlite
    Ответ #856 - 30. Ноября 2016 :: 06:08
    Печать  
    Djelf писал(а) 29. Ноября 2016 :: 19:02:
    Grey77 писал(а) 29. Ноября 2016 :: 14:38:
    Добрый день. Снова нужна помощь.
    Подскажите как в запросе сделать проверку, что значение реквизита "Число"?
    Есть у справочника номенклатура реквизит КодыПоставщика - тип строка (80) символов. Нужно отобрать все товары, в которых строка "КодыПоставщика" состоит только из цифр.

    Штатно можно, но перебирать все лишние символы в case слишком громоздко. Остальные варианты при возможной длине числа в 80 символов не надежны (будет переполнение).
    Можно еще попробовать upper(Перем)=lower(Перем) + фильр на спец символы...

    Проще нарисовать функцию-расширение на си...


    https://github.com/eatnumber1/sqlite-regexp
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #857 - 30. Ноября 2016 :: 11:55
    Печать  
    leov-001 писал(а) 30. Ноября 2016 :: 06:06:
    Код (SQL)
    Выбрать все
    select 'r   123'*1 -- Получаем 0 или NULL не понятно
    select '   123'*1 -- Получаем 123
     
    
    


    Это не подойдет т.к. 342341E3 - тоже число, но E не цифра. Ну и дробные числа есть. И вот такое '342341#3'*1 тоже число...

    https://github.com/eatnumber1/sqlite-regexp видел, но это обертка над pcre, а pcre для win собирается борландом, т.е. попарится сильно придется чтобы собрать.

    regexp уже давно есть в исходниках sqlite, правда на юникодность не проверял... надо бы проверить как оно работает
      
    Наверх
    www  
    IP записан
     
    leov-001
    Full Member
    ***
    Отсутствует


    1C++ rocks!

    Сообщений: 150
    Зарегистрирован: 05. Марта 2009
    Re: 1sqlite
    Ответ #858 - 30. Ноября 2016 :: 12:08
    Печать  
    Djelf писал(а) 30. Ноября 2016 :: 11:55:
    leov-001 писал(а) 30. Ноября 2016 :: 06:06:
    Код (SQL)
    Выбрать все
    select 'r   123'*1 -- Получаем 0 или NULL не понятно
    select '   123'*1 -- Получаем 123
     
    
    


    Это не подойдет т.к. 342341E3 - тоже число, но E не цифра. Ну и дробные числа есть. И вот такое '342341#3'*1 тоже число...

    https://github.com/eatnumber1/sqlite-regexp видел, но это обертка над pcre, а pcre для win собирается борландом, т.е. попарится сильно придется чтобы собрать.

    regexp уже давно есть в исходниках sqlite, правда на юникодность не проверял... надо бы проверить как оно работает


    select 'r   123'*1 -- Получаем 0 или NULL не понятно
    select '   123'*1 -- Получаем 123

    Это было для "Нужно отобрать все товары, в которых строка "КодыПоставщика" состоит только из цифр."

    Grey77 wrote Вчера :: 14:38:
    Добрый день. Снова нужна помощь.
    Подскажите как в запросе сделать проверку, что значение реквизита "Число"?
    Есть у справочника номенклатура реквизит КодыПоставщика - тип строка (80) символов. Нужно отобрать все товары, в которых строка "КодыПоставщика" состоит только из цифр.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #859 - 30. Ноября 2016 :: 18:34
    Печать  
    leov-001 писал(а) 30. Ноября 2016 :: 12:08:
    Это было для "Нужно отобрать все товары, в которых строка "КодыПоставщика" состоит только из цифр."

    Спасибо за напоминание, но, повторяюсь
    select '342341#3'*1 = 342341
    Это не подходит под условие "состоит только из цифр."
    « Последняя редакция: 30. Ноября 2016 :: 21:41 - Djelf »  
    Наверх
    www  
    IP записан
     
    Mink Snopes
    Junior Member
    **
    Отсутствует


    bookkeeping considered
    harmful

    Сообщений: 30
    Местоположение: Dombabwe
    Зарегистрирован: 05. Ноября 2013
    Re: 1sqlite
    Ответ #860 - 01. Декабря 2016 :: 06:20
    Печать  
    Продолжая тему. С вот таким условием остаются только проблемы с ведущими нолями в числах:
    Код (SQL)
    Выбрать все
    ...
    where trim(КодыПоставщика) = cast(КодыПоставщика*1 as text)
     
    
    
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #861 - 01. Декабря 2016 :: 09:38
    Печать  
    Тоже не прокатит из-за переполнения
    SELECT '23423423423423423423423423423'*1 = 23423423423423400000000000000
    следовательно условие = не сработает
      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #862 - 01. Декабря 2016 :: 11:07
    Печать  
    С помощью cte вопрос решается, правда не учитывает разрыв пробелами "232 333", но это можно решить.
    Код (SQL)
    Выбрать все
    WITH RECURSIVE
    cte(id,pos,code,chk)
    AS (
    	SELECT
    		id,1,t1.Артикул,substr(1,1) in ('',' ','0','1','2','3','4','5','6','7','8','9')
    	FROM Справочник_Номенклатура AS t1
    	WHERE LENGTH(trim(t1.Артикул))>0
    
    	UNION ALL SELECT
    		id,pos+1,code,chk+(substr(code,pos,1) in ('',' ','0','1','2','3','4','5','6','7','8','9'))
    	FROM cte
    	WHERE pos<=LENGTH(cte.code)
      -- LIMIT 1000
    )
    SELECT * FROM cte
    WHERE chk=LENGTH(cte.code)
     
    
    
      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #863 - 05. Декабря 2016 :: 17:02
    Печать  
    sqlite3_mod_pcre таки наконец собрался. Версия движка pcre2 10.22 с поддержкой юникода
    лежит в каталоге https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

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

    Код (SQL)
    Выбрать все
    База = СоздатьОбъект("SQLiteBase");
    База.Открыть(":memory:");
    База.РазрешитьЗагрузкуРасширений(1);
    
    SELECT load_extension('sqlite3_mod_pcre.dll');
    
    SELECT
    	ID [Номенклатура $Справочник.Номенклатура],Артикул
    FROM Справочник_Номенклатура
    WHERE Артикул REGEXP '^[\s]*[0-9]+[\s]*$'
     
    
    
    « Последняя редакция: 06. Декабря 2016 :: 13:29 - Djelf »  
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #864 - 06. Декабря 2016 :: 11:58
    Печать  
    Для какой версии 1sqlite это мод работает?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #865 - 06. Декабря 2016 :: 12:01
    Печать  
    И я правильно понял - пишу в запросе так:

    ТекстЗапр="SELECT load_extension(...);
    SELECT ...";

    запр=База.НовыйЗапрос();
    ТЗ=запр.ВыполнитьЗапрос(ТекстЗапр);

    ?

    Просто у меня пока не взлетело... Запрос отрабатывает, но в результате добавляет колонку "load_extension(..."
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #866 - 06. Декабря 2016 :: 12:31
    Печать  
    Заработало. Просто выполнил два отдельных запроса. Одним выполнять не хотел.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #867 - 06. Декабря 2016 :: 13:22
    Печать  
    Это 2 отдельных запроса.
    1sqlite не умеет выполнять запросы разделенные ";".
    Вернее так - выполняется только первый!

    upd: На оригинальных сборках работать не будет. В исходниках "РазрешитьЗагрузкуРасширений" есть, но видимо в сборах процедура была исключена, а по-умолчанию в sqlite загрузка расширений запрещена.
    На всех моих сборках работает, начиная с 1.0.2.6/3.7.11 (ближайшей версии к оригинальной).

    З.Ы. модуль еще не оптимизирован, можно прикрутить кеширование компиляции pcre, хотя уже и так довольно шустро работает.
    « Последняя редакция: 06. Декабря 2016 :: 21:03 - Djelf »  
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #868 - 07. Декабря 2016 :: 09:54
    Печать  
    У меня 1.0.2.6/3.7.17, поэтому работает.  Спасибо!!!
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    doaqwh
    YaBB Newbies
    *
    Отсутствует


    1C++ rocks!

    Сообщений: 3
    Зарегистрирован: 07. Декабря 2016
    Re: 1sqlite
    Ответ #869 - 08. Декабря 2016 :: 02:39
    Печать  
    The land is valued for Buy RS 2007 Gold its rich and harvest; it is the land, but it is not food, but the truth. If can only breed of meditation and fantasy, even if again big can only sandy or Yanchi, the above even the grass too long not to come out
    _________________________________________________________
    He who has an art has everywhere a part: Buy Runescape Gold to be along side friends
      
    Наверх
     
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #870 - 27. Января 2017 :: 17:44
    Печать  
    Djelf, не помогают новые сборки с выводом числа 10.0. Добавил реквизит в справочник число 10.0 и при любом варианте запросов, которые ты приводил на мисте http://www.forum.mista.ru/topic.php?id=774403#28

    и cast() не помогает.

    Пробовал разные релизы и 3.8.11, и 3.14, и 3.15. На 3.7.17 понятное дело тоже не работает.

    Релиз вывожу методом sqlite_version().

    запрос простой, вывод этого реквизита всех элементов.

    Просто вывод cast(2222222222 as double) работает нормально.

    Что еще можно попробовать?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #871 - 27. Января 2017 :: 18:36
    Печать  
    А я то, дурачина, проверяю
    Код (SQL)
    Выбрать все
    SELECT -9223372036854775808,9223372036854775807 
    
    

    Сейчас гляну где.

    3.7.х сильно нужна?

    upd1: нашел где, потребуется некоторое время чтобы скорость не пострадала.
    upd2: исправлено в 3.16.2.14 https://cloud.mail.ru/public/9znr/ZJ6ULE9aR скорость вроде не упала.

    В принципе можно раскачать до +18446744073709551615 это больше длины числового поля в справочнике, но это только в 3.16 появилось.
    « Последняя редакция: 27. Января 2017 :: 22:22 - Djelf »  
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #872 - 30. Января 2017 :: 08:46
    Печать  
    Отлично! Спасибо, Djelf! Теперь работает!

    Да, конечно, 3.7 не критично.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #873 - 25. Февраля 2017 :: 20:21
    Печать  
    Экспериментальная версия с возможностью отключения блокировки записи таблиц при запросах в транзакции.
    Боятся ее не стоит, по-умолчанию все работает как раньше.

    Суть в чем, 1sqlite при выполнении запроса и использовании свойства ВыполнятьВТранзакции блокирует используемые таблицы 1С на запись.
    Но мы же ничего туда не пишем! Но уж так 1с и dbeng32 работает.
    Этот механизм удалось обмануть, получился аналог хинта (nolock), Запрос читает в ВыполнятьВТранзакции  медленнее, зато не блокирует запись всем остальным пользователям, а это очень важно при длительных запросах.

    * 1sqlite 3.16.2.15
    + SQLiteBase добавлено свойство LockingMode=<Режим> РежимБлокировки=<Режим>
    <Режим> - метод блокировки таблиц и вызова транзакций, битмаска
    0х00 - по умолчанию, блокировки как в оригинале. блокировка таблиц запроса на запись, транзакции вручную перед запросом;
    0х01 - блокировка на запись не ставится
    0х10 - транзакции автоматически
    т.е.
    0 - по умолчанию, блокировки как в оригинале. блокировка таблиц запроса на запись, транзакции вручную перед запросом;
    1 - блокировка на запись не ставится, транзакции вручную перед запросом;
    2 - ставится блокировка на запись, транзакции принудительно;
    3 - блокировка на запись не ставится, транзакции принудительно;

    Там же https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

    Выглядит это как то так в не монопольном режиме
    SELECT count(*) FROM Регистр_ПартииНаличие

    режим 0
    без транзакции - 29с
    с транзакцией и блокировкой на запись регистра - 1с
    режим 3 - 6с, но запись в таблицы возможна

    6с не идеально, но это плата за компромисс балансировки чтения/записи.

    P.S. рассмотрен один из самых плохих вариантов запроса, на мелких и точечных запросах разница почти не заметна, но все таки есть и в положительную сторону.

    Может стоит добавить и Запросу такое же свойство, чтобы гибко переопределять режим?
    « Последняя редакция: 26. Февраля 2017 :: 20:17 - Djelf »  
    Наверх
    www  
    IP записан
     
    nicesc
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 53
    Зарегистрирован: 13. Июня 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #874 - 27. Февраля 2017 :: 06:17
    Печать  
    Djelf писал(а) 25. Февраля 2017 :: 20:21:
    Экспериментальная версия с возможностью отключения блокировки записи таблиц при запросах в транзакции.

    После установки флага "РежимБлокировки" сбросить его не получается.
    И время выполнения запроса увеличивается.
    Без флага: 0.17
    С флагом 0: 0.17
    при любом флаге > 0: 0.9
    скидываем флаг в 0: 0.9
      
    Наверх
     
    IP записан
     
    nicesc
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 53
    Зарегистрирован: 13. Июня 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #875 - 27. Февраля 2017 :: 07:03
    Печать  
    Потестил новый двиг(3.16.2) на некоторых запросах и пришел к выводу, что он так и не полюбил IN.
    Время работы запроса: 0.897 секунд (3.16.2)
    Время работы запроса: 0.044 секунд (dll 1.0.23 не помню на каком движке)
    приводит к проблемам строка из запроса: $док.Номенклатура in спсНом
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #876 - 27. Февраля 2017 :: 08:28
    Печать  
    1. Сброс флага сделаю.
    Пока сброс пересозданием объекта SQLiteBase.
    Поправил обработку флагов РежимБлокировки
    1sqlite 3.16.2.16 https://cloud.mail.ru/public/9znr/ZJ6ULE9aR
    Режимы 0 и 1 без транзакции по скорости почти не отличаются.
    Я предупреждал что время в транзакции увеличится. Зато нет блокировки. И без вопросов читает "заблокированные" таблицы в которые в этот же момент что-то записывается.
    Важно проверить 3й режим. Не вылезет ли что странное, кроме падения скорости в транзакции.
    Смысл в этом есть. Например у меня есть запрос который выполняется 70с без транзакции и захватывает кучу таблиц. Я же не могу блокировать базу на 70с. А с 3м вариантом я ничего не блокирую, а запрос выполняется за 16с. А монопольно 13с.

    2. in отключается плюсом это не большая проблема
    $док.Номенклатура in спсНом это ПрямойЗапрос? в нем +$док кажется
    А в чем проблема? Вроде только замедления могут быть при большом размере списка.
    Все это потому что при попадании в индекс по in идет сканирование таблицы столько раз сколько элементов в списке.
    За это я in и не люблю, он коварный Подмигивание
    « Последняя редакция: 27. Февраля 2017 :: 19:11 - Djelf »  
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #877 - 28. Февраля 2017 :: 08:09
    Печать  
    Эх... фокус не получился ;(
    В некоторых случаях лезет codebase 110 unlocking files
    Попробую изолировать
      
    Наверх
    www  
    IP записан
     
    trad
    1c++ power user
    1c++ donor
    1c++ moderator
    Отсутствует



    Сообщений: 3046
    Местоположение: Киров
    Зарегистрирован: 23. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #878 - 28. Февраля 2017 :: 08:31
    Печать  
    факир был пьян и фокус не удался ))
      

    1&&2&&3
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #879 - 28. Февраля 2017 :: 11:07
    Печать  
    trad писал(а) 28. Февраля 2017 :: 08:31:
    факир был пьян и фокус не удался ))

    не, не, не...  последовательность действий была обратная Подмигивание

    Как бы тест понадежнее нарисовать...
    Сейчас в одной сессии молотится на запись справочник партии в пакетах транзакций, в другой запрос из справочника в 3м режиме - ошибки нет
    В каком сочетании условий 210 выскочила не понятно стало понятно.
    Со справочниками все ок, таблицы документов и журнал как то по другому блокируются. Видимо, несмотря на снятие флага, блок ставится, причем на часть файла, а вот при снятии блока идет учет флага и ой все...
    Откатил до 3.6.2.14, но пока не отказываюсь от идеи (слишком вкусно) эксперимент продолжаются.
    « Последняя редакция: 28. Февраля 2017 :: 19:29 - Djelf »  
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #880 - 02. Марта 2017 :: 13:35
    Печать  
    Интересно, а можно будет доработать 1sqlite добавлением метода УложитьИТЗ или доработкой метода УложитьОбъекты, чтобы первым параметром принимала не только СписокЗначений, но и ИТЗ?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #881 - 02. Марта 2017 :: 18:39
    Печать  
    alyuev писал(а) 02. Марта 2017 :: 13:35:
    Интересно, а можно будет доработать 1sqlite добавлением метода УложитьИТЗ или доработкой метода УложитьОбъекты, чтобы первым параметром принимала не только СписокЗначений, но и ИТЗ?

    Ты же сам знаешь, сделать можно все. Это только вопрос времени.
    Мне вообще хочется избавится от выгрузки/укладки чтобы писать в стиле
    select * from [ТаблицаЗначений.ТабКонтекста]
    В sqlite такое можно сделать.
    Но вот как нормально работать с id4/9/13/23 в таких запросах я пока не понимаю/не придумал.

      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #882 - 28. Апреля 2017 :: 14:23
    Печать  
    Djilf, можешь подсказать на счет использования IN в запросе:

    Код (SQL)
    Выбрать все
    Select
     StatS.Partner As [Клиент:Справочник.Клиенты]
    From
     (Select
      Рег.Поставщик As Partner
     From
      Регистр_ОборотыСпец As Рег
     Where
      Date between '20161201' And '20161231'
     Group by Partner) As StatS
    Where
     StatS.Partner In (
      Select
       Substr(Клиент_,5)
      From
       (Select
        ПН.Клиент As Клиент_,
        Дог.ПериодСчетов As Период
       From
        __1S_CRDOC As Отбор
       Inner Join
        Журнал on Журнал.IDDOC = Отбор.ChildID
       Inner Join
        Документ_ПриходнаяНакладная As ПН on ПН.IDDOC = Журнал.IDDOC
       Left Join
        Документ_Договор As Дог On Substr(ПН.Заказ,5)=Дог.IDDOC
       Where
        MDID=:ГрафаОтбора.КлиентПриходных
        And PARENTVAL = 'B1' || :ВидСправочника.Клиенты || StatS.Partner
        And Журнал.iddocdef=:ВидДокумента.ПриходнаяНакладная
        And Журнал.Closed = 1
        And ПН.Направление=:БазНапр
       Order by Отбор.Idx_MDID_PARENTVAL_CHILDDATE_CHILDTIME_CHILDID desc--последний договор партнёра
       Limit 1) As АктуальныйДоговор
      Where
       АктуальныйДоговор.Период=2
      )
    Order by Cli.Descr 
    
    


    Если выполнить отдельный подзапрос, тот, что в IN (начинается с StatS.Partner In ), он выполняется, скажем, за 7 секунд для одного клиента. А вот когда запустить весь запрос, то время выполнения похоже начинает исчисляться часами.

    Это стало актуально после перехода на последнюю твою версию 3.16.2. До этого данный запрос работал на версии с sqlite 3.7.17 - и весь запрос целиком выполнялся приблизительно за минуту.

    Что-то изменилось в поведении IN в запросе?

    Если в этом запросе IN заменить на = (т.к. там Limit 1 используется), то ничего не меняется.....
    « Последняя редакция: 28. Апреля 2017 :: 19:30 - alyuev »  

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #883 - 28. Апреля 2017 :: 15:34
    Печать  
    Попробуй заменить where StatS.Partner In (
    на where +StatS.Partner In (
    По Partner же есть отбор?

    Предполагаю что дурной план генерится. Т.е. для каждой строки в "in (select" выбираются записи из StatS, а limit может не помогать, а ломать мозх оптимизатору пункт 10 в http://translate.google.ru/translate?u=https%3A//sqlite.org/optoverview.html&hl=... и это уже совсем другая причина и другой план запроса.

    А запрос в in отдельно сколько времени занимает?
    Там же    Inner Join Журнал on Журнал.IDDOC = Отбор.ChildID
    Тут sqlite может сначала просканировать весь журнал, и только потом отборами занятся.
    План надо смотреть, последовательно выборки из таблиц....

    А на журнал почему нет ограничения по дате? Ты же клеишь к  Регистр_ОборотыСпец, а на него есть ограничение. Вроде как не должно ничего пропасть если и на журнал по дате фильтр поставить.

    И с индексами надо осторожно, сама 1с тоже этим страдает, например
    Остаток      = Регистр.ПартииНаличие.СводныйОстаток(Фирма,,Товар,,Партия,,,0,"Количество");
    Тормозит адски, а без партии и фирмы все отлично.
    Если перевести это в sqlite тоже самое будет, поэтому я +`ами подавляю лишние индексы чтобы попасть на короткий PERIOD,SP331(Номенклатура) и запрос получается раз в 10-100 быстрее.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #884 - 04. Мая 2017 :: 19:56
    Печать  
    Кратко:

    Помог + здесь:
    Код (SQL)
    Выбрать все
    And +Журнал.iddocdef=:ВидДокумента.ПриходнаяНакладная 
    
    


    Подробно:

    В запросе выше пропущена строка после As StatS
    Код (SQL)
    Выбрать все
    Inner Join Справочник_Клиенты As Cli On Cli.ID = StatS.Partner 
    
    

    Отбора нет, партнёры выбираются из регистра и передаются в подзапрос в IN

    план на старой библиотеке
    Explain Query Plan:
                     Selectid
                     
                     Order
                     
                     From
                     
                     Detail
                     
                     1
                     
                     SCAN TABLE Регистр_ОборотыСпец AS Рег VIRTUAL TABLE INDEX 1:DATETIME; 14 !&quot; 0?b 6O?!%k8 (~0 rows)
                     
                     1
                     
                     USE TEMP B-TREE FOR GROUP BY
                     
                     SCAN SUBQUERY 1 AS StatS (~50 rows)
                     
                     EXECUTE CORRELATED LIST SUBQUERY 2
                     
                     3
                     
                     0
                     
                     SCAN TABLE __1S_CRDOC AS Отбор VIRTUAL TABLE INDEX 1:PARENT; 13 !&quot; 0p .!%?dj?, ! (~0 rows)
                     
                     3
                     
                     1
                     
                     1
                     
                     SCAN TABLE Журнал VIRTUAL TABLE INDEX 0:IDDOC; 20 ! 0p nHy$40D &quot;&#39;(A @, Q (~0 rows)
                     
                     3
                     
                     2
                     
                     2
                     
                     SCAN TABLE Документ_ПриходнаяНакладная AS ПН VIRTUAL TABLE INDEX 0:ID; 15 ! 0p nHy$40?# Q 2 ` ` (~0 rows)
                     
                     3
                     
                     3
                     
                     3
                     
                     SCAN TABLE Документ_Договор AS Дог VIRTUAL TABLE INDEX 0:ID; 10 ! 0p nHyd! kM (~0 rows)
                     
                     2
                     
                     SCAN SUBQUERY 3 AS АктуальныйДоговор (~1 rows)
                     
                     1
                     
                     1
                     
                     SCAN TABLE Справочник_Клиенты AS Cli VIRTUAL TABLE INDEX 0:IDD; 10 ! 0p nHyd!0?) Q (~0 rows)
                     
                     USE TEMP B-TREE FOR ORDER BY
                     

    план на новой библиотеке
    Explain Query Plan:
                     Selectid
                     
                     Order
                     
                     From
                     
                     Detail
                     
                     1
                     
                     SCAN TABLE Регистр_ОборотыСпец AS Рег VIRTUAL TABLE INDEX 1:DATETIME; 14 !&quot; 0
                     
                     1
                     
                     USE TEMP B-TREE FOR GROUP BY
                     
                     SCAN SUBQUERY 1 AS StatS
                     
                     EXECUTE CORRELATED LIST SUBQUERY 2
                     
                     3
                     
                     0
                     
                     1
                     
                     SCAN TABLE Журнал VIRTUAL TABLE INDEX 3:DOCTYPE; 15 !&amp; 0p nHy(&lt;@$! Q (A @,`Y
                     
                     3
                     
                     1
                     
                     SCAN TABLE __1S_CRDOC AS Отбор VIRTUAL TABLE INDEX 0:CHILD; 16 ! 0p .!%
                     
                     3
                     
                     2
                     
                     2
                     
                     SCAN TABLE Документ_ПриходнаяНакладная AS ПН VIRTUAL TABLE INDEX 0:ID; 15 ! 0p nHy$40
                     
                     3
                     
                     3
                     
                     3
                     
                     SCAN TABLE Документ_Договор AS Дог VIRTUAL TABLE INDEX 0:ID; 10 ! 0p nHyd!0
                     
                     3
                     
                     USE TEMP B-TREE FOR ORDER BY
                     
                     2
                     
                     SCAN SUBQUERY 3 AS АктуальныйДоговор
                     
                     1
                     
                     1
                     
                     SCAN TABLE Справочник_Клиенты AS Cli VIRTUAL TABLE INDEX 0:IDD; 10 ! 0p nHyd! %k8
                     
                     USE TEMP B-TREE FOR ORDER BY
                     


    И таки да, видно, что изменился порядок опроса таблиц:
    Сначала первой шла таблица отборов по индексу графы отбора КлиентПриходных, затем журнал,
    а теперь сначала журнал по виду документа, затем отборы
    соответственно запрос по одному клиенту

    Код (SQL)
    Выбрать все
    Select
    	ПН.Клиент As Клиент_,
    	Дог.ПериодСчетов As Период
    From
    	__1S_CRDOC As Отбор
    Inner Join
    	Журнал on Журнал.IDDOC = Отбор.ChildID
    Inner Join
    	Документ_ПриходнаяНакладная As ПН on ПН.IDDOC = Журнал.IDDOC
    Left Join
    	Документ_Договор As Дог On Substr(ПН.Заказ,5)=Дог.IDDOC
    Where
    	MDID=:ГрафаОтбора.КлиентПриходных
    	And PARENTVAL = 'B1' || :ВидСправочника.Клиенты || :Клиент
    	And Журнал.iddocdef=:ВидДокумента.ПриходнаяНакладная
    	And Журнал.Closed = 1
    	And ПН.Направление=:БазНапр
    Order by Отбор.Idx_MDID_PARENTVAL_CHILDDATE_CHILDTIME_CHILDID desc--последний договор партнёра
    Limit 1
     
    
    


    отрабатывает 0,1 – 0,2 сек на старой библиотеке и ~ 7 сек на новой
    на журнал нет ограничений по дате т.к. ищем последний документ в журнале неважно когда он был и из него берём Заказ
    Можно ли как-то явно указать какой индекс использовать первым без плюсов ?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #885 - 04. Мая 2017 :: 20:35
    Печать  
    Пробовал в условие внутреннего Select-а написать типа
    Код (SQL)
    Выбрать все
    And Отбор.Idx_MDID_PARENTVAL_CHILDDATE_CHILDTIME_CHILDID Between :ГрафаОтбора.КлиентПриходных || 'B1' || :ВидСправочника.Клиенты || :Клиент And :ГрафаОтбора.КлиентПриходных || 'B1' || :ВидСправочника.Клиенты || :Клиент || 'z' 
    
    

    Скорость одиночного запроса увеличивалась с 7-и сек до 1, но это всё равно не 0.1 и общий запрос зависает
    Еще вопрос где описано как читать планы, особенно Explain без Query Plan ?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #886 - 05. Мая 2017 :: 10:13
    Печать  
    alyuev писал(а) 04. Мая 2017 :: 19:56:
    отрабатывает 0,1 – 0,2 сек на старой библиотеке и ~ 7 сек на новой
    на журнал нет ограничений по дате т.к. ищем последний документ в журнале неважно когда он был и из него берём Заказ
    Можно ли как-то явно указать какой индекс использовать первым без плюсов ?


    Ограничение, я об этом писал, мешает оптимизатору.

    Хинт для sqlite: select max(дата), договор выдаст последний договор. На оригинальных версиях 1sqlite работать не будет т.к. добавлено в 3.7.11, а в 1.0.2.6 - 3.7.10.
    Так можно попасть на индекс ACDATETIME - будет быстрее. Можно и в DOCTYPE целиком попасть - совсем хорошо будет.
    На mysql так не работает, был опечален...

    Для баз sqlite можно указать индекс с помощью indexed by, а вот для виртуальных таблиц нет. sqlite вообще ничего не знает об их индексах. В вт подаются предположения, а вт уже сама принимает решение. Так что управлять можно только подавлением предположений использования индекса. Или указывать составной idx_ЧтоТоТам, но это не всегда получается удачно.

    Описание вывода explain https://sqlite.org/vdbe.html
    « Последняя редакция: 05. Мая 2017 :: 12:59 - Djelf »  
    Наверх
    www  
    IP записан
     
    Sserj
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 77
    Зарегистрирован: 25. Октября 2010
    Re: 1sqlite
    Ответ #887 - 01. Июня 2017 :: 04:23
    Печать  
    Решил таки освоит CTE, использую 1sqlite_3.16.2.14
    И вот тут никак не могу перебороть сортировку.
    Вот запрос:

    WITH cte (element, Parent, level, fullName)
    AS (
         SELECT ID, PARENTID, 0, trim(DESCR)
         FROM [Справочник.Города] as City
         WHERE PARENTID = :ПустойИД
         UNION ALL
         SELECT ID, PARENTID, t.level + 1, t.fullName || '\' || trim(DESCR)
         FROM [Справочник.Города] as Next
         INNER JOIN cte t
         ON t.element = Next.PARENTID
         )
    SELECT
         element [Элемент :Справочник.Города]
         , Parent [Родитель :Справочник.Города]
         , level [Уровень :Число.15.0]
         , fullName
    FROM
         cte      
    ORDER BY
         fullName collate _1C

    Но почему он упорно сортирует вот так:

    Администрация\Администрация
    Администрация
    Братск
    Иркутская область\Ангарск\Ангарск
    Иркутская область\Ангарск
    ........
    Иркутская область\Тулун\Тулун
    Иркутская область\Тулун
    Иркутская область\Усолье-Сибирское, Черемхово\Усолье-Сибирское
    Иркутская область\Усолье-Сибирское, Черемхово\Черемхово
    Иркутская область\Усолье-Сибирское, Черемхово
    Иркутская область\УстьИлимск\УстьИлимск
    Иркутская область\УстьИлимск
    Иркутская область

    т.е. чем короче строка тем она ниже.

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


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #888 - 01. Июня 2017 :: 12:09
    Печать  
    Sserj писал(а) 01. Июня 2017 :: 04:23:
    t.fullName || '\' || trim(DESCR)


    t.fullName || ISFOLDER || DESCR

    никаких trim`ов

    пример дерева на cte https://cloud.mail.ru/public/uQLv/QQkBGQxSu
      
    Наверх
    www  
    IP записан
     
    Sserj
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 77
    Зарегистрирован: 25. Октября 2010
    Re: 1sqlite
    Ответ #889 - 01. Июня 2017 :: 13:28
    Печать  
    Djelf писал(а) 01. Июня 2017 :: 12:09:
    Sserj писал(а) 01. Июня 2017 :: 04:23:
    t.fullName || '\' || trim(DESCR)


    t.fullName || ISFOLDER || DESCR

    никаких trim`ов

    пример дерева на cte https://cloud.mail.ru/public/uQLv/QQkBGQxSu


    Да это понятно, в данном случае я просто смотрел будет ли это быстрее чем ПолноеНаименование().
    Но ведь это все равно не объясняет такую сортировку.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #890 - 01. Июня 2017 :: 16:55
    Печать  
    Sserj писал(а) 01. Июня 2017 :: 13:28:
    Да это понятно, в данном случае я просто смотрел будет ли это быстрее чем ПолноеНаименование().
    Но ведь это все равно не объясняет такую сортировку.


    Было бы быстрее наверное, но не получится.
    trim там все портит, и как разделитель '\' не очень хорошо, он позже пробела
    Голову сломал как бы выкрутится так чтобы не городить такие длинные строки.

    Но действительно очень странно, видимо глюк в sqlite.

    Если убрать collate _1c то нормальная сортировка.
    Если перенести order by внутрь cte то что с collate, что без него все нормально.

    Только если order by collate _1c снаружи cte.

      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #891 - 04. Июня 2017 :: 16:11
    Печать  
    Все чудесатее и чудесатее... Вот так работает сортировка снаружи cte
    ORDER BY cast(fullName as blob)  collate _1c
      
    Наверх
    www  
    IP записан
     
    Andrey (sttt)
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 49
    Зарегистрирован: 10. Января 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #892 - 25. Июля 2017 :: 09:22
    Печать  
    Djelf писал(а) 27. Января 2017 :: 18:36:
    А я то, дурачина, проверяю
    Код (SQL)
    Выбрать все
    SELECT -9223372036854775808,9223372036854775807 
    
    

    Сейчас гляну где.

    3.7.х сильно нужна?

    upd1: нашел где, потребуется некоторое время чтобы скорость не пострадала.
    upd2: исправлено в 3.16.2.14 https://cloud.mail.ru/public/9znr/ZJ6ULE9aR скорость вроде не упала.

    В принципе можно раскачать до +18446744073709551615 это больше длины числового поля в справочнике, но это только в 3.16 появилось.


    где скачать последнюю версию?
      
    Наверх
     
    IP записан
     
    Andrey (sttt)
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 49
    Зарегистрирован: 10. Января 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #893 - 25. Июля 2017 :: 10:18
    Печать  
    Что делаю не так?
    Сообщить("Кол=" + запрос.ВыполнитьЗапрос("
    {обработка.ERT(317)}: no such table: Справочник.Номенклатура

    Пример выполняю из документации:
         база.Открыть(":memory:");
         // Создадим выполнитель запросов.
         запрос = база.НовыйЗапрос();
         // Так как база в памяти, то журналирование нам ни к чему, только зря будет отнимать время
         запрос.ВыполнитьЗапрос("PRAGMA journal_mode = OFF");
         // Подключим таблицу справочника товаров к SQLite
         //запрос.ВыполнитьЗапрос("create virtual table Товары using dbeng(Справочник.Номенклатура)");
         //запрос.ВыполнитьЗапрос("create virtual table Nom using dbeng(Справочник.Номенклатура)");
         // А теперь посчитаем, сколько у нас в справочнике элементов, без учета групп
         Сообщить("Кол=" + запрос.ВыполнитьЗапрос("
         |select count(*)
         |from Справочник.Номенклатура as prod
         |where prod.isfolder = 2
         |").ПолучитьЗначение(1, 1));

    и в квадратных скобках выполнял [Справочник.Номенклатура] и так sc84
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #894 - 25. Июля 2017 :: 10:20
    Печать  
    Andrey (sttt) писал(а) 25. Июля 2017 :: 09:22:
    где скачать последнюю версию?

    там же https://cloud.mail.ru/public/9znr/ZJ6ULE9aR
    новее 3.6.2.14 пока не собирал
      
    Наверх
    www  
    IP записан
     
    Andrey (sttt)
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 49
    Зарегистрирован: 10. Января 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #895 - 26. Июля 2017 :: 08:55
    Печать  
    Спасибо, все заработало
      
    Наверх
     
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #896 - 25. Октября 2017 :: 13:34
    Печать  
    Кто-то использует метод ПолучитьТекстЗапроса()? Он вообще работает?
    У меня ошибку выдает.

    Почему спрашиваю - хочу получить все элементы, которые будут отбражаться в ТабличномПоле, а провайдер для него установлен SQLiteDataProvider (в классе ПоставщикДанных). И как я понимаю - получить этот список можно выполнив запрос, который был передан SQLiteDataProvider



    А... блин... Семен-Семеныч..... Надо-таки документацию читать.... Там черным по белом написано... Есть параметр....
    « Последняя редакция: 25. Октября 2017 :: 14:43 - alyuev »  

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #897 - 03. Ноября 2017 :: 12:42
    Печать  
    Добрый день.
    Подскажите как сделать запрос.
    Есть подчиненный справочник. В нем нужно сделать выборку всех значений с указанием в колонке текстового значения справочника владельца (чтобы у каждой позиции можно было увидеть какому значению справочника владельца она принадлежит.
    Спасибо.
      
    Наверх
     
    IP записан
     
    nicesc
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 53
    Зарегистрирован: 13. Июня 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #898 - 03. Ноября 2017 :: 15:41
    Печать  
    SELECT
      ParentExt [Владелец :Справочник.НазваниеСправочникаВладельца]
    , id [Элемент :Справочник.НазваниеПодчСправочника]
    FROM
      Справочник_НазваниеПодчСправочника
      
    Наверх
     
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #899 - 03. Ноября 2017 :: 16:44
    Печать  
    Спасибо большое
      
    Наверх
     
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #900 - 29. Ноября 2017 :: 10:40
    Печать  
    Добрый день.
    Делаю запрос с УложитьТЗ()
    В результирующей таблице везде в начале в строках стоит символ "S"
    Как избавиться от него?
      
    Наверх
     
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #901 - 29. Ноября 2017 :: 12:32
    Печать  
    Появился новый вопрос. Есть таблица значений и есть Список значений. Можно ли сделать запрос через уложитьТЗ(), чтобы в результате его работы в таблице значений остались только те строки, по которым сделан отбор из Списка значений . надеюсь понятно объяснил.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #902 - 29. Ноября 2017 :: 15:13
    Печать  
    Grey77 писал(а) 29. Ноября 2017 :: 10:40:
    Добрый день.
    Делаю запрос с УложитьТЗ()
    В результирующей таблице везде в начале в строках стоит символ "S"
    Как избавиться от него?


    Префикс в строках в базе sqlite при УложитьТЗ из-да отсутствия типизации.
    Это тип 1С - :Неопределенный

    Избавится можно двумя способами
    1. Типизировать колонки ТЗ, тогда в таблицу sqlite будут загружены без префикса.
    2. Типизировать в запросе select val [val :Неопределенный]

      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #903 - 29. Ноября 2017 :: 15:16
    Печать  
    Grey77 писал(а) 29. Ноября 2017 :: 12:32:
    Появился новый вопрос. Есть таблица значений и есть Список значений. Можно ли сделать запрос через уложитьТЗ(), чтобы в результате его работы в таблице значений остались только те строки, по которым сделан отбор из Списка значений . надеюсь понятно объяснил.


    можно:

    ТЗ в базу командой УложитьТЗ в тмпТЗ
    СЗ в базу командой УложитьОбъекты в тмпСЗ

    имеем две таблицы в базе sqlite и делаем с ними все что позволяет sql и на что хватит фантазии
      
    Наверх
    www  
    IP записан
     
    zar
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 82
    Местоположение: Киров
    Зарегистрирован: 17. Августа 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #904 - 29. Ноября 2017 :: 15:37
    Печать  
    Grey77 писал(а) 29. Ноября 2017 :: 12:32:
    Появился новый вопрос. Есть таблица значений и есть Список значений. Можно ли сделать запрос через уложитьТЗ(), чтобы в результате его работы в таблице значений остались только те строки, по которым сделан отбор из Списка значений . надеюсь понятно объяснил.


    Еще как вариант фильтрацию таблицы значений сделать через объект ИндексированнаяТаблица. Но это уже от задачи надо смотреть - возможно для нее вариант, предложенный Djelf более оптимален.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #905 - 29. Ноября 2017 :: 17:27
    Печать  
    zar писал(а) 29. Ноября 2017 :: 15:37:
    Еще как вариант фильтрацию таблицы значений сделать через объект ИндексированнаяТаблица. Но это уже от задачи надо смотреть - возможно для нее вариант, предложенный Djelf более оптимален.

    На небольшом объеме и простых операциях между таблицами ИТ будет быстрее, 1sqlite силен тем, что без особых усилий пережевывает базу в несколько Gb и даже больше...
      
    Наверх
    www  
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #906 - 30. Ноября 2017 :: 06:08
    Печать  
    можно:
    ТЗ в базу командой УложитьТЗ в тмпТЗ
    СЗ в базу командой УложитьОбъекты в тмпСЗ
    имеем две таблицы в базе sqlite и делаем с ними все что позволяет sql и на что хватит фантазии [/quote]


    Если не сложно можно сделать любой пример, чтобы понимать как использовать "фантазию"  Круглые глаза
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #907 - 30. Ноября 2017 :: 08:39
    Печать  
    Grey77 писал(а) 30. Ноября 2017 :: 06:08:
    можно:
    ТЗ в базу командой УложитьТЗ в тмпТЗ
    СЗ в базу командой УложитьОбъекты в тмпСЗ
    имеем две таблицы в базе sqlite и делаем с ними все что позволяет sql и на что хватит фантазии


    Если не сложно можно сделать любой пример, чтобы понимать как использовать "фантазию"  Круглые глаза

    Хм... Какая же она фантазия после примеров?

    Ладно. Есть tmpT из ТЗ и tmpС из СЗ, val в обоих случаях элемент Справочник.Номенклатура.
    Выбрать из tmpT строки содержащиеся в tmpС

    select  tmpT.val [Номенклатура :Справочник.Номенклатура]
    from tmpT WHERE tmpT.val IN (select val from tmpС);
         
    либо
    delete  from tmpT  WHERE tmpT.val NOT IN (select val from tmpС);
    select  tmpT.val [Номенклатура :Справочник.Номенклатура] from tmpT;

    либо джойнами... вариантов решения одного и того же в sql много

      
    Наверх
    www  
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #908 - 30. Ноября 2017 :: 14:28
    Печать  
    Спасибо огромное.
    Еще есть одна просьба. Нужен запрос, который бы смог найти в справочнике номенклатура одинаковые товары по полному наименованию и вывести их в таблицу значений. Если не трудно напишите как?
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #909 - 30. Ноября 2017 :: 15:42
    Печать  
    Grey77 писал(а) 30. Ноября 2017 :: 14:28:
    Спасибо огромное.
    Еще есть одна просьба. Нужен запрос, который бы смог найти в справочнике номенклатура одинаковые товары по полному наименованию и вывести их в таблицу значений. Если не трудно напишите как?


    Это слишком просто

    SELECT
         Спр.ID [Номенклатура $Справочник.Номенклатура]
    FROM Справочник_Номенклатура AS Спр
    WHERE Спр.DESCR IN
    (
    SELECT
         DESCR
    FROM Справочник_Номенклатура
    GROUP BY DESCR
    HAVING COUNT(DESCR)>1
    )
      
    Наверх
    www  
    IP записан
     
    nicesc
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 53
    Зарегистрирован: 13. Июня 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #910 - 01. Декабря 2017 :: 07:59
    Печать  
    Можно без подзапроса, лайт такое ест )

    SELECT
      MAX(спрНом.id) [Номенклатура $Справочник.Номенклатура]
    FROM
      Справочник_Номенклатура as спрНом
    GROUP BY      спрНом.Descr
    HAVING Count(спрНом.Descr) > 1
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #911 - 01. Декабря 2017 :: 08:16
    Печать  
    nicesc писал(а) 01. Декабря 2017 :: 07:59:
    Можно без подзапроса, лайт такое ест )

    В этом случае у тебя не список всех дубликатов, а список каких то из них.

    Ну уж если подзапросы не нравятся то вот так

    SELECT DISTINCT
      Спр1.id [Номенклатура $Справочник.Номенклатура]
    FROM  Справочник_Номенклатура as Спр1
    LEFT JOIN Справочник_Номенклатура as Спр2 ON Спр1.DESCR=Спр2.DESCR
    WHERE Спр1.id <> Спр2.id

    Хотя какая разница... оптимизатор все равно план выполнения по своему переделает Подмигивание
      
    Наверх
    www  
    IP записан
     
    nicesc
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 53
    Зарегистрирован: 13. Июня 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #912 - 01. Декабря 2017 :: 08:50
    Печать  
    Djelf писал(а) 01. Декабря 2017 :: 08:16:
    nicesc писал(а) 01. Декабря 2017 :: 07:59:
    Можно без подзапроса, лайт такое ест )

    В этом случае у тебя не список всех дубликатов, а список каких то из них.


    Точно, вернет не все  Улыбка
      
    Наверх
     
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #913 - 03. Декабря 2017 :: 11:53
    Печать  
    Djelf писал(а) 19. Ноября 2016 :: 16:28:
    Наоборот надо. Сначала выбираем цены по типу, потом к ним клеим константы. Благодаря тому что sqlite умеет GROUP BY sort цена будет выбрана из нужной строки. Ну а потом если нужна номенклатура без цен клеим ее union`ом. Если нужны 2 колонки с ценами то либо case, либо 2 запроса с union. tmpНоменклатура - список значений выгруженный во временную таблицу.

    Пример:
    Код
    Выбрать все
    SELECT
    max(Константы.DATE||Константы.TIME)
    ,Цены.PARENTEXT [Номенклатура $Справочник.Номенклатура]
    ,Цены.ТипЦен [ТипЦен $Справочник.ТипыЦен]
    ,Константы.VALUE [Цена $Число]
    
    FROM  Справочник_Цены AS Цены
    LEFT JOIN [_1S.Const] AS Константы
    	ON Цены.ID=Константы.OBJID
    	AND Константы.ID=:ИсторияРеквизита.Цены.Цена
    	AND Константы.DATE<=:НачДата
    WHERE Цены.ТипЦен = :Цена1 OR Цены.ТипЦен = :Цена2
     AND Цены.PARENTEXT IN (SELECT val FROM tmpНоменклатура)
    GROUP by Цены.ТипЦен,Цены.PARENTEXT
    HAVING Константы.VALUE NOTNULL
     
    
    



    День добрый. Пробовал сделать данный запрос в ТИС, но ничего не получилось. Если Вам не сложно, прошу выложить файл с данной обработкой, чтобы можно было в живую посмотреть работу. Если нужно, то готов оплатить такую работу.
      
    Наверх
     
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #914 - 03. Декабря 2017 :: 11:58
    Печать  
    А если еще вместе с этим запросом можно сделать с расчетом остатков, то это будет просто сказка
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #915 - 03. Декабря 2017 :: 13:51
    Печать  
    Grey77 писал(а) 03. Декабря 2017 :: 11:53:
    WHERE Цены.ТипЦен = :Цена1 OR Цены.ТипЦен = :Цена2
    AND Цены.PARENTEXT IN (SELECT val FROM tmpНоменклатура)


    Может все таки так должно быть?

    WHERE (Цены.ТипЦен = :Цена1 OR Цены.ТипЦен = :Цена2)
    AND Цены.PARENTEXT IN (SELECT val FROM tmpНоменклатура)

    В остальном вроде все в порядке.

      
    Наверх
    www  
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #916 - 03. Декабря 2017 :: 14:51
    Печать  
    Djelf писал(а) 03. Декабря 2017 :: 13:51:
    Grey77 писал(а) 03. Декабря 2017 :: 11:53:
    WHERE Цены.ТипЦен = :Цена1 OR Цены.ТипЦен = :Цена2
    AND Цены.PARENTEXT IN (SELECT val FROM tmpНоменклатура)


    Может все таки так должно быть?

    WHERE (Цены.ТипЦен = :Цена1 OR Цены.ТипЦен = :Цена2)
    AND Цены.PARENTEXT IN (SELECT val FROM tmpНоменклатура)

    В остальном вроде все в порядке.


    Очень прошу. Если не сложно в виде внешней обработки. Плачущий
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #917 - 03. Декабря 2017 :: 16:18
    Печать  
    Grey77 писал(а) 03. Декабря 2017 :: 14:51:
    Очень прошу. Если не сложно в виде внешней обработки. Плачущий


    Что не работает то?

    P.S. Ну совсем все обленились Смех
    тут обработка https://cloud.mail.ru/public/M94W/xuUqxQ7ke
      
    Наверх
    www  
    IP записан
     
    Grey77
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 23
    Зарегистрирован: 22. Мая 2012
    Re: 1sqlite
    Ответ #918 - 04. Декабря 2017 :: 04:03
    Печать  
    Что не работает то?

    P.S. Ну совсем все обленились Смех
    тут обработка https://cloud.mail.ru/public/M94W/xuUqxQ7ke [/quote]

    Спасибо за обработку. Все работает. Хотелось, чтобы позиция товара была одна, а цены были каждая в своей колонке.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #919 - 05. Марта 2018 :: 16:17
    Печать  
    Надоело вылетать при закрытии обработки с ТабличнымиПолями на SQLiteDataProvider. Стал копаться. Оказалось что база закрывается до того как будут уничтожены все Поставщики и подготовленные запросы.

    На уровне 1sqlite не решил, возможно найду как обойти...

    Но, пока копался, обновил движок sqlite до 3.22.0 и слегка изменил 1sqlite.

    Изменение в 1sqlite такое:

    1. База.Закрыть() теперь не процедура, а функция и возвращает 1 в случае успешного закрытия или 0 в том случае если не закрыты ПоставщикиДанных или подготовленные запросы.

    2. Зачем это? А затем что База.Открыта() вернет 0 т.к. База.Закрыть() не проверяет закрылась ли она. Поведение База.Открыта() не менял.
    Возможно стоит изменить поведение База.Открыта() , но из-за совместности с оригинальной версией оно не менялось.
    И когда база закрылась, sqlite очищает wal и shm файлы, а без этого они распухают, и это не есть хорошо.

    3. База.Закрыть(ВариантЗакрытия) принимает параметр ВариантЗакрытия 1 (по умолчанию, как и раньше) или 2 и закрывает базу в соответствии с https://www.sqlite.org/c3ref/close.html
    Параметр 2 скорее для отладки - с ним падает на ТабличномПоле стабильнее, но возможно пригодится в каких-то случаях.

    ВК, как всегда, тут: https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

    А для удаления Поставщиков в ПриЗакрытии(), чтобы не падало, работает такой код:
    Код
    Выбрать все
    Процедура УдалитьПостащиков()
    
    	Таблица		= СоздатьОбъект("ИндексированнаяТаблица");
    	Поставщик	= СоздатьОбъект("ПоставщикДанныхИТ");
    	Поставщик.ИндексированнаяТаблица = Таблица;
    
    	Информатор=СоздатьОбъект("Информатор");
    	Свойства=Информатор.ПолучитьТаблицуСвойств(Контекст);
    	Свойства.ВыбратьСтроки();
    	Пока Свойства.ПолучитьСтроку() = 1 Цикл
    		Переменная="";
    		Сервис.ПолучитьПеременнуюКонтекста(Контекст,Свойства.NameEng,Переменная);
    		Если ТипЗначенияСтр(Переменная)="ТабличноеПоле" Тогда
    			Переменная.ПоставщикДанных = Поставщик;
    			Переменная.ОбновитьСтроки();
    			Переменная = "";
    		КонецЕсли;
    	КонецЦикла;
    
    КонецПроцедуры
     
    
    
    « Последняя редакция: 06. Марта 2018 :: 14:37 - Djelf »  
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #920 - 06. Марта 2018 :: 11:19
    Печать  
    Спасибо! Попробуем...
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #921 - 06. Марта 2018 :: 11:23
    Печать  
    Явные преимущества в новом движке выявил? По сравнению с движком в предыдущем релизе 1sqlite.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #922 - 06. Марта 2018 :: 12:05
    Печать  
    alyuev писал(а) 06. Марта 2018 :: 11:23:
    Явные преимущества в новом движке выявил? По сравнению с движком в предыдущем релизе 1sqlite.


    Скорость не сильно изменилась http://sqlite.org/cpu.html#microopt
    Вот 3.18 что-то не то с планом запросов к 1С делал, а этот нормальный.
    В любом случае какие то баги в запросах все чинят и чинят...
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #923 - 06. Марта 2018 :: 12:10
    Печать  
    Я увидел еще одну возможность, о которой не знал:

    https://www.sqlite.org/csv.html

    Но там нужна библиотека, она есть в исходниках: https://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/csv.c

    Ты бы не мог её скомпилить и выложить?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #924 - 06. Марта 2018 :: 13:14
    Печать  
    alyuev писал(а) 06. Марта 2018 :: 12:10:
    Я увидел еще одну возможность, о которой не знал:

    https://www.sqlite.org/csv.html

    Но там нужна библиотека, она есть в исходниках: https://www.sqlite.org/src/artifact?ci=trunk&filename=ext/misc/csv.c

    Ты бы не мог её скомпилить и выложить?


    Отсюда возьми дополнения http://www.ch-werner.de/sqliteodbc/
    После установки dll`ки расширений можно забрать из "c:\Program Files (x86)\SQLite ODBC Driver"
    Там не только csv, там даже sqlite+tcc - можно свои функции рисовать.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #925 - 06. Марта 2018 :: 15:42
    Печать  
    Спасибо. А родную не получится собрать?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #926 - 06. Марта 2018 :: 16:15
    Печать  
    alyuev писал(а) 06. Марта 2018 :: 15:42:
    Спасибо. А родную не получится собрать?

    А это без разницы. Плагины могут быть собраны как угодно, другим компилятором и т.п. Оно все "родное" если подключается.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #927 - 07. Марта 2018 :: 11:36
    Печать  
    Оно-то да. Просто тот модуль типа официальный и новый, а то, что ты дал - CSVTable - это один из самых первых модулей загрузки из CSV.

    И документации - 0! Пришлось изучать исходники....

    Код (PHP)
    Выбрать все
    Функция CSV2SQLite(ПутьКфайлу, ИмяКолонкиИзПервойСтроки=0, ДопОпции=4, Разделитель=";", СимволКавычек="'", В_ИТЗ=0)
    
    	//Примечания: - Имена колонок не должны содержать символы: $
    
    	//см. исходники: https://github.com/softace/sqliteodbc/blob/master/csvtable.c
    	// *
    	// * * CSVTable(argv[1],<argv[2]>,<argv[3]>,<argv[4]>,<argv[5]>,<argv[6]>,...,<argv[X]>) * * *
    	// *
    	// * Argument vector contains:
    	// *
    	// * argv[0] - name of table to create (required)
    	//
    	// * argv[1] - filename (required)
    	// * argv[2] - number, when non-zero use first line as column names,
    	// *           when negative use given type names (optional)
    	// * argv[3] - number, when non-zero, translate data (optional):
    	// *
    	// * 		Translation flags:
    	// *
    	// * 		1  - convert ISO-8859-1 to UTF-8
    	// * 		2  - perform backslash substitution
    	// * 		4  - convert and collapse white-space in column names to underscore
    	// * 		10 - convert \q to single quote, in addition to backslash substitution
    	// *
    	// * argv[4] - column separator characters (optional)
    	// * argv[5] - string quoting characters (optional)
    	// * argv[6] - column/type name for first column (optional)
    	// *   ..
    	// * argv[X] - column/type name for last column (optional)
    	// *
    
    	Перем База,Запр,тЗапр,ТЗ;
    	База = СоздатьОбъект("SQLiteBase");
    	База.Открыть(":memory:");
    	База.РазрешитьЗагрузкуРасширений(1);
    	запр = База.НовыйЗапрос();
    
    	тЗапр = "SELECT load_extension('sqlite3_mod_csvtable.dll')";
    	запр.ВыполнитьЗапрос(тЗапр);
    	тЗапр = "CREATE VIRTUAL TABLE tableName USING CSVTable('"+ПутьКфайлу+"', "+ИмяКолонкиИзПервойСтроки+", "+ДопОпции+", '"+Разделитель+"','"+СимволКавычек+СимволКавычек+"')";
    	запр.ВыполнитьЗапрос(тЗапр);
    	тЗапр = "SELECT * FROM tableName";
    	Если В_ИТЗ=1 Тогда
    		ТЗ=СоздатьОбъект("ИндексированнаяТаблица");
    		запр.ВыполнитьЗапрос(тЗапр,ТЗ);
    	Иначе
    		ТЗ=запр.ВыполнитьЗапрос(тЗапр);
    	КонецЕсли;
    	База = 0;
    	Возврат ТЗ;
    КонецФункции 
    
    


    sqlite3_mod_csvtable.dll надо положить в BIN
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #928 - 07. Марта 2018 :: 13:07
    Печать  
    alyuev писал(а) 07. Марта 2018 :: 11:36:
    Оно-то да. Просто тот модуль типа официальный и новый, а то, что ты дал - CSVTable - это один из самых первых модулей загрузки из CSV.

    И документации - 0! Пришлось изучать исходники....

    А да... Там 12г, а сейчас версия от 16го. Собрал, лежит там же.
    Увы вся документация на расширения в исходниках к ним.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #929 - 07. Марта 2018 :: 15:04
    Печать  
    Спасибо! Пошел разбираться...
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #930 - 08. Марта 2018 :: 14:02
    Печать  
    alyuev писал(а) 07. Марта 2018 :: 15:04:
    Спасибо! Пошел разбираться...

    Лучше не надо. Я ошибся, в sqlite-odbc не старая версия, а совершенно другая Подмигивание
    В составе sqlite модуль csv совсем-совсем убогий...
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #931 - 08. Марта 2018 :: 14:49
    Печать  
    И у меня не хочет загружаться скомпилированный тобой модуль.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #932 - 08. Марта 2018 :: 14:51
    Печать  
    В mod_csvtable не удалось загрузить кириллицу.  Сама загрузка очень быстрая - 900К строк загрузилось в лайт за 0.002с.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #933 - 08. Марта 2018 :: 14:54
    Печать  
    mod_csv прельщает тем, что там есть возможность указать schema. В mod_csvtable загрузку можно варьировать параметрами функции.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #934 - 08. Марта 2018 :: 15:28
    Печать  
    Забавный случай выявился в работе 1sqlite. Загружаю CSV, там есть колонка с названием "RATES (US$)". Именно так - с пробелом, скобками и знаком доллара. mod_csvtable с параметром argv[3]=4 корректно загружает файл, заменяя название на "RATES_(US$)". Но дальше работать так нельзя, т.к. выгрузить в ТЗ выполняя запрос

    SELECT * FROM tableName

    не дает символ $. Возникает ошибка: "Неправильная типизация в колонке: RATES_(US$)"

    Убираю $ - в ТЗ выгружается. Но, например, работать с запросом мешают скобки.

    При выполнении:

    SELECT RATES_(US) FROM tableName

    возникает ошибка: "no such column: US"

    В обоих случаях, как я понимаю, затык в самой компоненте 1sqlite.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #935 - 08. Марта 2018 :: 15:32
    Печать  
    Если бы в mod_csvtable был метод замены символов в названии колонок - это было бы супер.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #936 - 08. Марта 2018 :: 15:36
    Печать  
    alyuev писал(а) 08. Марта 2018 :: 14:49:
    И у меня не хочет загружаться скомпилированный тобой модуль.

    А он по другому должен грузится. https://sqlite.org/c3ref/load_extension.html
    Там точка входа не sqlite3_extension_init (по умолчанию), а sqlite3_csv_init и ее надо указывать явно.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #937 - 08. Марта 2018 :: 15:47
    Печать  
    Т.е.? Разъясни, плиз.
    mod_csv в текущей реализации компоненты нельзя будет загрузить?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #938 - 08. Марта 2018 :: 15:47
    Печать  
    alyuev писал(а) 08. Марта 2018 :: 15:28:
    Забавный случай выявился в работе 1sqlite.

    Спец-символы используют только умные люди...
    Вот в Контуре работают умные! Поле с названием "ID" задействовали в 1С и тоже не работает.
    В оригинальной версии "по умолчанию" названия столбцов вообще не загружаются.
      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #939 - 08. Марта 2018 :: 15:48
    Печать  
    alyuev писал(а) 08. Марта 2018 :: 15:47:
    Т.е.? Разъясни, плиз.
    mod_csv в текущей реализации компоненты нельзя будет загрузить?

    Можно, но в текущей реализации он бесполезен. Это только шаблон.

    P.S. sqlite - встраиваемая в приложение база т.е. по-умолчанию почти все sql`ное работает, а если нужен юникод везде и т.п. - извольте сами пилите. Но за счет этого ничтожный размер.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #940 - 08. Марта 2018 :: 15:53
    Печать  
    По поводу кириллицы - я попробовал загрузить MLG. Это же по сути CSV. Он загрузился, быстро. Там есть, конечно, и другие ньюансы, но первый - это, конечно, русские буквы.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #941 - 08. Марта 2018 :: 16:00
    Печать  
    Увы, увы... русские буквы не в приоритете.
    Ну раз слегка занялся то sqlite3_mod_compress_3.22.0 все таки сделал (там же).
    А то эти xml`ки егаис всю базу загадили  Злой
    Внешняя база похудела в 3 раза, скорость распаковки вполне приемлема.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #942 - 12. Марта 2018 :: 15:10
    Печать  
    Кириллицу не читает, если файл в кодировке ANSI. В частности такой формат у MLG.

    Если сохранить в UTF-8 без BOM - кириллица читается.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #943 - 16. Марта 2018 :: 20:43
    Печать  
    "Тепленькая пошла" - 3.22.0.18
    "Тепленькая пошла" - 3.22.0.19
    https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

    + поддержка объекта BinaryDatа в 1С++ и типа BLOB sqlite3
         тип поля BLOB из базы sqlite3 автоматически преобразуется в объект 1С++ BinaryDatа
         объект 1С++ BinaryDatа может быть записан в базу sqlite3 методом Запрос.УстановитьПараметр("@blob",bindata);
    + улучшено сообщение при ошибке в методе УстановитьПараметр
         вместо  "Ошибка установки sql-параметра @val - Неизвестный тип значения"
         будет выводится  "Ошибка установки sql-параметра @val - Неизвестный тип значения: ИндексированнаяТаблица"
    3.22.0.19
    - исправлена глупая ошибка определения длины блоба

    + sqlite3_mod_compress_3.22.0.zip (функции compress(t) и uncompress(t))

    sqlite3_mod_zipfle почти побежден, но еще сопротивляется - этот модуль коррелирует с изменениями выше.
    Побежден.
    В процессе был найден забавный баг, который в sqlite исправили очень оперативно. http://www.sqlite.org/src/info/cf78a88279942461

    The SQLite Zipfile Module
    https://sqlite.org/zipfile.html

    Виртуальная таблица Zipfile
    Подключение и работа с архивами zip. Упаковка/Распаковка только deflate, нет поддержки огромных файлов и томов... и т.д и т.п. см ссылку выше.
    В режиме виртуальной таблицы поддерживаются стандартные запросы SELECT,INSERT,DELETE,UPDATE

    Поля таблицы:
    name            - имя файла
    mode            - битмаска (S_IFDIR 0040000,S_IFREG 0100000,S_IFLNK 0120000) ни на что особо не влияет...
    mtime            - таймштамп, перевод в читаемую дату: datetime(mtime, 'unixepoch')
    sz            - размер объекта
    rawdata            - сырые данные
    data            - распакованные данные
    method            - метод сжатия, 0-нет сжатия, 8-данные упакованы deflate

    Загрузка расширения в sqlite
    SELECT load_extension("sqlite3_mod_zipfile","sqlite3_zipfile_init");

    Запрос из файла zip в режиме "только чтение", без создания виртуальной таблицы.
    SELECT * from zipfile('e:\b\sqlite_extensions\sqlite3_mod_zipfile\zipfile.zip');

    Создание виртуальной таблицы

    CREATE VIRTUAL TABLE temp.zip USING zipfile('e:\b\sqlite_extensions\sqlite3_mod_zipfile\zipfile.zip');

    Запрос из виртуальной таблицы

    SELECT * from temp.zip;

    Создание каталога

    INSERT INTO temp.zip (name,data) VALUES ('dirname',NULL);

    Создание каталога и файла
    INSERT INTO temp.zip (name,data) VALUES ('/dir2/file2.txt','data');

    Примечания:
    - если имена файлов в кодировке DOS, они перекодируются как CP_OEMCP->CP_UTF8
      оригинальный модуль перекодировку не делает
    - при DELETE и UPDATE учитывается кодировка DOS
      оригинальный модуль это не учитывает
    - при INSERT и UPDATE имена файлов записываются в UTF-8
      оригинальное поведение не изменено, архиваторы уже давно UTF-8 понимают
      но если имя файла было в кодировке DOS, оно будет изменено на UTF-8
    - 7zip версии 9.20 открывает архив нормально,
      версии 7zip выше 9.20 ничего не видят, но если
      открыть файл через меню как "Открыть архив/#:e" то данные видно.
      у TCMD, WinRar, менеджера работы с архивами Windows такой проблемы нет
      метод UnZip у BinaryData тоже работает с таким архивом
    - собрано gcc, зависимостей от 1с 7.7 или 1sqlite нет т.е. можно подгружать и в консольную версию и т.п.
    « Последняя редакция: 17. Марта 2018 :: 16:28 - Djelf »  
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #944 - 22. Марта 2018 :: 17:32
    Печать  
    alyuev писал(а) 12. Марта 2018 :: 15:10:
    Кириллицу не читает, если файл в кодировке ANSI. В частности такой формат у MLG.
    Если сохранить в UTF-8 без BOM - кириллица читается.


    Ладно, ладно... переписал куски модуля из sqliteodbc, он мне не нравится, но он все равно лучше чем оригинальный...

    sqlite3_mod_csv альфа1

    Изменения:
       - изменен 3й параметр на "кодировка файла"
       - изменено название колонок на попроще
       - понимает BOM
       - всяко разное для того чтобы это все заработало...

    https://cloud.mail.ru/public/AxVj/tNM1g3MdU
    https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

    Подключение расширения:
    Код (C++)
    Выбрать все
       SELECT load_extension("sqlite3_mod_csv","sqlite3_extension_init"); 
    
    


    Подключение файла csv:
    Код (C++)
    Выбрать все
        CREATE VIRTUAL TABLE temp.csv USING деленияКолонок[*]); 
    
    


    Параметры подключения:
        (1)ИмяФайла:
            в формате windows
        (2)ЕстьЗаголовок:
            0 - нет заголовка, имена будут c1,c2,c3
            1 - есть заголовок, русские буквы будут как '?'
        (3)Кодировка:
            1 - CP_ACP
            2 - CP_OEMCP
            3 - CP_UTF8
            прочие значения - CP_UTF8
        (4)Разделители:
            список разделителей полей, вроде работает...
        (5)ОграничителиСтроки:
            судя по всему обрезает строку до второго появления ограничителя
        (6)ОпределенияКолонок:
            по очереди Имя, тип, но сломалось... не очень то и нужно

    P.S.
        1. скорость не плоха... у меня получилось около 130к строк в секунду
        2. select * from temp.csv не надо использовать без limit и offset - иначе будет переполнение памяти.
        3. форум съел часть строки подключения, ориентируйтесь на (НомерПараметра)
        4. Пропуск параметра нужно писать как 0 или '', иначе он не засчитывается как параметр и нумерация сбивается.

    « Последняя редакция: 22. Марта 2018 :: 19:29 - Djelf »  
    Наверх
    www  
    IP записан
     
    vladimirmir2012
    Senior Member
    ****
    Отсутствует


    1C++ rocks!

    Сообщений: 426
    Зарегистрирован: 18. Мая 2011
    Re: 1sqlite
    Ответ #945 - 23. Марта 2018 :: 06:28
    Печать  
      
    Наверх
     
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #946 - 23. Марта 2018 :: 12:50
    Печать  
    Djelf, новость отличная. Но тесты прошли неудачно.

    Из UTF файла с заголовками загрузка прошла, а вот из файла без заголовков - нет.

    Параметры загрузки: 'e:\1S\1cv7_old_1_utf.txt',0,3,';','""',0

    Ошибка выполнения: table definition failed, error: 'SQL logic error or missing database', schema: 'CREATE TABLE x();'

    Т.е., как видишь, не подставились названия с1 и т.д.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #947 - 23. Марта 2018 :: 12:52
    Печать  
    Vladimir, спасибо за хороший tools. Действительно удобная утилита, бесплатная. С быстрыми фильтрами, с возможностью строить быстрые графики зависимостей между цифровыми колонками и пр....
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #948 - 23. Марта 2018 :: 12:57
    Печать  
    И что должно было быть по этой ссылке? https://cloud.mail.ru/public/AxVj/tNM1g3MdU - сейчас выдает ошибку 404
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #949 - 23. Марта 2018 :: 13:07
    Печать  
    И, кстати, загружал просто через

    Код (C++)
    Выбрать все
    SELECT load_extension('sqlite3_mod_csv.dll') 
    
    


    Так тоже работает.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #950 - 23. Марта 2018 :: 13:27
    Печать  
    alyuev писал(а) 23. Марта 2018 :: 12:57:
    И что должно было быть по этой ссылке? https://cloud.mail.ru/public/AxVj/tNM1g3MdU - сейчас выдает ошибку 404

    Убрал альфу, релиз в каталоге.
    Допилил имена колонок, типизацию и устранил утечку памяти.

    Так с колонками и типизацией получается значительно веселее...
        ФлагиОбработки:
             0 0x0000 - в файле нет заголовка
                      - имена колонок автоматически c1,c2,c3
                      - в определении колонок только типизация
             1 0x0001 - в файле есть заголовок и он не будет выведен в таблицу
             2 0x0010 - имена колонок из заголовка, если он есть
             4 0x0100 - в определении колонок имя и тип по очереди

    Хотя ошибки все равно возможны Подмигивание
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #951 - 23. Марта 2018 :: 13:43
    Печать  
    При ФлагеОбработки = 0 обязательно указывать типизацию!

    Если не указывать - ошибка:

    error: 'SQL logic error or missing database', schema: 'CREATE TABLE x(c1 0,c2 ,c3 ,c4 ,c5 ,c6 ,c7 ,c8 ,c9 ,c10 );'
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #952 - 23. Марта 2018 :: 13:47
    Печать  
    А так - всё супер! Спасибо!
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #953 - 23. Марта 2018 :: 13:52
    Печать  
    alyuev писал(а) 23. Марта 2018 :: 13:43:
    При ФлагеОбработки = 0 обязательно указывать типизацию!

    Если не указывать - ошибка:

    error: 'SQL logic error or missing database', schema: 'CREATE TABLE x(c1 0,c2 ,c3 ,c4 ,c5 ,c6 ,c7 ,c8 ,c9 ,c10 );'

    Возьми из каталога sqlite3_mod_csv_02
    Что-то в процессе сломался бом, вроде починил...

    Лог вот так нормально подключается
    CREATE VIRTUAL TABLE temp.csv USING csvfile(каталог+'1cv7.mlg',0,1);
    А чтобы дойти до типизации нужно добавлять '' иначе sqlite3 не посылает эти параметры в расширение.
    CREATE VIRTUAL TABLE temp.csv USING csvfile(каталог+'1cv7.mlg',0,1,'','','text');
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #954 - 23. Марта 2018 :: 16:10
    Печать  
    У меня загружается где-то 50-60К строк за одну секунду.

    То, что я писал "Сама загрузка очень быстрая - 900К строк загрузилось в лайт за 0.002с." - это я делал замер только на запрос по созданию виртуальной таблицы. Улыбка . А 50К/сек - это уже выборка SELECT *.

    917К строк загрузились без всяких лимитов нормально.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #955 - 23. Марта 2018 :: 16:24
    Печать  
    Хм, есть файл с заголовками.

    При ФлагеОбработке = 1 - колонки пронумеровались С1 и т.д. При = 2 - колонки взяли наименование, но и в таблицу эта строка попала тоже.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #956 - 23. Марта 2018 :: 16:25
    Печать  
    alyuev писал(а) 23. Марта 2018 :: 16:10:
    У меня загружается где-то 50-60К строк за одну секунду.

    То, что я писал "Сама загрузка очень быстрая - 900К строк загрузилось в лайт за 0.002с." - это я делал замер только на запрос по созданию виртуальной таблицы. Улыбка . А 50К/сек - это уже выборка SELECT *.

    917К строк загрузились без всяких лимитов нормально.


    Оно должно зависить от проца и винта. Как иначе то?

    Сборка с "-march=i486", ниже уже давно не бывает... подбирал, но на скорость не влияет.

    "Чистая" скорость чтения получается при select count(*). Это фактически скорость сырого чтения. Из файла csv строку, хочешь/не хочешь, а прочитать придется.

    900к еще съест, я на 3кк тестирую.
      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #957 - 23. Марта 2018 :: 16:30
    Печать  
    alyuev писал(а) 23. Марта 2018 :: 16:24:
    Хм, есть файл с заголовками.

    При ФлагеОбработке = 1 - колонки пронумеровались С1 и т.д. При = 2 - колонки взяли наименование, но и в таблицу эта строка попала тоже.

    Это фича, а не баг.
    Вдруг тебе надо заголовок вытащить в таблицу!
    3 - спасет от этого.

      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #958 - 23. Марта 2018 :: 16:33
    Печать  
    Попробовал загрузить файл 990К строк. Хотел сделать замер на загрузку всех строк - произошел вылет. И теперь даже с лимитом сразу вылетает.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #959 - 23. Марта 2018 :: 16:37
    Печать  
    И вылетает теперь на любом файле... Как будто где-то что-то подвисло.... Хотя процесс 1Сный убивается.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #960 - 24. Марта 2018 :: 05:03
    Печать  
    alyuev писал(а) 23. Марта 2018 :: 16:37:
    И вылетает теперь на любом файле... Как будто где-то что-то подвисло.... Хотя процесс 1Сный убивается.

    Странное дело... Точно версия *_02? Мне ее пока не удается завалить.
    Какая строка подключения?

    UPD1: Поймал. Попробуй 3ю версию (лежит в каталоге).
    UPD2: Добавлена обработка "вьювер csv" на табличном поле.
    https://cloud.mail.ru/public/EdyB/4zS4EG8gB

    Фуффф... вроде как закончено Подмигивание
    « Последняя редакция: 24. Марта 2018 :: 13:18 - Djelf »  
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #961 - 26. Марта 2018 :: 10:47
    Печать  
    Спасибо! Работает! Т.е. даже если и вылетает - последующая загрузка работает корректно (с исправленным запросом, например, добавленным ЛИМИТом).

    И за ert-шку тоже отдельное спасибо.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #962 - 26. Марта 2018 :: 10:56
    Печать  
    alyuev писал(а) 26. Марта 2018 :: 10:47:
    Спасибо! Работает! Т.е. даже если и вылетает - последующая загрузка работает корректно (с исправленным запросом, например, добавленным ЛИМИТом).

    И за ert-шку тоже отдельное спасибо.

    По этому в примере и предусмотрен режим загрузки через временный файл sqlite. имхо получилось нормально: чтобы быстро глянуть что внутри - прямой режим, а чтобы работать с файлом быстро - через временный.

    Да... надо бы memory-guard и time-guard в 1sqlite встроить, а то вылетать по памяти или вырубать через диспетчер длинный/кривой запрос надоело/
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #963 - 26. Марта 2018 :: 11:09
    Печать  
    Да, за это (за временный файл) тоже спасибо.

    По поводу вылетов.
    Мы в пятницу пробовали один несложный запрос с группировкой (не из CSV а из, DB3), так 1с-ка вылетала при превышении памяти. Но стали пробовать разные просмотрщики и выполняли этот же запрос там. Так, например, SQLiteExpertPro загрузил файл без проблем, и память не выжирал ни разу. А SQLiteDatabaseBrowser работал также как 1С - вылетал.

    У SQLiteExpertPro разве свой какой-то движок? Или как-то оптимизировано выполнение запроса?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #964 - 26. Марта 2018 :: 12:32
    Печать  
    alyuev писал(а) 26. Марта 2018 :: 11:09:
    У SQLiteExpertPro разве свой какой-то движок? Или как-то оптимизировано выполнение запроса?

    Почти у всех этих оболочек неявно limit прописывается.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #965 - 26. Марта 2018 :: 12:53
    Печать  
    Но запрос-то выполняется! Результат возвращается.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #966 - 26. Марта 2018 :: 13:20
    Печать  
    alyuev писал(а) 26. Марта 2018 :: 12:53:
    Но запрос-то выполняется! Результат возвращается.

    А ты случаем не 64 битный SQLite Expert использовал?  Подмигивание
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #967 - 26. Марта 2018 :: 13:46
    Печать  
    Судя по истории 64х версия появилась начиная с 4.0 релиза. А у нас 3.5.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #968 - 26. Марта 2018 :: 14:37
    Печать  
    alyuev писал(а) 26. Марта 2018 :: 13:46:
    Судя по истории 64х версия появилась начиная с 4.0 релиза. А у нас 3.5.

    Чорд... забыл уже...
    PRAGMA temp_store = 1;
    и все дела...
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #969 - 26. Марта 2018 :: 18:03
    Печать  
    О, Великий Djelf! "PRAGMA temp_store = 1;" - Это оно!
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Sserj
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 77
    Зарегистрирован: 25. Октября 2010
    Re: 1sqlite
    Ответ #970 - 03. Апреля 2018 :: 09:51
    Печать  
    1sqlite 3.22.0.19
    Перестал работать IS NULL

    Пример:

    SELECT
      count()
    FROM
      Справочник_ФизЛица as спрФизЛица
      left join Справочник_Менеджеры as спрМенеджеры
      ON спрФизЛица.ID = спрМенеджеры.ФизЛицо
    WHERE
      спрМенеджеры.ID IS NULL

    На версии 3.16.2.14 возвращает количество с пустым менеджером, на версии 3.22.0.19 возвращает количество всех элементов физ.лиц.

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


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #971 - 03. Апреля 2018 :: 11:54
    Печать  
    Sserj писал(а) 03. Апреля 2018 :: 09:51:
    1sqlite 3.22.0.19
    Перестал работать IS NULL

    Пример:

    SELECT
      count()
    FROM
      Справочник_ФизЛица as спрФизЛица
      left join Справочник_Менеджеры as спрМенеджеры
      ON спрФизЛица.ID = спрМенеджеры.ФизЛицо
    WHERE
      спрМенеджеры.ID IS NULL

    На версии 3.16.2.14 возвращает количество с пустым менеджером, на версии 3.22.0.19 возвращает количество всех элементов физ.лиц.


    Мда... Спасибо! Недоглядел что в 3.21.0  добавили SQLITE_INDEX_CONSTRAINT_ISNULL  и т.п. (это флаг разрешения поиска по индексу с таким условием). Отключил.
    1sqlite 3.22.20 https://cloud.mail.ru/public/MWgt/4yuCZS6bE
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #972 - 06. Июня 2018 :: 13:47
    Печать  
    Djelf, а ты мог бы добавить фичу: insert/update/delete для 1С-ных баз?
    Орефков еще в 2008 писал:
    "insert/update/delete скорее всего не будет.
    Если только кто-нить не сделает."

    Если возможно, то - реализовать их действие по еще какому-то параметру. Т.е. по умолчанию - нельзя. А если принудительно установить параметр - то можно. И то, только в текущем запросе.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #973 - 08. Июня 2018 :: 16:18
    Печать  
    alyuev писал(а) 06. Июня 2018 :: 13:47:
    Djelf, а ты мог бы добавить фичу: insert/update/delete для 1С-ных баз?
    Орефков еще в 2008 писал:
    "insert/update/delete скорее всего не будет.
    Если только кто-нить не сделает."

    Если возможно, то - реализовать их действие по еще какому-то параметру. Т.е. по умолчанию - нельзя. А если принудительно установить параметр - то можно. И то, только в текущем запросе.


    Извини, как то пропустил вопрос.

    Тут засада в том что у dbf нет RowId, а sqlite для модификации строки отправляет в функцию Update именно полученный RowId.
    RowId то в 1sqlite есть, но он фэйковый (просто счетчик).
    Поэтому и не срастается.
    Но это даже не так важно, прямого доступа к dbf нет, поэтому придется записывать через штатный механизмы 1С и скорости из-за этого не сильно прибавится.

    Возможно delete как то и получится, но не больше.
      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #974 - 08. Июня 2018 :: 16:50
    Печать  
    * 1sqlite 3.24.0.21 https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

    + обновлен движок sqlite до 3.24.0
    + устранен вылет из 1С при вызове метода ТабличногоПоля Колонки.Очистить() или удалить колонку
    Причина: инициирует тп, 1sqlite удаляет, но потом информирует тп о удалении колонки. Вот тут тп и падает.

    + устранен вылет на запросе "SELECT 1 FROM __1s_blob GROUP by block COLLATE binary", возможно проявлялся и в других случаях.
    Причина: не учитывает размер строки и лезет куда ни попадя...

    Из-за этого
    + движок чтения UTF8 переведен на конечный автомат Хофмана
    http://bjoern.hoehrmann.de/utf-8/decoder/dfa/

    + переписано сравнение collete _1С
    это может что-то ускорить, а что-то и замедлить, как получится...

    А это мне надо Подмигивание
    + добавлены функции compress и uncompress, возвращают blob, чтобы получить текст нужно использовать cast(uncompress(data) as text)
       я sqlite использую не только вместо хранения длинных строк, но и для хранения архива xml и сжатие тут весьма уместно.

    Нововведения в самой sqlite не сильно велики, но для тех кто работает с внешними базами sqlite - функция "upsert" весьма полезна.

    А вот следующая версия видимо будет с поддержкой оконных функций и это будет даже круче cte!
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #975 - 12. Июня 2018 :: 08:16
    Печать  
    Спасибо за ответ. Даже если только delete получится - будет уже что-то...!
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #976 - 12. Июня 2018 :: 16:42
    Печать  
    alyuev писал(а) 12. Июня 2018 :: 08:16:
    Спасибо за ответ. Даже если только delete получится - будет уже что-то...!


    3.24.0.22 - альфа версия с поддержкой Delete (кто не спрятался, в смысле не забэкапился - я не виноват, и... "не пытайтесь держать его таким образом").
    Это именно Удалить(1), а не пометка удаления.

    P.S.
    Не знаю как пнуть движок 1с, чтобы он перечитывал открытые таблицы...
    Т.е. Открыта форма справочника и в нем удалили элемент (навсегда), штатные методы обновления - обновляют, из 1sqlite - не работают.
    В 1Cdllrun используется "CUsersSet::IncrNetChangesCnt();"
    Но оно не робит...

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


    barba non facit sisadminum

    Сообщений: 1986
    Местоположение: Москва
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #977 - 13. Июня 2018 :: 07:23
    Печать  
    А если увеличить 1SUSERS.NETCHGCN вручную?
      

    пароль как коньяк, чем больше звездочек, тем лучше
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #978 - 13. Июня 2018 :: 08:00
    Печать  
    berezdetsky писал(а) 13. Июня 2018 :: 07:23:
    А если увеличить 1SUSERS.NETCHGCN вручную?

    Спасибо за идею. Проверил меняется ли в 1SUSERS NETCHGCN. Меняется.
    Попробовал добавить CUsersSet::IncrUsersCnt(), тоже меняется.
    Проверил изменяемую таблицу и индекс - и то и другое меняется.
    Непонятненько...

    Но вроде ничего страшного. Проверил удаление штатными свойствами 1С на двух клиентах - на втором тоже подергать список пришлось.
    А вот почему на том клиенте в котором удаляется сразу не меняется.
    Счетчик какой то надо поискать...
      
    Наверх
    www  
    IP записан
     
    berezdetsky
    1c++ power user
    Отсутствует


    barba non facit sisadminum

    Сообщений: 1986
    Местоположение: Москва
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #979 - 13. Июня 2018 :: 11:09
    Печать  
    Есть такая настройка в режиме предприятия - "Период опроса изменений Базы Данных". Оно перечитывает NETCHGCN с этой периодичностью, чтобы узнать были ли изменения данных в других сеансах. Свои изменения 1С видело сразу, на сколько я помню. Наверно там есть ещё какой-то флаг в движке.
      

    пароль как коньяк, чем больше звездочек, тем лучше
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #980 - 13. Июня 2018 :: 16:49
    Печать  
    berezdetsky писал(а) 13. Июня 2018 :: 11:09:
    Есть такая настройка в режиме предприятия - "Период опроса изменений Базы Данных". Оно перечитывает NETCHGCN с этой периодичностью, чтобы узнать были ли изменения данных в других сеансах. Свои изменения 1С видело сразу, на сколько я помню. Наверно там есть ещё какой-то флаг в движке.


    Да... в 1Cdllrun дергают еще Field6++, но в 1с++ другая структура хидеров (тут я не очень понимаю).


    Код (C++)
    Выбрать все
    class CStore_Spr: public CStoreObj{
    public:
    	int ColValue;
    	CObjID ObjID1;
    	CObjID ObjID2;
    	CString Cod;
    	CString Descr;
    	CObjID ObjID3;
    	int Field4;
    	int Field5;
    	int Field6;
    	long DataS[4];
    	CTypeValue * ArrayValue;
    	Replace(int NoField, char * value);
    	Replace(int NoField, int value);
    	CStore_Spr(class CTable  *,class CIndex  *);
    	~CStore_Spr();
    };
     
    
    


    Раз удаляется корректно, уже хорошо!

    Ладно, пошли дальше. Тут уже нужна помощь зала. Видимо такое развитие:
    1. Все это можно производить только в транзакции (заметка себе: проверить откатывается ли она и выдавать ошибку при сбое).
    Ой тут косяков наловить много будет.
    2. Заблокировать аналогично РазрешитьЗагрузкуРасширений, по типу действий - РазрешитьDelete и т.п.
    3. Update сделать можно Подмигивание  Но это упрется в свободное время.

      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #981 - 14. Июня 2018 :: 08:02
    Печать  
    Я за РазрешитьDelete.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Sserj
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 77
    Зарегистрирован: 25. Октября 2010
    Re: 1sqlite
    Ответ #982 - 24. Июня 2018 :: 02:33
    Печать  
    Год назад Djelf писал что иерархию делал по наименованиям
    http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/885#890

    На днях почитывал доки по sqlite.org и наткнулся на такой вариант:

         with recursive регионы(parentid,id,descr,isfolder,level) as (
         
         select
           parentid, id, descr, isfolder, 0
         from
           [Справочник.Города]
         where
           parentid = :ПустойИД
         
         union all
         
         select
           t.parentid, t.id, t.descr, t.isfolder,(r.level + 1) as level
         from
           [Справочник.Города] as t join регионы as r
           on t.parentid = r.id
         
         order by
           level desc, isfolder, descr collate _1C
         )
         
         select
           id as [Регион :Справочник.Города]
           , descr as [Наименование :Строка]
           , isfolder as [ЭтоГруппа :Число.1.0]
           , parentid as [Родитель :Справочник.Города]
           , level as [Уровень :Число.1.0]
         from
           регионы

    Волшебство тут в "ORDER BY level desc". Если будет без desc то получится как обычно сначала 1 уровень, потом 2 и т.д. А при наличии desc получается иерархия.
    Долго пытался виртуально в голове это прокрутить но так до конца и не понял как это работает. Успокоил себя тем что это специальная фича для построения графов  Улыбка

    Я предполагаю что ORDER BY тут применяется после каждого UNION к очереди. Т.е. в доке написано что делается первый запрос результат помещается в очередь и тут к очереди применяется ORDER после этого берется первая строка из очереди и выполняется второй запрос. Первая строка из очереди помещается в результат CTE а результат из части UNION в очередь и тут опять к очереди применяется ORDER и поэтому со второго уровня оказываются в начале очереди и так далее.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #983 - 24. Июня 2018 :: 08:22
    Печать  
    Sserj писал(а) 24. Июня 2018 :: 02:33:
    Год назад Djelf писал что иерархию делал по наименованиям
    http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/885#890

    Я предполагаю что ORDER BY тут применяется после каждого UNION к очереди. Т.е. в доке написано что делается первый запрос результат помещается в очередь и тут к очереди применяется ORDER после этого берется первая строка из очереди и выполняется второй запрос. Первая строка из очереди помещается в результат CTE а результат из части UNION в очередь и тут опять к очереди применяется ORDER и поэтому со второго уровня оказываются в начале очереди и так далее.


    Писал в другой теме.
    http://www.1cpp.ru/forum/YaBB.pl?num=1494875208/10#10

    Тоже голову сломал. Мое объяснение такое:
    При ORDER BY DESCR мы получаем данные для следующего цикла отсортированные от ветвей к корню.
    Т.е. вместо того чтобы прогнать сначала первый уровень, потом второй и т.п., мы идем по веткам, пока они не закончятся.
    А поскольку WITCH должен вывести данные предыдущий цикла до данных следующего, то и родители не смешиваются, а выводятся как раз над потомками.

    Примерно так оно с ORDER BY DESCR считает:
    Код (C++)
    Выбрать все
    Процедура    Рекурсия(Справочник,тзДерево,Родитель,Знач Уровень=0)
    
    	тз=СоздатьОбъект("ТаблицаЗначений");
    	тз.НоваяКолонка("Родитель");
    	тз.НоваяКолонка("Элемент");
    	тз.НоваяКолонка("Уровень");
    	тз.НоваяКолонка("ЭтоГруппа");
    
    	Спр=СоздатьОбъект("Справочник."+Справочник);
    	Спр.ИспользоватьРодителя(Родитель);
    	Спр.ВыбратьЭлементы(1);
    
    	Пока Спр.ПолучитьЭлемент(0) = 1 Цикл
    		тз.НоваяСтрока();
    		тз.Родитель  = Родитель;
    		тз.Элемент   = Спр.ТекущийЭлемент();
    		тз.Уровень   = Уровень+1;
    		тз.ЭтоГруппа = Спр.ЭтоГруппа();
    	КонецЦикла;
    	тз.Сортировать("-Уровень,ЭтоГруппа,Элемент");
    
    	тз.ВыбратьСтроки();
    	Пока тз.ПолучитьСтроку() = 1 Цикл
    		тзДерево.НоваяСтрока();
    		тзДерево.Родитель  = тз.Родитель;
    		тзДерево.Элемент   = тз.Элемент;
    		тзДерево.Уровень   = тз.Уровень;
    		тзДерево.ЭтоГруппа = тз.ЭтоГруппа;
    
    		Если тз.ЭтоГруппа=1 Тогда
    			Рекурсия(Справочник,тзДерево,тз.Элемент,Уровень+1);
    		КонецЕсли;
    	КонецЦикла;
    КонецПроцедуры
     
    
    


    P.S. Если кто-то еще верит что базы SQL работают не перебором - откажитесь от этой мысли Подмигивание
    « Последняя редакция: 24. Июня 2018 :: 14:13 - Djelf »  
    Наверх
    www  
    IP записан
     
    nicesc
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 53
    Зарегистрирован: 13. Июня 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #984 - 26. Июня 2018 :: 10:20
    Печать  
    Всем привет, наткнулся на особенность SQLite, делюсь с народом.

    Вот запрос, который находит все различия в двух таблицах

    Код (C++)
    Выбрать все
    ТекстЗапроса = "
    			|SELECT * FROM
    			|( SELECT * FROM table1
    			|  EXCEPT
    			|	SELECT * FROM table2)
    			|
    			|UNION
    			|
    			|SELECT * FROM
    			|(	SELECT * FROM table2
    			|	EXCEPT
    			|	SELECT * FROM table1)
    			|";
     
    
    


    Проблема в EXCEPT и UNION. SQLite считает, что у них одинаковый приоритет, поэтому такой запрос отработает не корректно:

    Код (C++)
    Выбрать все
    ТекстЗапроса = "
    			|SELECT * FROM
    			|(
    			|	SELECT * FROM table1
    			|	EXCEPT
    			|	SELECT * FROM table2
    			|
    			|UNION
    			|
    			|	SELECT * FROM table2
    			|	EXCEPT
    			|	SELECT * FROM table1
    			|)
    			|";
     
    
    
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #985 - 26. Июня 2018 :: 10:59
    Печать  
    nicesc писал(а) 26. Июня 2018 :: 10:20:
    Всем привет, наткнулся на особенность SQLite, делюсь с народом.


    Насколько я понимаю это не особенность sqlite, а норма.

    MSSQL - https://docs.microsoft.com/ru-ru/sql/t-sql/language-elements/set-operators-excep...

    > Операторы EXCEPT и UNION обрабатываются слева направо в соответствии с их позицией в выражении.
    > EXCEPT Возвращает все различные значения, возвращенные запросом, указанным слева от оператора EXCEPT, но отсутствующие в результатах выполнения правого запроса.

    Все верно, union без скобок и не должен клеить.
      
    Наверх
    www  
    IP записан
     
    nicesc
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 53
    Зарегистрирован: 13. Июня 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #986 - 26. Июня 2018 :: 11:07
    Печать  
    Согласен, тоже почитал про MS SQL. Не знаю от куда была уверенность в обратном  Круглые глаза
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #987 - 26. Июня 2018 :: 12:02
    Печать  
    nicesc писал(а) 26. Июня 2018 :: 10:20:
    Вот запрос, который находит все различия в двух таблицах


    А вот еще вариант.
    Интересно какой быстрее, с двумя EXCEPT или HAVING`ом (на реальных данных).

    Код (C++)
    Выбрать все
    SELECT a
    FROM (
    SELECT *,1 s ,'t1' FROM t1
    UNION
    SELECT *,1 s, 't2' FROM t2
    )
    GROUP BY a
    HAVING sum(s)=1
     
    
    

    « Последняя редакция: 26. Июня 2018 :: 16:31 - Djelf »  
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #988 - 04. Июля 2018 :: 12:53
    Печать  
    Не дождался релиза  Очень довольный
    1sqlite 3.25.0.22 из транка.
    https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

    Обновлен движок sqlite до 3.25.0 на 2017.07.04

    Добавлена процедура База.EnableDelete, База.РазрешитьDelete
    Добавлена поддержка запроса DELETE.
    Это именно Справочник.Удалить(1), а не пометка на удаление.
    Запрос DELETE может быть выполнен в транзакции с ее последующим откатом.
    Открытые формы списков на той же сессии 1С в которой происходит DELETE на удаление не реагируют и сами не обновляются.
    Другие сессии 1С реагируют нормально, так же как и при работе по сети.
    IMHO не критично, это инструмент хирурга, а не пользователя.

    В этом движке sqlite3 произошло очередное революционное изменение - поддержка оконных функций, а с ними такие отчеты как ABC-анализ не представляют вообще никакой сложности.

    Поскольку sqlite3 наиболее близка по синтаксису с PosgreSQL, можно использовать его руководство https://postgrespro.ru/docs/postgrespro/9.5/tutorial-window

    P.S. С UPDATE и INSERT все пока плохо. Читать то я данные научился по разному, хоть FX_ами, хоть без них, а вот куда и как засовывать данные для записи пока не понятно. Запись берет данные из какого то другого места. Видимо это можно сделать только через СоздатьОбъект, а это уже не так интересно и не так просто.
    « Последняя редакция: 04. Июля 2018 :: 17:07 - Djelf »  
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #989 - 04. Июля 2018 :: 15:21
    Печать  
    О! Круто!
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #990 - 04. Июля 2018 :: 15:30
    Печать  
    Только не нашел на официальном сайте описание новых возможностей. Можешь подсказать?
    Нашел: http://www.sqlite.org/draft/windowfunctions.html
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Sserj
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 77
    Зарегистрирован: 25. Октября 2010
    Re: 1sqlite
    Ответ #991 - 06. Июля 2018 :: 13:30
    Печать  
    А никак нельзя в 1sqlite грязное чтение реализовать. Или таки движок 1С полностью файлы блокирует?
    А то посмотрел сколько переписывать для перехода на MSSQL аж дрожь взяла Улыбка
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #992 - 06. Июля 2018 :: 14:01
    Печать  
    Sserj писал(а) 06. Июля 2018 :: 13:30:
    А никак нельзя в 1sqlite грязное чтение реализовать. Или таки движок 1С полностью файлы блокирует?
    А то посмотрел сколько переписывать для перехода на MSSQL аж дрожь взяла Улыбка


    В смысле грязное? Прямое чтение dbf? Так 1sqlite фактически и читает их напрямую, только движок чтения dbf 1С`овский, а не сторонний.
    На этом форуме как то сравнивали скорость запросов foxpro и sqlite3, фокс тогда был быстрее, но сейчас sqlite3 кое где быстрее.
    А отставание от фокса из-за преобразования в/из utf8.
    ИМХО Не должно сильно ускорится на каком то альтернативном движке.
      
    Наверх
    www  
    IP записан
     
    Sserj
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 77
    Зарегистрирован: 25. Октября 2010
    Re: 1sqlite
    Ответ #993 - 06. Июля 2018 :: 14:13
    Печать  
    Djelf писал(а) 06. Июля 2018 :: 14:01:
    В смысле грязное?


    Это то что with nolock в mssql дает. Чтение незакрытых транзакций. Пример ставим в модуле документа вопрос. Проводим его в одной сессии. В другой сессии 1sqlite на запросе по журналу документов зависнет, пока документ не проведется. MSSQL с nolock спокойно выполнит запрос.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #994 - 06. Июля 2018 :: 15:32
    Печать  
    Sserj писал(а) 06. Июля 2018 :: 14:13:
    Djelf писал(а) 06. Июля 2018 :: 14:01:
    В смысле грязное?


    Это то что with nolock в mssql дает. Чтение незакрытых транзакций. Пример ставим в модуле документа вопрос. Проводим его в одной сессии. В другой сессии 1sqlite на запросе по журналу документов зависнет, пока документ не проведется. MSSQL с nolock спокойно выполнит запрос.


    Ну так то MSSQL, там совсем по другому принципу блокировки.
    Пытался http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/873#873
    Ничего хорошего в итоге не вышло. База начинает глючить, рисковать и дальше желания маловато...

    Эх... а ведь Wirth (автор Вирт:V7DBNet) почти сделал dbeng32 на движке sqlite3. Во всяком случае база загрузилась из архива и даже работала.
    Вот с таким движком можно было бы и разгуляться.
    Но все это осталось только в https://web.archive.org/web/20170107160116/http://www.wirth.ru:80/forum/showtopi...

    А может и это при каких то параметрах сработает. Но не пробовал.
    https://infostart.ru/public/16268/
    https://infostart.ru/public/87339/

      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #995 - 24. Сентября 2018 :: 17:21
    Печать  
    Релиз 3.25.1.23 https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

    РазрешитьDelete(1/0) уже было анансировано, остальное тут https://www.sqlite.org/releaselog/3_25_1.html

    Ну зачем, ну зачем Подмигивание
    Невозможность переименовать колонку это была фича sqlite!
    Устранили...

    P.S. в оконных функциях баг/не баг но есть нюанс

    CREATE TABLE t (v1,v2);

    select sum(v2) OVER (PARTITION BY v1) from t
    выдает корректный результат

    select sum(v2) OVER (PARTITION BY v2) from t
    GROUP BY v1

    выдает НЕ корректный результат, т.к. не группирует строки
    PostgreSql на это ругается и не выполняет

    правильный вариант

    select sum(sum(v2)) OVER (PARTITION BY v2) from t
    GROUP BY v1

    т.е. при GROUP BY будет нужна двойная группировка!!!

    P.P.S. Пример использования возможно будут, но не прямо сейчас.

      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #996 - 25. Сентября 2018 :: 12:23
    Печать  
    Набросал пример... Выглядит жутковато Подмигивание
    Но SQLiteQuery это выполняет за 400мс, против 6900мс у Запроса 1С.

    Код (SQL)
    Выбрать все
    	Период с ВыбНачПериода по ВыбКонПериода;
    	Количество = Регистр.ОстаткиТМЦ.Количество;
    	Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
    	Функция КоличествоНачОст = НачОст(Количество);
    	Функция КоличествоПриход = Приход(Количество);
    	Функция КоличествоРасход = Расход(Количество);
    	Функция КоличествоКонОст = КонОст(Количество);
    	Группировка День все;
    	Группировка Номенклатура без групп все ВошедшиеВЗапрос;
     
    
    


    Код (SQL)
    Выбрать все
    WITH DateT (date) AS (  SELECT :НачДата UNION ALL SELECT date(date,'+1 day') FROM DateT WHERE date< :КонДата)
    
    SELECT
    	Дата
    	,Номенклатура [Номенклатура $Справочник.Номенклатура]
    	,НачОст+total(Приход-Расход) OVER ( PARTITION BY Номенклатура ORDER BY Дата ROWS BETWEEN  UNBOUNDED PRECEDING AND 1 PRECEDING) НачОст
    	,Приход
    	,Расход
    	,НачОст+total(Приход-Расход) OVER ( PARTITION BY Номенклатура ORDER BY Дата) КонОст
    FROM (
    	SELECT
    		t1.Дата
    		,t2.Номенклатура
    		,total(t4.НачОст) НачОст
    		,total(t3.Приход) Приход
    		,total(t3.Расход) Расход
    FROM (
    	SELECT date AS Дата from DateT) as t1
    	,(SELECT DISTINCT Номенклатура  FROM Регистр_ОстаткиТМЦ WHERE DATE BETWEEN :НачДата AND :КонДата ) as t2
    	LEFT JOIN ( SELECT
    		Date AS Дата
    		,Номенклатура
    		,sum(case DEBKRED when 1 then 0 else Количество end) Приход
    		,sum(case DEBKRED when 1 then Количество else 0 end) Расход
    	FROM Регистр_ОстаткиТМЦ
    	WHERE Date BETWEEN :НачДата AND :КонДата
    	GROUP BY Дата,Номенклатура
    	) as t3 ON t3.Дата = t1.Дата AND t3.Номенклатура=t2.Номенклатура
    	LEFT JOIN ( SELECT
    		date(Period,'+1 months') AS Дата
    		,Номенклатура
    		,sum(Количество) НачОст
    	FROM РегистрИтоги_ОстаткиТМЦ
    	WHERE PERIOD = date( :НачДата,'-1 months')
    	GROUP BY Номенклатура
    ) as t4 ON t4.Номенклатура=t2.Номенклатура
    GROUP BY t2.Номенклатура,t1.Дата)
    GROUP BY Номенклатура,Дата
     
    
    
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #997 - 02. Октября 2018 :: 13:32
    Печать  
    Что-то у меня ругается - near "(": syntax error - в строке

    ,НачОст+total(Приход-Расход) OVER (PARTITION BY ТМЦ ORDER BY Дата) as КонОст

    и аналогично в предыдущей с НачОст.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #998 - 02. Октября 2018 :: 13:37
    Печать  
    А... соррии... Подгрузилась старая библиотека.....
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #999 - 06. Ноября 2018 :: 12:02
    Печать  
    Djelf, недавно для себя открыл такую удивительную штуку в SQL запросах, как ROLLUP, CUBE и GROUPING SETS.

    ROLLUP - делает промежуточные итоги по группам, то, что делает 1С-ный запрос.
    Почитать про это можно здесь: https://info-comp.ru/obucheniest/444-sql-rollup-cube-grouping-sets.html

    Но, к сожалению, ни ROLLUP, ни GROUPING SETS пока не реализованы в 1SQLite. И не известно, будут ли реализовывать в ближайшем времени.
    (ROLLUP можно заменить эквивалентом GROUPING SETS, если что).

    У себя на работе я сделал класс, который умеет группировать ТЗ  - почти полный аналог того, как это делает Запрос и даже местами больше.  Можно либо вывести в ТЗ, либо обходить группировки, как это делается в Запросе.

    И вот вопрос - можно ли как-то сделать подобие RollUp, например, через CTE? Или еще как?

    (И еще - нашел интересную таблицу сравнения возможностей разных SQL баз - http://www.sql-workbench.net/dbms_comparison.html)

    PS/ Следующий пост юбилейный в этой ветке: 1000й!
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1000 - 06. Ноября 2018 :: 15:22
    Печать  
    Что-то не могу найти пост Hipp`а... Надо было закладку закинуть ;(

    Но в нем он сказал примерно следующее: Когда мы обсуждали с инвесторами развитие sqlite, они меня очень просили не выходить за пределы объема в * мегабайт /*насколько помню сообщение, в пределах мегабайта или даже 3х*/, но в последнее время это становится не так актуально, поэтому я позволил просочится некоторым новым возможностям в sqlite.

    Мы все можем видеть, что Hipp сделал значительно больше чем обещал.

    Так что возможно что эти расширения появятся, но они как бы поверх оконных функций, которые только введены. Есть шанс, что после "обкатки" оконных будут реализованы и эти возможности.

    Сейчас эти расширения можно реализовать через union all + windows functions, но увы - со штрафом из-за повторного сканирования таблиц.

    В принципе можно и через cte, но у cte /*imho*/ штраф будет значительно больше.

    P.S. группировать в тз то можно, но в ит - значительно проще.

    P.P.S. точно 1000й Подмигивание
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1001 - 06. Ноября 2018 :: 15:34
    Печать  
    Ну, я, вообще говоря, класс сделал наследником ИТЗ. Так что там внутри вся каша на ИТЗ варится.

    И изначально чей-то класс взял за основу. Не помню уже, к сожалению, чей.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    ADirks
    1c++ developer
    1c++ moderator
    Отсутствует


    А нужны ли мы нам?

    Сообщений: 692
    Местоположение: Новосибирск
    Зарегистрирован: 22. Мая 2006
    Пол: Мужской
    Re: 1sqlite
    Ответ #1002 - 07. Ноября 2018 :: 05:54
    Печать  
    alyuev писал(а) 06. Ноября 2018 :: 15:34:
    Ну, я, вообще говоря, класс сделал наследником ИТЗ. Так что там внутри вся каша на ИТЗ варится.

    И изначально чей-то класс взял за основу. Не помню уже, к сожалению, чей.

    Лучше б ты вот это взял за основу Улыбка  http://www.1cpp.ru/forum/YaBB.pl?num=1202201945
    Все эти роллапы на мой взгляд в SQL не нужны. Это должен делать движок отчётов, а не источник данных. Зачастую всё равно приходится считать так, что невозможно такое в универсальный движок запихнуть.
      
    Наверх
     
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1003 - 07. Ноября 2018 :: 09:14
    Печать  
    Я нашел, чей класс использовал: "ТаблицаГруппировок" trad'a. http://www.dev.citykirov.ru/
    Он как раз и затеял в нём реализацию подмены объекта Запрос с обходом группировок.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Sserj
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 77
    Зарегистрирован: 25. Октября 2010
    Re: 1sqlite
    Ответ #1004 - 03. Января 2019 :: 03:59
    Печать  
    alyuev писал(а) 06. Ноября 2018 :: 12:02:
    ...
    И вот вопрос - можно ли как-то сделать подобие RollUp, например, через CTE? Или еще как?
    ...


    Djelf писал(а) 06. Ноября 2018 :: 15:22:
    ...
    В принципе можно и через cte, но у cte /*imho*/ штраф будет значительно больше.
    ...


    Вообще можно именно через CTE делать полностью линейный обход остатков в виде дерева, но важно помнить что CTE не кэширует результаты а каждый раз формирует их из базы.
    Поэтому нужно совместить приятное с полезным - дерево групп и остатки поместить во временные таблицы и потом уже строить дерево остатков из них, тогда вся работа будет в памяти.
    К примеру у меня запрос остатков выполняется 840мс , дерево групп за 10мс. Потом построения дерева остатков за 200мс.

    Сам же смысл построения дерева - взять таблицу остатков и рекурсивно добавить в нее все группы с остатком а потом сгруппировать и отсортировать по полному наименованию.
    Но если честно получаются очень большие портянки текста, могу расписать пример если из идеи не получится состряпать.



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


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1005 - 28. Февраля 2019 :: 10:18
    Печать  
    Есть 2 документа с полем Клиент. В одном оно типизировано до Справочник.Клиенты, а во втором типизировано до Справочник.

    Можно ли как-то объединить эти поля в одно в запросе?

    Если я делаю типизацию в запросе, например:
    Код
    Выбрать все
    as [Клиент :Справочник] 
    
    


    для одного типа документа клиент выводится, в другом нет.
    И получается наоборот, если сделать
    Код
    Выбрать все
    as [Клиент :Справочник.Клиент] 
    
    

      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1006 - 28. Февраля 2019 :: 10:26
    Печать  
    Разве что сделать так:

    Код
    Выбрать все
    case journ.iddocdef
    		when '  UM' then ДокПриходнаяНакладная.Клиент
    		when '  W5' then :ВидСправочника.Клиенты||ДокРасходнаяНакладная.Клиент
    	end as [Клиент :Справочник]
     
    
    
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1007 - 28. Февраля 2019 :: 11:46
    Печать  
    alyuev писал(а) 28. Февраля 2019 :: 10:26:
    Разве что сделать так:

    Код
    Выбрать все
    case journ.iddocdef
    		when '  UM' then ДокПриходнаяНакладная.Клиент
    		when '  W5' then :ВидСправочника.Клиенты||ДокРасходнаяНакладная.Клиент
    	end as [Клиент :Справочник]
     
    
    


    Да так, или наоборот - резануть лишнее.
    Код
    Выбрать все
    case journ.iddocdef
    		when :ВидДокумента.ПриходнаяНакладная then substr(ДокПриходнаяНакладная.Клиент,5)
    		when :ВидДокумента.РасходнаяНакладная then ДокРасходнаяНакладная.Клиент
    	end as [Клиент :Справочник.Клиенты]
     
    
    
    [/quote]

    Есть же :ВидДокумента, '  UM' и '  W5' не стоит использовать.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1008 - 12. Сентября 2019 :: 10:46
    Печать  
    Странно... Куда-то подевалась эта ветка. В репозитории не видна... Нашел гуглом... Написал этот коммент, чтобы всплыла наверх.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1009 - 12. Сентября 2019 :: 12:15
    Печать  
    А вопрос появился такой:

    ПоставщикДанных SQLiteDataProvider портит запрос с GROUP BY после вставки запроса в УстановитьТекстЗапроса().

    Был запрос такой:
    Код (SQL)
    Выбрать все
    where
    (
    	((journ.date between '20190902'
    	and '20190911Я'
    ))
    and (journ.iddocdef = '  W5')
    )
    
    GROUP BY
    	journ.iddoc 
    
    


    А возвращается запрос методом ПолучитьТекстЗапроса(1) такой:

    Код (SQL)
    Выбрать все
      where
    ((
    	((journ.date between '20190902'
    	and '20190911Я'))
    and (journ.iddocdef = '  W5')
    )
    
    GROUP BY
    	journ.iddoc) 
    
    


    Выделил новые скобки. Которые оказались неправильными.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1010 - 12. Сентября 2019 :: 12:20
    Печать  
    alyuev писал(а) 12. Сентября 2019 :: 12:15:
    А вопрос появился такой:

    ПоставщикДанных SQLiteDataProvider портит запрос с GROUP BY после вставки запроса в УстановитьТекстЗапроса().


    Синтаксис: УстановитьТекстЗапроса(ТекстЗапроса, КлючевыеПоля, [ИдПоле])

    Всвязи с таким принципом работы поставщика, возникают следующие требования к тексту запроса:

    Запрос должен быть запросом на выборку (select'ом), без указания упорядочивания запроса (без order by).
    Все поля в списке полей запроса должны быть указаны явно, указывать поля как * нельзя.
    Если для какого-то поля задается алиас, то алиас должен быть заключен в []
    В запросе можно применять только именованные SQL-параметры (вида @ИмяПараметра), указывать SQL-параметры как '?' нельзя.

    Крутись как хочешь  Нерешительный
    Вьюшкой обмануть можно.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1011 - 12. Сентября 2019 :: 15:39
    Печать  
    Обрати внимание: У меня GROUP BY, а в описании идет речь про ORDER BY (а про него я читал)!
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1012 - 12. Сентября 2019 :: 15:54
    Печать  
    alyuev писал(а) 12. Сентября 2019 :: 15:39:
    Обрати внимание: У меня GROUP BY, а в описании идет речь про ORDER BY (а про него я читал)!


    А, да. Это я что-то недоглядел Подмигивание

    Но GROUP BY тоже не должно быть.

    Дело в том что табличное поле работает через offset и limit по ключевому полю, если сделать GROUP BY то offset и limit будут бесполезны, запрос будет выполняться полностью каждый раз когда проводится пролистывание списка. А это уже не быстрая операция - тормозить будет адски.


      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1013 - 12. Сентября 2019 :: 16:38
    Печать  
    Жаль... А то я допиливаю класс ПоставщикДанных для журналов, чтобы можно было добавлять к нему ГрафыОтборов. Графу добавил, но док разворачивается по графе, хотя задумка была такая, что пока не выбрал значение графы отбора - журнал должен был бы свернуться до документа...
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1014 - 12. Сентября 2019 :: 17:16
    Печать  
    alyuev писал(а) 12. Сентября 2019 :: 16:38:
    Жаль... А то я допиливаю класс ПоставщикДанных для журналов, чтобы можно было добавлять к нему ГрафыОтборов. Графу добавил, но док разворачивается по графе, хотя задумка была такая, что пока не выбрал значение графы отбора - журнал должен был бы свернуться до документа...


    Жалко/НеЖалко, а тормозить будет. Смысла делать наверное нет.
    Сам страдаю периодически от этого, но скорость в приоритете задач.
    Можно сделать, но я так думаю, лучше выкручиваться вьюшками.

    Для Журнала документов группировка не требуется, если ты не пересчитываешь суммы в табличной части документов и т.п.
    Это же не 1С, где без группировки вообще ничего не выведется...
    Просто убери группировку, а если потребуется что-то выводить группируемое в строках - выводи в ПриВыводеСтроки.

    И кстати, я писал выше:
    > Есть же :ВидДокумента, '  UM' и '  W5' не стоит использовать.
    Ежели что, хрен потом вспомнишь (по быстрому)  Подмигивание

    P.S. Графы отбора... Ну я с ними не работал.
    *Покури* условия левого джойна, решение должно быть.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1015 - 13. Сентября 2019 :: 07:55
    Печать  
    journ.iddocdef = '  W5'

    Это Класс ПоставщикДанных уже обработал запрос....

    А так я, конечно, использую :ВидДокумента...
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1016 - 13. Сентября 2019 :: 19:56
    Печать  
    Кстати, Djelf, когда будешь делать следующую сборку, поправь плиз первое слово в фразе "Поставщие данных SQLite: Формирование запроса ..."
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1017 - 06. Октября 2019 :: 06:49
    Печать  
    alyuev писал(а) 13. Сентября 2019 :: 19:56:
    Кстати, Djelf, когда будешь делать следующую сборку, поправь плиз первое слово в фразе "Поставщие данных SQLite: Формирование запроса ..."


    Хм, посмотрел. Это было в версии sqlite1c_3.25.1.23 и поправлено еще в sqlite1c_3.27.1.23 от 27.02.2019, ну а сейчас уже 1sqlite_3.30.0.23.
    Все версии там же: https://cloud.mail.ru/public/9znr/ZJ6ULE9aR
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1018 - 07. Октября 2019 :: 08:22
    Печать  
    Таки да у нас sqlite1c_3.25.1.23. Извини, не упомянул об версии. И спасибо за новые.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    leov-001
    Full Member
    ***
    Отсутствует


    1C++ rocks!

    Сообщений: 150
    Зарегистрирован: 05. Марта 2009
    Re: 1sqlite
    Ответ #1019 - 07. Октября 2019 :: 12:28
    Печать  
    Описание файла 1sqlite.dll (3.30.0.23)+JSON1 - вот про json чуточку поподробней.
    Как его в 1с готовить.
      
    Наверх
     
    IP записан
     
    nicesc
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 53
    Зарегистрирован: 13. Июня 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #1020 - 07. Октября 2019 :: 13:09
    Печать  
    Вот так видимо:

    https://www.sqlite.org/json1.html
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1021 - 07. Октября 2019 :: 15:09
    Печать  
    Да кто-то просил, ну я и включил, а выключить как то подзабыл.
    И я не уверен что json поддерживает русский язык.

    Все эти модули расширения можно (и наверное нужно) и по отдельности собирать.
    Причем собирать можно чем угодно - хоть шлангом, хоть gcc.
      
    Наверх
    www  
    IP записан
     
    Arbuz
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 58
    Зарегистрирован: 06. Февраля 2019
    Re: 1sqlite
    Ответ #1022 - 10. Октября 2019 :: 11:50
    Печать  
    Ух ты ж!
    Сборка с 30 sqlite'ом местами в два раза быстрее чем с 28  Ужас Очень довольный

    например Arbuz писал(а) 09. Октября 2019 :: 15:04:
    Тот самый запрос по остаткам


    или такой
    Код (SQL)
    Выбрать все
    	|SELECT
    	|	Дубли.PARENTEXT [Номенклатура :Справочник.Номенклатура],
    	|	Дубли.ID [Единица :Справочник.Единицы],
    	|	Дубли.ШтрихКод,
    	|	СпрНом.CODE Код
    	|FROM Справочник_Единицы AS Дубли
    	|LEFT JOIN [Справочник_Номенклатура] СпрНом ON Дубли.PARENTEXT = СпрНом.ID
    	|WHERE EXISTS (
    	|	SELECT
    	|		1
    	|	FROM (
    	|		SELECT
    	|			Ед.ШтрихКод ШтрихКод
    	|		FROM Справочник_Единицы AS Ед
    	|		WHERE Ед.ШтрихКод > ''
    	|		GROUP BY Ед.ШтрихКод HAVING COUNT(*) > 1
    	|	) AS Штрихи
    	|	WHERE  Дубли.ШтрихКод = Штрихи.ШтрихКод
    	|)
    	|ORDER BY +ШтрихКод
     
    
    
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1023 - 10. Октября 2019 :: 13:31
    Печать  
    Arbuz писал(а) 10. Октября 2019 :: 11:50:
    Ух ты ж!
    Сборка с 30 sqlite'ом местами в два раза быстрее чем с 28  Ужас Очень довольный

    План запроса совершенно одинаковый.
    Затрудняюсь определить с чем это связано.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1024 - 07. Февраля 2020 :: 17:12
    Печать  
    Djelf, подскажи пожалуйста, а как сохранить в db3 таблицу, созданную как CREATE VIRTUAL TABLE? В частности так загружаю csv файл через плагин.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1025 - 08. Февраля 2020 :: 05:38
    Печать  
    alyuev писал(а) 07. Февраля 2020 :: 17:12:
    Djelf, подскажи пожалуйста, а как сохранить в db3 таблицу, созданную как CREATE VIRTUAL TABLE? В частности так загружаю csv файл через плагин.


    Виртуальная таблица почти ничем не отличается от обычной, поэтому никаких хитростей тут нет: https://www.w3schools.com/sql/sql_insert_into_select.asp

    Кстати в примере к csv есть чтение через временную таблицу sqlite.
    « Последняя редакция: 08. Февраля 2020 :: 07:41 - Djelf »  
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1026 - 10. Февраля 2020 :: 08:52
    Печать  
    О... "Тыщу" лет лежит у меня твой пример по работе с CSV, а заглянуть в него не удосужился... Зато еще раз его нашел на Инфостарте и хоть плюсиком тебя отблагодарил Улыбка.
    Да, там как раз то, что нужно. Только я думал будет какой-то метод, без использования промежуточного сохранения структуры таблицы из CSV. А так приходится использовать PRAGMA table_info и потом CREATE TABLE, в которую и будет идти вставка через INSERT INTO SELECT....

    Еще раз большое спасибо!
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1027 - 10. Февраля 2020 :: 13:22
    Печать  
    Интересная ситуация выявилась.

    Есть CSV, у которого есть название колонки с пробелом, символом $ и скобками: "RATES (US$)"

    Когда файл загружаю - таблица создается корректно. При парсинге table_info - пришлось доработать обработку перечня колонок, добавив замену пробела на "_" и обертывая имена в кавычки, тогда остальные символы проходят при создании новой таблицы.  Но вот при запросе "SELECT * FROM ..." - выдает ошибку на $:

    Код
    Выбрать все
    Ошибка выполнения: Неправильная типизация в колонке: RATES (US$) 
    
    


    Я так понимаю - этого уже не обойти? Придется всё таки лезть в файл CSV, проверять первую строку на наличие таких символов и исправлять?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1028 - 10. Февраля 2020 :: 14:46
    Печать  
    alyuev писал(а) 10. Февраля 2020 :: 13:22:
    Я так понимаю - этого уже не обойти? Придется всё таки лезть в файл CSV, проверять первую строку на наличие таких символов и исправлять?


    У самого sqlite ограничений то нет, это типизация 1sqlite мешает.
    Ну и в моем примере еще и табличное поле с названием полей с пробелами не работает.
    Но это довольно легко решается.

    Первый вариант:
    В примере есть чтение заголовков через PRAGMA table_info.
    Также там есть пример чтения файла без первой строки.
    Можно прочитать колонки, файл без первой строки, а потом переименовать колонки.

    Второй вариант:
    В статье на  https://infostart.ru/public/805029/ есть описание типизации колонок.
    Можно прочитать заголовки, модифицировать имена и типизировать колонки, отключить файл, подключить заново но уже с типизацией и нормальными именами.
    « Последняя редакция: 10. Февраля 2020 :: 17:09 - Djelf »  
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1029 - 20. Мая 2020 :: 15:40
    Печать  
    Внезапно получилось...

    https://cloud.mail.ru/public/4th1/qavXTDgwv

    StrMatch.dll

    Это гибридная компонета, работающая как ВК без регистрации в реестре
    и одновременно расширение к sqlite3, работающее без 1С

    Автор первоначальной версии: Sk0rp
    https://infostart.ru/public/237186/

    Исходники взяты отсюда:
    https://github.com/5k0rp/StrMatch

    Использовались куски кода и движок из 1sqlite:
    https://snegopat.ru/1sqlite/index

    Изменения компоненты:
    1. Движок ВК переведен на движок от Орефкова.
       Это позволило ВК загружаться в 1С без регистрации в реестре
       Методы и свойства совместны с оригинальной компонетой
    2. Добавлен интерфейс загрузки в sqlite3

    Использование:

    База = СоздатьОбъект("SQLiteBase");
    База.Открыть(":memory:");// без этого будет вылет
    База.РазрешитьЗагрузкуРасширений(1);
    Запрос=База.НовыйЗапрос();
    Запрос.ВыполнитьЗапрос("SELECT load_extension('strmatch.dll') as ret); 
    // без полного пути из каталога базы не загрузится, только из BIN
    // если указан полный путь, "as имя колонки" обязательно
    Запрос.ВыполнитьЗапрос("
      SELECT
      descr,
      strmatch(descr,'что-то тут ищем') as Рейтинг
    from Справочник_Номенклатура
    order by strmatch(descr,'что-то тут ищем') desc;

    Примечание:
    Перебор через 1С с использованием кэша ~2-3c на 5к строк
    Запрос через 1sqlite ~150мс

    P.S.
    Кэш (который должен ускорять ВК в 1С) никак не задействован.
    Но результат уже очень не плох, так что разгон пока не планируется.
    « Последняя редакция: 21. Мая 2020 :: 07:19 - Djelf »  
    Наверх
    www  
    IP записан
     
    shuUshu
    YaBB Newbies
    *
    Отсутствует


    1C++ rocks!

    Сообщений: 2
    Зарегистрирован: 13. Января 2022
    Re: 1sqlite
    Ответ #1030 - 13. Января 2022 :: 18:46
    Печать  
    Доброго времени суток!
    Подскажите пожалуйста. Делаю выборку по справочнику (примерно 600к записей). Если кто-то сидит в какой-то карточке то результат получается но он не полный (не хватает примерно 100к записей). Так и должно быть или я что-то не так делаю?
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1031 - 14. Января 2022 :: 06:55
    Печать  
    Такого быть не должно.
    Какая версия 1sqlite? Все собранные мной версии тут: https://cloud.mail.ru/home/1sqlite/
    Возможно что-то не так со справочником и/или с его индексом.
    Какой размер таблицы справочника? Запрос 1С так же себя ведет? А простая выборка из справочника?
      
    Наверх
    www  
    IP записан
     
    shuUshu
    YaBB Newbies
    *
    Отсутствует


    1C++ rocks!

    Сообщений: 2
    Зарегистрирован: 13. Января 2022
    Re: 1sqlite
    Ответ #1032 - 14. Января 2022 :: 11:22
    Печать  
    Огромное спасибо за наводку. Похоже что битая таблица справочника. Попробовал создать новую конфигурацию с одним справочником, накидал элементов - ошибка не проявляется.
      
    Наверх
     
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1033 - 21. Августа 2022 :: 20:09
    Печать  
    Djelf писал(а) 09. Ноября 2016 :: 09:19:
    [quote author=25212623480 link=1214205575/840#840 date=1478673522]Djelf, а есть возможность прикрутить чтение произвольнольного dbf?

      Скажите пожалуйста, а не осталось у вас расширения 'libspatialite-2.dll'? А то на сайте только последние версии и библиотека теперь называется mod-spatialite.dll и в 1sqlite она как расширение не загружается.   
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1034 - 22. Августа 2022 :: 11:23
    Печать  
    OlegY писал(а) 21. Августа 2022 :: 20:09:
    Djelf писал(а) 09. Ноября 2016 :: 09:19:
    [quote author=25212623480 link=1214205575/840#840 date=1478673522]Djelf, а есть возможность прикрутить чтение произвольнольного dbf?

      Скажите пожалуйста, а не осталось у вас расширения 'libspatialite-2.dll'? А то на сайте только последние версии и библиотека теперь называется mod-spatialite.dll и в 1sqlite она как расширение не загружается.   


    А у меня загрузилась сборка /* х86 разумеется */ отсюда: http://www.gaia-gis.it/gaia-sins/
    SELECT load_extension("mod_spatialite") as mod;
    PRAGMA module_list; -- пишет что модули загружены

    Почему не фокспро? Он очень быстр.
    С mod_spatialite необходимо копровать в 1с/bin почти все что содержится в сборке, завистимостей очень много стало...
      
    Наверх
    www  
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1035 - 22. Августа 2022 :: 17:43
    Печать  
    Djelf писал(а) 22. Августа 2022 :: 11:23:
    OlegY писал(а) 21. Августа 2022 :: 20:09:
    [quote author=183639303A5C0 link=1214205575/841#841 date=1478683162][quote author=25212623480 link=1214205575/840#840 date=1478673522]Djelf, а есть возможность прикрутить чтение произвольнольного dbf?

      Скажите пожалуйста, а не осталось у вас расширения 'libspatialite-2.dll'? А то на сайте только последние версии и библиотека теперь называется mod-spatialite.dll и в 1sqlite она как расширение не загружается.   


    А у меня загрузилась сборка /* х86 разумеется
    SELECT load_extension("mod_spatialite") as mod;
    PRAGMA module_list; -- пишет что модули загружены
       Спасибо вам большое за подсказку. Я пытался грузить без указания as mod, как описано на их сайте.
      
    Наверх
     
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1036 - 22. Августа 2022 :: 18:00
    Печать  
    Djelf писал(а) 22. Августа 2022 :: 11:23:
    OlegY писал(а) 21. Августа 2022 :: 20:09:
    Djelf писал(а) 09. Ноября 2016 :: 09:19:
    [quote author=25212623480 link=1214205575/840#840 date=1478673522]Djelf, а есть возможность прикрутить чтение произвольнольного dbf?

      Скажите пожалуйста, а не осталось у вас расширения 'libspatialite-2.dll'? А то на сайте только последние версии и библиотека теперь называется mod-spatialite.dll и в 1sqlite она как расширение не загружается.   


    Почему не фокспро? Он очень быстр.
       
        Хотелось чтобы грузилось в виртуальную таблицу Sqlite, т.к. это временные наборы данных из кучи не очень больших  файлов(до 10000 строк). Скорость загрузки меня и со стандартным 1с xBase устраивает. Но там поиск текстовых данных очень примитивен, а в режиме встроенных сравнений на < или > так и вовсе выдаёт непредсказуемые результаты,    
     
    С mod_spatialite необходимо копровать в 1с/bin почти все что содержится в сборке, зависимостей очень много стало...

        Спасибо и за эту подсказку. Я это уже увидел когда пытался собрать из исходников библиотеку(в исходниках есть старые версии). А до момента с 1с/bin я не дошёл т.к. собрать не получилось даже версию 2.4. Всё время чего-то не хватало для сборки. Попробовал 4.0.0 версию, а там ещё больше зависимостей.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1037 - 23. Августа 2022 :: 07:40
    Печать  
    OlegY писал(а) 22. Августа 2022 :: 18:00:
        Спасибо и за эту подсказку. Я это уже увидел когда пытался собрать из исходников библиотеку(в исходниках есть старые версии). А до момента с 1с/bin я не дошёл т.к. собрать не получилось даже версию 2.4. Всё время чего-то не хватало для сборки. Попробовал 4.0.0 версию, а там ещё больше зависимостей. 

    Еще одна подсказка:
    ФС.УстТекКаталог("d:\1C\BIN\mod_spatialite");
    SELECT load_extension('mod_spatialite');
    Загрузит mod_spatialite из каталога d:\1C\BIN\mod_spatialite
    Чтобы не сильно мусорить в каталоге bin
    « Последняя редакция: 23. Августа 2022 :: 10:29 - Djelf »  
    Наверх
    www  
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1038 - 23. Августа 2022 :: 11:21
    Печать  
    Djelf писал(а) 23. Августа 2022 :: 07:40:
    [quote author=243C2F36322B6B651D303C3431732F285D0 link=1214205575/1036#1036 date=1661191216]
    Еще одна подсказка:
    ФС.УстТекКаталог("d:\1C\BIN\mod_spatialite");
    SELECT load_extension('mod_spatialite');
    Загрузит mod_spatialite из каталога d:\1C\BIN\mod_spatialite
    Чтобы не сильно мусорить в каталоге bin


    Спасибо большое. Было время сегодня попробовать эти подсказки(правда на домашнем компе с Вин10).
    Каталог установился только в следующей редакции:
    ФС.УстТекКаталог(КаталогПрограммы());
    т.е. если его указывать вручную, то так:
    ФС.УстТекКаталог("d:\1C\BIN\");
    А вот дальше не пошло. Всё равно, после команды
    SELECT load_extension('mod_spatialite');
    выскакивает сообщение:
    {Обработка.ИмпортНакладных.Форма.Модуль(429)}: Не найден указанный модуль.
      Попробую ещё сегодня эти хинты на работе, там компы все с XP.
      
    Наверх
     
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1039 - 23. Августа 2022 :: 17:52
    Печать  
    Заработало наконец-то. Я обратил внимание, что вы используете каталог отличный от установки 1с по умолчанию. Попробовал создать такой каталог на диске D. Никаких ошибок не выскочило. После этого в каталоге BIN(программы 1с) создал подкаталог SPATIALITE и в него поместил все библиотеки, которые шли вместе с mod_spatialite.dll.
    Вызов получился следующий:
    ФС.УстТекКаталог(КаталогПрограммы()+"SPATIALITE");   
    SELECT load_extension('mod_spatialite');
      Так всё заработало без проблем.

      Странно то, что когда я пытался помещать эти библиотеки в родной каталог BIN 1с, ничего не работало. Я так и не понял в чём причина. 
        В любом случае без ваших подсказок я бы не разобрался.
      Спасибо Вам большое за помощь.
    « Последняя редакция: 23. Августа 2022 :: 23:02 - OlegY »  
    Наверх
     
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1040 - 27. Августа 2022 :: 12:16
    Печать  
        Здравствуйте, Djelf!

      Я похоже рано обрадовался. На win10 всё работает прекрасно, а на XP вываливается следующее сообщение:
    Запрос.ВыполнитьЗапрос("SELECT load_extension('mod_spatialite');");
    {Обработка.ИмпортНакладных.Форма.Модуль(398)}: Не найдена указанная процедура. 
      Для проверки работоспособности загрузки расширений на XP, я загрузил strmatch.dll. Загрузка прошла штатно, без вылета. Похоже новая версия  mod_spatialite для XP слишком новая. Поэтому у меня к вам тот же вопрос: "Не осталось ли у вас где-нибудь в архивах старой версии libspatialite?"
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1041 - 28. Августа 2022 :: 12:58
    Печать  
    OlegY писал(а) 27. Августа 2022 :: 12:16:
        Здравствуйте, Djelf!

      Я похоже рано обрадовался. На win10 всё работает прекрасно, а на XP вываливается следующее сообщение:
    Запрос.ВыполнитьЗапрос("SELECT load_extension('mod_spatialite');");
    {Обработка.ИмпортНакладных.Форма.Модуль(398)}: Не найдена указанная процедура. 
      Для проверки работоспособности загрузки расширений на XP, я загрузил strmatch.dll. Загрузка прошла штатно, без вылета. Похоже новая версия  mod_spatialite для XP слишком новая. Поэтому у меня к вам тот же вопрос: "Не осталось ли у вас где-нибудь в архивах старой версии libspatialite?"


    Нет, я ее не использовал, поэтому старых и не было
    Зато у меня платиновая медаль по гуглению Подмигивание
    Тут лежит https://cloud.mail.ru/public/9znr/ZJ6ULE9aR в mod_spatialite.7z
    Это 4я версия билиотеки. Проверил в VirtualBox - в Хрюше грузится.
    На Хрюше ФС.УстТекКаталог не работает, придется мусорить в 1с/bin или в system32.

    P.S. "ИмпортНакладных" из какого источника то? Если Excel то лучше Йокселя ничего нет, а если из dbf то и сама 1С нормально справляется.
    « Последняя редакция: 28. Августа 2022 :: 15:12 - Djelf »  
    Наверх
    www  
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1042 - 28. Августа 2022 :: 17:12
    Печать  
    Djelf писал(а) 28. Августа 2022 :: 12:58:
    [quote author=475F4C55514808067E535F5752104C4B3E0 link=1214205575/1040#1040 date=1661602614]    
     
    Зато у меня платиновая медаль по гуглению Подмигивание
       Подтверждаю! Я гуглил всю последнюю неделю, но так и не нашёл данной ссылки.))

    Это 4я версия билиотеки. Проверил в VirtualBox - в Хрюше грузится.
    На Хрюше ФС.УстТекКаталог не работает, придется мусорить в 1с/bin или в system32.

      Спасибо большое. Буду пробовать.

    P.S. "ИмпортНакладных" из какого источника то? Если Excel то лучше Йокселя ничего нет, а если из dbf то и сама 1С нормально справляется.


        У меня сам импорт идёт из .odt(Создаётся Файнридером .odt потому что Файнридер у меня хотя и купленный в .doc временами сохраняет криво. Вместо букв краказябры). Хотя конечно-же работает импорт из dbf, из xls и doc и их современных вариантов.  Но не в этом дело. Товар приходит от множества поставщиков и у каждого из них один и тот же товар называется по разному. Причём иногда это название различно до неузнаваемости.
    Поэтому приходиться держать множество внешних файлов соответствия формата dbf(по одному на поставщика) для занесения туда информации о соответствии моих наименований с конкретными наименованиями поставщика. 
      Что мне требуется читать сейчас? Когда приходит например новая палитра лаков для ногтей из 150 тонов. Название всех этих 150 наименований отличается только номером тона(иногда к нему добавляют название цвета), то вводить вручную 150 новых соответствий не очень удобно.
    Я внутренними средствами 1с сделал, что в этом случае система после ввода первого соответствия(по моей команде) остальные соответствия во внешнюю таблицу dbf заносит сама автоматически находя похожее соответствие. Точно также и во внутренний справочник Номенклатура(у меня все эти 150 тонов это одно наименование. Номер тона, название тона и штрихкод(если есть) загружаются в подчиненный справочник).  Но внутренние средства 1с работают, когда номер тона находится в конце названия. Однако в последнее время многие поставщики стали практиковать то что номер тона находится в середине названия. И тут xBase приходит в ступор и либо вообще не находит ничего в таблице соответствия либо выдаёт непредсказуемые результаты. Поэтому я и попробовал spatialite. Гружу файл соответствия в виртуальную таблицу. А дальше нужный результат ищу SQL запросом. Попробовал. Результат превзошёл все ожидания. Правда пока на win10. Завтра буду пробовать на XP spatialite 4 версию. Спасибо.
    PS Конечно проще всего было бы если бы можно было таблицу значений 1с загружать в виртуальную таблицу. Тогда и spatilite был бы не нужен. Тогда всё это выглядело бы так xBase в ТЗ. ТЗ в Виртуальную. Но я мало знаком с 1sqlite и не знаю есть ли такая возможность.
    « Последняя редакция: 28. Августа 2022 :: 18:14 - OlegY »  
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1043 - 28. Августа 2022 :: 19:05
    Печать  
    OlegY писал(а) 28. Августа 2022 :: 17:12:
    PS Конечно проще всего было бы если бы можно было таблицу значений 1с загружать в виртуальную таблицу. Тогда и spatilite был бы не нужен. Тогда всё это выглядело бы так xBase в ТЗ. ТЗ в Виртуальную. Но я мало знаком с 1sqlite и не знаю есть ли такая возможность. 


    Становится понятнее зачем это...

    1. тз/сз легко перегонятся в базу sqlite, мануаль от Орефкова на преждем месте: https://snegopat.ru/downloads/1sqlite/ файл doc_1023.zip там все хорошо описано.
    Это метод SQLiteBase: УложитьТЗ(ТЗ, ИмяТаблицы, [КакПостоянную]).
    Моих изменений не так много и оригинальнеые методы не сломаны.

    2. "Поэтому приходиться держать множество внешних файлов соответствия формата dbf(по одному на поставщика)"
    Все это можно засунуть либо в одну таблицу 1С, либо в базу sqlite.
    Вот так у меня это выглядит, на табличном поле 1с++ с поставщиком данных от 1sqlite. Импорт заказов из xls с помощью йоксель аналогичен.
    https://gyazo.com/321ed8267bfb37f8d60ff2b6ab0dd187
    https://gyazo.com/046e7292ffad3c7e039e3507e20ae602
    Может натолкнет на некоторые идеи.

    3. Можно делать микс из базы 1С и баз sqlite на диске вот так: https://www.sqlitetutorial.net/sqlite-attach-database/

    4. Strmatch не использую. Сборку реанимировал, да.
    Но перевел на шаблон Орефкова, чтобы она работала как ВК без регистрации в реестре и обеспечил гибридное использование, т.е. она раотает одновлеменно и как ВК для 1С и как плагин для sqlite.
    Она работает, вот только объяснять каждому юзверю почему сортировка немного странная мне как то не охота  Смех
    Обычно использую like, ну можно и pcre, модуль тоже есть.
      
    Наверх
    www  
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1044 - 28. Августа 2022 :: 19:43
    Печать  
         Спасибо большое за подсказки. Буду изучать. Т.к. мой импорт(в существующем виде) мне ещё 20 лет назад написала программист под заказ, а тогда ещё не было ни 1cpp ни 1sqlite.  Год назад у меня появилось время привести его реализацию к современным требованиям. Так как делаю это в свободное от работы время, то этот год ушёл на реализацию автоопределениея полной структуры импортируемой накладной(в том числе номера колонок, положения колонок и разделителей колонок в таблице, строк шапки и дна). Особенно это необходимо после фанридера, когда на ней стоят птички при приёмке товара и фанридер выборочно(не в каждой строке) добавляет на птичках новую колонку, либо может добавить колонки если принтер поставщика полосатит, либо если колонки сфомированы не сплошной вертикальной линией, символами типа | или I(здесь фанридер тоже может колонки создать по разному) а также успел сделать автоопределение Наименования поставщика даже если его реквизитов нет в накладной(это нужно также для доступа к соответствующей таблице соответствия) Сейчас уже могу двигаться дальше. Поэтому с большим интересом прочитал форум в этой ветке. Спасибо вам за ваш труд. И своевременные подсказки))
      
    Наверх
     
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1045 - 28. Августа 2022 :: 21:14
    Печать  
    [quote author=123C333A30560 link=1214205575/1043#1043 date=1661713559][quote author=776F7C65617838364E636F6762207C7B0E0 link=1214205575/1042#1042 date=1661706767]
    Все это можно засунуть либо в одну таблицу 1С, либо в базу sqlite.
    Вот так у меня это выглядит, на табличном поле 1с++ с поставщиком данных от 1sqlite. Импорт заказов из xls с помощью йоксель аналогичен.
    https://gyazo.com/321ed8267bfb37f8d60ff2b6ab0dd187
    https://gyazo.com/046e7292ffad3c7e039e3507e20ae602
    Может натолкнет на некоторые идеи.
       Уже натолкнула. Поставщиков много и много времени занимает просмотр их огромных прайсов с целью сравнения цен. Всё думал, как это автоматизировать. Табличное поле + 1sqlite + Йоксель - это именно то что нужно. Так прайсы присылаются обычно в Екселе, то их можно грузить Йокселем в базу sqlite, а дальше сравнивать их цены находя в разных прайсах подобные наименования. Естественно сюда же можно задействовать и таблицы соответствия.
      
    Наверх
     
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1046 - 29. Августа 2022 :: 16:43
    Печать  
    Это 4я версия билиотеки. Проверил в VirtualBox - в Хрюше грузится.
    На Хрюше ФС.УстТекКаталог не работает, придется мусорить в 1с/bin или в system32.

             Попробовал на реальной XP: ФС.УстТекКаталог - работает. Все интерфейсы грузятся без проблем. Однако столкнулся с другим глюком - перестала работать функция LIKE в запросе. На вин 10 работает, а на XP ничего не находит и выдаёт пустую тз на выходе. Сама виртуальная таблица dbf заполняется полностью всем товаром из файла, т.к. запрос со звездочкой выдаёт все записи из файла dbf. Для успокоения совести попробовал вариант без ФС.УстТекКаталог и с замусориванием BIN 1с содержимым папки mod_spatialite. Ничего не поменялось. Самое интересное, что с внутренними dbf 1c(без спатиалайт) LIKE на XP работает прекрасно.   

    тз/сз легко перегонятся в базу sqlite, мануаль от Орефкова на преждем месте: https://snegopat.ru/downloads/1sqlite/ файл doc_1023.zip там все хорошо описано.
    Это метод SQLiteBase: УложитьТЗ(ТЗ, ИмяТаблицы, [КакПостоянную]).
     
          Попробовал. Этот вариант работает и на 10 и на XP. Пробовал с xBase, но сюда прямо так и просится драйвер fox. В общем остановился на этом варианте. Спасибо за помощь!      
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1047 - 30. Августа 2022 :: 05:48
    Печать  
    OlegY писал(а) 29. Августа 2022 :: 16:43:
    Самое интересное, что с внутренними dbf 1c(без спатиалайт) LIKE на XP работает прекрасно.

    Таблицы 1С видимо прогоняются через движок sqlite встроенный в ВК, а в нем пропатчены like и glob для поддержки русского языка и регистронезависимости.
    Остальные запросы видимо каким то образом перехватывает spatialite, она имеет зависимоть от непропатченой libsqlite3-0.dll
    Так быть не должно, потому что у них еще подключается libiconv-2.dll т.е. поддержка русского языка есть, но наверное регистрозависимая.
    Но судя по исходниткам spatialite, like в ней не перехватывается.

    Т.е. по факту, точно объяснить такое поведение я не могу  Круглые глаза

    « Последняя редакция: 30. Августа 2022 :: 07:04 - Djelf »  
    Наверх
    www  
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1048 - 31. Августа 2022 :: 20:53
    Печать  
    Djelf писал(а) 28. Августа 2022 :: 19:05:
    [quote author=776F7C65617838364E636F6762207C7B0E0 link=1214205575/1042#1042 date=1661706767]
    2. "Поэтому приходиться держать множество внешних файлов соответствия формата dbf(по одному на поставщика)"
    Все это можно засунуть либо в одну таблицу 1С, либо в базу sqlite.


          Попробовал засунуть dbf файлы в базу sqlite как постоянную(в виде файла) Сделал запрос, поиск конкретного наименования во всех таблицах в базе sqlite. Результат в ТЗ отобразился почти мгновенно. Сделал похожий запрос с файлами dbf - перебор всех dbf файлов, импорт каждого во временную таблицу sqlite c помощью xBase, Запрос конкретного значения из временной таблицы sqlite. Дальше заполнение ТЗ с помощью встроенной в 1с функции Заполнить. Итоговый результат в ТЗ отображается через 6сек.  Не знаю может я во втором случае намудрил. Наверное проще было все файлы уложить в одну временную базу sqlite и затем одним запросом. Но не думаю, что было бы быстрее.   В общем Ваше предложение понравилось. Ещё раз спасибо.      
    « Последняя редакция: 31. Августа 2022 :: 22:18 - OlegY »  
    Наверх
     
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1049 - 03. Сентября 2022 :: 08:31
    Печать  
    Здравствуйте, Djelf!

    А скажите пожалуйста в 1sqlite работает запрос такого вида:

    INSERT INTO T_Flg(kod_new,kod_old,naim_o,naim_n,kol_up)
    VALUES('17310','8801046898277','Dental Clinic 2080 з/паста 125г Мягкая защита 1/36','ЗП Дентал клиник 125',1);      ?

    У меня такой запрос с помощью ВыполнитьЗапрос() вываливается с ошибкой, но ошибку никакую в ОписаниеОшибки() не выводит и в таблицу ничего не добавляет.
    Глянул структуру таблицы в которую пытаюсь добавить строку. Это таблица базы SQLITE. Она создавалась методом УложитьТЗ().  В ней тип значения во всех колонках пустой. Может в этом дело?
    Использую 1sqlite.dll от 10.06.2022г.
    « Последняя редакция: 03. Сентября 2022 :: 19:07 - OlegY »  
    Наверх
     
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1050 - 04. Сентября 2022 :: 11:50
    Печать  
    OlegY писал(а) 03. Сентября 2022 :: 08:31:
    Здравствуйте, Djelf!

    А скажите пожалуйста в 1sqlite работает запрос такого вида:

    INSERT INTO T_Flg(kod_new,kod_old,naim_o,naim_n,kol_up)
    VALUES('17310','8801046898277','Dental Clinic 2080 з/паста 125г Мягкая защита 1/36','ЗП Дентал клиник 125',1);      ?

    У меня такой запрос с помощью ВыполнитьЗапрос() вываливается с ошибкой, но ошибку никакую в ОписаниеОшибки() не выводит и в таблицу ничего не добавляет.


        Разобрался. Необходимо в запросе прописывать все колонки таблицы и соответственно все значения(даже пустые). Странно, в описании SQLITE читал, что в данном запросе можно указывать только необходимые данные.
      
    Наверх
     
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1051 - 08. Сентября 2022 :: 08:01
    Печать  
    Djelf писал(а) 28. Августа 2022 :: 19:05:
    [quote author=776F7C65617838364E636F6762207C7B0E0 link=1214205575/1042#1042 date=1661706767]
    Импорт заказов из xls с помощью йоксель аналогичен.
    https://gyazo.com/321ed8267bfb37f8d60ff2b6ab0dd187
    https://gyazo.com/046e7292ffad3c7e039e3507e20ae602
    Может натолкнет на некоторые идеи.


    Здравствуйте Djelf! Скажите пожалуйста, а Йоксель xlsx импортирует? А то я скачал демо конфигурацию с оф. сайта Йокселя.  Попробовал открыть несколько прайс-листов. Везде вылет с одной и той же ошибкой:
      Таб.Открыть (ВыбФайл, ТипФайла, ВыбСжиматьКартинки);
    {Обработка.Вьюер.Форма.Модуль(44)}: Невозможно открыть файл: Возможно, файл не является составным OLE-файлом
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1052 - 08. Сентября 2022 :: 11:37
    Печать  
    OlegY писал(а) 08. Сентября 2022 :: 08:01:
    Djelf писал(а) 28. Августа 2022 :: 19:05:
    [quote author=776F7C65617838364E636F6762207C7B0E0 link=1214205575/1042#1042 date=1661706767]
    Импорт заказов из xls с помощью йоксель аналогичен.
    https://gyazo.com/321ed8267bfb37f8d60ff2b6ab0dd187
    https://gyazo.com/046e7292ffad3c7e039e3507e20ae602
    Может натолкнет на некоторые идеи.


    Здравствуйте Djelf! Скажите пожалуйста, а Йоксель xlsx импортирует? А то я скачал демо конфигурацию с оф. сайта Йокселя.  Попробовал открыть несколько прайс-листов. Везде вылет с одной и той же ошибкой:
      Таб.Открыть (ВыбФайл, ТипФайла, ВыбСжиматьКартинки);
    {Обработка.Вьюер.Форма.Модуль(44)}: Невозможно открыть файл: Возможно, файл не является составным OLE-файлом
       


    Увы, но нет. УжастБухгалтерии, создатель Йокселя, начал делать палагины импорта для Йокселя, но мне их собрать и подключить так и не удалось.
    LibreOffice умеет конвертировать в пакетном режиме, но там придется слегка попарится (передача путей между Wine и Linux) это будет консольное преобразование.
    Импорт не делал (пусть мучаются), а экспорт работает сейчас стабильно.
      
    Наверх
    www  
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1053 - 08. Сентября 2022 :: 12:22
    Печать  
    Djelf писал(а) 08. Сентября 2022 :: 11:37:
    [quote author=4E56455C5841010F775A565E5B194542370 link=1214205575/1051#1051 date=1662624067][quote author=1C323D343E580 link=1214205575/1043#1043 date=1661713559][quote author=776F7C65617838364E636F6762207C7B0E0 link=1214205575/1042#1042 date=1661706767]
    Увы, но нет. УжастБухгалтерии, создатель Йокселя, начал делать палагины импорта для Йокселя, но мне их собрать и подключить так и не удалось.
    LibreOffice умеет конвертировать в пакетном режиме, но там придется слегка попарится (передача путей между Wine и Linux) это будет консольное преобразование.
    Импорт не делал (пусть мучаются), а экспорт работает сейчас стабильно.

        Понял. Спасибо. Тогда попробую через Либре офис напрямую проимпортировать. Он, если не визуализировать окно Либре офиса импортирует довольно сносно. Я так накладные .odt импортирую. Правда чтение всей таблицы одним заходом у меня в 1с 77 не получилось. 1с писала плохой тип переменной. Пришлось использовать внешнюю dll на c#(она тоже обращается к Либре офису, но там нет проблем с плохим типом переменной).
    « Последняя редакция: 08. Сентября 2022 :: 19:48 - OlegY »  
    Наверх
     
    IP записан
     
    OlegY
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 16
    Зарегистрирован: 21. Августа 2022
    Re: 1sqlite
    Ответ #1054 - 30. Сентября 2022 :: 21:04
    Печать  
    Djelf писал(а) 08. Сентября 2022 :: 11:37:
    [quote author=4E56455C5841010F775A565E5B194542370 link=1214205575/1051#1051 date=1662624067][quote author=1C323D343E580 link=1214205575/1043#1043 date=1661713559][quote author=776F7C65617838364E636F6762207C7B0E0 link=1214205575/1042#1042 date=1661706767]
    Импорт не делал (пусть мучаются), а экспорт работает сейчас стабильно.


      Хорошо работает импорт xlsx через ado. Но требуется установка нового пакета от MS: https://www.microsoft.com/en-us/download/confirmation.aspx?id=13255
       Также строка подключения выглядит следующим образом:
    "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + ИмяФайла + ";Extended Properties=""Excel 12.0;HDR=NO;  IMEX=1;""";
    Этот провайдер читает также и xls файлы.
      Для внедрения я использовал готовый пример: https://www.skalnyy.com/1s-universalnaya-zagruzka-iz-excel-obrabotkoj/
       Правда в нём автор напутал с фильтрами в ФС.ВыбратьФайл, поэтому для корректного отображения файлов Эксель необходимо только поправить фильтры.
      
    Наверх
     
    IP записан
     
    Zhenya
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 37
    Зарегистрирован: 18. Октября 2010
    Пол: Женский
    Re: 1sqlite
    Ответ #1055 - 14. Октября 2022 :: 13:47
    Печать  
    Доброго дня всем, кто еще остался на 7.7, а так же знатокам 1с++, 1sqlite и прекрасного класса "ПоставщикДанных" Улыбка

    Столкнулась со странным поведением класса ПоставщикДанных.Справочник во время поиска при установленных отборах: если на ПоставщикДанных наложить несколько условий отбора (больше 2-х) - то во время поиска, неважно посимвольного по колонке, или по целому слову, происходит сбой в табличном поле и на месте найденного появляется последний элемент в списке справочника. Более того ломается весь список в табличном поле - элементы разбегаются в хаотичном порядке, последний элемент, который "встаёт" на место найденного по поиску дублируется множество раз . Порядок элементов восстанавливается, если сделать End - Home и все элементы возвращаются на свои места и даже тот элемент который надо найти, перелистыванием находится на своём месте. Слом происходит именно во время поиска.
    При чём, слом происходит только если искомый элемент не попадает в "окно" табличного поля, отображаемое на форме. Если элемент "виден" в списке - то поиск его проходит нормально.

    Отладка показала, что поиск то работает, и элемент справочника находится, но в момент позиционирования на него
    Код (C++)
    Выбрать все
    ТабличноеПоле.ТекущаяСтрока = ЗначенияВыборки.ПолучитьЗначение(1,1) 
    
    

    в табличном поле позиция найденного элемента заменяется последним элементом справочника!
    Такое ощущение что ломаются какие то внутренние индексы класса связанные с источником данных?

    1сpp 3.2.4.1
    1sqlite 1.0.2.6/3.36.0.26 by Djelf
    ПоставщикДанных 5.0.5 23.05.2014
    ПрямыеЗапросы 1.8.6 22.05.2013

    Может кто-то уже сталкивался и знает как исправить?
      
    Наверх
     
    IP записан
     
    Zhenya
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 37
    Зарегистрирован: 18. Октября 2010
    Пол: Женский
    Re: 1sqlite
    Ответ #1056 - 17. Октября 2022 :: 12:01
    Печать  
    Zhenya писал(а) 14. Октября 2022 :: 13:47:
    Доброго дня всем, кто еще остался на 7.7, а так же знатокам 1с++, 1sqlite и прекрасного класса "ПоставщикДанных" Улыбка

    Столкнулась со странным поведением класса ПоставщикДанных.Справочник во время поиска при установленных отборах: если на ПоставщикДанных наложить несколько условий отбора (больше 2-х) - то во время поиска, неважно посимвольного по колонке, или по целому слову, происходит сбой в табличном поле и на месте найденного появляется последний элемент в списке справочника. Более того ломается весь список в табличном поле - элементы разбегаются в хаотичном порядке, последний элемент, который "встаёт" на место найденного по поиску дублируется множество раз . Порядок элементов восстанавливается, если сделать End - Home и все элементы возвращаются на свои места и даже тот элемент который надо найти, перелистыванием находится на своём месте. Слом происходит именно во время поиска.
    При чём, слом происходит только если искомый элемент не попадает в "окно" табличного поля, отображаемое на форме. Если элемент "виден" в списке - то поиск его проходит нормально.

    Отладка показала, что поиск то работает, и элемент справочника находится, но в момент позиционирования на него
    Код (C++)
    Выбрать все
    ТабличноеПоле.ТекущаяСтрока = ЗначенияВыборки.ПолучитьЗначение(1,1) 
    
    

    в табличном поле позиция найденного элемента заменяется последним элементом справочника!
    Такое ощущение что ломаются какие то внутренние индексы класса связанные с источником данных?

    1сpp 3.2.4.1
    1sqlite 1.0.2.6/3.36.0.26 by Djelf
    ПоставщикДанных 5.0.5 23.05.2014
    ПрямыеЗапросы 1.8.6 22.05.2013

    Может кто-то уже сталкивался и знает как исправить?
    trad писал(а) 17. Октября 2022 :: 07:54:
    ТП ведет себя подобным образом когда не обеспечена уникальность ключа порядка. Копайте в эту сторону

    Хм, начала копать.
    Поскольку поиск делаю по наименованию - ключом порядка выступает ТекущийОбъект.idx_DESCR
    Включила отладку, увидела что при включённых отборах по полям для которых в бд включён отбор по реквизиту - при поиске выбирается индекс с этим реквизитом... - и поиск ломается
    Если в отборе поставщика не используются поля с включёнными отборами - используется индекс по наименованию, как и в ключе порядка - и поиск работает как надо.

    Ушла думать

    Итак да, отключение признака отбор у реквизитов справочника, которые я использую в отборе поставщика данных, проблему решило.
    Интересно, а можно как то влиять на выбор индексов в ПрямомЗапросе, которым пользуется ПоставщикДанных?
      
    Наверх
     
    IP записан
     
    Zhenya
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 37
    Зарегистрирован: 18. Октября 2010
    Пол: Женский
    Re: 1sqlite
    Ответ #1057 - 19. Октября 2022 :: 09:32
    Печать  
    Zhenya писал(а) 17. Октября 2022 :: 12:01:
    1sqlite 1.0.2.6/3.36.0.26 by Djelf

    В общем плюнула на навороты последнего 1sqlite, восстановила старенькую орефковскую версию (1.0.2.6 от 03.02.2012) и всё заработало так как и задумывал автор класса.
      
    Наверх
     
    IP записан
     
    Arbuz
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 58
    Зарегистрирован: 06. Февраля 2019
    Re: 1sqlite
    Ответ #1058 - 28. Ноября 2022 :: 12:24
    Печать  
    А в чём разница версий?

    3.36.0.26 10.06.22 670720
    3.36.0.26 23.11.22 683520
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1059 - 29. Ноября 2022 :: 06:40
    Печать  
    Arbuz писал(а) 28. Ноября 2022 :: 12:24:
    А в чём разница версий?

    3.36.0.26 10.06.22 670720
    3.36.0.26 23.11.22 683520

    +json https://www.sqlite.org/json1.html во второй версии, он внезапно понадобился для диадока

    upd, примерно вот так работает, быстро и просто, так даже проще, чем xml через XPath прогонять
    Код (SQL)
    Выбрать все
    тзФирмы=База.НовыйЗапрос().ВыполнитьЗапрос("
    |SELECT
    | json_extract(value,'$.OrgId') OrgId
    | ,json_extract(value,'$.Boxes[0].BoxId') BoxId
    |FROM json_each('"+СписокФирм+"','$.Organizations')
    |");
     
    
    
    « Последняя редакция: 29. Ноября 2022 :: 12:31 - Djelf »  
    Наверх
    www  
    IP записан
     
    Arbuz
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 58
    Зарегистрирован: 06. Февраля 2019
    Re: 1sqlite
    Ответ #1060 - 29. Ноября 2022 :: 10:35
    Печать  
    О, круть! \ (•◡•) /
      
    Наверх
     
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #1061 - 21. Декабря 2022 :: 18:51
    Печать  
    Djelf!
    Гигантское спасибо за работу над компонентой! И особенно за последнюю версию, где была добавлена работы с JSON. Я обычно пользовался известным разбором через JavaScript, но у него есть существенное ограничение на размер данных (пределы в районе 500К).

    Чтобы не переписывать старый код, то написал свой разбор с помощью 1SQLite.

    Код
    Выбрать все
    //*****************************************************************************
    //	На входе строка в текущей системной кодировке
    Функция РазобратьВСписок(Стр) Экспорт
    
    	оБДSQLite = СоздатьОбъект("SQLiteBase");
    	оБДSQLite.Открыть(":memory:");
    	итJSON = оБДSQLite.НовыйЗапрос().ВыполнитьЗапрос(
    		"SELECT
    		| key as Ключ, atom as Значение, type as Тип, id as [ИД $Число.10.0], parent as [ИДРодителя $Число.10.0]
    		|FROM json_tree('" + Стр + "', '$')", СоздатьОбъект("ИндексированнаяТаблица"));
    
    	итОбъектов = СоздатьОбъект("ИндексированнаяТаблица");
    	итОбъектов.НоваяКолонка("ИД");
    	итОбъектов.НоваяКолонка("Объект");
    
    	ИндексИДОбъекта = итОбъектов.ДобавитьИндекс("ИД", "ИД", 1);
    
    	ТекИДОбъекта = 0;
    	ТекОбъект = СоздатьОбъект("СписокЗначений");
    
    	итОбъектов.НоваяСтрока();
    	итОбъектов.ИД = ТекИДОбъекта;
    	итОбъектов.Объект = ТекОбъект;
    
    	итJSON.ВыбратьСтроки();
    	Пока итJSON.ПолучитьСтроку() = 1 Цикл
    		ТекТип = итJSON.Тип;
    		Если Найти("text,integer,true,false,null", ТекТип) > 0 Тогда
    			ТекЗначение = итJSON.Значение;
    
    		ИначеЕсли Найти("object,array", ТекТип) > 0 Тогда
    			Если итJSON.ИД = 0 Тогда
    				Продолжить; //это уже обработано еще до цикла
    			КонецЕсли;
    
    			ТекЗначение = СоздатьОбъект("СписокЗначений");
    
    			итОбъектов.НоваяСтрока();
    			итОбъектов.ИД = итJSON.ИД;
    			итОбъектов.Объект = ТекЗначение;
    
    		ИначеЕсли ТекТип = "real" Тогда
    			ТекЗначение = Окр(итJSON.Значение, 8); //чтобы не было значений типа 1.19999999999999
    
    		Иначе
    			Сообщить("РазобратьВСписок: Неизвестный тип значения - " + ТекТип + ". Значение " + итJSON.Значение);
    			Продолжить;
    		КонецЕсли;
    
    		Если ТекИДОбъекта <> итJSON.ИДРодителя Тогда
    			ТекИДОбъекта = итJSON.ИДРодителя;
    			Если итОбъектов.НайтиСтроку(ИндексИДОбъекта, ТекИДОбъекта, 0, 1) = 0 Тогда
    				Сообщить("РазобратьВСписок: Какая-то ошибка - не найден объект, который уже должен был быть загружен - " + ТекИДОбъекта);
    				ТекИДОбъекта = -1;
    				Продолжить;
    			КонецЕсли;
    
    			ТекОбъект = итОбъектов.Объект;
    		КонецЕсли;
    
    		ТекОбъект.ДобавитьЗначение(ТекЗначение, Строка(итJSON.Ключ));
    	КонецЦикла;
    
    	Возврат итОбъектов.ПолучитьЗначение(1, "Объект");
    
    КонецФункции //РазобратьВСписок
     
    
    
      
    Наверх
     
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #1062 - 21. Декабря 2022 :: 18:54
    Печать  
    Вдогонку...
    Новый алгоритм оказался примерно в 5 раз быстрее, чем через использование JavaScript
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1063 - 23. Декабря 2022 :: 13:28
    Печать  
    Ветер в поле писал(а) 21. Декабря 2022 :: 18:54:
    Вдогонку...
    Новый алгоритм оказался примерно в 5 раз быстрее, чем через использование JavaScript


    5х это превосходно, JavaScript очень эффективен, но sqlite круче!

    Ты точно уверен что нельзя распарсить через json_each/json_extract?
    Это действительно рекурсивный файл?
    У json_tree оверхед достаточно большой, и хотя ты выбираешь данные без оверхеда, это может иметь значение (скинь файлик).
    Возможно в where лишний мусор стоит убрать на этапе выборки.

    P.S. sqlite невероятно эффективен, а вот почему, читаем неоконченную книгу чуток ниже.

    P.P.S. Кому скучно, читаем как создавалось sqlite и к чему это привело:
    https://www.compileralchemy.com/books/sqlite-internals/
      
    Наверх
    www  
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #1064 - 23. Декабря 2022 :: 14:53
    Печать  
    У меня большинство обменов со сторонним софтом (1с8.3, интеграции с лабораториями, внутренние API) выполнены с использованием JSON. Переписывать их нет ни малейшего желания. Да и увеличение эффективности в сотые доли секунды никогда это не оправдают. Файл JSON в 200К парсится за 0.017 с. JS справляется с этим за 0.079. Смысла в повышении эффективности крайне мало. А вот ограничение в 500К было крайне неприятным - не всякий файл было легко разбить на небольшие фрагменты. Самый большой мой файл JSON размером 3400К распарсился за 1 с. Это в разы быстрее, чем парсинг XML файлов такого объема.
      
    Наверх
     
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #1065 - 23. Декабря 2022 :: 15:20
    Печать  
    А вот небольшое развитие опубликованной выше функции. Добавил возможность селекции. Т.е. с помощью конструкции типа РазобратьВСписок(СтрJSON, "$.analysisGroups") можно получить список с конкретным объектом в JSON
    Можно без затей получить все данные через РазобратьВСписок(СтрJSON). Так получается более универсально и эффективно.

    Код
    Выбрать все
    Функция РазобратьВСписок(Стр, Узел="$") Экспорт
    
    	итJSON = глБДSQLite.НовыйЗапрос().ВыполнитьЗапрос(
    		"SELECT
    		| key as Ключ, atom as Значение, type as Тип, id as [ИД $Число.10.0], parent as [ИДРодителя $Число.10.0]
    		|FROM json_tree('" + Стр + "', '" + Узел + "')", СоздатьОбъект("ИндексированнаяТаблица"));
    
    	Если итJSON.КоличествоСтрок() = 0 Тогда
    		Возврат СоздатьОбъект("СписокЗначений");
    	КонецЕсли;
    
    	итОбъектов = СоздатьОбъект("ИндексированнаяТаблица");
    	итОбъектов.НоваяКолонка("ИД");
    	итОбъектов.НоваяКолонка("Объект");
    
    	ИндексИДОбъекта = итОбъектов.ДобавитьИндекс("ИД", "ИД", 1);
    
    	ТекИДОбъекта = итJSON.ПолучитьЗначение(1, "ИД");
    	ТекОбъект = СоздатьОбъект("СписокЗначений");
    
    	итОбъектов.НоваяСтрока();
    	итОбъектов.ИД = ТекИДОбъекта;
    	итОбъектов.Объект = ТекОбъект;
    
    	итJSON.ВыбратьСтроки();
    	Пока итJSON.ПолучитьСтроку() = 1 Цикл
    		ТекТип = итJSON.Тип;
    		Если Найти("text,integer,true,false,null", ТекТип) > 0 Тогда
    			ТекЗначение = итJSON.Значение;
    
    		ИначеЕсли Найти("object,array", ТекТип) > 0 Тогда
    			Если итJSON.ИД = ТекИДОбъекта Тогда
    				Продолжить; //это уже обработано еще до цикла
    			КонецЕсли;
    
    			ТекЗначение = СоздатьОбъект("СписокЗначений");
    
    			итОбъектов.НоваяСтрока();
    			итОбъектов.ИД = итJSON.ИД;
    			итОбъектов.Объект = ТекЗначение;
    
    		ИначеЕсли ТекТип = "real" Тогда
    			ТекЗначение = Окр(итJSON.Значение, 8); //чтобы не было значений типа 1.19999999999999
    
    		Иначе
    			глВывестиМногострочноеСообщение("РазобратьВСписок2: Неизвестный тип значения - " + ТекТип + ". Значение " + итJSON.Значение);
    			Продолжить;
    		КонецЕсли;
    
    		Если ТекИДОбъекта <> итJSON.ИДРодителя Тогда
    			ТекИДОбъекта = итJSON.ИДРодителя;
    			Если итОбъектов.НайтиСтроку(ИндексИДОбъекта, ТекИДОбъекта, 0, 1) = 0 Тогда
    				глВывестиМногострочноеСообщение("РазобратьВСписок2: Какая-то ошибка - не найден объект, который уже должен был быть загружен - " + ТекИДОбъекта);
    				ТекИДОбъекта = -1;
    				Продолжить;
    			КонецЕсли;
    
    			ТекОбъект = итОбъектов.Объект;
    		КонецЕсли;
    
    		ТекОбъект.ДобавитьЗначение(ТекЗначение, Строка(итJSON.Ключ));
    	КонецЦикла;
    
    	Возврат итОбъектов.ПолучитьЗначение(1, "Объект");
    
    КонецФункции //РазобратьВСписок
     
    
    
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1066 - 24. Декабря 2022 :: 08:24
    Печать  
    Ветер в поле писал(а) 23. Декабря 2022 :: 14:53:
    Самый большой мой файл JSON размером 3400К распарсился за 1 с. Это в разы быстрее, чем парсинг XML файлов такого объема.

    Этот вопрос тоже решаемый, вот этим:  https://github.com/jakethaw/xml_to_json
    Сборка расширения тут: https://cloud.mail.ru/public/XabY/oh13hFeNa
    Правда не все xml`ки видимо съест и пространства имен оставляет, что не есть хорошо.
    Код (SQL)
    Выбрать все
    SELECT load_extension("xml_to_json") as xml_to_json;
    SELECT * from json_tree(xml_to_json('<?xml version="1.0" ?><x><y>тест</y><y>def</y></x>', 0)); 
    
    



    P.S. Вот тут очень большая подборка расширений https://github.com/nalgeon/sqlean
    Собираются православным gcc без всяких плясок с бубном.
    « Последняя редакция: 24. Декабря 2022 :: 13:34 - Djelf »  
    Наверх
    www  
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #1067 - 26. Декабря 2022 :: 19:28
    Печать  
    Спасибо!

    Достаточно быстро конвертирует, но необходима подготовка перед конвертацией (замена апострофов на кавычки), ну и после конвертации некоторые мои файлы не парсятся потом через json_tree - ругается "Ошибка подстановки текстового параметра  - Плохое имя параметра". Скорее всего это заморочки парсера. Может какие-нибудь нечитаемые символы сбивают его с толку
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1068 - 27. Декабря 2022 :: 04:47
    Печать  
    Ветер в поле писал(а) 26. Декабря 2022 :: 19:28:
    Спасибо!

    Достаточно быстро конвертирует, но необходима подготовка перед конвертацией (замена апострофов на кавычки), ну и после конвертации некоторые мои файлы не парсятся потом через json_tree - ругается "Ошибка подстановки текстового параметра  - Плохое имя параметра". Скорее всего это заморочки парсера. Может какие-нибудь нечитаемые символы сбивают его с толку


    Все верно, лучше ТекстДляПарсинга засовывать через УстановитьПараметр, иначе ТекстДляПарсинга будет обрабатываться метапарсером 1sqlite и это получается ~20% медленее и приводит вот к таким казусам. Т.е. вот так будет и безопаснее и быстрее:
    Код (SQL)
    Выбрать все
    Запрос = База.НовыйЗапрос();
    Запрос.Подготовить(ТестЗапроса);
    Запрос.УстановитьПараметр("@ТекстJson", ТекстJson);
    тз = Запрос.Выполнить(); 
    
    
      
    Наверх
    www  
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #1069 - 09. Января 2023 :: 11:35
    Печать  
    Djelf писал(а) 27. Декабря 2022 :: 04:47:
    Все верно, лучше ТекстДляПарсинга засовывать через УстановитьПараметр, иначе ТекстДляПарсинга будет обрабатываться метапарсером 1sqlite и это получается ~20% медленее и приводит вот к таким казусам. Т.е. вот так будет и безопаснее и быстрее:
    Код (SQL)
    Выбрать все
    Запрос = База.НовыйЗапрос();
    Запрос.Подготовить(ТестЗапроса);
    Запрос.УстановитьПараметр("@ТекстJson", ТекстJson);
    тз = Запрос.Выполнить(); 
    
    


    Переписал на параметризированный запрос. Ошибки ушли, скорость обработки существенно возросла.
    Спасибо еще раз!
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1070 - 09. Января 2023 :: 13:12
    Печать  
    Небольшое Новогоднее обновление на движок 3.41.0.26
    https://cloud.mail.ru/public/9znr/ZJ6ULE9aR
    Задержка выпусков обусловлена тем, что сначала почти ничего интересного (для меня, да и никто не хотел) не происходило.
    Потом добавили  RIGHT JOIN (это я уже научился избегать, мало уже интересно).
    Но почти сразу добавили отрицатльный фильтр выборки Bloom (который глючил не с базами 1С, а с моими сторонними базами sqlite).
    Описание Bloom:
    https://ru.wikipedia.org/wiki/%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80_%D0%91%D0%BB%...
    Сейчас (на моих тестах и в продакшен) работает нормально.

    P.S. Все изменения движка sqlite тут: https://www.sqlite.org/draft/changes.html

    P.P.S. Будут проблемы, давайте тест для воспроизведения, может что-то и получится исправить.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1071 - 06. Апреля 2023 :: 13:56
    Печать  
    Djelf, подскажи пожалуйста. Ты компилил 1sqlite без опции SQLITE_ENABLE_UPDATE_DELETE_LIMIT? Просто понадобилось удалять как

    DELETE FROM table
    WHERE search_condition
    ORDER BY criteria
    LIMIT row_count OFFSET offset;

    Но сейчас так не дает. Полагаю, что без опции скомпилировано.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1072 - 07. Апреля 2023 :: 05:08
    Печать  
    alyuev писал(а) 06. Апреля 2023 :: 13:56:
    Но сейчас так не дает. Полагаю, что без опции скомпилировано.

    Глянул внимательнее.
    Судя по мануали https://sqlite.org/compile.html

    Цитата:
    SQLITE_ENABLE_UPDATE_DELETE_LIMIT

    This option enables an optional ORDER BY and LIMIT clause on UPDATE and DELETE statements.

    If this option is defined, then it must also be defined when using the Lemon parser generator tool to generate a parse.c file.
    Because of this, this option may only be used when the library is built from source, not from the amalgamation or from the collection of pre-packaged C files provided for non-Unix like platforms on the website.

    Т.е. при сборке 1sqlite c монолитным amalgamation эта опция ничего не даст.
    Может когда-то это работало, зачем и когда отключили я не нашел.
    « Последняя редакция: 07. Апреля 2023 :: 08:42 - Djelf »  
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1073 - 28. Апреля 2023 :: 13:49
    Печать  
    Спасибо. Понятно.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    noknown
    YaBB Newbies
    *
    Отсутствует


    Спасибо за 1C++!

    Сообщений: 2
    Местоположение: Россия
    Зарегистрирован: 02. Мая 2023
    Пол: Мужской
    Re: 1sqlite
    Ответ #1074 - 02. Мая 2023 :: 22:46
    Печать  
    Djelf, доброго времени суток! Не планируется ли доработка оптимизации запросов с условиями IN? А то как-то даже обидно: древняя 1.0.2.3 выполняет за 200мсек, а последняя - и за 200 секунд не справляется... Кое-где я запросы попеределал, но не везде...
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1075 - 03. Мая 2023 :: 12:35
    Печать  
    noknown писал(а) 02. Мая 2023 :: 22:46:
    Djelf, доброго времени суток! Не планируется ли доработка оптимизации запросов с условиями IN? А то как-то даже обидно: древняя 1.0.2.3 выполняет за 200мсек, а последняя - и за 200 секунд не справляется... Кое-где я запросы попеределал, но не везде...

    Оптимизацию по IN в sqlite отключить сложно:
    - при компиляции можно вообще отключить поддержку IN, но это нам не надо;
    - такой опции в pragma нет;
    - в sqlite3_test_control тоже нет отключения (это в консольке sqlite используется, но можно и из вк чуток ткнуть);
    - в sqlite3_index_info IN попадет как "=" т.е. и тут не засечь
    - вроде есть что-то по этому поводу: sqlite3_vtab_in, но как и где это применить я в недоумении (покрутил чуток, но кажется, это так не работает как я это понимаю);

    В проблемным запросах нужно просто "+" поставить перед проблемным полем, т.е. +Таблица.Поле IN(...) это не сложно и это можно очень быстро поправить.
    Обычно эта оптимизация может такие запросы ускорить, но может и замедлить, поэтому "+" в проблемных запросах и все.
      
    Наверх
    www  
    IP записан
     
    noknown
    YaBB Newbies
    *
    Отсутствует


    Спасибо за 1C++!

    Сообщений: 2
    Местоположение: Россия
    Зарегистрирован: 02. Мая 2023
    Пол: Мужской
    Re: 1sqlite
    Ответ #1076 - 05. Мая 2023 :: 15:53
    Печать  
    Djelf писал(а) 03. Мая 2023 :: 12:35:
    В проблемным запросах нужно просто "+" поставить перед проблемным полем, т.е. +Таблица.Поле IN(...) это не сложно и это можно очень быстро поправить.
    Обычно эта оптимизация может такие запросы ускорить, но может и замедлить, поэтому "+" в проблемных запросах и все.


    Охххх. Дай Джа тебе здоровья, успехов в делах и долгих лет! Поставил в запросах плюсы и всё взлетело! Спасибо тебе огромное милчеловек! Храни тебя Джа!
      
    Наверх
     
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #1077 - 29. Мая 2023 :: 19:00
    Печать  
    У меня какой-то невозможный глюк. После обновления с версии 3.16.2.14 на более новые, перестал работать LIKE. Причем работает только при поиске по одной букве. Т.е. по условию Спр.Descr collate _1C LIKE 'иванов%' ничего не найдет.
    По условию Спр.Descr collate _1C LIKE '%иванов%' ищет все, но попадают, конечно еще и отчества. Но самое главное, что тут поиск без индекса.
    По условию Спр.Descr collate _1C LIKE 'и%' нормально ищет используя индекс. А добавляешь еще хотя бы одну букву и ничего не находит.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1078 - 30. Мая 2023 :: 09:54
    Печать  
    Ветер в поле писал(а) 29. Мая 2023 :: 19:00:
    У меня какой-то невозможный глюк. После обновления с версии 3.16.2.14 на более новые, перестал работать LIKE. Причем работает только при поиске по одной букве. Т.е. по условию Спр.Descr collate _1C LIKE 'иванов%' ничего не найдет.
    По условию Спр.Descr collate _1C LIKE '%иванов%' ищет все, но попадают, конечно еще и отчества. Но самое главное, что тут поиск без индекса.
    По условию Спр.Descr collate _1C LIKE 'и%' нормально ищет используя индекс. А добавляешь еще хотя бы одну букву и ничего не находит.

    Та же самая ерунда что чуть выше с IN, в 3.16.2 индекс по LIKE не использовался, можешь сам проверить с помощью "explain QUERY PLAN " +ТекстЗапроса.
    В принципе он и не должен работать, я сейчас проверил в коде, индексы я разрешил только по примитивным сравнениям (больше, меньше равно в разных сочетаниях).
    Где-то я индексу по LIKE кислород видать не перекрыл (см. ниже, там все интереснее происходит).
    Реализовать будет сложно, а вот отключить попробую.

    sqlite подает запрос на поиск индекса в 1sqlite:
    WHERE Автомобили.DESCR  LIKE 'автом%'
    Подбор индекса для таблицы SC7649 :
         Ограничения: DESCR>=; DESCR<; DESCR like;
         Выбран индекс DESCR: UPPER(DESCR)
         Стоимость: 10

    И подсовывает уже при выполнении запроса DESCR>='автом' и DESCR< 'автон', (это видно уже при explain+ТекстЗапроса) а потом уже видимо хочет прогнать like, но так это не работает, должно быть DESCR< 'автояяяяяяяяяяяяяяяяяяяяяя'.
    А какого лешего поиск работает с одной буковой мне вообще никак не понятно. Не должно работать, ну вот просто не должно и все!

    P.S. Сейчас стоит отключить индекс через +Автомобили.DESCR.

    P.P.S. Лучше попробуй fts5 с триграмным токинайзером, это значительно круче!
    Тут обсуждали https://forum.mista.ru/topic.php?id=886147&page=1
    « Последняя редакция: 30. Мая 2023 :: 12:23 - Djelf »  
    Наверх
    www  
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #1079 - 31. Мая 2023 :: 06:28
    Печать  
    Djelf писал(а) 30. Мая 2023 :: 09:54:
    Та же самая ерунда что чуть выше с IN, в 3.16.2 индекс по LIKE не использовался, можешь сам проверить с помощью "explain QUERY PLAN " +ТекстЗапроса.
    В принципе он и не должен работать, я сейчас проверил в коде, индексы я разрешил только по примитивным сравнениям (больше, меньше равно в разных сочетаниях).
    Где-то я индексу по LIKE кислород видать не перекрыл (см. ниже, там все интереснее происходит).
    Реализовать будет сложно, а вот отключить попробую.

    sqlite подает запрос на поиск индекса в 1sqlite:
    WHERE Автомобили.DESCR  LIKE 'автом%'
    Подбор индекса для таблицы SC7649 :
         Ограничения: DESCR>=; DESCR<; DESCR like;
         Выбран индекс DESCR: UPPER(DESCR)
         Стоимость: 10

    И подсовывает уже при выполнении запроса DESCR>='автом' и DESCR< 'автон', (это видно уже при explain+ТекстЗапроса) а потом уже видимо хочет прогнать like, но так это не работает, должно быть DESCR< 'автояяяяяяяяяяяяяяяяяяяяяя'.
    А какого лешего поиск работает с одной буковой мне вообще никак не понятно. Не должно работать, ну вот просто не должно и все!

    P.S. Сейчас стоит отключить индекс через +Автомобили.DESCR.

    P.P.S. Лучше попробуй fts5 с триграмным токинайзером, это значительно круче!
    Тут обсуждали https://forum.mista.ru/topic.php?id=886147&page=1


    Большое спасибо! А я уж было подумал, что у меня какой-то невозможный глюк - у всех всё работает и не жалуются - один я с проблемой...
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1080 - 31. Мая 2023 :: 10:57
    Печать  
    Ветер в поле писал(а) 31. Мая 2023 :: 06:28:
    Большое спасибо! А я уж было подумал, что у меня какой-то невозможный глюк - у всех всё работает и не жалуются - один я с проблемой...


    Рано было спасибо... Вот теперь проверяй!
    Вроде исправлено в 1sqlite_3.40.1.28 https://cloud.mail.ru/public/9znr/ZJ6ULE9aR

    При поиске по like без % в начале, сначала будет начат поиск индекса и предфильтра.
    Т.е. при descr like 'аа%' сначала будет добавлен предфильтр по индексу, как descr between 'аа' and 'аб'
    В соответствии с collate _1c в отобранные записи попадет 'аабxxx' и 'аасxxx', а ''абххх' не попадет.
    То что осталось после фильтра прогонится через like.

    P.S. Оно должно было бы работать, и имело шанс так работать, без моего вмешательства, но я где-то сломал кусочек кода (не могу найти где) Круглые глаза
    Ибо запрос descr between 'аа' and 'аб' сломалось на смене версий 3.25-3.27
    Посыпаю голову пеплом, такого теста у меня не было.
    Это очень редкий случай использования collate _1c с between.
    « Последняя редакция: 31. Мая 2023 :: 13:52 - Djelf »  
    Наверх
    www  
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1081 - 02. Июня 2023 :: 07:49
    Печать  
    Здравствуйте!

    Есть несколько вопросов по вашей компоненте.

    1) По команде "ВыполнитьЗапрос(ТекстЗапроса)" возвращается ТаблицаЗначений с результатами.
    Можно ли как-то сделать, чтобы результаты возвращались в ИндексированнойТаблице?
    Или чтобы эта команда заполняла результатами запроса переданную в параметре ИндексированнуюТаблицу?

    2) Можно ли с помощью этой компоненты создать локальную базу sqlite и поместить в нее результаты запроса? Если да, то как это сделать?

    3) Можно ли эту компоненту использовать из 1С8-ки?
    Есть мысль попробовать сделать выгрузку из 7-ки в sqlite-базу, а потом в 8-ке загрузить эти данные.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1082 - 02. Июня 2023 :: 14:31
    Печать  
    Сначала читаем читаем справку в chm: https://snegopat.ru/downloads/1sqlite/
    По п.1. в ит запрос sqlite выгрузить можно (см.chm), загрузить из ит в sqlite сложно, из-за отсутствия строгой типизации колонок, поэтому это не реализовано.
    По п.2. создаем базу не в памяти, а в файле (см.chm).
    Дальше с этой файловой базой в формете sqlite можно работать стандартными sql командами/запросами.
    Можно совмещать запросы к файловой базе в формате sqlite и к файловой базе 1С 7.7 в одном запросе.
    По п.3. из 8ки базу нужно цеплять не этой ВК, а другой от того же автора https://forum.mista.ru/topic.php?id=882691

    P.S. Автором этой ВК я не являюсь, я всего лишь "пропаданец" на ее сопровождение и некоторое развитие.
    « Последняя редакция: 02. Июня 2023 :: 16:56 - Djelf »  
    Наверх
    www  
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1083 - 04. Июня 2023 :: 08:22
    Печать  
    Djelf писал(а) 02. Июня 2023 :: 14:31:
    Сначала читаем читаем справку в chm: https://snegopat.ru/downloads/1sqlite/

    Справку прочитал. Но не все ответы я там нашел.

    Djelf писал(а) 02. Июня 2023 :: 14:31:
    По п.1. в ит запрос sqlite выгрузить можно (см.chm)...

    Конкретно про "ИндексированнуюТаблицу" в справке не написано.
    Вот что там написано:
    "Если параметр Приемник объект, реализованный в других компонентах для приема результата запроса SQLite, то возвращаемое значение определяется этим объектом, и должно быть описано в документации к сторонней компоненте."
    "При выполнении запросов на выборку, куда и как именно будут получены результаты запроса, и что будет возвращено методом, зависит от параметра Приемник, и переданного ему параметра ПараметрДляПриемника. В параметре Приемник должен быть передан объект, умеющий принимать результат выполнения запроса SQLite и формировать возвращаемое из метода значение. Такие объекты могут быть реализованы в других внешних компонентах."

    Не понятно, как это отработает, если передать параметром ИндексированнуюТаблицу.
    Надо наверно пробовать?

    Djelf писал(а) 02. Июня 2023 :: 14:31:
    По п.2. создаем базу не в памяти, а в файле (см.chm).
    Дальше с этой файловой базой в формете sqlite можно работать стандартными sql командами/запросами.
    Можно совмещать запросы к файловой базе в формате sqlite и к файловой базе 1С 7.7 в одном запросе.

    Но ведь объект "SQLiteQuery" создается методом "НовыйЗапрос()" объекта "SQLiteBase". То есть он как бы "привязан" к конкретной базе (либо к базе в sqlite-формате, либо к 1С7.7-базе).
    Если в тексте запроса будет обращение к двум разным базам, как это указывается?
      
    Наверх
     
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1084 - 04. Июня 2023 :: 08:31
    Печать  
    Djelf писал(а) 02. Июня 2023 :: 14:31:
    По п.3. из 8ки базу нужно цеплять не этой ВК, а другой от того же автора https://forum.mista.ru/topic.php?id=882691

    Прочитал спасибо! Появилась такая идея.
    Возможно ли с помощью этих компонент (1sqlite и v8sqlite) из одной 1С-базы подключиться к другой 1С-базе и работать сразу с обеими базами?
    Например, из 1С77 подключиться сразу к базе 1С8 (или наоборот), и сразу прямыми запросами извлекать нужные данные из обеих баз, конвертировать их, и записывать в "целевую" базу.
    Можно так сделать?
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1085 - 04. Июня 2023 :: 10:09
    Печать  
    Нет, напрямую через память никак, только через общий файл sqlite.
    Но его можно открыть одновременно и из 7ки и из 8ки.
    В принципе 7ку можно подцепить по ole и рулить ей со стороны 8ки.
    Должно сработать...

    Хотя... видимо можно передавать данные через строку в формате json
    https://www.sqlite.org/json1.html
    Тогда можно и через память. Как-то так должно быть:
    Код (SQL)
    Выбрать все
    SELECT
    	json_object(Автомобили.ID,trim(Автомобили.DESCR))
    FROM Справочник_Автомобили AS Автомобили
     
    
    

    Не проверял как оно по ole в 8ку поступит.
      
    Наверх
    www  
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1086 - 04. Июня 2023 :: 11:05
    Печать  
    Djelf писал(а) 04. Июня 2023 :: 10:09:
    ...
    В принципе 7ку можно подцепить по ole и рулить ей со стороны 8ки.
    Должно сработать...

    Но использование OLE исключает использование 1sqlite и прямых запросов для работы с данными 1С7-базы. Правильно я понимаю?

    Значит, если захотеть работать прямыми запросами и с 1С7-кой и с 1С8-кой, то оптимальный вариант - это промежуточная sqlite-база.
    Так?

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


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1087 - 04. Июня 2023 :: 11:08
    Печать  
    Да нет, пишем обработку на стороне 7ки, дергаем ее по ole с параметрами из 8ки, обработка в 7ке пишет в базу sqlite, 8ка потом забирает.
    И см. обновление выше. Через json видимо тоже должно сработать.
      
    Наверх
    www  
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1088 - 04. Июня 2023 :: 11:36
    Печать  
    Djelf писал(а) 04. Июня 2023 :: 11:08:
    Да нет, пишем обработку на стороне 7ки, дергаем ее по ole с параметрами из 8ки, обработка в 7ке пишет в базу sqlite, 8ка потом забирает.
    И см. обновление выше. Через json видимо тоже должно сработать.

    Понял, спасибо.

    А еще подскажи пожалуйста по вопросам, которые я выше задавал, про ИндексированнуюТаблицу и про совмещение в одном запросе обращений к двум базам:
    zelenprog писал(а) 04. Июня 2023 :: 08:22:
    Конкретно про "ИндексированнуюТаблицу" в справке не написано.
    Не понятно, как это отработает, если передать параметром ИндексированнуюТаблицу.
    Надо наверно пробовать?

    Но ведь объект "SQLiteQuery" создается методом "НовыйЗапрос()" объекта "SQLiteBase". То есть он как бы "привязан" к конкретной базе (либо к базе в sqlite-формате, либо к 1С7.7-базе).
    Если в тексте запроса будет обращение к двум разным базам, как это указывается?

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


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1089 - 04. Июня 2023 :: 11:58
    Печать  
    zelenprog писал(а) 04. Июня 2023 :: 11:36:
    А еще подскажи пожалуйста по вопросам, которые я выше задавал, про ИндексированнуюТаблицу и про совмещение в одном запросе обращений к двум базам:
    [quote author=243B323B302E2C31395E0 link=1214205575/1083#1083 date=1685866944]
    Конкретно про "ИндексированнуюТаблицу" в справке не написано.
    Не понятно, как это отработает, если передать параметром ИндексированнуюТаблицу.
    Надо наверно пробовать?

    Но ведь объект "SQLiteQuery" создается методом "НовыйЗапрос()" объекта "SQLiteBase". То есть он как бы "привязан" к конкретной базе (либо к базе в sqlite-формате, либо к 1С7.7-базе).
    Если в тексте запроса будет обращение к двум разным базам, как это указывается?


    ит=СоздатьОбъект("ИндексированнаяТаблица");
    ВыполнитьЗапрос(ТекстЗапроса,ит);

    Фишка 1sqlite в том что не либо, а одновременно!
    И подключить можно несколько внешних sqlite баз (не 2 базы 1С 7.7, а только одна база 1С 7.7)
    Код (SQL)
    Выбрать все
    База.НовыйЗапрос().ВыполнитьЗапрос("ATTACH DATABASE '"+ФайлБазы+"' AS '"+ИмяСхемы+"';",0); 
    
    

    Обращение к базе sqlite, если имена таблиц не пересекаются, можно просто по имени, если пересекаются как JOIN ИмяСхемы.ИмяТаблицы AS МояПрелесть

    У мне так все интеграции и сделаны, внешняя база в sqlite, поле ID там есть, типизация данных из базы sqlite в 7.7 работает.
    Таблицы в запросах из разных источников связываются - нет проблем.
    Транзакции тоже раздельные получаются... красота!
      
    Наверх
    www  
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1090 - 04. Июня 2023 :: 12:42
    Печать  
    Djelf, все понял, спасибо!
    Буду пробовать.
      
    Наверх
     
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1091 - 05. Июня 2023 :: 15:22
    Печать  
    Интересно, а с какого момента имена полей в запросе стали регистрозависимыми? Перестал работать поиск по реквизту в справочнике. Стало ругаться, что что такого поля нет. Версия 1sqlite 3.40.1.25. Откатил до 3.25.1 - работает. Буду искать, где перестало...
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1092 - 05. Июня 2023 :: 15:36
    Печать  
    Перестало работать с версии 3.32.3.24. На 1sqlite_3.30.0.23 - работает.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1093 - 06. Июня 2023 :: 08:55
    Печать  
    alyuev писал(а) 05. Июня 2023 :: 15:36:
    Перестало работать с версии 3.32.3.24. На 1sqlite_3.30.0.23 - работает.

    Тест давай, у меня работает.
    Код (SQL)
    Выбрать все
    SELECT аВто.dEscr FROM справОчник_автомоБили AS Авто
     
    
    

    Подчеркивание в поле таблицы?
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1094 - 06. Июня 2023 :: 09:43
    Печать  
    Подчеркивания нет.

    Код (SQL)
    Выбрать все
    SELECT Спр.русск FROM	Справочник_ЯзыкиФраз as Спр 
    
    


    Имя поля в конфигураторе "Русск"
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1095 - 06. Июня 2023 :: 09:46
    Печать  
    А с "deScr" таки да работает. Видимо вшито в компоненту своё имя? Или потому что английское?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1096 - 06. Июня 2023 :: 11:09
    Печать  
    alyuev писал(а) 06. Июня 2023 :: 09:46:
    А с "deScr" таки да работает. Видимо вшито в компоненту своё имя? Или потому что английское?

    Где-то сломалось Русское-НеРусское.
    Понял, воспроизвел, все верно, я опять все сломал.
    P.S. Мерд... надо бы тесты как в sqlite устроить на все случаи жизни, но боюсь моей жизни для этого не хватит.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1097 - 06. Июня 2023 :: 15:52
    Печать  
    Кстати, с поиском по LIKE 'БлаБла%' - проверил версии где работало и где перестало. Последняя рабочая, которая у меня нашлась - 316214. И следующая у меня была 3_22_019. На ней уже не работает поиск.

    И на последней _3_40_1_28 - тоже не работает запрос:

    Код (SQL)
    Выбрать все
    SELECT
     Спр.deScr
    FROM Справочник_Клиенты as Спр
    WHERE Спр.DESCR LIKE 'яя_ю%' 
    
    


    забавно, а такой на ней же работает:

    Код (SQL)
    Выбрать все
    SELECT
     Спр.deScr
    FROM Справочник_ЯзыкиФраз as Спр
    WHERE Спр.Русск LIKE 'ТСД%' 
    
    
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1098 - 06. Июня 2023 :: 16:10
    Печать  
    И еще нашел странное поведение для
    Код (SQL)
    Выбрать все
    LIKE '%zz_%'
     
    
    

    не учитывает символ подчеркивания _
    Как будто его просто исключает из строки.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    nicesc
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 53
    Зарегистрирован: 13. Июня 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #1099 - 06. Июня 2023 :: 16:25
    Печать  
    alyuev писал(а) 06. Июня 2023 :: 16:10:
    И еще нашел странное поведение для
    Код (SQL)
    Выбрать все
    LIKE '%zz_%'
     
    
    

    не учитывает символ подчеркивания _
    Как будто его просто исключает из строки.


    Знак процента представляет ноль, один или несколько чисел или символов. Подчеркнутый символ представляет собой одно число или символ. Эти символы могут использоваться в комбинациях.
    Для экранирования можно использовать знак ?
      
    Наверх
     
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1100 - 06. Июня 2023 :: 16:39
    Печать  
    О! Спасибо.

    Еще решение вопроса поиска - использовать trim() :
    Код (SQL)
    Выбрать все
    WHERE trim(deScr1) LIKE 'яя_%' 
    
    
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1101 - 06. Июня 2023 :: 16:48
    Печать  
    Напишу для памятки, в качестве заметки, как экранировать:

    Код (SQL)
    Выбрать все
    LIKE 'zz?_%' ESCAPE '?' 
    
    


    но вместо ? можно использовать любой символ, например, \ @  и пр...
    Код (SQL)
    Выбрать все
    LIKE 'zz\_%' ESCAPE '\' 
    
    


    И, как оказалось, включение экранирования - сделало рабочим запрос на начало строки! И сортировку меняет.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1102 - 07. Июня 2023 :: 06:52
    Печать  
    Я прочитал, что для компоненты v8sqlite надо использовать кодировку UTF-16.
    Получается, для 1sqlite также надо использовать эту же кодировку?
    Предполагается, что и из 1С7 и из 1С8 будет выполняться работа с одной внешней sqlite-базой.

    Как при работе из 1С7 установить для внешней базы кодировку UTF-16?

    Вот так правильно будет?
    Код (C++)
    Выбрать все
    	лЛокБаза = СоздатьОбъект("SQLiteBase");
    	лЛокБаза.Открыть("C:\Выгрузка_из_77.db");
    	лЗапрос = лЛокБаза.НовыйЗапрос();
        лЗапрос.ВыполнитьЗапрос("pragma encoding='UTF-16'");
     
    
    

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


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1103 - 07. Июня 2023 :: 08:22
    Печать  
    У Орефкова написано utf-16 стоит использовать "из соображений производительности". На самом деле это не так критично.
    Но у него написано что и с utf-8 компонента для 8ки работает.
    Не уверен что 7ка в utf-16 запишет, перекодирование из 7ки поступает в sqlite в utf-8, так наверное не сработает.
    Видимо формат базы стоит оставить в uft-8.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1104 - 07. Июня 2023 :: 10:38
    Печать  
    Откатился на _3_40_1_26.
    В _3_40_1_28 один запрос перестал работать. По всей видимости в индекс не попал, не дождался завершения работы запроса.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1105 - 07. Июня 2023 :: 11:33
    Печать  
    Из 1С7 записываю данные во внешний sqlite-файл (таблицу "Контрагенты") командой "лЛокБаза.УложитьТЗ(лТЗ, "Контрагенты77", 1)".
    В ТаблицеЗначений есть поля "Наименование", "ИНН".

    В sqlite-базе почему-то наименования контрагентов обрезаются. Длина поля получается 22 символа.
    Почему так получается? Как сделать, чтобы в базу записалось полное наименование?

    И еще при записи из 1С7 в sqlite-базе вначале всех полей добавился символ "S". Откуда он берется? В 1С8 я читаю эту таблицу с помощью ADO, и все данные возвращаются с символом "S". Например, из записываю ИНН "6027057894", а он записывается как "S6027057894", и читается в 1С8 тоже как "S6027057894".
    Как этого избежать?
      
    Наверх
     
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1106 - 07. Июня 2023 :: 11:36
    Печать  
    (1105) В ТЗ, которая будет укладываться в базу, поля нужно типизировать явно. Указывать тип в методе ТЗ.НоваяКолонка()
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1107 - 07. Июня 2023 :: 11:40
    Печать  
    На 3_40_1_28 не взлетел такой запрос:

    Код (SQL)
    Выбрать все
    SELECT
    	Журнал.IDDOCDEF||Журнал.IDDOC as [Док:Документ],
    	PARENTVAL,
    	SubStr(PARENTVAL,7,9) as [Кл:Справочник.Клиенты],
    	CASE WHEN ПН.ЗаказПоставщику=1 THEN 'Order to supplier' WHEN ПН.Оригинал=2 THEN 'Advances invoice' WHEN ПН.Оригинал=3 THEN 'Proforma Invoice' When Сч.Давальческая=1 Then 'Order GIVEN' When Сч.ТипСчета=0 Then 'Счет-Заказ' ELSE '' END as НазвИнвойса,
    	CASE WHEN ПН.ЗаказПоставщику=1 THEN 1 WHEN ПН.Оригинал=2 THEN 2 WHEN ПН.Оригинал=3 THEN 3 When Сч.Давальческая=1 Then 4 When Сч.ТипСчета=0 Then 5 ELSE 0 END as ДляСорт
    FROM
    	__1S_CRDOC As Отбор
    Inner JOIN
    	Журнал on Журнал.IDDOC = Отбор.ChildID
    Left JOIN
    	Документ_ПриходнаяНакладная As ПН On ПН.IDDOC=Отбор.ChildID
    Left JOIN
    	Документ_Счет As Сч On Сч.IDDOC=Отбор.ChildID
    WHERE
    	(MDID=:ГрафаОтбора.КлиентПриходных Or MDID=:ГрафаОтбора.КлиентСчетов)
    	AND Журнал.Date between '20220513' and '20230613'
    	AND (Сч.ТипСчета=0))
    	AND PARENTVAL = 'B1' || :ВидСправочника.Клиенты || :Клиент
    	AND CLOSED&1=1 	-- ограничение на выбор записей только проведенных документов. Фактически при корректных записях в базе, это условие '&1' лишнее, но при каких то «глюках» таким условием можно «отловить» непроведенные документы с существующими движениями (к сожалению такое может встречаться).
    ORDER BY ДляСорт, Журнал.Date 
    
    


    Из плана запроса 28й версии:
    SCAN Отбор VIRTUAL TABLE INDEX 1:PARENT;    13 !" 0p .!%
    SCAN Журнал VIRTUAL TABLE INDEX 1:ACDATETIM;    14 !" 0
    SCAN ПН VIRTUAL TABLE INDEX 0:ID;    10 !  0p nHyd!   kM LEFT-JOIN
    SCAN Сч VIRTUAL TABLE INDEX 0:ID;    10 !  0p nHyd!   kM LEFT-JOIN
    USE TEMP B-TREE FOR ORDER BY


    На 26й версии
    SCAN Отбор VIRTUAL TABLE INDEX 1:PARENT;    13 !" 0p .!%
    SCAN Журнал VIRTUAL TABLE INDEX 0:IDDOC;    21 !  0p nHy$|0`
    SCAN ПН VIRTUAL TABLE INDEX 0:ID;    10 !  0p nHyd!
    SCAN Сч VIRTUAL TABLE INDEX 0:ID;    10 !  0p nHyd!
    USE TEMP B-TREE FOR ORDER BY
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1108 - 07. Июня 2023 :: 13:54
    Печать  
    alyuev писал(а) 07. Июня 2023 :: 11:36:
    (1105) В ТЗ, которая будет укладываться в базу, поля нужно типизировать явно. Указывать тип в методе ТЗ.НоваяКолонка()

    Спасибо! Помогло.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1109 - 08. Июня 2023 :: 04:20
    Печать  
    alyuev писал(а) 07. Июня 2023 :: 11:40:
    На 3_40_1_28 не взлетел такой запрос:

    AND Журнал.Date between '20220513' and '20230613'

    Из плана запроса 28й версии:
    SCAN Журнал VIRTUAL TABLE INDEX 1:ACDATETIM;    14 !" 0

    Ну так подави использование ACDATETIM
    AND +Журнал.Date between '20220513' and '20230613'
    Это не хак, это нормальный задокументированный путь.
    Планировщику иногда помогать надо...
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1110 - 08. Июня 2023 :: 09:26
    Печать  
    zelenprog писал(а) 07. Июня 2023 :: 11:33:
    Из 1С7 записываю данные во внешний sqlite-файл (таблицу "Контрагенты") командой "лЛокБаза.УложитьТЗ(лТЗ, "Контрагенты77", 1)".
    В ТаблицеЗначений есть поля "Наименование", "ИНН".

    В sqlite-базе почему-то наименования контрагентов обрезаются. Длина поля получается 22 символа.
    Почему так получается? Как сделать, чтобы в базу записалось полное наименование?

    И еще при записи из 1С7 в sqlite-базе вначале всех полей добавился символ "S". Откуда он берется? В 1С8 я читаю эту таблицу с помощью ADO, и все данные возвращаются с символом "S". Например, из записываю ИНН "6027057894", а он записывается как "S6027057894", и читается в 1С8 тоже как "S6027057894".
    Как этого избежать?


    https://forum.infostart.ru/forum28/topic161126/message1700795/
    Djelf когда-то писал: "Если укладываешь ТЗ не указывая типизацию колонки, то типизация в запросе должна быть :Неопределенный "
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1111 - 08. Июня 2023 :: 09:34
    Печать  
    Djelf писал(а) 08. Июня 2023 :: 04:20:
    Ну так подави использование ACDATETIM
    AND +Журнал.Date between '20220513' and '20230613'
    Это не хак, это нормальный задокументированный путь.
    Планировщику иногда помогать надо...


    Это, конечно, так работает. Но почему он стал использовать ACDATETIM? Не буду же везде + ставить в старых запросах. Это же где-то еще может вылезти... Или тут уж как повезет?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1112 - 08. Июня 2023 :: 11:18
    Печать  
    alyuev писал(а) 08. Июня 2023 :: 09:34:
    Это, конечно, так работает. Но почему он стал использовать ACDATETIM? Не буду же везде + ставить в старых запросах. Это же где-то еще может вылезти... Или тут уж как повезет?

    Пришлось несколько откатиться, из-за глюка с like и оптимизатором like c between.
    Ожидамая цена в отладке по IDDOC писалась 11, а сейчас 22 как у ACDATETIM. Ну вот ACDATETIM и попал в отбор, и хотя этот индекс тоже не плохой, но в твоем запросе это полная жесть...
    Полноценного выбора на основе индексов то нет, есть телепатирующий подсказчик.
    А оптимизатор в sqlite тоже развивается, так что гарантии что все запросы будут всегда работать как задумано нет.

    P.S. Не нравится мне этот запрос...
    Количество видов участвующих в запросе документов видимо ограничено, почему бы сначала не прогнать Журнал по DOCTYPE (IDDOCDEF,DATE,TIME,IDDOC), а потом уже левым соединением прилепить __1S_CRDOC? имхо должно быть значительно быстрее.
    Не люблю INNER JOIN, он умеет переставлять таблицы местами и иногда выдает такие чудеса...
    Между прочим RIGHT JOIN появился в 2022-06-25 (3.39.0) может и тут поможет.
    « Последняя редакция: 08. Июня 2023 :: 12:23 - Djelf »  
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1113 - 09. Июня 2023 :: 12:10
    Печать  
    alyuev писал(а) 08. Июня 2023 :: 09:34:
    Это, конечно, так работает. Но почему он стал использовать ACDATETIM? Не буду же везде + ставить в старых запросах. Это же где-то еще может вылезти... Или тут уж как повезет?

    Можно пробовать 1sqlite_3.40.1.29
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1114 - 09. Июня 2023 :: 14:06
    Печать  
    Спасибо. Попробую. Там в описании у тебя опечатка - 3.40.1.18 вместо 3.40.1.28, и аналогично для 29.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1115 - 09. Июня 2023 :: 14:18
    Печать  
    1. Индекс на ACDATETIM не выбирается.
    2. Поиск с начала строки типа LIKE 'zz%' работает для обычых полей, но для DESCR не работает.
    3. регистрозависимости для полей на русском теперь нет.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1116 - 09. Июня 2023 :: 14:49
    Печать  
    Чинить все это теперь довольно сложно, хэшей несколько, где какой работает я без понятия.
    Зачем нужен байтовый хэш, если есть хэш Хоффмана?
    Эта оптимизация экономит всего 10-ки тактов процессора, а головной боли приносит значительно больше.
      
    Наверх
    www  
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #1117 - 09. Июня 2023 :: 16:40
    Печать  
    Не работает поиск LIKE 'zz%'. Причем у меня для всех полей, даже без индекса
    Код (SQL)
    Выбрать все
    SELECT
     ДокКарточка.IDDOC AS [Док $Документ.Карточка],
     ДокКарточка.Пациент AS [ФИО $Строка],
     ДокКарточка.Пол AS [Пол $Перечисление.Пол],
     ДокКарточка.ДатаРождения AS [ДатаРождения],
     CASE WHEN Жур.ISMARK = '*' THEN 1 ELSE 0 END AS [ПометкаУдаления $Число.1.0],
     Жур.CLOSED&1 AS [Проведен $Число.1.0],
     Жур.DATE AS [ДатаДок $Дата],
     Жур.DOCNO AS [НомерДок $Строка.7],
     СпрФилиалы.DESCR AS [Филиал $Строка]
    FROM [Документ.Карточка] AS ДокКарточка
    INNER JOIN
    	[Журнал] AS Жур
    ON Жур.IDDOC = ДокКарточка.IDDOC AND
    	Жур.DATE BETWEEN '20230309' AND '20230609Я'
    LEFT JOIN
    	[Справочник.Филиалы] AS СпрФилиалы
    ON СпрФилиалы.ID = ДокКарточка.Филиал
    WHERE
    ДокКарточка.Пациент collate _1C LIKE 'шиви%'
    ORDER BY
     Жур.DATE
     LIMIT 1000 
    
    


    Выручает только установка + перед полем. На этом пока и остановился. Благо DBF версия мною используется только для разработки и первичной отладки (очень уж медленно SQL-версия делает реструктуризацию)
      
    Наверх
     
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1118 - 09. Июня 2023 :: 16:52
    Печать  
    А что такое "collate _1C"? Что оно дает?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1119 - 10. Июня 2023 :: 05:04
    Печать  
    alyuev писал(а) 09. Июня 2023 :: 16:52:
    А что такое "collate _1C"? Что оно дает?

    collate отвечает за вид сравнения и сортировку.
    В данном случае ничего дополнительного это не делает, collate _1C ставится автоматом при подключении таблиц 1С.
    Для таблиц в формате sqlite иногда стоит ставить.
      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1120 - 10. Июня 2023 :: 11:57
    Печать  
    Ветер в поле писал(а) 09. Июня 2023 :: 16:40:
    Не работает поиск LIKE 'zz%'. Причем у меня для всех полей, даже без индекса

    Намудрил простенький тест, опечалился...
    Почти понятно почему, но не понятно где.
    Источник проблем sqlite, при сборке с новым движком старые мои версии где это работатало, работать корректно перестали.
    Впрочем и финальная версия Орефкова ошибается, т.е. это немного сложнее, потребуются исследования.
    Решение будет не быстро.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1121 - 12. Июня 2023 :: 07:51
    Печать  
    Вот тут один писал про что-то похожее. Возможно это из-за проблем Unicode/NonUnicode текста. https://sqlite.org/forum/forumpost/0a1c8c08301ea823
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1122 - 13. Июня 2023 :: 06:37
    Печать  
    alyuev писал(а) 12. Июня 2023 :: 07:51:
    Вот тут один писал про что-то похожее. Возможно это из-за проблем Unicode/NonUnicode текста. https://sqlite.org/forum/forumpost/0a1c8c08301ea823

    Это я уже починил, на тесте результаты корректные (1.0.2.3-1.0.2.6 тест проваливают). Поправьте в коде теста таблицу, поля и паттерны под себя)
    Там все сложнее сделано, где-то через collate _1C сравнение идет, где-то нет, кроме того на индекс ставится фильтр.
    Но поскольку пришлось откатить исходники на некоторую промежуточную версию, повторное внесение моих изменений и их проверка потребует время.
    Пока 1sqlite_3.42.0.30_draft.zip https://cloud.mail.ru/public/9znr/ZJ6ULE9aR
    Почти все из моих изменений уже должно работать.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1123 - 13. Июня 2023 :: 07:37
    Печать  
    Проверял пока на своих тестах. Всё работает кроме такого запроса:

    Код (SQL)
    Выбрать все
    SELECT Спр.deScr FROM Справочник_Клиенты as Спр WHERE DESCR LIKE '%яя%' LIMIT 1 
    
    


    Т.е. поиск даже не по началу строки. По полю DESCR!
    +DESCR - помогает запросу.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1124 - 13. Июня 2023 :: 07:56
    Печать  
    Код (PHP)
    Выбрать все
    Проверка Поля DESCR по паттерну яя_
      SELECT count(*) FROM СправочниК_Клиенты AS Клиент WHERE DESCR LIKE 'я%'
    Количество записей не совпадает, без индекса 9547 по индексу 0 
    
    
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1125 - 13. Июня 2023 :: 08:07
    Печать  
    А!!! "яя" Ну это логично, если по LIKE 'яя%' сначала накладывается условие BETWEEN 'яя' AND 'я?', где '?' должна быть следующая буква после 'я', то хм... а какая там следующая буква в 1251 после 'я'?  Смех

    P.S. Странно, у меня проблема DESCR LIKE '%яя%' не воспроизводится, и план запроса что без плюса, что с плюсом абсолютно идентичны.
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1126 - 13. Июня 2023 :: 09:11
    Печать  
    Код (SQL)
    Выбрать все
    SELECT Спр.deScr FROM Справочник_Клиенты as Спр WHERE Спр.DESCR LIKE '%яя%' LIMIT 1 
    
    


    Обрати внимание на LIMIT 1!

    Без него - работает!
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1127 - 13. Июня 2023 :: 09:19
    Печать  
    На это я обратил внимание и использовал limit 1, но воспроизвести не удается.

    upd: Поймал, я обычно пишу так (удобнее отлаживать):
    Код (SQL)
    Выбрать все
    WHERE TRUE
    AND DESCR LIKE '%яя%' 
    
    

    без TRUE и AND в сочетании с LIMIT действительно 0 строк.
    Похоже на ошибку в sqlite, надо бы в cli попробовать воспроизвести.
    https://gyazo.com/0b782695e506eef76b0ecd0f083483ab
    В правой части like вычисляется, в левой нет.

    upd2: В cli не воспроизводится, ошибка в оптимизаторе 1sqlite.
    Вроде исправил, попробуй 1sqlite_3.42.0.30_draft2.zip
    « Последняя редакция: 13. Июня 2023 :: 11:24 - Djelf »  
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1128 - 13. Июня 2023 :: 13:15
    Печать  
    Да, draft2 выполнил запрос

    Код (SQL)
    Выбрать все
    SELECT Спр.deScr FROM Справочник_Клиенты as Спр WHERE Спр.DESCR LIKE '%яя%' LIMIT 1 
    
    


    LIKE 'яя%' - не работает.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Arbuz
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 58
    Зарегистрирован: 06. Февраля 2019
    Re: 1sqlite
    Ответ #1129 - 13. Июня 2023 :: 14:13
    Печать  
    draft и draft2 падают на
    Код
    Выбрать все
    SQLiteBase.УложитьОбъекты(ВыбНоменклатура,"vt_ТМЦ",0,"Номенклатура"); 
    
    
    где ВыбНоменклатура это группа
    28 и 29 нет
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1130 - 13. Июня 2023 :: 15:42
    Печать  
    alyuev писал(а) 13. Июня 2023 :: 13:15:
    LIKE 'яя%' - не работает.

    Он и не сможет по индексу, причина была описана выше.

    Остальное починю.
      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1131 - 17. Июня 2023 :: 08:44
    Печать  
    Падение при УложитьОбъекты починил.
    Оптимизацию по LIKE, через использование BETWEEN отключил, она все равно не будет корректно работать с базами 1251.
    IMHO, Это не совсем так, оно такое сможет, но нужна воля разработчиков.
    Тема: https://sqlite.org/forum/forumpost/be08a39899

    1sqlite_3.42.0.30_draft3.zip https://cloud.mail.ru/public/LgJJ/iyaqyCWey

    P.S. draft потому что пришлось изрядно откатить, а потом накатить  Круглые глаза
    Не все окучено тестами, но вроде почти финальный...

    P.P.S. извините, рано или поздно, но надо делать небольшой рефакторинг.
    « Последняя редакция: 17. Июня 2023 :: 11:59 - Djelf »  
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1132 - 19. Июня 2023 :: 07:50
    Печать  
    У меня на draft3 успешно пройдены все мои юнит-тесты.
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1133 - 20. Июня 2023 :: 11:03
    Печать  
    alyuev писал(а) 19. Июня 2023 :: 07:50:
    У меня на draft3 успешно пройдены все мои юнит-тесты.

    Мои тоже все проходят, значит это видимо и есть/будет релиз.

    P.S. Печаль, https://github.com/aergoio/sqlite-stored-procedures под gcc заточен, под msvc не собирается, а то бы и следующий этап эволюции освоили...
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1134 - 26. Июня 2023 :: 07:19
    Печать  
    Так что, можно запускать (draft3) его на рабочей базе? Или ты подготовишь "официальный" релиз?
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1135 - 27. Июня 2023 :: 14:03
    Печать  
    alyuev писал(а) 26. Июня 2023 :: 07:19:
    Так что, можно запускать (draft3) его на рабочей базе? Или ты подготовишь "официальный" релиз?

    Раз претензий больше нет, то это и релиз.
    Могу переименовать, сборки по причине краша винта пока преостановлены (но все уже спасено).
    З.Ы. В топку эти хдд да и ссд тоже. Клинопись, вот что спасет мир!
      
    Наверх
    www  
    IP записан
     
    alyuev
    God Member
    *****
    Отсутствует


    Гражданин Вселенной

    Сообщений: 850
    Местоположение: Одесса
    Зарегистрирован: 07. Декабря 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1136 - 27. Июня 2023 :: 15:52
    Печать  
    Djelf писал(а) 27. Июня 2023 :: 14:03:
    З.Ы. В топку эти хдд да и ссд тоже. Клинопись, вот что спасет мир!


    А как же NAS? Улыбка
      

    1C 7.7.025; 1C++ 3.2.4.3; Formex 2.0.5.94; 1sqlite
    Наверх
    IP записан
     
    Arbuz
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 58
    Зарегистрирован: 06. Февраля 2019
    Re: 1sqlite
    Ответ #1137 - 28. Июня 2023 :: 10:35
    Печать  
    Djelf писал(а) 27. Июня 2023 :: 14:03:
    Раз претензий больше нет, то это и релиз.

    Я уже неделю Смех гоняю в проде - проблем нет
    Djelf писал(а) 27. Июня 2023 :: 14:03:
    Могу переименовать, сборки по причине краша винта пока преостановлены (но все уже спасено).
    З.Ы. В топку эти хдд да и ссд тоже. Клинопись, вот что спасет мир!

    Ужас Ужас Ужас
      
    Наверх
     
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1138 - 28. Июня 2023 :: 10:43
    Печать  
    Записываю во внешнюю sqlite-базу данные вот таким образом:

    Код (C++)
    Выбрать все
    лТЗ = СоздатьОбъект("ТаблицаЗначений");
    лТЗ.НоваяКолонка("ID", "Строка", 100);
    лТЗ.НоваяКолонка("Наименование", "Строка", 100);
    ...
    лЛокБаза.УложитьТЗ(лТЗ, "Контрагенты", 1);
     
    
    


    Потом читаю из этой базы.
    И оказывается, что все строки дополнились справа пробелами и стали одинаковой длины - 100 символов.
    Наименование вместо "Ромашка" стало "Ромашка                ".

    Это нормально?
    SQLite не умеет работать со строками переменной длины?
    Или это ТаблицаЗначений косячит?
    Или это я где-то накосячил?

    В общем надо как-то записать в базу строку той длины, как она есть изначально.
    Если "Ромашка", то и записать надо "Ромашка", и чтобы хранилось в базе тоже "Ромашка".

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


    1C++ rocks!

    Сообщений: 58
    Зарегистрирован: 06. Февраля 2019
    Re: 1sqlite
    Ответ #1139 - 28. Июня 2023 :: 14:21
    Печать  
    zelenprog писал(а) 28. Июня 2023 :: 10:43:
    Или это ТаблицаЗначений косячит?

    Это ТаблицаЗначений. И она не косячит, это штатное поведение.
    Что мешает проверить
    Код (Javascript)
    Выбрать все
    Сообщить(СтрДлина(лТЗ.Наименование)) 
    
    
    ?
    Не задавай длину строки в НоваяКолонка(), например.
      
    Наверх
     
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1140 - 28. Июня 2023 :: 14:30
    Печать  
    Arbuz писал(а) 28. Июня 2023 :: 14:21:
    Не задавай длину строки в НоваяКолонка(), например.

    Если не задавать длину строки, то при записи в sqlite-базу все строки обрезаются.

    Как я понял, если явно в ТЗ не указать длину строки, sqlite-база не знает какой длины надо делать поле, и устанавливает какую-то стандартную ширину поля. И некоторые строки в это поле не помещаются.
    Поэтому мне пришлось явно в ТЗ указывать длину.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1141 - 29. Июня 2023 :: 10:58
    Печать  
    zelenprog писал(а) 28. Июня 2023 :: 14:30:
    Если не задавать длину строки, то при записи в sqlite-базу все строки обрезаются.

    Как я понял, если явно в ТЗ не указать длину строки, sqlite-база не знает какой длины надо делать поле, и устанавливает какую-то стандартную ширину поля. И некоторые строки в это поле не помещаются.
    Поэтому мне пришлось явно в ТЗ указывать длину.

    Странновато... не должно резать.
    Разумеется проверял на своей сборке.
    Не режутся, но надо типизировать колонку как "Строка", можно без указания длины строки, тогда
    Запихивать в эту колонку нужно именно строку, а не что-то еще.
    Если вообще не типизировать, то выгрузится как "S"+Строка это типизация :Неопределенный (неудобно потом работать будет, но можно).

    А зачем тз пихать? Не проще ли insert from select использовать?
    Или у тебя сборщик зависимостей, типа как в КД?
    Тогда это разумно, но я в сборщик зависимостей добавлял бы только id/ТекущийЭлемент, а потом запросом все остальное вытягивал.
    Вариантов работы еще много можно придумать разных...
      
    Наверх
    www  
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1142 - 29. Июня 2023 :: 13:54
    Печать  
    Djelf писал(а) 29. Июня 2023 :: 10:58:
    Странновато... не должно резать.
    Разумеется проверял на своей сборке.
    Не режутся, но надо типизировать колонку как "Строка", можно без указания длины строки

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

    Djelf писал(а) 29. Июня 2023 :: 10:58:
    А зачем тз пихать? Не проще ли insert from select использовать?

    Привык с ИТ работать. Получаю запросом данные, затем выгружаю результат в ИТ.
    Обрабатываю ИТ как мне надо, некоторые колонки добавляются, их значения формируются.
    А затем записываю в файл выгрузки.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1143 - 04. Июля 2023 :: 12:05
    Печать  
    Не помню такого решения в наших темах по sqlite.
    Тэг: "Как соединить один справочник к нескольким типам документов"
    Джойнить например справочник контрагенты несколько раз, к разным типам документов замутняет и раздувает код, через case не работает (за один шаг, без вложенных запросов), это напрягает, нашел решение через IIF.
    Оставлю рабочий пример здесь, для дальнейших идей и поисковиковых роботов.
    Код (SQL)
    Выбрать все
    SELECT
    	ОстаткиТМЦ.Номенклатура	 [Номенклатура $Справочник.Номенклатура]
    	,ОстаткиТМЦ.Количество	 [Количество $Число.12.3]
    	,Контрагенты.ID [Контрагент :Справочник.Контрагенты]
    	,ОстаткиТМЦ.IDDOCDEF||ОстаткиТМЦ.IDDOC [Документ :Документ]
    FROM Регистр_ОстаткиТМЦ AS ОстаткиТМЦ
    LEFT JOIN Документ_Реализация AS Реализация
    	ON ОстаткиТМЦ.IDDOCDEF=:ВидДокумента.Реализация AND Реализация.IDDOC=ОстаткиТМЦ.IDDOC
    LEFT JOIN Документ_ПоступлениеТМЦ AS Поступление
    	ON ОстаткиТМЦ.IDDOCDEF=:ВидДокумента.ПоступлениеТМЦ AND Поступление.IDDOC=ОстаткиТМЦ.IDDOC
    LEFT JOIN Справочник_Контрагенты AS Контрагенты
    	ON Контрагенты.ID =
    	IIF(ОстаткиТМЦ.IDDOCDEF=:ВидДокумента.Реализация,Реализация.Контрагент,
    	IIF(ОстаткиТМЦ.IDDOCDEF=:ВидДокумента.ПоступлениеТМЦ,Поступление.Контрагент,
    	NULL))
    WHERE ОстаткиТМЦ.DATE BETWEEN :НачДата AND :КонДата 
    
    

    P.S. Не забывайте null в конце, либо что-то типа 'НеНашелся', или что-то предопределенное. И про количество скобок в конце iif тоже забывать не стоит.
    « Последняя редакция: 05. Июля 2023 :: 12:01 - Djelf »  
    Наверх
    www  
    IP записан
     
    Arbuz
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 58
    Зарегистрирован: 06. Февраля 2019
    Re: 1sqlite
    Ответ #1144 - 04. Июля 2023 :: 13:03
    Печать  
    Djelf писал(а) 04. Июля 2023 :: 12:05:
    Не помню такого решения в наших темах по sqlite.
    Тэг: "Как соединить один справочник к нескольким типам документов"
    Джойнить например справочник контрагенты несколько раз, к разным типам документов замутняет и раздувает код, через case не работает, решение через IIF нашлось.
    Оставлю рабочее решение здесь, для дальнейших идей и поисковиковых роботов.

    Я бы не догадался и джойнил контрагентов к подзапросу  в котором поля контрагентов собирал бы через case, так-то оно гораздо оптимальней Очень довольный

    И да, чем отличается draft4?
      
    Наверх
     
    IP записан
     
    Arbuz
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 58
    Зарегистрирован: 06. Февраля 2019
    Re: 1sqlite
    Ответ #1145 - 04. Июля 2023 :: 13:26
    Печать  
    Вот, немного не то, но я столкнувшись с похожей задачей соединения к нескольким таблицам документов решал задачу перевода чорного запроса из документа списание типовой ТиС.

    оригинал:
    Код (SQL)
    Выбрать все
    //	ТекстЗапроса = "//{{ЗАПРОС(ПредСписание)
    //	|Период с '01.01.1980' по ДатаДок;
    //	|Без итогов;
    //	|Основание = Документ.СписаниеТМЦ.ДокОснование, Документ.Реализация.ДокОснование, Документ.ОтчетККМ.ДокОснование, Документ.РеализацияРозница.ДокОснование;
    //	|Товар = Документ.СписаниеТМЦ.Номенклатура, Документ.Реализация.Номенклатура, Документ.ОтчетККМ.Номенклатура, Документ.РеализацияРозница.Номенклатура;
    //	|Колво = Документ.СписаниеТМЦ.Количество, Документ.Реализация.Количество, Документ.ОтчетККМ.Количество, Документ.РеализацияРозница.Количество;
    //	|Коэфф = Документ.СписаниеТМЦ.Коэффициент, Документ.Реализация.Коэффициент, Документ.ОтчетККМ.Коэффициент, Документ.РеализацияРозница.Коэффициент;
    //	|Функция ВсегоКолво = Сумма(Колво);
    //	|Группировка Товар без групп;
    //	|Группировка Коэфф;
    //	|Условие(Основание = ДокОснование);
    //	|"//}}ЗАПРОС
     
    
    


    прямой:
    Код (SQL)
    Выбрать все
    	--EXPLAIN QUERY PLAN
    	SELECT
    	--	Товары.Документ [Основание :Документ]
    		Товары.Товар [Товар :Справочник.Номенклатура]
    		,Товары.Коэфф
    		,SUM(Товары.Колво) ВсегоКолво
    	FROM (
    		SELECT
    	--		Документы.Документ_вид||Документы.Документ Документ
    			CASE
    				WHEN СписаниеТМЦ.Номенклатура NOTNULL THEN СписаниеТМЦ.Номенклатура
    				WHEN Реализация.Номенклатура NOTNULL THEN Реализация.Номенклатура
    				WHEN ОтчетККМ.Номенклатура NOTNULL THEN ОтчетККМ.Номенклатура
    				WHEN РеализацияРозница.Номенклатура NOTNULL THEN РеализацияРозница.Номенклатура
    			END Товар
    			,CASE
    				WHEN СписаниеТМЦ.Номенклатура NOTNULL THEN СписаниеТМЦ.Количество
    				WHEN Реализация.Номенклатура NOTNULL THEN Реализация.Количество
    				WHEN ОтчетККМ.Номенклатура NOTNULL THEN ОтчетККМ.Количество
    				WHEN РеализацияРозница.Номенклатура NOTNULL THEN РеализацияРозница.Количество
    			END Колво
    			,CASE
    				WHEN СписаниеТМЦ.Номенклатура NOTNULL THEN СписаниеТМЦ.Коэффициент
    				WHEN Реализация.Номенклатура NOTNULL THEN Реализация.Коэффициент
    				WHEN ОтчетККМ.Номенклатура NOTNULL THEN ОтчетККМ.Коэффициент
    				WHEN РеализацияРозница.Номенклатура NOTNULL THEN РеализацияРозница.Коэффициент
    			END Коэфф
    		FROM (
    			SELECT
    				Ссылки.CHILDID Документ
    	--			,Журнал.IDDOCDEF Документ_вид
    			FROM [__1S_crdoc] Ссылки
    			INNER JOIN [Журнал] Журнал ON Ссылки.CHILDID = Журнал.IDDOC
    			WHERE TRUE
    				AND Ссылки.PARENTVAL = :ДокОснование*
    				AND Ссылки.MDID = '   0'
    				AND Журнал.IDDOCDEF IN окумента.РеализацияРозница)
    				AND Журнал.CLOSED=1
    				AND Журнал.DATE <= :ДатаДок
    		) Документы
    		LEFT JOIN [ДокументСтроки.СписаниеТМЦ] СписаниеТМЦ ON Документы.Документ = СписаниеТМЦ.IDDOC
    		LEFT JOIN [ДокументСтроки.Реализация] Реализация ON Документы.Документ = Реализация.IDDOC
    		LEFT JOIN [ДокументСтроки.ОтчетККМ] ОтчетККМ ON Документы.Документ = ОтчетККМ.IDDOC
    		LEFT JOIN [ДокументСтроки.РеализацияРозница] РеализацияРозница ON Документы.Документ = РеализацияРозница.IDDOC
    	) Товары
    	GROUP BY Товар, Коэфф
     
    
    


    В моём случае, правда, первый подзапрос максимально сужает выборку и дальнейшие манипуляции практически не сказываются на объёме и скорости.

    Ускорение, кстати, получилось где-то в 8000 раз! Четыре, мать его, порядка.

    ЗЫ: в IN там :ВидДокумента.СписаниеТМЦ,
    :ВидДокумента.Реализация,
    :ВидДокумента.ОтчетККМ,
    :ВидДокумента.РеализацияРозница
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1146 - 04. Июля 2023 :: 20:21
    Печать  
    Arbuz писал(а) 04. Июля 2023 :: 13:03:
    Djelf писал(а) 04. Июля 2023 :: 12:05:
    Не помню такого решения в наших темах по sqlite.
    Тэг: "Как соединить один справочник к нескольким типам документов"
    Джойнить например справочник контрагенты несколько раз, к разным типам документов замутняет и раздувает код, через case не работает, решение через IIF нашлось.
    Оставлю рабочее решение здесь, для дальнейших идей и поисковиковых роботов.

    Я бы не догадался и джойнил контрагентов к подзапросу  в котором поля контрагентов собирал бы через case, так-то оно гораздо оптимальней Очень довольный

    И да, чем отличается draft4?


    Так и я так джойнил, но мне в where нужно было их отфильтровать, а заворачивать в подзапрос внезапно стало влом  Смех

    draft4 с фиксом для глюка sqlite odbc: https://forum.mista.ru/topic.php?id=888068 это безопасно, это ничего не испортит в обычной работе sqlite.

    +При укладке ТаблицыЗначений в том случае, если типизация колонки Строка и указана ее Длина, колонка таблицы в sqlite будет типироваться как varchar(длина), что позволяет sqlite odbc http://www.ch-werner.de/sqliteodbc/ корректно обрабатывать строки длиной более, или менее 255 символов.

    P.S. могу и остальное так типизировать (даты, числа), но ВК от Орефкова для 8ки https://github.com/orefkov/v8sqlite таких ограничений не имеет, а с vbs и т.п. нам уже не по пути (через sqlite odbc драйвер)  Круглые глаза
    « Последняя редакция: 05. Июля 2023 :: 20:19 - Djelf »  
    Наверх
    www  
    IP записан
     
    Arbuz
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 58
    Зарегистрирован: 06. Февраля 2019
    Re: 1sqlite
    Ответ #1147 - 06. Июля 2023 :: 09:12
    Печать  
    Djelf писал(а) 04. Июля 2023 :: 20:21:
    P.S. могу и остальное так типизировать (даты, числа), но ВК от Орефкова для 8ки https://github.com/orefkov/v8sqlite таких ограничений не имеет, а с vbs и т.п. нам уже не по пути (через sqlite odbc драйвер)  Круглые глаза


    Ну, я так понял, что в крайнем случае такой необходимости можно через ALTER TABLE добавить колонку с нужной типизацией и UPDATE'ом присвоить значения из нетипизированной (неверно типизированной) колонки?
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1148 - 06. Июля 2023 :: 09:33
    Печать  
    Arbuz писал(а) 06. Июля 2023 :: 09:12:
    Djelf писал(а) 04. Июля 2023 :: 20:21:
    P.S. могу и остальное так типизировать (даты, числа), но ВК от Орефкова для 8ки https://github.com/orefkov/v8sqlite таких ограничений не имеет, а с vbs и т.п. нам уже не по пути (через sqlite odbc драйвер)  Круглые глаза


    Ну, я так понял, что в крайнем случае такой необходимости можно через ALTER TABLE добавить колонку с нужной типизацией и UPDATE'ом присвоить значения из нетипизированной (неверно типизированной) колонки?

    Да, конечно, но это некоторое замедление работы, в зависимости от объема данных. Еще и формат даты внутри колонки надо менять...
    В ALTER TABLE RENAME (пока) отсутствует возможность изменить тип колонки.
    Но можно применить хирургию, типа как то так:
    Код (SQL)
    Выбрать все
    PRAGMA writable_schema=ON; /* разрешаем хирургию */
    UPDATE sqlite_master set sql  = 'TABLE [t]([Name] VARCHAR(1000) NOT NULL)';
    PRAGMA [database.]schema_version =  [database.]schema_version+1; /* обязательно, иначе база будет восприниматья испорченой */
    PRAGMA writable_schema=OFF; /* запрещаем хирургию */ 
    
    

    Возможно потом ANALYZE потребуется... не уверен, возможно что пациент не выживет  Нерешительный
    « Последняя редакция: 06. Июля 2023 :: 12:34 - Djelf »  
    Наверх
    www  
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1149 - 31. Июля 2023 :: 09:20
    Печать  
    Случайно при записи в sqlite-базу неправильно указал имя файла: вернее вообще не указал имя файла, только имя каталога:

    Код
    Выбрать все
    пИмяФайлаВыгрузки = "C:\Выгрузка\";
    База = СоздатьОбъект("SQLiteBase");
    База.Открыть(пИмяФайлаВыгрузки); 
    
    


    При выполнении этого кода 1С-ка просто закрывается. Исключение не перехватывается.
    Можно ли сделать какой-то код возврата или сообщение об ошибке в этой ситуации? Или выбрасывать исключение?
      
    Наверх
     
    IP записан
     
    Arbuz
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 58
    Зарегистрирован: 06. Февраля 2019
    Re: 1sqlite
    Ответ #1150 - 31. Июля 2023 :: 11:20
    Печать  
    И гуарддог бы по переполнению памяти  Круглые глаза хотя у меня этого давно не случалось
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1151 - 01. Августа 2023 :: 11:27
    Печать  
    zelenprog писал(а) 31. Июля 2023 :: 09:20:
    Случайно при записи в sqlite-базу неправильно указал имя файла: вернее вообще не указал имя файла, только имя каталога:

    Код
    Выбрать все
    пИмяФайлаВыгрузки = "C:\Выгрузка\";
    База = СоздатьОбъект("SQLiteBase");
    База.Открыть(пИмяФайлаВыгрузки); 
    
    


    При выполнении этого кода 1С-ка просто закрывается. Исключение не перехватывается.
    Можно ли сделать какой-то код возврата или сообщение об ошибке в этой ситуации? Или выбрасывать исключение?


    Это легко, будет исключение, забирай/проверяй: https://cloud.mail.ru/public/YMuG/2Vi29qxxV
      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1152 - 01. Августа 2023 :: 11:44
    Печать  
    Arbuz писал(а) 31. Июля 2023 :: 11:20:
    И гуарддог бы по переполнению памяти  Круглые глаза хотя у меня этого давно не случалось


    И еще гуарддог по времени выполнения! Да!
    Но чуть позже.

    Я начинал работать в этом направлении, каллбэк в sqlite есть.
    Начинал с вызова процедуры 1С при выполнении запроса для вывода непонятно чего.
    Но непонятно зачем замедлять sqlite выводом сообщений процедуры 1с?
    Можно же в формате printf выдавать сообщения...
    1С может быть пропатчена на 4гига, лимиты разные, не уверен что смогу изнутри ВК получить лимиты и сама 1С что-то сжирает, но можно сделать ОграничениеПотребленияПамяти(ВБайтах) и ОграничениеВремениЗапроса(ВСекундах).
    Гарантировано оно работать не будет, т.к. каллбэк в sqlite сейчас вроде не работает с определенным тиком процессора, но все лучше чем ничего.
    Так подойдет?
    « Последняя редакция: 01. Августа 2023 :: 13:03 - Djelf »  
    Наверх
    www  
    IP записан
     
    Arbuz
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 58
    Зарегистрирован: 06. Февраля 2019
    Re: 1sqlite
    Ответ #1153 - 01. Августа 2023 :: 14:31
    Печать  
    Djelf писал(а) 01. Августа 2023 :: 11:44:
    1С может быть пропатчена на 4гига,

    Да, у меня пропатчена.
    Djelf писал(а) 01. Августа 2023 :: 11:44:
    ОграничениеПотребленияПамяти(ВБайтах) и ОграничениеВремениЗапроса(ВСекундах).
    Гарантировано оно работать не будет, т.к. каллбэк в sqlite сейчас вроде не работает с определенным тиком процессора, но все лучше чем ничего.
    Так подойдет?

    Конечно да!
    Работать не будет, в смысле ограничение не точное?
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1154 - 02. Августа 2023 :: 04:47
    Печать  
    Arbuz писал(а) 01. Августа 2023 :: 14:31:
    Конечно да!
    Работать не будет, в смысле ограничение не точное?

    Вот оно: https://www.sqlite.org/c3ref/progress_handler.html
    Но там написано что он будет вызываться при приблизительном количестве (это мы указываем) инструкций виртуальной машины.
    Сильно не исследовал этот вопрос, но предполагаю что некоторые инструкции типа автоматической индексации внутренних таблиц или еще чего-то могут сожрать слишком много памяти или времени, поэтому это не всегда сработает с достаточной точностью.

    И видимо не сработает, проверил с опцией компиляции  SQLITE_MAX_MEMORY на CROSS JOIN - фигушки, сжирает все 3.5гига и вылетает.
    Уж если оно внутри себя так не все контроллирует, то и в progress_handler не попадет.
    p.s. возможно из-за виртуальных таблиц это не контролирруется.

    upd: проверил, не попадает и в момент всяких джойнов (внутри себя) замерзает (это одна инструкция видимо), т.е. сделать то можно, но это довольно бысмысленно, особенно при замерзаниях.
    « Последняя редакция: 02. Августа 2023 :: 11:51 - Djelf »  
    Наверх
    www  
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1155 - 02. Августа 2023 :: 12:24
    Печать  
    Djelf писал(а) 01. Августа 2023 :: 11:27:
    Это легко, будет исключение, забирай/проверяй: https://cloud.mail.ru/public/YMuG/2Vi29qxxV

    Работает, спасибо!

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


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1156 - 02. Августа 2023 :: 12:25
    Печать  
    А вот такой запрос можно использовать?

    Код (SQL)
    Выбрать все
    	лТекстЗапроса = "
    	|SELECT *
    	|FROM [Справочник.Номенклатура] as СпрНоменклатура
    	|"; 
    
    


    Нужно в тексте запроса обязательно все поля перечислять?
    Например:

    Код (SQL)
    Выбрать все
    	лТекстЗапроса = "
    	|SELECT Наименование, Код, Цена
    	|FROM [Справочник.Номенклатура] as СпрНоменклатура
    	|"; 
    
    


    Запрос типа "SELECT * FROM ..." не работает?
    « Последняя редакция: 02. Августа 2023 :: 13:56 - zelenprog »  
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1157 - 03. Августа 2023 :: 11:22
    Печать  
    zelenprog писал(а) 02. Августа 2023 :: 12:25:
    Запрос типа "SELECT * FROM ..." не работает?

    А самому проверить сложно?  Смех
    Только зачем? Типизации то не будет...
      
    Наверх
    www  
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1158 - 03. Августа 2023 :: 14:21
    Печать  
    Djelf писал(а) 03. Августа 2023 :: 11:22:
    А самому проверить сложно?  Смех

    Я не точно выразился. Я сделал такой запрос и обнаружил, что он не работает.
    И хотел уточнить: если он не работает, то по каким причинам?
    Это же вроде бы стандартный SQL-синтаксис.

    Djelf писал(а) 03. Августа 2023 :: 11:22:
    А Только зачем? Типизации то не будет...

    Ну в некоторых случаях типизация и не нужна. Например, если работать с внешней sqlite-базой.
    А написать запрос со "звездочкой" было бы удобно и быстро.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1159 - 04. Августа 2023 :: 04:05
    Печать  
    zelenprog писал(а) 03. Августа 2023 :: 14:21:
    Я не точно выразился. Я сделал такой запрос и обнаружил, что он не работает.
    И хотел уточнить: если он не работает, то по каким причинам?

    Ты прямо как к доктору пришол и на вопрос "Что у вас болит" говоришь - "Вы доктор, вы мне и скажите."

    Не работать то может по разному, телепатов тут нет, чтобы понять как именно не работает...
      
    Наверх
    www  
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1160 - 04. Августа 2023 :: 06:25
    Печать  
    zelenprog писал(а) 02. Августа 2023 :: 12:25:
    Запрос типа "SELECT * FROM ..." не работает?

    Djelf писал(а) 04. Августа 2023 :: 04:05:
    Ты прямо как к доктору пришол и на вопрос "Что у вас болит" говоришь - "Вы доктор, вы мне и скажите."
    Не работать то может по разному, телепатов тут нет, чтобы понять как именно не работает...

    Проверил еще раз.
    Запрос "SELECT * FROM [Справочник.Контрагенты] as СпрКонтрагенты WHERE (СпрКонтрагенты.IsFolder != '1')"
    прекрасно работает!
    Видимо в первый раз я что-то неправильно написал и нарушил синтаксис.
    Извиняюсь за беспокойство.
      
    Наверх
     
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1161 - 11. Августа 2023 :: 09:11
    Печать  
    Странная ошибка: не работает типизация.
    Запрос "составной" из двух запросов, объединенных по UNION ALL.
    Если выполнять по отдельности первый запрос и второй запрос, то типизация работает.

    Если выполнять запрос как "составной" через UNION ALL, то во втором SELECT-е не срабатывает типизация.
    Второй SELECT содержит две строки с одинаковой типизацией (только имена полей разные):
    - "СпрЕдиницы.ID as [ЕдиницаИзмерения :Справочник.ЕдиницыИзмерений]"
    - "СпрЕдиницы.ID as [ОКЕИ :Справочник.ЕдиницыИзмерений]"
    Во второй строке второго SELECT-а типизация срабатывает. А в первой строке - нет.

    Это на конфигурации "Производство+Услуги+Бухгалтерия 7.7".

    Код (SQL)
    Выбрать все
    	|SELECT
    	|	СпрЕдиницы.ParentExt 		as [Номенклатура :Справочник.Номенклатура],
    	|	NULL 						as ЕдиницаИзмерения,
    	|	СпрЕдиницы.ID 				as [ЕдиницаНоменклатуры :Справочник.ЕдиницыНоменклатуры],
    	|	СпрЕдиницы.Вес 				as Вес,
    	|	СпрЕдиницы.Коэффициент 		as Коэффициент,
    	|	''							as ШтрихКод,
    	//----
    	|	СпрЕдиницы.ЕдиницаИзмерения 				as [ОКЕИ :Справочник.ЕдиницыИзмерений],
    	|	СпрЕдиницыИзмерений.Code					as ОКЕИ_Код,
    	|	RTRIM(СпрЕдиницыИзмерений.Descr)			as ОКЕИ_НаименованиеКраткое,
    	|	RTRIM(СпрЕдиницыИзмерений.ПолнНаименование)	as ОКЕИ_НаименованиеПолное,
    	//----
    	|	''							as ЭтоБазоваяЕдиница,
    	|	CASE
    	|		WHEN (СпрНоменклатура.ID IS NOT NULL) AND (СпрЕдиницы.ID = СпрНоменклатура.ОсновнаяЕдиницаИзмерения) THEN 'Да'
    	|		ELSE ''
    	|	END AS ЭтоОсновнаяЕдиница
    	//----
    	|   
    	|FROM [Справочник.ЕдиницыНоменклатуры] as СпрЕдиницы
    	|LEFT OUTER JOIN
    	|	[Справочник.Номенклатура] СпрНоменклатура ON СпрЕдиницы.ParentExt = СпрНоменклатура.ID
    	|LEFT OUTER JOIN
    	|	[Справочник.ЕдиницыИзмерений] СпрЕдиницыИзмерений ON СпрЕдиницы.ЕдиницаИзмерения = СпрЕдиницыИзмерений.ID
    	|
    	|WHERE (СпрЕдиницы.IsMark <> '*') AND (::УсловиеПоВладельцам)
    	|
    	|
    	|UNION ALL
    	|
    	|
    	|SELECT
    	|	СпрНоменклатура.ID			as [Номенклатура :Справочник.Номенклатура],
    	|	СпрЕдиницы.ID 				as [ЕдиницаИзмерения :Справочник.ЕдиницыИзмерений],
    	|	NULL		 				as ЕдиницаНоменклатуры,
    	|	0			 				as Вес,
    	|	1 							as Коэффициент,
    	|	СпрНоменклатура.ШтрихКод	as ШтрихКод,
    	//----
    	|	СпрЕдиницы.ID						as [ОКЕИ :Справочник.ЕдиницыИзмерений],
    	|	СпрЕдиницы.Code						as ОКЕИ_Код,
    	|	RTRIM(СпрЕдиницы.Descr)				as ОКЕИ_НаименованиеКраткое,
    	|	RTRIM(СпрЕдиницы.ПолнНаименование)	as ОКЕИ_НаименованиеПолное,
    	//----
    	|	'Да'						as ЭтоБазоваяЕдиница,
    	|	''							as ЭтоОсновнаяЕдиница
    	//----
    	|   
    	|FROM [Справочник.Номенклатура] СпрНоменклатура
    	|LEFT OUTER JOIN
    	|	[Справочник.ЕдиницыИзмерений] СпрЕдиницы ON СпрНоменклатура.ЕдиницаИзмерения = СпрЕдиницы.ID
    	|
    	|WHERE (СпрНоменклатура.IsFolder <> '1') AND (::УсловиеПоНоменклатуре)
     
    
    


    В чем причина?
    Это я что-то неправильно написал? Или ошибка в компоненте?
      
    Наверх
     
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #1162 - 11. Августа 2023 :: 10:43
    Печать  
    Типизация колонок двух запросов разная. Я вообще не уверен, что даже с одинаковой типизацией всё заработает.
    Лучше объединить запросы, а потом из результата сделать SELECT и только сейчас сделать типизацию. Тогда точно всё сработает
      
    Наверх
     
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1163 - 11. Августа 2023 :: 10:56
    Печать  
    Ветер в поле писал(а) 11. Августа 2023 :: 10:43:
    Типизация колонок двух запросов разная. Я вообще не уверен, что даже с одинаковой типизацией всё заработает.
    Лучше объединить запросы, а потом из результата сделать SELECT и только сейчас сделать типизацию. Тогда точно всё сработает

    Понял. Спасибо.
      
    Наверх
     
    IP записан
     
    Arbuz
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 58
    Зарегистрирован: 06. Февраля 2019
    Re: 1sqlite
    Ответ #1164 - 11. Августа 2023 :: 13:51
    Печать  
    Интересно, а можно ли как-то совместить sqlite3_mod_csv и sqlite3_mod_zipfile?
    Т.е. читать csv прямо из архива, не распаковывая. Просто есть много архивированных журналов.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1165 - 12. Августа 2023 :: 03:39
    Печать  
    Arbuz писал(а) 11. Августа 2023 :: 13:51:
    Интересно, а можно ли как-то совместить sqlite3_mod_csv и sqlite3_mod_zipfile?
    Т.е. читать csv прямо из архива, не распаковывая. Просто есть много архивированных журналов.

    А почему нельзя? Препятствий быть не должно. За исключением возможных глюков...
    Это конвеерная операция, sqlite3_mod_zipfile распаковывать все равно будет, только в строку/блоб в памяти, потом передавать в sqlite3_mod_csv.
    Но sqlite3_mod_zipfile довольно убог, поддерживается только deflate: https://sqlite.org/zipfile.html
      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1166 - 12. Августа 2023 :: 04:06
    Печать  
    Ветер в поле писал(а) 11. Августа 2023 :: 10:43:
    Типизация колонок двух запросов разная. Я вообще не уверен, что даже с одинаковой типизацией всё заработает.
    Лучше объединить запросы, а потом из результата сделать SELECT и только сейчас сделать типизацию. Тогда точно всё сработает


    Не совсе так, при UNION псевдонимы колонок и их типизация для второго и далее запросов вообще не учитываются.
    Работает только первая типизация и чтобы она работала, поля в запросе должны быть одного вида.
    Ниже пример типизации разных справочников в одной колонке.
    Код (SQL)
    Выбрать все
    SELECT
    	:ВидСправочника.Автомобили||Автомобили.ID [ID $Справочник]
    FROM Справочник_Автомобили AS Автомобили
    UNION ALL SELECT
    	:ВидСправочника.Банки||Банки.ID
    FROM Справочник_Банки AS  Банки 
    
    

    Можно еще и справочники с документами смешивать.
    Код (SQL)
    Выбрать все
    SELECT
    	'B1'||:ВидСправочника.Автомобили||Автомобили.ID [ID $Неопределенный]
    FROM Справочник_Автомобили AS Автомобили
    UNION ALL SELECT
    	'O1'||:ВидДокумента.УстановкаЦенНоменклатуры||Цены.IDDOC
    FROM Документ_УстановкаЦенНоменклатуры AS Цены 
    
    
    « Последняя редакция: 12. Августа 2023 :: 05:37 - Djelf »  
    Наверх
    www  
    IP записан
     
    Arbuz
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 58
    Зарегистрирован: 06. Февраля 2019
    Re: 1sqlite
    Ответ #1167 - 15. Августа 2023 :: 11:21
    Печать  
    Djelf писал(а) 12. Августа 2023 :: 03:39:
    Это конвеерная операция, sqlite3_mod_zipfile распаковывать все равно будет, только в строку/блоб в памяти, потом передавать в sqlite3_mod_csv.

    Вот не пойму я как эту строку/блоб законвеерить в mod_csv, оно же из файла читает?
    Djelf писал(а) 12. Августа 2023 :: 03:39:
    Но sqlite3_mod_zipfile довольно убог, поддерживается только deflate: https://sqlite.org/zipfile.html

    Так 1С и сама не умеет ничего кроме deflate, там родными средствами архивированный журнал, унутре куча файлов без расширения разбитые по датам.
    Архивов несколько, некоторые пересекаются.
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1168 - 15. Августа 2023 :: 11:43
    Печать  
    Arbuz писал(а) 15. Августа 2023 :: 11:21:
    Вот не пойму я как эту строку/блоб законвеерить в mod_csv, оно же из файла читает?

    Ах мерд... все именно так, mod_csv из памяти не кушает.
    Дописывать надо  Смущённый
    Попутал меня видать недавний случай с json и xml и преобразованием налету...
    Ввел в заблуждение, виноват, всего не упомнить уже.
      
    Наверх
    www  
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1169 - 22. Августа 2023 :: 11:29
    Печать  
    Djelf писал(а) 15. Августа 2023 :: 11:43:
    [quote author=6E5D4D5A552F0 link=1214205575/1167#1167 date=1692098482]
    Вот не пойму я как эту строку/блоб законвеерить в mod_csv, оно же из файла читает?

    Все обстоит хуже чем я думал, но ssd тебя по скорости спасут!
    Извлечение текста надо бы просовывать в функцию в mod_zipfile(ПолноеИмяФайлаВАрхиве) (это должно выгрузить текст и передать данные дальше), но он несовместен с mod_csv:  http://www.ch-werner.de/sqliteodbc/ и с mod_vsv: https://github.com/nalgeon/sqlean
    Они это не умеют никак.
    И мы тут тоже устарели, почти везде уже юникод, а мы застряли на 1251.
    Не уверен что время работы окупится хоть на 1 копейку.
    Да и вообще csv наверное устарел, проще скриптик нарисовать...
      
    Наверх
    www  
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1170 - 23. Августа 2023 :: 13:30
    Печать  

    Есть вот такой простой запрос - контрагенты выбираются из указанных групп:

    Код (SQL)
    Выбрать все
        "....
    	|FROM [Справочник.Контрагенты] as СпрКонтрагенты
    	|WHERE (СпрКонтрагенты.IsMark <> '*')
    	|       AND (СпрКонтрагенты.IsFolder != '1')
    	|       AND (СпрКонтрагенты.ParentID IN (SELECT val FROM врГруппыКонтрагентов))
    	|";
     
    
    


    Список групп сначала заполняется в ТаблицеЗначений. А перед выполнением запроса выполняется "УложитьОбъекты".

    Нужно, чтобы в выборку попали контрагенты, которые лежат в указанных группах, а также контрагенты из "корня" справочника (которые не лежат в группах). Как это лучше сделать?
    Добавить в ТЗ, которая укладывается во временную таблицу, какую-то пустую ссылку на группу? Как правильно указать эту пустую ссылку?

    ТЗ.Группа = ???
      
    Наверх
     
    IP записан
     
    Ветер в поле
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 40
    Зарегистрирован: 06. Октября 2010
    Пол: Мужской
    Re: 1sqlite
    Ответ #1171 - 25. Августа 2023 :: 09:54
    Печать  
    zelenprog писал(а) 23. Августа 2023 :: 13:30:
    Есть вот такой простой запрос - контрагенты выбираются из указанных групп:

    Код (SQL)
    Выбрать все
        "....
    	|FROM [Справочник.Контрагенты] as СпрКонтрагенты
    	|WHERE (СпрКонтрагенты.IsMark <> '*')
    	|       AND (СпрКонтрагенты.IsFolder != '1')
    	|       AND (СпрКонтрагенты.ParentID IN (SELECT val FROM врГруппыКонтрагентов))
    	|";
     
    
    


    Список групп сначала заполняется в ТаблицеЗначений. А перед выполнением запроса выполняется "УложитьОбъекты".

    Нужно, чтобы в выборку попали контрагенты, которые лежат в указанных группах, а также контрагенты из "корня" справочника (которые не лежат в группах). Как это лучше сделать?
    Добавить в ТЗ, которая укладывается во временную таблицу, какую-то пустую ссылку на группу? Как правильно указать эту пустую ссылку?

    ТЗ.Группа = ???


    Это-то тривиально. Достаточно в список групп добавить пустой элемент через ПолучитьПустоеЗначение("Справочник.Контрагенты")
      
    Наверх
     
    IP записан
     
    Arbuz
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 58
    Зарегистрирован: 06. Февраля 2019
    Re: 1sqlite
    Ответ #1172 - 25. Августа 2023 :: 13:18
    Печать  
    Djelf писал(а) 22. Августа 2023 :: 11:29:
    проще скриптик нарисовать...

    Я примерно так и сделал - монтирую zip'ы через pismo file mount - костыльно, но меня устраивает.
      
    Наверх
     
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1173 - 28. Августа 2023 :: 13:29
    Печать  
    Ветер в поле писал(а) 25. Августа 2023 :: 09:54:
    Достаточно в список групп добавить пустой элемент через ПолучитьПустоеЗначение("Справочник.Контрагенты")

    Спасибо, получилось.
      
    Наверх
     
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1174 - 29. Августа 2023 :: 06:17
    Печать  
    Подскажите, как правильно выполнять запрос из нескольких действий?
    Надо выполнить следующие команды:

    Код (SQL)
    Выбрать все
    1) "create table if not exists ИдентификаторыОбмена (GUID83 varchar(50), ID77 varchar(50))"
    2) "insert into ИдентификаторыОбмена (GUID83, ID77) values (@GUID83, @ID77)"
     
    
    


    Это надо делать в одном запросе?
    Например, вот так правильно будет?

    Код (C++)
    Выбрать все
    лТекстЗапроса1 = "create table if not exists ИдентификаторыОбмена (GUID83 varchar(50), ID77 varchar(50))";
    лТекстЗапроса2 = "insert into ИдентификаторыОбмена (GUID83, ID77) values (@GUID83, @ID77)";
    лТекстЗапросаОбщий = лТекстЗапроса1 + Символы.ПС + лТекстЗапроса2;
    
    лБаза = _УстановитьСоединение();
    Запрос = лБаза.НовыйЗапрос();
    Запрос.Подготовить(лТекстЗапросаОбщий);
    Запрос.УстановитьПараметр("@GUID83", пGUID83);
    Запрос.УстановитьПараметр("@ID77", пID77);
    лТЗ_РезультатЗапроса = Запрос.Выполнить();
     
    
    


    Или лучше это сделать разными запросами?
      
    Наверх
     
    IP записан
     
    Djelf
    God Member
    *****
    Отсутствует


    Ubuntu + wine@etersoft
    + 1C 7.7

    Сообщений: 633
    Местоположение: Питер
    Зарегистрирован: 02. Ноября 2007
    Пол: Мужской
    Re: 1sqlite
    Ответ #1175 - 29. Августа 2023 :: 09:18
    Печать  
    Да не работает оно так, не работает!
    тз = ВыполнитьЗапрос("select 1; select 2");
    и посмотри что в тз будет...
      
    Наверх
    www  
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1176 - 27. Декабря 2023 :: 13:35
    Печать  
    Что-то не работает в запросе фильтр по дате документа.

    Вот такой запрос без фильтра по датам - работает.
    А при использовании условий и установке параметров - ничего не возвращает:

    Код (SQL)
    Выбрать все
    	|SELECT
    	|	idx_date_time_iddoc [Ключ],
    	|	iddoc 		[Док :Документ],
    	|	iddocdef	[Док_вид :ВидДокументаПредставление],
    	|	date		[ДатаДок :Дата],
    	|	docno		[НомерДок],
    	|	closed		[Флаг]
    	|FROM Журнал
    	|WHERE (1 = 1)
    	|      ::Условие_по_НачДата
    	|      ::Условие_по_КонДата
    	|";
    
    	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "::Условие_по_НачДата", "AND (Журнал.Date >= @НачДата)");
    	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "::Условие_по_КонДата", "AND (Журнал.Date <= @КонДата)");
    
    	лЗапрос.УстановитьПараметр("@НачДата", НачДата);
    	лЗапрос.УстановитьПараметр("@КонДата", КонДата);
     
    
    


    "НачДата" и "КонДата" - это стандартные реквизиты на форме обработки для выбора периода.

    Что неправильно?
    Как надо устанавливать параметр - дату документа?
      
    Наверх
     
    IP записан
     
    nicesc
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 53
    Зарегистрирован: 13. Июня 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #1177 - 27. Декабря 2023 :: 17:09
    Печать  
    |FROM
    |      Журнал
    |WHERE
    |      DATE BETWEEN :ДатаС AND :ДатаПо";

    Запрос.Подставлять("ДатаС", едДатаС);
         Запрос.Подставлять("ДатаПо", едДатаПо);
         Запрос.ВыполнитьЗапрос(ТекстЗапроса);
      
    Наверх
     
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1178 - 28. Декабря 2023 :: 05:37
    Печать  
    nicesc писал(а) 27. Декабря 2023 :: 17:09:
    |FROM
    |      Журнал
    |WHERE
    |      DATE BETWEEN :ДатаС AND :ДатаПо";

    Запрос.Подставлять("ДатаС", едДатаС);
         Запрос.Подставлять("ДатаПо", едДатаПо);
         Запрос.ВыполнитьЗапрос(ТекстЗапроса);


    Сделал так.
    Выдается ошибка:
    "лЗапрос.Подготовить(пТекстЗапроса);
    : Ошибка подстановки текстового параметра НачДата - Неизвестный параметр".
      
    Наверх
     
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1179 - 28. Декабря 2023 :: 05:53
    Печать  
    Убрал у себя строку ""лЗапрос.Подготовить(пТекстЗапроса)" и все сработало!

    Хм...
    А в каких случая надо делать "Запрос.Подготовить", а в каких не надо?
    Почему в моем случае эта команда не нужна?

    И есть ли разница как указывается параметр: через "@НачДата" или ":НачДата"?
    Везде в примерах выше в этой теме параметры воде бы указываются через "@", то есть например "@НачДата".
      
    Наверх
     
    IP записан
     
    nicesc
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 53
    Зарегистрирован: 13. Июня 2009
    Пол: Мужской
    Re: 1sqlite
    Ответ #1180 - 29. Декабря 2023 :: 06:18
    Печать  
    Подготовить(ТекстЗапроса). Метод на основе переданного текста подготавливает запрос. Затем впоследствии можно неоднократно его выполнить методом SQLiteQuery::Выполнить, при необходимости указывая различные sql-параметры методом SQLiteQuery::УстановитьПараметр. При возникновении ошибки генерирует исключение.
    Если же необходимо несколько раз выполнять однотипные запросы, но в которых нужно только менять некоторые входные данные, используют параметризированные запросы: подготовленные запросы, в которых часть запроса заменена sql-параметром. В тексте запроса они обозначаются следующими способами:
    ? - неименованный параметр, установка возможна только по индексу.
    ?Число - неименованный параметр, установка возможна по индексу Число.
    $ИмяПараметра или @ИмяПараметра - именованный параметр, установка возможна по имени.

    Синтаксис: Подставлять(ИмяПарметра, Значение)
    Описание: Устанавливает значение для текстового параметра.
    Текстовые параметры - фрагменты текста запроса вида:
    :ИмяПараметра[*~]



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


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1181 - 29. Декабря 2023 :: 12:12
    Печать  
    Спасибо за разъяснение. Но... Я так и не понял.

    nicesc писал(а) 29. Декабря 2023 :: 06:18:
    Подготовить(ТекстЗапроса). Метод на основе переданного текста подготавливает запрос. Затем впоследствии можно неоднократно его выполнить методом SQLiteQuery::Выполнить, при необходимости указывая различные sql-параметры методом SQLiteQuery::УстановитьПараметр.

    Если же необходимо несколько раз выполнять однотипные запросы, но в которых нужно только менять некоторые входные данные, используют параметризированные запросы: подготовленные запросы, в которых часть запроса заменена sql-параметром. В тексте запроса они обозначаются следующими способами:
    ? - неименованный параметр, установка возможна только по индексу.
    ?Число - неименованный параметр, установка возможна по индексу Число.
    $ИмяПараметра или @ИмяПараметра - именованный параметр, установка возможна по имени.

    В чем разница между указанными двумя "сценариями"?
    Разве в первом случае выполняемые запросы не будут "однотипными"?

    Во втором случае параметры задается через "@" или "$".
    А как задаются параметры в первом случае?

    nicesc писал(а) 29. Декабря 2023 :: 06:18:
    Синтаксис: Подставлять(ИмяПарметра, Значение)
    Описание: Устанавливает значение для текстового параметра.
    Текстовые параметры - фрагменты текста запроса вида:
    :ИмяПараметра[*~]

    А это уже какой-то третий вариант?
    Вроде бы к первым двум "сценариям" этот метод не подходит. Ко второму он не подходит, так как название параметра задается через ":", а во втором случае параметр задается через "@".
      
    Наверх
     
    IP записан
     
    zelenprog
    Junior Member
    **
    Отсутствует


    1C++ rocks!

    Сообщений: 42
    Зарегистрирован: 03. Июня 2022
    Пол: Мужской
    Re: 1sqlite
    Ответ #1182 - 13. Марта 2024 :: 11:43
    Печать  
    Djelf писал(а) 04. Июня 2023 :: 11:58:
    ....
    У мне так все интеграции и сделаны, внешняя база в sqlite, поле ID там есть, типизация данных из базы sqlite в 7.7 работает.
    ...


    Здравствуйте!
    Интересует выгрузка-загрузка документа через sqlite-файл между идентичными базами.
    Покажите пожалуйста пример, как работает типизация по ID из внешней базы?
    И как нужно записать этот ID во внешнюю базу, чтобы эта типизация сработала?
      
    Наверх
     
    IP записан
     
    Переключение на Главную Страницу Страницы: [1] 
    ОтправитьПечать