Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Ошибка при переводе прямого запроса на dbf (число прочтений - 2519 )
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Ошибка при переводе прямого запроса на dbf
23. Октября 2007 :: 11:28
Печать  
Есть нормально работающий запрос под sql

Код
Выбрать все
	Дата1=РабочаяДата();
	ТекстЗапроса = "
	|SELECT
		|	т.Заявка as [Заявка $Документ.ЗаявкаПокупателя],
		|	т.Договор as [Договор $Справочник.Договоры],
		|	т.Фирма as [Фирма $Справочник.Фирмы],
		| т.Склад as [Склад $Справочник.Склады],
		| т.ДатаОтгрузки as ДатаОтгрузки,
		| т.Контрагент as [Контрагент $Справочник.Контрагенты],
		| т.Менеджер as [Менеджер $Справочник.Пользователи],
		|	т.Количество as Количество,
		|	т.Сумма as Сумма,
    | т.Флаг as Флаг
	  |FROM(
	  |SELECT
		|	Рег.ЗаявкаПокупателя as Заявка,
		|	Рег.ДоговорПокупателя as Договор,
		|	Рег.Фирма as Фирма,
		| $Док.Склад as Склад,
		| $Док.ДатаОтгрузки as ДатаОтгрузки,
		| Спр1.id as Контрагент,
		| $Спр1.БВК_Менеджер as Менеджер,
		|	Рег.КоличествоРасходОстаток as Количество,
		|	Рег.СтоимостьРасходОстаток as Сумма,
    | CASE WHEN CAST(LEFT(:ТекущаяДатаРаботы, 8) as DateTime) - $Док.ДатаОтгрузки > :ВыбДень THEN 1 ELSE 0 END as Флаг
		|FROM
		| $РегистрОстатки.Заявки(:Дата1~,
		|					 ,
		|					 ,
		|					 (Фирма,ЗаявкаПокупателя, ДоговорПокупателя), (СтоимостьРасход,КоличествоРасход)) as Рег
		| INNER JOIN $Документ.ЗаявкаПокупателя Док(nolock) on Док.IDDoc  = Right(Рег.ЗаявкаПокупателя,9)
	  | INNER JOIN $Справочник.Договоры Спр(nolock) on Спр.id = Рег.ДоговорПокупателя
		| INNER JOIN $Справочник.Контрагенты Спр1(nolock) on Спр1.[id] = Спр.ParentExt) as т
		|WHERE
		| 1 =1";
		Если НАЙТИ(ВРЕГ(НазваниеНабораПрав()),"АДМИН")=0 Тогда
			ТекстЗапроса = ТекстЗапроса +
			"
	|	 and т.Менеджер = :ГлПользователь";
		КонецЕсли;
		Если ВыбДень>=0 Тогда
			ТекстЗапроса = ТекстЗапроса +
			"
	|	 and т.Флаг=1";
		КонецЕсли;
			ТекстЗапроса = ТекстЗапроса +
			"
		| Order by т.Заявка,т.Контрагент
    |";


		RS.УстановитьТекстовыйПараметр("Дата1", Дата1);
		RS.УстановитьТекстовыйПараметр("ГлПользователь", ГлПользователь);
		RS.УстановитьТекстовыйПараметр("ТекущаяДатаРаботы", ТекущаяДата());
		RS.УстановитьТекстовыйПараметр("ВыбДень", ВыбДень);
		ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);

 



пытаюсь его перевести на dbf базу
немного в упрощенном виде пока без условий

Код
Выбрать все
	База = СоздатьОбъект("OLEDBData");
	Соединение = "Provider=VFPOLEDB.1;Deleted=Yes;Data Source=" + КаталогИБ()+ ";Mode=ReadWrite;Extended Properties="";User ID="";Password="";Mask Password=False;Collating Sequence=RUSSIAN;DSN=""";
	RS = База.Соединение(Соединение);
	Запрос = База.СоздатьКоманду();

		ТекстЗапроса = "
	|SELECT
	|	Рег.ЗаявкаПокупателя as Заявка,
	|	Рег.ДоговорПокупателя as Договор,
	|	Рег.Фирма as Фирма,
	| $Док.Склад as Склад,
	| $Док.ДатаОтгрузки as ДатаОтгрузки,
	| Спр1.id as Контрагент,
	| $Спр1.БВК_Менеджер as Менеджер,
	|	SUM($Рег.КоличествоРасход) as Количество,
	|	SUM($Рег.СтоимостьРасход) as Сумма
	| CASE WHEN CAST(LEFT(:ТекущаяДатаРаботы, 8) as DateTime) - $Док.ДатаОтгрузки > :ВыбДень THEN 1 ELSE 0 END as Флаг
	|FROM
	|		$РегистрИтоги.Заявки as Рег
	| INNER JOIN $Документ.ЗаявкаПокупателя Док(nolock) on Док.IDDoc  = Right(Рег.ЗаявкаПокупателя,9)
	| INNER JOIN $Справочник.Договоры Спр(nolock) on Спр.id = Рег.ДоговорПокупателя
	| INNER JOIN $Справочник.Контрагенты Спр1(nolock) on Спр1.[id] = Спр.ParentExt)
	| GROUP BY  Рег.ЗаявкаПокупателя,Спр1.id
	|";


		Запрос.УстановитьТекстовыйПараметр("Дата1", Дата1);
		Запрос.УстановитьТекстовыйПараметр("ГлПользователь", ГлПользователь);
		Запрос.УстановитьТекстовыйПараметр("ТекущаяДатаРаботы", ТекущаяДата());
		Запрос.УстановитьТекстовыйПараметр("ВыбДень", ВыбДень);
		лРезТаблица = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
	  лРезТаблица.ВыбратьСтроку();

 



вываливается ошибка
{Отчет.Запрос1.Форма.Модуль(34)}: FAILED! ICommandText::Execute(): Command contains unrecognized phrase/keyword.

Не могу понять где ошибка?
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: Ошибка при переводе прямого запроса на dbf
Ответ #1 - 23. Октября 2007 :: 11:30
Печать  
SUM($Рег.СтоимостьРасход) as Сумма
запятая после Сумма стоит
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Ошибка при переводе прямого запроса на dbf
Ответ #2 - 23. Октября 2007 :: 11:36
Печать  
На вскидку - ошибки

nolock
CASE - см синтаксис IIF или ICASE
запятая после as Сумма
CAST и as DateTime
Спр.ParentExt)
....


В строке соединения |Collating Sequence=MACHINE; - быстрее будет
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: Ошибка при переводе прямого запроса на dbf
Ответ #3 - 23. Октября 2007 :: 12:16
Печать  
уже в таком коде
Код
Выбрать все
	|SELECT
	|	$Рег.ЗаявкаПокупателя as [Заявка $Документ.ЗаявкаПокупателя],
	|	$Рег.ДоговорПокупателя as Договор,
	|	$Рег.Фирма as Фирма,
	| $Док.Склад as Склад,
  | $Док.ДатаОтгрузки as ДатаОтгрузки,
	//| Спр1.id as Контрагент,
	//| $Спр1.БВК_Менеджер as Менеджер,
	|	SUM($Рег.КоличествоРасход) as Количество,
	|	SUM($Рег.СтоимостьРасход) as Сумма
	//| CASE WHEN CAST(LEFT(:ТекущаяДатаРаботы, 8) as DateTime) - $Док.ДатаОтгрузки > :ВыбДень THEN 1 ELSE 0 END as Флаг
	|FROM
	|		$РегистрИтоги.Заявки as Рег
	| INNER JOIN $Документ.ЗаявкаПокупателя Док on Док.IDDoc  = Right($Рег.ЗаявкаПокупателя,9)
	//| INNER JOIN $Справочник.Договоры Спр(nolock) on Спр.id = Рег.ДоговорПокупателя
	//| INNER JOIN $Справочник.Контрагенты Спр1(nolock) on Спр1.[id] = Спр.ParentExt)
	| GROUP BY $Рег.ЗаявкаПокупателя
	|";

 



ошибка
FAILED! ICommandText::Execute(): SQL: GROUP BY clause is missing or invalid.

  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Ошибка при переводе прямого запроса на dbf
Ответ #4 - 23. Октября 2007 :: 13:02
Печать  
Удивительно как на СКЛ это взлетало
В GROUP BY поставь все поля из SELECT кроме тех где написано Sum()
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: Ошибка при переводе прямого запроса на dbf
Ответ #5 - 23. Октября 2007 :: 13:57
Печать  
осталась вроде только одна проблема с последней строкой
пытаюсь заменить CASE  на iff
но наткнулся , что
CAST(LEFT(:ТекущаяДатаРаботы, 8) as DateTime)
всегда возвращает пустое значение
как kexit под dbf
уровнять форматы что бы произвести вычитание
:ТекущаяДатаРаботы (тип строка)  - $Док.ДатаОтгрузки (тип дата)
  
Наверх
 
IP записан
 
dimm73
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 414
Зарегистрирован: 03. Июля 2006
Пол: Мужской
Re: Ошибка при переводе прямого запроса на dbf
Ответ #6 - 23. Октября 2007 :: 13:59
Печать  
(как kexit под dbf) = как  под dbf
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Ошибка при переводе прямого запроса на dbf
Ответ #7 - 23. Октября 2007 :: 15:38
Печать  
IIF(:ДатаРаботы~~  >$Док.ДатаОтгрузки,1,0)

....
ДатаРаботы=ТекущаяДатаРаботы+ВыбДень ;
ОлеДБКоманда.УстановитьТекстовыйПараметр(ДатаРаботы,"ДатаРаботы");
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать