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


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

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

Сообщений: 635
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: 1sqlite
Ответ #1096 - 06. Июня 2023 :: 11:09
Печать  
alyuev писал(а) 06. Июня 2023 :: 09:46:
А с "deScr" таки да работает. Видимо вшито в компоненту своё имя? Или потому что английское?

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


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

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


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

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


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

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


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

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

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

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


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

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

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


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

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


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

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

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

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