Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Запрос по регистру, dbf, отбор по ном из внешней таблицы (число прочтений - 1542 )
mixsture
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 14
Зарегистрирован: 17. Июня 2008
Запрос по регистру, dbf, отбор по ном из внешней таблицы
24. Февраля 2009 :: 13:43
Печать  
Изначально был запрос к регистру ОстаткиТМЦ, взятый из учебника по прямым запросам. Потом при возникновении ошибки - разделил на 2 части - к РегистрИтоги, и к движениям.

В ИмяТаблицы лежит имя таблицы с одной колонкой Val и заполненными идентификаторами номенклатуры

ТекстЗапроса = "
|      SELECT
|     $Р.Номенклатура AS [Номенклатура $Справочник.Номенклатура],
|     $Р.Количество AS Остаток
|  FROM
|     $РегистрИтоги.ОстаткиТМЦ as Р
|  WHERE
|     (period = :ПредМесяц~~)
|        AND ($Р.Склад = :ВыбСклад)    
|        AND ($Р.Номенклатура IN (SELECT Val FROM "+ИмяТаблицы+"))
|";
РС.УстановитьТекстовыйПараметр("ВыбСклад",Склад);
,-1)));
РС.УстановитьТекстовыйПараметр("НачалоМесяца",НачМесяца(РабочаяДата()));
РС.УстановитьТекстовыйПараметр("ПредДата",РабочаяДата()-1);  
ТЗОст = РС.ВыполнитьИнструкцию(ТекстЗапроса);

^^ этот запрос отрабатывает нормально.



ТекстЗапроса = "
|  SELECT
|     $Р.Номенклатура AS Номенклатура,
|     $Р.Количество * (1 - Р.debkred * 2) AS Остаток
|  FROM
|     $Регистр.ОстаткиТМЦ AS Р
|  LEFT JOIN
|     1sjourn jr ON Р.iddoc = jr.iddoc
|           AND (jr.date BETWEEN :НачалоМесяца~~ AND :ПредДата~~)
|           AND ($ФлагРегистра.ОстаткиТМЦ = 1)
|                  AND ($Р.Склад = :ВыбСклад)  
|        AND ($Р.Номенклатура IN (SELECT Val FROM "+ИмяТаблицы+"))
|";      
РС.УстановитьТекстовыйПараметр("ВыбСклад",Склад);
,-1)));
РС.УстановитьТекстовыйПараметр("НачалоМесяца",НачМесяца(РабочаяДата()));
РС.УстановитьТекстовыйПараметр("ПредДата",РабочаяДата()-1);  
ТЗОст2 = РС.ВыполнитьИнструкцию(ТекстЗапроса);


^^ а этот выдает FAILED! ICommandText::Execute(): SQL: Queries of this type are not supported.
DBF(ИмяТаблицы) собирал и вручную, и УложитьСписокОбъектов - результат одинаковый.

Вопрос: почему так? и есть ли способы лечения?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Запрос по регистру, dbf, отбор по ном из внешней таблицы
Ответ #1 - 24. Февраля 2009 :: 15:09
Печать  
А это что
$ФлагРегистра.ОстаткиТМЦ = 1
Видимо
jr.$ФлагРегистра.ОстаткиТМЦ = 1
(хотя потребность в этом условии весьма сомнительна, если все равно идет присоединении к регистру)

и еще - зачем в Left Join все условия пихать, особенно не имеющие отношения к журналу,
в Where их, или накройняк хоть INNER пиши, если некрасивости не смущают

  
Наверх
 
IP записан
 
mixsture
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 14
Зарегистрирован: 17. Июня 2008
Re: Запрос по регистру, dbf, отбор по ном из внешней таблицы
Ответ #2 - 25. Февраля 2009 :: 08:41
Печать  
Хм. Вынес условия в where, кроме соединения - заработало. Однако, своеобразный там метод мышления! Всю жизнь думал, что запись после ON и в условии WHERE равнозначны и различаются лишь удобством
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Запрос по регистру, dbf, отбор по ном из внешней таблицы
Ответ #3 - 25. Февраля 2009 :: 08:58
Печать  
mixsture писал(а) 25. Февраля 2009 :: 08:41:
запись после ON и в условии WHERE равнозначны

равнозначны только для INNER JOIN а у тебя LEFT JOIN
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать