Переключение на Главную Страницу Страницы: 1 ... 52 53 [54] 55 56 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 464522 )
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 записан
 
Переключение на Главную Страницу Страницы: 1 ... 52 53 [54] 55 56 ... 79
ОтправитьПечать