Переключение на Главную Страницу Страницы: 1 ... 33 34 [35] 36 37 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 532274 )
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 записан
 
Переключение на Главную Страницу Страницы: 1 ... 33 34 [35] 36 37 ... 79
ОтправитьПечать