Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) 1sqlite. Запрос к регистру. Не знаю как получить КонОст  :-[ (число прочтений - 3360 )
palpetrovich
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 31
Зарегистрирован: 23. Ноября 2010
1sqlite. Запрос к регистру. Не знаю как получить КонОст  :-[
16. Декабря 2010 :: 13:59
Печать  
нижеприведенный код вываливает всю таблицу, ограниченную условиями
           
Код
Выбрать все
базаДанных.Открыть(":memory:");		    
		базаДанных.УложитьОбъекты(ВыбТМЦ,"ВыбрТовар",0,"Номенклатура");
		Запрос = базаДанных.НовыйЗапрос();				    
		Запрос.ВыполнитьЗапрос("create virtual table Рег using dbeng(РегистрИтоги.ОстаткиТоваров)");  
		запрос.ВыполнитьЗапрос("PRAGMA journal_mode = OFF");    
		текст="
		|SELECT
		|     РегТовар.Фирма [Фирма :Справочник.Фирмы]
		|    ,РегТовар.Склад [Склад :Справочник.МестаХранения]
		|    ,РегТовар.Товар [Товар :Справочник.Номенклатура]
		|    ,РегТовар.period
		|    ,РегТовар.ОстатокТовара
		|FROM   Рег РегТовар
		|WHERE	РегТовар.period < @ВыбДата
		|	AND РегТовар.Фирма = @ВыбФирма AND РегТовар.Склад = @ВыбСклад
		|   AND РегТовар.Товар in (select val from ВыбрТовар)
		|";    
		Запрос.Подготовить(текст);
		ДатаФормат = СокрЛП(Формат(ВыбКонПериода,"ДГГГГММДД"));  
		запрос.УстановитьПараметр("@ВыбДата", ДатаФормат);  
		запрос.УстановитьПараметр("@ВыбФирма", ВыбФирма);  
		запрос.УстановитьПараметр("@ВыбСклад", ВыбСклад);  
 



Под КонОст подразумеваю конечный остаток товара на дату

получаю:
Добро Главный Замок 20101201 22
Добро Главный Замок 20101101 22
Добро Главный Замок 20101001 22
...


« Последняя редакция: 16. Декабря 2010 :: 15:06 - palpetrovich »  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite. Запрос к регистру. Не знаю как получить КонОст  :-[
Ответ #1 - 16. Декабря 2010 :: 15:05
Печать  
Вываливает таблицу остатков у которых период меньше заданного
Код
Выбрать все
РегТовар.period < @ВыбДата 



Таким способом можно получить остатки ТОЛЬКО на ТА или на конец периода (если периодичность - "месяц", значит на конец месяца).

И еще парочка советов:
- в строке
Код
Выбрать все
ДатаФормат = СокрЛП(Формат(ВыбКонПериода,"ДГГГГММДД"));   


нет необходимости
-
Код
Выбрать все
Запрос.ВыполнитьЗапрос("create virtual table Рег using dbeng(РегистрИтоги.ОстаткиТоваров)"); 


тоже лишняя, достаточно в запросе указать имя этой таблице и она автоматом подключется, если не была подключена ранее

Должно получиться примерно так:

Код
Выбрать все
базаДанных.Открыть(":memory:");
		базаДанных.УложитьОбъекты(ВыбТМЦ,"ВыбрТовар",0,"Номенклатура");
		Запрос = базаДанных.НовыйЗапрос();
		запрос.ВыполнитьЗапрос("PRAGMA journal_mode = OFF");
		текст="
		|SELECT
		|     РегТовар.Фирма [Фирма :Справочник.Фирмы]
		|    ,РегТовар.Склад [Склад :Справочник.МестаХранения]
		|    ,РегТовар.Товар [Товар :Справочник.Номенклатура]
		|    ,РегТовар.period
		|    ,РегТовар.ОстатокТовара
		|FROM   [РегистрИтоги.ОстаткиТоваров] РегТовар
		|WHERE	РегТовар.period = @ВыбДата
		|	AND РегТовар.Фирма = @ВыбФирма AND РегТовар.Склад = @ВыбСклад
		|   AND РегТовар.Товар in (select val from ВыбрТовар)
		|";
		Запрос.Подготовить(текст);

		запрос.УстановитьПараметр("@ВыбДата", ВыбКонПериода);
		запрос.УстановитьПараметр("@ВыбФирма", ВыбФирма);
		запрос.УстановитьПараметр("@ВыбСклад", ВыбСклад);  



И еще вопрос. Тебе именно параметризованный запрос нужен?
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite. Запрос к регистру. Не знаю как получить КонОст  :-[
Ответ #2 - 16. Декабря 2010 :: 15:11
Печать  
ВыбКонПериода - должна быть началом месяца (если периодичность = "месяц"), т.е. вот так:
Код
Выбрать все
ВыбКонПериода = НачМесяца(ВыбДата); 

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


1C++ rocks!

Сообщений: 31
Зарегистрирован: 23. Ноября 2010
Re: 1sqlite. Запрос к регистру. Не знаю как получить КонОст  :-[
Ответ #3 - 16. Декабря 2010 :: 15:16
Печать  
JohnyDeath, спасибо, сейчас попробую

Действительно, так намного лучше!  Спасибо

И еще вопрос. Тебе именно параметризованный запрос нужен?

я не знаю какой именно,  я только учусь ...как-то прямые прошли мимо меня, не было нужды особой, а сейчас времени немного есть свободного, вот я и пытаюсь хоть немного наверстать... Улыбка
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite. Запрос к регистру. Не знаю как получить КонОст  :-[
Ответ #4 - 16. Декабря 2010 :: 15:20
Печать  
Тогда начни с этого: http://www.1cpp.ru/forum/YaBB.pl?num=1148874473
Правда там для SQL и ДБФ ОЛЕДБ, но суть хранения данных 1С уловишь, а переписать запрос на 1sqlite не составит особого труда.
  
Наверх
 
IP записан
 
palpetrovich
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 31
Зарегистрирован: 23. Ноября 2010
Re: 1sqlite. Запрос к регистру. Не знаю как получить КонОст  :-[
Ответ #5 - 16. Декабря 2010 :: 15:26
Печать  
спасибо, эту ветку я прочел первым делом ...может еще вернусь к ней конечно
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite. Запрос к регистру. Не знаю как получить КонОст  :-[
Ответ #6 - 16. Декабря 2010 :: 19:30
Печать  
Там не ветку главное прочесть, а прикрепленный к первому посту файлик Подмигивание
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: 1sqlite. Запрос к регистру. Не знаю как получить КонОст  :-[
Ответ #7 - 17. Декабря 2010 :: 02:18
Печать  
Тема довольно подробно описана в соседней ветке 1sqlite - движения документа в ответ на аналогичный вопрос.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: 1sqlite. Запрос к регистру. Не знаю как получить КонОст  :-[
Ответ #8 - 17. Декабря 2010 :: 06:51
Печать  
Тут человеку надо с азов начать, а не искать готовые решения. Дальше будет намного проще.
  
Наверх
 
IP записан
 
palpetrovich
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 31
Зарегистрирован: 23. Ноября 2010
Re: 1sqlite. Запрос к регистру. Не знаю как получить КонОст  :-[
Ответ #9 - 17. Декабря 2010 :: 13:22
Печать  
JohnyDeath писал(а) 16. Декабря 2010 :: 19:30:
Там не ветку главное прочесть, а прикрепленный к первому посту файлик Подмигивание


Ну конечно я скачал его. И "Эффективное использование MSSQL при помощи ВК 1С.doc" читал.  Может я не прав, но там больше для 1с++, а не для 1sqlite
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: 1sqlite. Запрос к регистру. Не знаю как получить КонОст  :-[
Ответ #10 - 17. Декабря 2010 :: 21:30
Печать  
Если Товар - первое измерение регистра, или для него включен отбор итогов, и список ВыбрТовар не сильно большой, то лучше FROM  построить так:
Код
Выбрать все
|FROM  [РегистрИтоги.ОстаткиТоваров] РегТовар inner join ВыбрТовар on РегТовар.Товар = ВыбрТовар.val
|WHERE	РегТовар.period = @ВыбДата
|	AND РегТовар.Фирма = @ВыбФирма AND РегТовар.Склад = @ВыбСклад
 


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