Переключение на Главную Страницу Страницы: 1 ... 13 14 [15] 16 17 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 480230 )
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 записан
 
Переключение на Главную Страницу Страницы: 1 ... 13 14 [15] 16 17 ... 79
ОтправитьПечать