Переключение на Главную Страницу Страницы: 1 ... 73 74 [75] 76 77 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 480224 )
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 854
Местоположение: Одесса
Зарегистрирован: 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
*****
Отсутствует


Гражданин Вселенной

Сообщений: 854
Местоположение: Одесса
Зарегистрирован: 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

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 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

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 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
*****
Отсутствует


Гражданин Вселенной

Сообщений: 854
Местоположение: Одесса
Зарегистрирован: 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
*****
Отсутствует


Гражданин Вселенной

Сообщений: 854
Местоположение: Одесса
Зарегистрирован: 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

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #1116 - 09. Июня 2023 :: 14:49
Печать  
Чинить все это теперь довольно сложно, хэшей несколько, где какой работает я без понятия.
Зачем нужен байтовый хэш, если есть хэш Хоффмана?
Эта оптимизация экономит всего 10-ки тактов процессора, а головной боли приносит значительно больше.
  
Наверх
www  
IP записан
 
Ветер в поле
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 44
Зарегистрирован: 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
*****
Отсутствует


Гражданин Вселенной

Сообщений: 854
Местоположение: Одесса
Зарегистрирован: 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

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 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

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #1120 - 10. Июня 2023 :: 11:57
Печать  
Ветер в поле писал(а) 09. Июня 2023 :: 16:40:
Не работает поиск LIKE 'zz%'. Причем у меня для всех полей, даже без индекса

Намудрил простенький тест, опечалился...
Почти понятно почему, но не понятно где.
Источник проблем sqlite, при сборке с новым движком старые мои версии где это работатало, работать корректно перестали.
Впрочем и финальная версия Орефкова ошибается, т.е. это немного сложнее, потребуются исследования.
Решение будет не быстро.
  
Наверх
www  
IP записан
 
alyuev
God Member
*****
Отсутствует


Гражданин Вселенной

Сообщений: 854
Местоположение: Одесса
Зарегистрирован: 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

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 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
*****
Отсутствует


Гражданин Вселенной

Сообщений: 854
Местоположение: Одесса
Зарегистрирован: 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
*****
Отсутствует


Гражданин Вселенной

Сообщений: 854
Местоположение: Одесса
Зарегистрирован: 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 записан
 
Переключение на Главную Страницу Страницы: 1 ... 73 74 [75] 76 77 ... 79
ОтправитьПечать