Переключение на Главную Страницу Страницы: 1 ... 31 32 [33] 34 35 ... 79 ОтправитьПечать
Очень популярная тема (более 25 ответов) 1sqlite (число прочтений - 532301 )
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #480 - 17. Марта 2009 :: 11:19
Печать  
Вот проверяйте.
Косяк был в случае выборки по индексу в обратном порядке при наличии условия "поле <=" в некоторых пограничных случаях.
Связано оказалось с тем, что на самом деле индекс в дбф-файлах упорядочен не по win-1251, а в каком-то другом порядке.
Привел сранение строк в компоненте в соответствиие с этим порядком
(например, символ № у 1С попадает рядом с латинской N и тп).
  

1sqlite_002.zip ( 380 KB | Загрузки )
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite
Ответ #481 - 17. Марта 2009 :: 11:33
Печать  
Отлично!

Может тогда дело и до БыстрогоПоиска в поставщике для ТП дойдёт?
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: 1sqlite
Ответ #482 - 17. Марта 2009 :: 11:35
Печать  
на моей тестовой конфе глюк ушел, погоняю на боевых
большое спасибо! Улыбка
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1sqlite
Ответ #483 - 17. Марта 2009 :: 19:05
Печать  
JohnyDeath писал(а) 17. Марта 2009 :: 11:33:
Отлично!

Может тогда дело и до БыстрогоПоиска в поставщике для ТП дойдёт?


+1000 очень не хватает
очень, очень, очень  Подмигивание
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: 1sqlite
Ответ #484 - 17. Марта 2009 :: 19:44
Печать  
Кстати Саша, хотел спросить у ODBC есть очень занимательная возможность типизация классом. А в 1sqlite это возможно реализовать?  Улыбка
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #485 - 17. Марта 2009 :: 21:00
Печать  
vandalsvq писал(а) 17. Марта 2009 :: 19:44:
Кстати Саша, хотел спросить у ODBC есть очень занимательная возможность типизация классом. А в 1sqlite это возможно реализовать?  Улыбка

Сейчас ODBC интегрирован в 1С++, моя же компонента как-бы отдельно, хотелось бы сохранить в ее архитектуре независимость от других компонент. В идеале 1sqlite не должен знать ни о каких классах и 1С++. Но. Допустим выгрузку в ИТЗ все же сделали, благодаря вынесению переноса результатов запроса в объект-приемник через спец-интерфейс. Можно подумать и либо как-то расширить этот интерфейс, чтобы 1С++ могла принять результат запроса и типизировать его дополнительно, либо придумать еще один интерфейс. Надо обсуждать с Артуром и Михаилом.
  
Наверх
 
IP записан
 
Chieftain
Senior Member
****
Отсутствует


___

Сообщений: 498
Местоположение: Тула
Зарегистрирован: 15. Февраля 2007
Пол: Мужской
Re: 1sqlite
Ответ #486 - 18. Марта 2009 :: 06:26
Печать  
А хотелку Пользовательские функции будешь реализовывать?
  
Наверх
ICQ  
IP записан
 
butrinovv
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Местоположение: Москва
Зарегистрирован: 08. Августа 2006
Пол: Мужской
Re: 1sqlite
Ответ #487 - 23. Марта 2009 :: 16:02
Печать  
Подскажите пожалуйста, как с помощью 1sqlite правильно организовать выборку всех документов или документов нескольких видов с наложением условий на реквизиты и упорядочиванием по позиции документа (как в штатных журналах), и вывести результат в ТП.

Попробовал следующий код :
Код
Выбрать все
Процедура ПослеОткрытия()
	БазаДанных = СоздатьОбъект("SQLiteBase");
	// Откроем пустую базу данных в памяти
	БазаДанных.Открыть(":memory:");
	// Создадим выполнитель запросов.
	Запрос = БазаДанных.НовыйЗапрос();
	// Так как база в памяти, то журналирование нам ни к чему, только зря будет отнимать время
	Запрос.ВыполнитьЗапрос("PRAGMA journal_mode = OFF");

	// Подключим таблицы документов заданных в конфигурации к SQLite
	// и составим запрос
	Запрос.ВыполнитьЗапрос("create virtual table Накл_ТД using dbeng(Документ.ТранзитнаяДистрибьютерская)");
	Запрос.ВыполнитьЗапрос("create virtual table Накл_ТДС using dbeng(Документ.ТранзитнаяДистрибьютерскаяСуммовая)");
	Запрос.ВыполнитьЗапрос("create virtual table Накл_ЗМ using dbeng(Документ.ЗакупкаМатериалов)");

	ТекстЗапроса="
	|select IDDOC [Ключ],
	|IDDOC [Документ $Документ.ТранзитнаяДистрибьютерская],
	|Поставщик [Поставщик $Справочник.Клиенты]
	|from Накл_ТД
	|
	|UNION ALL
	|
	|select IDDOC [Ключ],
	|IDDOC [Документ $Документ.ЗакупкаМатериалов],
	|Поставщик [Поставщик $Справочник.Клиенты]
	|from Накл_ЗМ
	|
	|UNION ALL
	|
	|select IDDOC [Ключ],
	|IDDOC [Документ $Документ.ТранзитнаяДистрибьютерскаяСуммовая],
	|Поставщик [Поставщик $Справочник.Клиенты]
	|from Накл_ТДС
	|
	|where 1=1
	|";

	АтрФормы=СоздатьОбъект("Форма");
	АтрФормы.УстановитьФорму(Форма);
	ТабличноеПоле=АтрФормы.СоздатьЭлементУправления("ТабличноеПоле","РеквизитТП");

	Колонки=ТабличноеПоле.Колонки;  
	//Добавление Колонки "Ключ"
	Колонка=Колонки.Добавить("Ключ");
	Колонка.Данные="Ключ";
	Колонка.Заголовок="Ключ";
	Колонка.Ширина=12;
	Колонка.ГоризонтальноеВыравнивание=1;
	//Добавление прочих Колонок
	Колонка=Колонки.Добавить("Документ");
	Колонка.Данные="Документ";
	Колонка.Заголовок="Документ";
	Колонка.Ширина=120;
	Колонка.ГоризонтальноеВыравнивание=1;

	Колонка=Колонки.Добавить("Поставщик");
	Колонка.Данные="Поставщик";
	Колонка.Заголовок="Поставщик";
	Колонка.Ширина=30;
	Колонка.ГоризонтальноеВыравнивание=2;


	//Опции отображения
	ТабличноеПоле.ТаймаутБыстрогоПоиска=1;
	ТабличноеПоле.РежимВыделенияСтроки=1;
	ТабличноеПоле.ИзменятьПозициюКолонок=0;
	ТабличноеПоле.ТаймаутОбновления=0;
	//ТабличноеПоле.НачальноеПредставление=1;


	Поставщик=СоздатьОбъект("SQLiteDataProvider");
	Поставщик.УстановитьБД(БазаДанных);
	Поставщик.УстановитьТекстЗапроса(ТекстЗапроса,"[Ключ]");
	Поставщик.Отладка(32,1);
	ТабличноеПоле.ПоставщикДанных=Поставщик;

КонецПроцедуры  
 



Попытка привела к странному результату : один и тот же документ в ТП стал повторяться по несколко раз в разных строках (изображение прилагаю).
Если из запроса убрать UNION ALL и оставить один select то вроде
выдается нормальный результат, но только по определенному виду документов, а необходимо по всем.

Работаю на ДБФ-версии 1С, 1sqlite Версия 1.0.1.9, 1CPP 3.0.1.22
« Последняя редакция: 23. Марта 2009 :: 23:17 - butrinovv »  

screen_5.gif ( 12 KB | Загрузки )
screen_5.gif
Наверх
 
IP записан
 
leonvlas
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 47
Зарегистрирован: 03. Августа 2007
Re: 1sqlite
Ответ #488 - 24. Марта 2009 :: 06:08
Печать  
в этой выборке нет вида документа , тогда собственно вопрос как определить какого вида это документ. правильнее это делать через журнал.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #489 - 24. Марта 2009 :: 06:53
Печать  
Дело в том, что при union all названия полей запроса берутся из первого selecta, соответсвенно, для всех документов применяется типизация Документ.ТранзитнаяДистрибьютерская, что неверно.
Перепиши так:
Код
Выбрать все
|select IDDOC [Док :Документ],
|:ВидДокумента.ТранзитнаяДистрибьютерская [Док_вид],
|Поставщик [Поставщик $Справочник.Клиенты]
|from Накл_ТД
|
|UNION ALL
|
|select IDDOC,
|:ВидДокумента.ЗакупкаМатериалов,
|Поставщик
|from Накл_ЗМ
и тд
 



В качестве ключа используй поле [Док :Документ]
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: 1sqlite
Ответ #490 - 24. Марта 2009 :: 06:55
Печать  
Саша, а последнюю сборку 1sqlite можно считать стабильной, или ты будешь еще что в ней менять?
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #491 - 24. Марта 2009 :: 07:15
Печать  
Блин, туплю чето.
Такой запрос - с union all - вообще очень плохо использовать для поставщика ТП - потому как он получается должен сперва отобрать все записи из разных таблиц, отсортировать их по iddoc, потом взять из них первые нужные.

Такой запрос лучше делать выборкой из общего журнала, с ограничением по видам документов. При этом отлично отсортируется по datetime, как в журналах 1С:
Код
Выбрать все
select
idx_DATE_TIME_IDDOC [Ключ],
iddoc [Док :Документ],
iddocdef [Док_вид],
case iddocdef
when :ВидДокумента.ТранзитнаяДистрибьютерская then
    (select Поставщик from Документ_ТранзитнаяДистрибьютерская Д where Д.iddoc = Ж.iddoc limit 1)
when :ВидДокумента.ЗакупкаМатериалов then
    (select Поставщик from Документ_ЗакупкаМатериалов Д where Д.iddoc = Ж.iddoc limit 1)
.... для других видов доков
end [Поставщик :Справочник.Клиенты]

from Журнал Ж
where
iddocdef = :ВидДокумента.ТранзитнаяДистрибьютерская
or iddocdef = :ВидДокумента.ЗакупкаМатериалов
... и тд
 


  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite
Ответ #492 - 24. Марта 2009 :: 07:18
Печать  
CaBaT писал(а) 24. Марта 2009 :: 06:55:
Саша, а последнюю сборку 1sqlite можно считать стабильной, или ты будешь еще что в ней менять?

Последняя это которую недавно тут клал, с исправленным косяком с периодикой ?
Боле-менее стабильная. Буду немного менять поставщика данных, в плане быстрого поиска.
По мере выхода новых релизов SQLite буду стараться обновлять их и в компоненте.
  
Наверх
 
IP записан
 
CaBaT
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 718
Местоположение: Санкт-Петербург
Зарегистрирован: 26. Октября 2007
Пол: Мужской
Re: 1sqlite
Ответ #493 - 24. Марта 2009 :: 07:25
Печать  
да, я о ней...
спросил потому, что в списке изменений библиотеки sqlite видимо есть ряд довольно существенных, например
http://sqlite.org/35to36.html
я не настолько силен в понимании, что из этого функционала используется при работе с DBF-таблицами 1С
  
Наверх
 
IP записан
 
butrinovv
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 5
Местоположение: Москва
Зарегистрирован: 08. Августа 2006
Пол: Мужской
Re: 1sqlite
Ответ #494 - 24. Марта 2009 :: 07:54
Печать  
Спасибо, leonvlas, orefkov.

Александр, вечером попробую Ваш код.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 31 32 [33] 34 35 ... 79
ОтправитьПечать