Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Условия в запросе Left join РегистрИтоги (число прочтений - 2792 )
DropDown
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 30. Октября 2009
Условия в запросе Left join РегистрИтоги
30. Октября 2009 :: 13:38
Печать  
Помогите разобратся с запросом. Необходимо получить перечень остаток на ТА() по заявкам с присоединением остатов по складу, выбраному в заявке.

Запрос
Код
Выбрать все
		SQLRST = CreateObject("ODBCRecordset");
		//SQLRST.РежимRPC(1);
		ТекстЗапроса = "
			|SELECT
			|  $РегЗаявки.Товар as [Товар $Справочник.Номенклатура],
			|  SUM($РегЗаявки.Остаток) as ОстатокЗаявка,
			|  SUM($РегОст.ОстатокТовара) as ОстатокСклад
			|FROM $РегистрИтоги.ЗакрытиеЗаявок as РегЗаявки
			|LEFT JOIN
			|	  $РегистрИтоги.ОстаткиТоваров as РегОст
			|			On ($РегОст.Товар = $РегЗаявки.Товар [b]AND $РегОст.Фирма = ?
			|				AND $РегОст.Склад = ?)[/b]
			| Where
			|	($РегЗаявки.Заявка = ? )
			|Group by $РегЗаявки.Товар";

		SQLRST.Подготовить(ТекстЗапроса); 


Если убираю выделенное условие все работает, с условием ошибки не выдает просто как результат выполнения SQLRST.ВыполнитьИнструкцию(ТекстЗапроса) Равен 0.
Можно конечно пойти по пути UNION но не хочется чегото.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Условия в запросе Left join РегистрИтоги
Ответ #1 - 30. Октября 2009 :: 14:08
Печать  
1. если SQLRST.Подготовить(ТекстЗапроса), то тогда SQLRST.ВыполнитьИнструкцию()
2. не забудь добавить и установить sql-параметры
3. имхо, не забудь про поле period таблиц итогов
  

1&&2&&3
Наверх
 
IP записан
 
DropDown
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 30. Октября 2009
Re: Условия в запросе Left join РегистрИтоги
Ответ #2 - 30. Октября 2009 :: 17:58
Печать  
Так и делаю.
SQLRST.Подготовить(ТекстЗапроса);
SQLRST.ПостроитьПараметры();

     SQLRST.УстПараметр(1,ВыбЛистЗаказ.Фирма);
     SQLRST.УстПараметр(2,ВыбЛистЗаказ.Склад);
     SQLRST.УстПараметр(3,ВыбЛистЗаказ);

ТЗ = SQLRST.ВыполнитьИнструкцию(ТекстЗапроса);
Но возврат в ТЗ есть 0
только убираю доп условия все нормально.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Условия в запросе Left join РегистрИтоги
Ответ #3 - 30. Октября 2009 :: 19:58
Печать  
Я делаю, примерно, так:
"AND $РегОст.Фирма = :ВыбФирма
                 |                        AND $РегОст.Склад = :ВыбСклад)"
SQLRST.УстановитьТекстовыйПараметр("ВыбФирма",ВыбЛистЗаказ.Фирма);
SQLRST.УстановитьТекстовыйПараметр("ВыбСклад",ВыбЛистЗаказ.Склад);
ТЗ = SQLRST.ВыполнитьИнструкцию(ТекстЗапроса);
  
Наверх
ICQ  
IP записан
 
DropDown
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 30. Октября 2009
Re: Условия в запросе Left join РегистрИтоги
Ответ #4 - 31. Октября 2009 :: 07:30
Печать  
НУ вроде запрос заработал кое как.
А вот как насче периода поле Period

|SELECT
                 |  $РегЗаявки.Товар as [Товар $Справочник.Номенклатура],
                 |  SUM($РегЗаявки.Остаток) as ОстатокЗаявка,
                 |  SUM($РегОст.ОстатокТовара) as ОстатокСклад
                 |FROM $РегистрИтоги.ЗакрытиеЗаявок as РегЗаявки
                 |LEFT JOIN
                 |        $РегистрИтоги.ОстаткиТоваров as РегОст
                 |                  On ($РегОст.Товар = $РегЗаявки.Товар AND $РегОст.period = {d '2010-01-01'}
                 |                        AND $РегОст.Фирма = ? )
                 | Where
                 |      ($РегЗаявки.Заявка = ? )
                 |Group by $РегЗаявки.Товар

Ругается паразит на это поле
Meta name parser error: поле таблицы не найдено "$РегОст.period"
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Условия в запросе Left join РегистрИтоги
Ответ #5 - 31. Октября 2009 :: 09:33
Печать  
DropDown писал(а) 31. Октября 2009 :: 07:30:
Ругается паразит на это поле
Meta name parser error: поле таблицы не найдено "$РегОст.period"

$ не нужен , просто РегОст.period.
зы: условия по period регистра ЗакрытиеЗаявок что-то не видно в запросе, ерунда получится
  
Наверх
 
IP записан
 
DropDown
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 30. Октября 2009
Re: Условия в запросе Left join РегистрИтоги
Ответ #6 - 31. Октября 2009 :: 19:12
Печать  
Спасибо, это должно было появится позже но вылезла ошибка, для понимания хватило такого примера.
Еще вопрос после передачи параметру документа ссылки

$РегЗаявки.Заявка = ?

SQLRST.УстПараметр(2,ВыбЛистЗаказ);

Он превращается в вид ' UQJЦБ ' а в таблице регитстра это поле хранится в виде  '2CH   UQJЦБ ' может подскажите что и как.
Да и как правильно передавать через параметр требуемую дату точки итогов.
  
Наверх
 
IP записан
 
DropDown
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 30. Октября 2009
Re: Условия в запросе Left join РегистрИтоги
Ответ #7 - 31. Октября 2009 :: 19:44
Печать  
Ну вроде все получилось только осталось всетаки разобратся как передавать в параметр правильно Дату итогов
Вот сам запрос.
                 |SELECT
                 |  $РегЗаявки.Товар as [Товар $Справочник.Номенклатура],
                 |  SUM($РегЗаявки.Остаток) as ОстатокЗаявка,
                 |  SUM($РегОст.ОстатокТовара) as ОстатокСклад,
                 |  SUM($РегРез.РезервТовара) as РезервТовара,
                 |  SUM($РегРезЗаявка.РезервТовара) as РезервПоЗаявкеТовара
                 |FROM $РегистрИтоги.ЗакрытиеЗаявок as РегЗаявки
                 |LEFT JOIN
                 |        $РегистрИтоги.ОстаткиТоваров as РегОст
                 |                  On ($РегОст.Товар = $РегЗаявки.Товар AND РегОст.period = {d '2010-01-01'}
                 |                        AND $РегОст.Фирма = ? AND $РегОст.Склад = ? )
                 |LEFT JOIN
                 |        $РегистрИтоги.РезервыТоваров as РегРез
                 |                  On ($РегРез.Товар = $РегЗаявки.Товар AND РегРез.period = {d '2010-01-01'}
                 |                        )
                 |LEFT JOIN
                 |        $РегистрИтоги.РезервыТоваров as РегРезЗаявка
                 |                  On ($РегРезЗаявка.Товар = $РегЗаявки.Товар AND РегРезЗаявка.period = {d '2010-01-01'}
                 |                        AND $РегРезЗаявка.ПоЗаказу = ? )
                 | Where
                 |      ($РегЗаявки.Заявка = ? AND РегЗаявки.period = {d '2010-01-01'})
                 |Group by $РегЗаявки.Товар";
  
Наверх
 
IP записан
 
alexdd
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 347
Зарегистрирован: 25. Июня 2007
Re: Условия в запросе Left join РегистрИтоги
Ответ #8 - 01. Ноября 2009 :: 07:36
Печать  
Дату можно передавать посто как строку в формате ГГГГММДД, т.е.
RS.УстПараметр(n,Формат('01.01.2010',"ДГГГГММДД")).
Но там проблема в том, что этот параметр в трех местах, тогда придется писать:
Код
Выбрать все
declare @period datetime
|set @period = ?
|SELECT
|  $РегЗаявки.Товар as [Товар $Справочник.Номенклатура],
|  SUM($РегЗаявки.Остаток) as ОстатокЗаявка,
|  SUM($РегОст.ОстатокТовара) as ОстатокСклад,
|  SUM($РегРез.РезервТовара) as РезервТовара,
|  SUM($РегРезЗаявка.РезервТовара) as РезервПоЗаявкеТовара
|FROM $РегистрИтоги.ЗакрытиеЗаявок as РегЗаявки
|LEFT JOIN
|        $РегистрИтоги.ОстаткиТоваров as РегОст
|                  On ($РегОст.Товар = $РегЗаявки.Товар AND РегОст.period = @period  
|                        AND $РегОст.Фирма = ? AND $РегОст.Склад = ? )
|LEFT JOIN
|        $РегистрИтоги.РезервыТоваров as РегРез
|                  On ($РегРез.Товар = $РегЗаявки.Товар AND РегРез.period = @period  
|                        )
|LEFT JOIN
|        $РегистрИтоги.РезервыТоваров as РегРезЗаявка
|                  On ($РегРезЗаявка.Товар = $РегЗаявки.Товар AND РегРезЗаявка.period = @period  
|                        AND $РегРезЗаявка.ПоЗаказу = ? )
| Where
|      ($РегЗаявки.Заявка = ? AND РегЗаявки.period = @period )
|Group by $РегЗаявки.Товар";
 

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