Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Не работает отбор в запросе 1sqlite (число прочтений - 8914 )
ildary
Full Member
***
Отсутствует



Сообщений: 163
Зарегистрирован: 24. Марта 2008
Не работает отбор в запросе 1sqlite
25. Марта 2014 :: 07:57
Печать  
Уважаемые специалисты, подскажите пожалуйста, почему в запросе 1sqlite не отрабатывает отбор по списку значений?

Запрос к справочнику номенклатуры (ТиС) с отбором по полю производитель, запрос выводит всю номенклатуру, а должен только ту, которая в СЗ:

     ВыбПроизводитель = СоздатьОбъект( "Справочник.Производители" );
     ВыбПроизводитель.НайтиПоКоду( "0021" );
     ВыбПроизводитель = ВыбПроизводитель.ТекущийЭлемент();
     
     Спс = СоздатьОбъект( "СписокЗначений" );
     спс.ДобавитьЗначение( ВыбПроизводитель );
     
     ТекстЗапроса="
     |Select
     | Ном.code,
     | Ном.Descr,
     | Ном.Производитель [Производитель $Справочник.Производители]
     |From
     | Справочник_Номенклатура Ном;
     |
     |WHERE (Ном.Производитель IN (SELECT val FROM Спс));";
     
     База = СоздатьОбъект( "SQLiteBase" );
     
     база.Открыть(":memory:"); // Откроем пустую базу данных в памяти
     запрос = база.НовыйЗапрос();
     запрос.Подготовить(текстЗапроса);
     запрос.ВыполнитьЗапрос( "PRAGMA journal_mode = WAL" );
     
     база.УложитьОбъекты( спс, "Спс", 0);            
     
     ТЗ = СоздатьОбъект( "ТаблицаЗначений" );
     ТЗ = Запрос.ВыполнитьЗапрос( ТекстЗапроса );
     
     ТЗ.ВыбратьСтроку();

1С 7.7 27, DBF, 1С++ 3.2.4.1, 1sqlite 1.0.2.3, Win2003stdR2 64bit
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Не работает отбор в запросе 1sqlite
Ответ #1 - 25. Марта 2014 :: 08:19
Печать  
Код
Выбрать все
 //  Спс = СоздатьОбъект( "СписокЗначений" );
//     спс.ДобавитьЗначение( ВыбПроизводитель );

.....
  |From
     |-- Справочник_Номенклатура Ном;
     |[Справочник.Номенклатура] Ном


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

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



Сообщений: 163
Зарегистрирован: 24. Марта 2008
Re: Не работает отбор в запросе 1sqlite
Ответ #2 - 25. Марта 2014 :: 08:21
Печать  
Уважаемый Erpst, меня интересует отбор именно по списку. В моем примере в списке был один элемент, а иногда надо фильтровать по нескольким одновременно.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Не работает отбор в запросе 1sqlite
Ответ #3 - 25. Марта 2014 :: 08:22
Печать  
Ну втыкай список.
В твоём примере, для отбора по группе/элементы список не нужен был бы.
ЗЫ: у тебя в УложитьОбъекты небыло типизации + зачем то ; в тексте запроса.. он вообще должен был ошибку выдавать в синтаксисе..
  
Наверх
 
IP записан
 
ildary
Full Member
***
Отсутствует



Сообщений: 163
Зарегистрирован: 24. Марта 2008
Re: Не работает отбор в запросе 1sqlite
Ответ #4 - 25. Марта 2014 :: 08:24
Печать  
Дак я и воткнул список, но отбор по списку не работает - в ТЗ попадают все товары (вместо того, чтобы вывести только те, у которых производитель в списке).
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Не работает отбор в запросе 1sqlite
Ответ #5 - 25. Марта 2014 :: 08:26
Печать  
база.УложитьОбъекты(Спс,"Спс",0,"Производители");
  
Наверх
 
IP записан
 
ildary
Full Member
***
Отсутствует



Сообщений: 163
Зарегистрирован: 24. Марта 2008
Re: Не работает отбор в запросе 1sqlite
Ответ #6 - 25. Марта 2014 :: 08:28
Печать  
Спасибо за помощь, но отбор по прежнему не работает...
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Не работает отбор в запросе 1sqlite
Ответ #7 - 25. Марта 2014 :: 08:34
Печать  
Текст запроса покажи.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Не работает отбор в запросе 1sqlite
Ответ #8 - 25. Марта 2014 :: 08:35
Печать  
+ Производитель  в справочнике какого типа хоть ?
Неопределенного вида/типа ?
Или конкретного вида справочника ?
  
Наверх
 
IP записан
 
ildary
Full Member
***
Отсутствует



Сообщений: 163
Зарегистрирован: 24. Марта 2008
Re: Не работает отбор в запросе 1sqlite
Ответ #9 - 25. Марта 2014 :: 08:36
Печать  
Весь код обработки был в (0), могу еще полнее:

Процедура Сформировать()

     ВыбПроизводитель = СоздатьОбъект( "Справочник.Производители" );
     ВыбПроизводитель.НайтиПоКоду( "0021" );
     ВыбПроизводитель = ВыбПроизводитель.ТекущийЭлемент();
     
     Спс = СоздатьОбъект( "СписокЗначений" );
     спс.ДобавитьЗначение( ВыбПроизводитель );
     
     ТекстЗапроса="
     |Select
     | Ном.code,
     //| Ном.Descr,
     | id [Объект :Справочник.Номенклатура],
     | Ном.Производитель [Производитель $Справочник.Производители]
     |From
     | Справочник_Номенклатура Ном;
     |
     |WHERE (Ном.Производитель IN (SELECT val FROM Спс));";
     
     База = СоздатьОбъект( "SQLiteBase" );
     
     база.Открыть(":memory:"); // Откроем пустую базу данных в памяти
     запрос = база.НовыйЗапрос();
     запрос.Подготовить(текстЗапроса);
     запрос.ВыполнитьЗапрос( "PRAGMA journal_mode = WAL" );
     
     база.УложитьОбъекты( Спс, "Спс", 0, "Производители" );
     
     ТЗ = СоздатьОбъект( "ТаблицаЗначений" );
     ТЗ = Запрос.ВыполнитьЗапрос( ТекстЗапроса );
     
     ТЗ.ВыбратьСтроку();
     
КонецПроцедуры
  
Наверх
 
IP записан
 
ildary
Full Member
***
Отсутствует



Сообщений: 163
Зарегистрирован: 24. Марта 2008
Re: Не работает отбор в запросе 1sqlite
Ответ #10 - 25. Марта 2014 :: 08:42
Печать  
Eprst писал(а) 25. Марта 2014 :: 08:35:
+ Производитель  в справочнике какого типа хоть ?
Неопределенного вида/типа ?
Или конкретного вида справочника ?


Конкретного вида справочника
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Не работает отбор в запросе 1sqlite
Ответ #11 - 25. Марта 2014 :: 08:47
Печать  
Код
Выбрать все
Процедура Сформировать()
	ВыбПроизводитель = СоздатьОбъект("Справочник.Производители");
	Если ВыбПроизводитель.НайтиПоКоду("0021") =1 Тогда
		Спс = СоздатьОбъект("СписокЗначений");
		Спс.ДобавитьЗначение(ВыбПроизводитель.ТекущийЭлемент());
	Иначе
		Предупреждение("Пнх, Альфредо!");
		Возврат;
	КонецЕсли;
	ТекстЗапроса="
	|Select
	| Ном.code,
	| Ном.Descr,
	| id [Объект :Справочник.Номенклатура],
	| Ном.Производитель [Производитель :Справочник.Производители]
	|From
	| [Справочник.Номенклатура] Ном
	|WHERE (Ном.Производитель IN (SELECT val FROM Спс))";

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

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



Сообщений: 163
Зарегистрирован: 24. Марта 2008
Re: Не работает отбор в запросе 1sqlite
Ответ #12 - 25. Марта 2014 :: 08:49
Печать  
Ваш код не выдает ошибку и не посылает Альфредо (т.е. СЗ заполнился), но тем не менее выдает все товары без отбора. Почему такое может быть?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Не работает отбор в запросе 1sqlite
Ответ #13 - 25. Марта 2014 :: 08:54
Печать  
Так че пишет ?
Запрос.Отладка(1) ?
  
Наверх
 
IP записан
 
ildary
Full Member
***
Отсутствует



Сообщений: 163
Зарегистрирован: 24. Марта 2008
Re: Не работает отбор в запросе 1sqlite
Ответ #14 - 25. Марта 2014 :: 09:06
Печать  
Дико извиняюсь, смогу ответить только завтра - пришлось уехать с работы
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать