Переключение на Главную Страницу Страницы: [1] 2 3 4 ОтправитьПечать
Очень популярная тема (более 25 ответов) Поставщик данных SQLite для ТП (число прочтений - 16980 )
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Поставщик данных SQLite для ТП
02. Июля 2008 :: 17:53
Печать  
Во вложении класс ПоставщикSQLite и пример его использования.
Код
Выбрать все
Пост=СоздатьОбъект("ПоставщикSQLite");

Пост.ПолеИндекса="idx_DATE_TIME_IDDOC";
Пост.Параметры.Установить("НачДата",НачДата);
Пост.Параметры.Установить("КонДата",КонДата);
мд=СоздатьОбъект("MetaDataWork");
г=Мд.ИДОбъекта(Метаданные.ГрафаОтбора("Контрагент"));
Пост.Параметры.Установить("ГрафаОтбораКонтрагент",Прав(СокрП(_IdToStr(г)),4));
Пост.УстановитьТекстЗапроса("
|SELECT Ж.idx_DATE_TIME_IDDOC
|,Ж.iddoc [Документ :Документ]
|,Ж.iddocdef [Документ_вид :ПредставлениеВида]
|,Ж.DocNo Номер
|,Ж.date [Дата :Дата]
|,Ж.time [Время :Время]
|,substr(О.ParentVal,7,9) [Контрагент :Справочник.Контрагенты]
|FROM Журнал Ж
|INNER JOIN __1S_Crdoc О ON О.ChildID=Ж.IdDoc AND О.MdID=:ГрафаОтбораКонтрагент
|WHERE idx_DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~
|");
ПроксиПоставщик=СоздатьОбъект("ПроксиПоставщикДанных");
ПроксиПоставщик.УстПоставщика(Пост);

_ТП.Колонки.Добавить("Док").Данные="Документ";
_ТП.Колонки.Добавить("Дата").Данные="Дата";
_ТП.Колонки.Добавить("Номер").Данные="Номер";
_ТП.Колонки.Добавить("Контрагент").Данные="Контрагент";
_ТП.ПоставщикДанных=ПроксиПоставщик;
_ТП.ОбновитьСтроки();
 


Требуется наличие ProxyDataProvider.dll
  

SQLiteProvider.rar ( 19 KB | Загрузки )

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поставщик данных SQLite для ТП
Ответ #1 - 03. Июля 2008 :: 05:08
Печать  
Ну нифигасе!  Очень довольный сколько приятных новостей за последний месяц!
Будем тестить.
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поставщик данных SQLite для ТП
Ответ #2 - 03. Июля 2008 :: 06:52
Печать  
Есть в этом поставщике такой
Код
Выбрать все
Функция Fetch() Экспорт
	Перем НулРез;
	Если гЗапрошеноСтрок=0 Тогда
		Возврат НулРез;
	КонецЕсли;

	Если гЗапрошеноСтрок>0 Тогда
		гЗапрошеноСтрок=гЗапрошеноСтрок-1;
	Иначе
		гЗапрошеноСтрок=гЗапрошеноСтрок+1;
	КонецЕсли;
	Если гБуфер.СледующаяСтрока()=1 Тогда
		Ключ=гБуфер.ПолучитьЗначение(,ПолеИндекса);
		Стр=СоздатьОбъект("Структура");
		Стр.Вставить("__Ключ__",Ключ);
		Для й=1 По гБуфер.КоличествоКолонок() Цикл
			ИмяКолонки=гБуфер.ИмяКолонки(й);
			Если ИмяКолонки<>ПолеИндекса Тогда
				Стр.Вставить(ИмяКолонки,гБуфер.ПолучитьЗначение(,й));
			КонецЕсли;
		КонецЦикла;
		Возврат Стр;
	Иначе
		Возврат НулРез;
	КонецЕсли;
КонецФункции
 


Время выполнения выделенного фрагмента становится сравнимым с временем выполнения запроса при количестве колонок, приближающимся к 10.

2 ADirks или artbear:
прошу добавить метод в ИТЗ, который бы выгружал текущую или заданную номером строку ИТЗ в структуру.
Ключ - наименование колонки, значение - значение в текущей строке.

PS: сделал бы сам, только у меня умер ноут, на котором была настроенная среда для разработки icpp
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поставщик данных SQLite для ТП
Ответ #3 - 03. Июля 2008 :: 07:37
Печать  
steban писал(а) 03. Июля 2008 :: 06:52:
Есть в этом поставщике такой
Код
Выбрать все
		Для й=1 По гБуфер.КоличествоКолонок() Цикл
			ИмяКолонки=гБуфер.ИмяКолонки(й);
			Если ИмяКолонки<>ПолеИндекса Тогда
				Стр.Вставить(ИмяКолонки,гБуфер.ПолучитьЗначение(,й));
			КонецЕсли;
		КонецЦикла;
 


Время выполнения выделенного фрагмента становится сравнимым с временем выполнения запроса при количестве колонок, приближающимся к 10.

2 ADirks или artbear:
прошу добавить метод в ИТЗ, который бы выгружал текущую или заданную номером строку ИТЗ в структуру.
Ключ - наименование колонки, значение - значение в текущей строке.

Напиши в багзиллу, подумаем и сделаем.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Поставщик данных SQLite для ТП
Ответ #4 - 03. Июля 2008 :: 08:21
Печать  
steban писал(а) 03. Июля 2008 :: 06:52:
Время выполнения выделенного фрагмента становится сравнимым с временем выполнения запроса при количестве колонок, приближающимся к 10.

А в чем конкретно проблема с производительностью?
Язык 1С вообще не в состоянии выполнить 200 переносов (10 колонок на 20 строк) за приемлемое время?
А если отказаться от избыточных сравнений строк (сравнивать номера колонок)?

А структура - вообще-то зло.
Ибо не дает гарантий относительно порядка элементов.
Пора бы уже ее отправить на свалку истории. )
  

De quelle planète es-tu?
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поставщик данных SQLite для ТП
Ответ #5 - 03. Июля 2008 :: 08:26
Печать  
kms писал(а) 03. Июля 2008 :: 08:21:
Пора бы уже ее отправить на свалку истории. )

Да ну нафиг!  Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поставщик данных SQLite для ТП
Ответ #6 - 03. Июля 2008 :: 09:36
Печать  
В сборке icpp 3.0.1.7  реализован объект ПроксиПоставщикДанных / ProxyDataProvider - для возможности написания поставщиков данных для ТП на языке 1С с помощью классов 1С++.
Прошу тестировать.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поставщик данных SQLite для ТП
Ответ #7 - 03. Июля 2008 :: 10:54
Печать  
kms писал(а) 03. Июля 2008 :: 08:21:
А если отказаться от избыточных сравнений строк (сравнивать номера колонок)?

Отказался от сравнения вообще.

kms писал(а) 03. Июля 2008 :: 08:21:
А структура - вообще-то зло.
Ибо не дает гарантий относительно порядка элементов.
Пора бы уже ее отправить на свалку истории. )

СписокЗначений не лучше.
Он не в состоянии хранить пустые значения.
И по производительности примерно в одном ряду со Структурой.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поставщик данных SQLite для ТП
Ответ #8 - 03. Июля 2008 :: 11:04
Печать  
Я лично в последнее время хочу перестать пользоваться списком значений и переключиться на Структуру, доработав ее в сторону ускорения работы + выгрузки/загрузки из основных контейнеров.
Михаил, помнится, ты как-то говорил об ускорении Структуры, но потом это ускорение было отложено.
Можешь напомнить, каким образом ты хотел ее ускорить.

ЗЫ тем более, что СЗ закрытый объект, а Структурой мы можем свободно рулить Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


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

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Поставщик данных SQLite для ТП
Ответ #9 - 03. Июля 2008 :: 11:10
Печать  
artbear писал(а) 03. Июля 2008 :: 11:04:
Я лично в последнее время хочу перестать пользоваться списком значений и переключиться на Структуру, доработав ее в сторону ускорения работы + выгрузки/загрузки из основных контейнеров.
Михаил, помнится, ты как-то говорил об ускорении Структуры, но потом это ускорение было отложено.
Можешь напомнить, каким образом ты хотел ее ускорить.

ЗЫ тем более, что СЗ закрытый объект, а Структурой мы можем свободно рулить Улыбка


Я кстати согласен с Артуром, может стоит поработать над ее "скоростью" чем выкидывать, альтернативы то по сути почти нет
  

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


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Поставщик данных SQLite для ТП
Ответ #10 - 03. Июля 2008 :: 11:26
Печать  
artbear писал(а) 03. Июля 2008 :: 11:04:
выгрузки/загрузки из основных контейнеров.
Михаил, помнится, ты как-то говорил об ускорении Структуры, но потом это ускорение было отложено.
Можешь напомнить, каким образом ты хотел ее ускорить.

По скорости для структуры все, что можно, вроде бы уже сделано.
Пока не особо понятно, что именно требуется для ускорения приведенного кода у Степана.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поставщик данных SQLite для ТП
Ответ #11 - 03. Июля 2008 :: 11:36
Печать  
Может кто сказать, почему без строки "WHERE idx_DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~" поставщик выдает ошибку?
Ну типа я хочу увидеть весь журнал Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поставщик данных SQLite для ТП
Ответ #12 - 03. Июля 2008 :: 11:37
Печать  
Кстати, есть одно важное отличие СЗ от Структуры.
СЗ вроде как намного быстрее создается при загруженном 1С++ Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поставщик данных SQLite для ТП
Ответ #13 - 03. Июля 2008 :: 11:43
Печать  
Степан, а может быть, стоит все-таки реализовать класс на С++, а?
Все-таки интерпретатор 1С прилично подтормаживает.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Поставщик данных SQLite для ТП
Ответ #14 - 03. Июля 2008 :: 11:53
Печать  
artbear писал(а) 03. Июля 2008 :: 11:36:
Может кто сказать, почему без строки "WHERE idx_DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~" поставщик выдает ошибку?
Ну типа я хочу увидеть весь журнал Улыбка

В текущей реализации код запроса поставщиком никак не анализируется.
Предполагается, что он имеет вид:
Код
Выбрать все
SELECT <поля>
FROM <таблицы>
WHERE условия 


Если ограничивать выборку условиями не нужно, то можно просто добавить в конец запроса
Код
Выбрать все
WHERE 1=1 

  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 4
ОтправитьПечать