Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) а кто-нить пример покажет SQLite+регистры на ДБФ? (число прочтений - 15549 )
Thor
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 82
Зарегистрирован: 12. Июля 2006
Re: а кто-нить пример покажет SQLite+регистры на Д
Ответ #15 - 24. Июля 2008 :: 11:59
Печать  
JohnyDeath писал(а) 24. Июля 2008 :: 11:53:
JohnyDeath писал(а) 24. Июля 2008 :: 11:35:
Последняя попытка (наверное Улыбка):
Код
Выбрать все
(SELECT value FROM __1S_Const
WHERE
idx_ID_OBJID_DATE_TIME_DOCID_PARTNO <
('   E' || спр.id || '20080529Я') ORDER BY date desc LIMIT 1)
) 


Скорее всего тоже не прокатит. Скорее всего sqlite сначала сортирует всю таблицу, а только потом накладывает фильтр  Печаль (надо ещё тестить)

Прокатило  Озадачен Смех
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: а кто-нить пример покажет SQLite+регистры на Д
Ответ #16 - 24. Июля 2008 :: 12:04
Печать  
Ты побольше потесть, на разных данных, разных периодических реквизитов. (что-то у меня сомнения по этому поводу, мне кажется, что не те данные в результат попадают, но могу и ошибаться)
О результатах сообщи!  Подмигивание
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: а кто-нить пример покажет SQLite+регистры на Д
Ответ #17 - 24. Июля 2008 :: 13:34
Печать  
JohnyDeath, поправь строки, а то делает "Цена продажи" вместо "ЦенаПрод"  Подмигивание

Код
Выбрать все
	//СписокИзмерений.ДобавитьЗначение(ТекРегистр.Измерение(й));
	СписокИзмерений.ДобавитьЗначение(ТекРегистр.Измерение(й).Идентификатор);
 

  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: а кто-нить пример покажет SQLite+регистры на Д
Ответ #18 - 25. Июля 2008 :: 05:35
Печать  
Угу. Исправил. Спасибо.
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: а кто-нить пример покажет SQLite+регистры на Д
Ответ #19 - 25. Июля 2008 :: 05:52
Печать  
JohnyDeath
А где будут выкладыватся новые версии класса?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: а кто-нить пример покажет SQLite+регистры на Д
Ответ #20 - 25. Июля 2008 :: 05:58
Печать  
PVR писал(а) 25. Июля 2008 :: 05:52:
JohnyDeath
А где будут выкладыватся новые версии класса?

Пока залил туда же (во второй пост этой ветки). Мне сейчас не очень нравится его реализация. + хочу сделать ВТОборотыРегистара и ВТОстаткиИОбороты.
Да и с 1sqlite есть одна большая проблема, ждём Сашу Орефкова с нетерпением.
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: а кто-нить пример покажет SQLite+регистры на Д
Ответ #21 - 25. Июля 2008 :: 06:05
Печать  
Ждем с нетерпением все перечисленные ВТ и работы без флага "Быстрая обработка движений" тоже Улыбка
Я так думаю, Саша быстро испраит Подмигивание
  
Наверх
 
IP записан
 
Thor
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 82
Зарегистрирован: 12. Июля 2006
Re: а кто-нить пример покажет SQLite+регистры на Д
Ответ #22 - 25. Июля 2008 :: 09:23
Печать  
JohnyDeath писал(а) 24. Июля 2008 :: 12:04:
О результатах сообщи!  Подмигивание


Предварительные результаты.
1. Объект тестирования - значения периодического реквизита "Курс" всех элементов справочника "Валюты". В справочнике 5 валют, одна из них - национальная (на тест не повлияла), из остальных четырех по одной (Евро) курс имеется на каждый рабочий день в течение 4 лет, по остальным заполнение от 1 до 10 значений в месяц.
2. Тесты Было выполнено 3 теста, результат сравнивался с образцом - ТекЭлемент.Курс.Получить(ТекДата). Тесты различаются условиями отбора по дате периодического значения -
1.
Код
Выбрать все
WHERE objid=спр.id AND id='   E' AND date<= '"+ДатаСтр+"' 


2.
Код
Выбрать все
WHERE objid=спр.id AND id='   E' AND (date< '"+ДатаСтр+"' OR date= '"+ДатаСтр+"')  


3.
Код
Выбрать все
WHERE idx_ID_OBJID_DATE_TIME_DOCID_PARTNO <
	|('   E' || спр.id || '"+ДатаСтр+"Я') 


3. Результаты теста.
Сражу скажу, что второй тест выдал полное совпадение по всей выборке (отдельный респект Chieftain  Подмигивание)
Первый тест выдавал расхождения на датах, у которых день заказчивался на 9 - 9, 19 и 29 числа месяца. Причем влияет только число - 9-ка в месяце (сентябрь) не добавила расхождений.
Третий тест выдал расхождения по всем валютам, кроме национальной и Евро, причем возвращались значения, относящиеся к курсам других валют  Озадачен. Скорей всего причина в том, что в 3-м тесте ключ сравнения составной, т.е. выполнение условия происходит на значениях валюты с меньшим внутренним идентификатором (национальная валюта и евро имеют наименьшие идентификаторы).

Вот такие результаты. Имеет смысл дальше тестировать?
  
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: а кто-нить пример покажет SQLite+регистры на Д
Ответ #23 - 25. Июля 2008 :: 10:16
Печать  
Нет, спасибо.
Точно, я ступил, надо было примерно так:
Код
Выбрать все
WHERE idx_ID_OBJID_DATE_TIME_DOCID_PARTNO <	('   E' || спр.id || '"+ДатаСтр+"Я')
  AND idx_ID_OBJID_DATE_TIME_DOCID_PARTNO >	('   E' || спр.id)  

  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: а кто-нить пример покажет SQLite+регистры на Д
Ответ #24 - 02. Сентября 2008 :: 09:23
Печать  
JohnyDeath писал(а) 22. Июля 2008 :: 12:37:
Делал на основе Степановскго класса
Добавил ВТ $РегистрОстатки._ИмяРегистра_
делал по аналогии с ВТ для SQL http://www.1cpp.ru/docum/icpp/html/ODBC.html#id34
но пока есть много ограничений, а именно:
1. Цитата:
ГраницаРасчета - тип: значение. Строка, представляющая период или момент времени во внутреннем формате 1С. Если передан период времени (дата или позиция документа), остатки рассчитываются на конец периода.  Для формирования моментов времени также можно воспользоваться позицией документа: процедурой СформироватьПозициюДокумента() синтаксис 1, указывая не нулевой ФлагСмещения; или СформироватьПозициюДокумента() синтаксис 2.
Если передавать документ, то остатки расчитываются на КОНЕЦ документа.

2. Работает только с регистрами, для которых установлен флаг "Быстрая обработка движений"
...ну может и ещё что-то.

Хочу переделать, но, думаю, как пример - сойдёт.

Как продвигаются дела с классом?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: а кто-нить пример покажет SQLite+регистры на Д
Ответ #25 - 02. Сентября 2008 :: 13:06
Печать  
PVR писал(а) 02. Сентября 2008 :: 09:23:
Как продвигаются дела с классом?

Отпуск продвигается хорошо, спасибо!  Подмигивание Готовим кроватки, пелинальные столики, подгузники  Улыбка
А в пятницу - открытие сезона охоты! Так что, как видишь, пока не до класса.  Очень довольный
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: а кто-нить пример покажет SQLite+регистры на ДБФ?
Ответ #26 - 02. Сентября 2008 :: 13:18
Печать  
Поздравляю  Очень довольный
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: а кто-нить пример покажет SQLite+регистры на ДБФ?
Ответ #27 - 02. Сентября 2008 :: 13:59
Печать  
Пока рановато. Через месяц подходи  Подмигивание
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: а кто-нить пример покажет SQLite+регистры на ДБФ?
Ответ #28 - 04. Сентября 2008 :: 12:12
Печать  
По поводу ПоследнегоЗначения.
Проводил такой тест:
Код
Выбрать все
Процедура Тест()
	Попытка
		база = СоздатьОбъект("SQLiteBase");
	Исключение
		ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
		база = СоздатьОбъект("SQLiteBase");
	КонецПопытки;
	база.Открыть(":memory:");
	спр = СоздатьОбъект("Справочник.Цены");
	запрос = база.НовыйЗапрос();
	запрос.Подготовить("select
	|cast(value as numeric) [Цена :Число.15.2]
	|from __1S_Const
	|where
	|objid = @Элемент
	|and id = :ИсторияРеквизита.Цены.Цена
	|and date <= @Дата
	|order by date desc
	|limit 1");

	к = 0;

	Для Номер = 0 По 4 Цикл
		д = '28.03.2006' + Номер;
		Сообщить(д);
		спр.ВыбратьЭлементы(0);
		Пока спр.ПолучитьЭлемент() = 1 Цикл
			к = к + 1;
			Цена1С = спр.ТекущийЭлемент().Цена.Получить(д);
			запрос.УстановитьПараметр("@Элемент", спр.ТекущийЭлемент());
			запрос.УстановитьПараметр("@Дата", д);
			Попытка
				ЦенаЗп = запрос.Выполнить().ПолучитьЗначение(1, 1);
			Исключение
				ЦенаЗп = 0;
			КонецПопытки;
			Если Цена1С <> ЦенаЗп Тогда
				Сообщить("" + д + " " + спр.Владелец + " " + спр.КатегорияЦены + " " + Цена1С + " " + ЦенаЗп);
				Возврат;;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	Сообщить("Все " + к);
КонецПроцедуры	// Тест
 



Результат запуска:
Код
Выбрать все
28.03.06
29.03.06
30.03.06
31.03.06
01.04.06
Все 113160
 



То есть расхождений с 1С не было.

Можно узнать более подробно, на которой версии 1sqlite проводились тесты и сам код теста?
  
Наверх
 
IP записан
 
Thor
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 82
Зарегистрирован: 12. Июля 2006
Re: а кто-нить пример покажет SQLite+регистры на ДБФ?
Ответ #29 - 04. Сентября 2008 :: 15:11
Печать  
orefkov писал(а) 04. Сентября 2008 :: 12:12:
Можно узнать более подробно, на которой версии 1sqlite проводились тесты и сам код теста?


Версия 1С++ 2.0.3.3
Версия sqlite 1.0.1.8

Текст процедуры получения значения:
Код
Выбрать все
Функция Тест2(Выборка, ТекЭлемент, ТекДата)
	ДатаСтр = Формат(ТекДата, "ДГГГГММДД");

	ТекстЗапроса = "
	|SELECT
	|(
	|(SELECT value FROM __1S_Const
	|WHERE objid=спр.id AND id='   E' AND (date< '"+ДатаСтр+"' OR date= '"+ДатаСтр+"') ORDER BY date desc LIMIT 1)
	|) as [Курс :Число]
	|FROM Справочник_Валюты as спр
	|WHERE спр.id = :ТекЭлемент"
	;

	тз = СоздатьОбъект("ТаблицаЗначений");
	Выборка.Подставлять("ТекЭлемент", ТекЭлемент);
	//Выборка.Отладка(1);
	Выборка.ВыполнитьЗапрос(ТекстЗапроса, тз,);

	Если тз.КоличествоСтрок() = 1 Тогда
		Возврат тз.ПолучитьЗначение(1, "Курс");
	ИначеЕсли тз.КоличествоСтрок() = 0 Тогда
		Возврат -2;
	ИначеЕсли тз.КоличествоСтрок() > 1 Тогда
		Возврат -3;
	КонецЕсли;
КонецФункции
 


  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать