Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Проблема с запросом в ДБФ (число прочтений - 1609 )
ssv
Junior Member
**
Отсутствует



Сообщений: 16
Местоположение: Орел
Зарегистрирован: 29. Ноября 2007
Пол: Мужской
Проблема с запросом в ДБФ
21. Марта 2008 :: 13:08
Печать  
Народ помогите. Не могу понять в чем дело. Давным давно работало, а сейчас не работает. БД DBF.

запрос 1с++
Код
Выбрать все
	ТекстЗапроса="
	|SELECT DISTINCT
	|		$РегПрихРасх.Товар as [Товар $Справочник.Номенклатура],
	|		$РегПрихРасх.КатегорияЦен as КатегорияЦен,
	|		$РегПрихРасх.Цена as Цена
	|FROM	$Регистр.ЦеныПродажи as РегПрихРасх
	|JOIN (SELECT $Рег.Товар as Товар,
	|		$Рег.КатегорияЦен as КатегорияЦен,
	|		max(Рег.Date) as Date      
	|						FROM	$Регистр.ЦеныПродажи  as Рег
	|						WHERE	Рег.Date <= :ДатаКонцаПериода~~
	|						GROUP BY $Рег.Товар,$Рег.КатегорияЦен) as ee
	|				ON  and ee.Date= РегПрихРасх.Date and ee.Товар=$РегПрихРасх.Товар and ee.КатегорияЦен=$РегПрихРасх.КатегорияЦен
	|WHERE  РегПрихРасх.Time+РегПрихРасх.IdDoc=(SELECT max(ПрихРасх.Time+ПрихРасх.IdDoc)
	|											FROM $Регистр.ЦеныПродажи as ПрихРасх
	|											where $ПрихРасх.Товар=$РегПрихРасх.Товар and $ПрихРасх.КатегорияЦен=$РегПрихРасх.КатегорияЦен and ПрихРасх.Date=РегПрихРасх.Date and ПрихРасх.Date=РегПрихРасх.Date)
	|ORDER BY $РегПрихРасх.КатегорияЦен,$РегПрихРасх.Товар";
	ЗапросБД = БД.СоздатьКоманду();
	табОст=СоздатьОбъект("ТаблицаЗначений");
	ЗапросБД.УстановитьТекстовыйПараметр("ДатаКонцаПериода", ДатаКонцаПериода);
	ЗапросБД.Отладка(1);
	табОст=ЗапросБД.ВыполнитьИнструкцию(ТекстЗапроса); 




В результате выдает отладку и ошибку
Код
Выбрать все
SELECT DISTINCT
		РегПрихРасх.sp4501 as [Товар_1c_type_Справочник_Номенклатура],
		РегПрихРасх.sp4503 as КатегорияЦен,
		РегПрихРасх.sp4502 as Цена
FROM	ra4500 as РегПрихРасх
JOIN (SELECT Рег.sp4501 as Товар,
	Рег.sp4503 as КатегорияЦен,
	max(Рег.Date) as Date      
	FROM	ra4500  as Рег
	WHERE	Рег.Date <= {d '2004-12-31'} )
	GROUP BY Рег.sp4501,Рег.sp4503) as ee
ON  and ee.Date= РегПрихРасх.Date and ee.sp4501=РегПрихРасх.sp4501 and ee.sp4503=РегПрихРасх.sp4503
WHERE  РегПрихРасх.Time+РегПрихРасх.IdDoc=(SELECT max(ПрихРасх.Time+ПрихРасх.IdDoc)
	FROM ra4500 as ПрихРасх
where ПрихРасх.sp4501=РегПрихРасх.sp4501 and ПрихРасх.sp4503=РегПрихРасх.sp4503 and ПрихРасх.Date=РегПрихРасх.Date and ПрихРасх.Date=РегПрихРасх.Date)
ORDER BY РегПрихРасх.sp4503,РегПрихРасх.sp4501
табОст=ЗапросБД.ВыполнитьИнструкцию(ТекстЗапроса);
{ПЕРЕОЦЕНКА 31.12.2004.ERT(112)}: FAILED! ICommandText::Execute(): Command contains unrecognized phrase/keyword. 

  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с запросом в ДБФ
Ответ #1 - 21. Марта 2008 :: 15:09
Печать  
WHERE      Рег.Date <= {d '2004-12-31'} )

Но в исходном запросе ее нет, может это kms опять намутил?
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Проблема с запросом в ДБФ
Ответ #2 - 21. Марта 2008 :: 15:15
Печать  
Да вроде есть.
А вот что такое
Код
Выбрать все
ON  and ee.Date 


и как он мог работать раньше?
Похоже ssv менял таки запрос
  
Наверх
 
IP записан
 
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Проблема с запросом в ДБФ
Ответ #3 - 21. Марта 2008 :: 15:21
Печать  
Цитата:
max(Рег.Date) as Date

Date не зарезервированное слово? Не пробовал, но вдруг его нельзя использовать как имя поля?
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проблема с запросом в ДБФ
Ответ #4 - 21. Марта 2008 :: 15:26
Печать  
Код
Выбрать все
SELECT DISTINCT
	$РегПрихРасх.Товар as [Товар $Справочник.Номенклатура],
	$РегПрихРасх.КатегорияЦен as КатегорияЦен,
	$РегПрихРасх.Цена as Цена
FROM
	$Регистр.ЦеныПродажи as РегПрихРасх
JOIN (
	SELECT
		$Рег.Товар as Товар,
		$Рег.КатегорияЦен as КатегорияЦен,
		max(Рег.Date) as Date
	FROM
		$Регистр.ЦеныПродажи  as Рег
	WHERE
		Рег.Date <= :ДатаКонцаПериода~~
	GROUP BY
		$Рег.Товар,
		$Рег.КатегорияЦен
) as ee ON
	and ee.Date = РегПрихРасх.Date
	and ee.Товар = $РегПрихРасх.Товар
	and ee.КатегорияЦен = $РегПрихРасх.КатегорияЦен
WHERE
	РегПрихРасх.Time + РегПрихРасх.IdDoc = (
		SELECT
			max(ПрихРасх.Time + ПрихРасх.IdDoc)
		FROM
			$Регистр.ЦеныПродажи as ПрихРасх
		where
			$ПрихРасх.Товар = $РегПрихРасх.Товар
			and $ПрихРасх.КатегорияЦен = $РегПрихРасх.КатегорияЦен
			and ПрихРасх.Date = РегПрихРасх.Date
			and ПрихРасх.Date = РегПрихРасх.Date
	)
ORDER BY
	$РегПрихРасх.КатегорияЦен,
	$РегПрихРасх.Товар
 



Код
Выбрать все
SELECT DISTINCT
	РегПрихРасх.sp4501 as [Товар_1c_type_Справочник_Номенклатура],
	РегПрихРасх.sp4503 as КатегорияЦен,
	РегПрихРасх.sp4502 as Цена
FROM
	ra4500 as РегПрихРасх
JOIN (
	SELECT
		Рег.sp4501 as Товар,
		Рег.sp4503 as КатегорияЦен,
		max(Рег.Date) as Date
	FROM
		ra4500 as Рег
	WHERE
		Рег.Date <= {d '2004-12-31'}
		)
	GROUP BY
		Рег.sp4501,
		Рег.sp4503
) as ee ON
	and ee.Date = РегПрихРасх.Date
	and ee.sp4501 = РегПрихРасх.sp4501
	and ee.sp4503 = РегПрихРасх.sp4503
WHERE
	РегПрихРасх.Time + РегПрихРасх.IdDoc = (
		SELECT
			max(ПрихРасх.Time + ПрихРасх.IdDoc)
		FROM
			ra4500 as ПрихРасх
		where
			ПрихРасх.sp4501 = РегПрихРасх.sp4501
			and ПрихРасх.sp4503 = РегПрихРасх.sp4503
			and ПрихРасх.Date = РегПрихРасх.Date
			and ПрихРасх.Date = РегПрихРасх.Date
	)
ORDER BY
	РегПрихРасх.sp4503,
	РегПрихРасх.sp4501
 



1. Советую использовать такой способ форматирования - пригодится потом в жизни;
2. В тексте вижу две ошибки: скобка и первый AND после джойна;
3. Хорошим тоном является писать INNER JOIN (с INNER) и LEFT/RIGHT JOIN (без OUTER), но это уже в качестве необязательного совета.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать