Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Ошибка в прямом запросе (получить первое движение по регистру) (число прочтений - 4875 )
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Ошибка в прямом запросе (получить первое движение по регистру)
07. Сентября 2012 :: 03:11
Печать  
люди помогите еще раз...

нужно получить самое первое движение по регистру остатков.
сделал такой запрос.
при включенной отладке выдает ошибку:
Код
Выбрать все
FAILED! ICommandText::Execute(): SQL: Column '     ' is not found. 



Код
Выбрать все
	ТекстЗапроса = "
	|		 SELECT
	|				$РегОст.Склад AS [Склад $Справочник.Склады],
	|				$РегОст.Номенклатура AS [Номенклатура $Справочник.Номенклатура],
	//|				$СпрНоменклатура.ВидНоменклатуры AS [ВидНоменклатуры $Перечисление.ВидыНоменклатуры],
	|				$РегОст.Характеристика AS [Характеристика $Справочник.Характеристики],
	|				$РегОст.ЦенаРозн as ЦенаРозн,
	|				$РегОст.Количество as Количество,
	|				$РегОст.Сумма as Сумма,
	|				IIF(Empty($РегОст.Количество), 0, $РегОст.Сумма / $РегОст.Количество) as ЦенаОтп,
	|				РегОст.IDDoc,
	|				РегОст.Lineno,
	|				РегОст.Actno
	|		FROM $Регистр.Остатки as РегОст
	|			INNER JOIN
	|		 		(SELECT TOP 1
	|						$ДвиженияПоПартии.Склад,
	|						$ДвиженияПоПартии.Номенклатура,
	|						$ДвиженияПоПартии.Характеристика,
	|						$ДвиженияПоПартии.ЦенаРозн,
	|						ДвиженияПоПартии.IDDoc,
	|						ДвиженияПоПартии.Lineno,
	|						ДвиженияПоПартии.Actno
	|					FROM $Регистр.Остатки as ДвиженияПоПартии
	|					WHERE
	|						($ДвиженияПоПартии.Склад = $РегОст.Склад) AND
	|						($ДвиженияПоПартии.Номенклатура = $РегОст.Номенклатура) AND
	|						($ДвиженияПоПартии.Характеристика = $РегОст.Характеристика) AND
	|						($ДвиженияПоПартии.ЦенаРозн = $РегОст.ЦенаРозн)
	|					ORDER BY
	|						ДвиженияПоПартии.IDDoc, ДвиженияПоПартии.Lineno, ДвиженияПоПартии.Actno)
	|				AS ПервоеДвижение
	|				ON
	|					(РегОст.IDDoc = ПервоеДвижение.IDDoc) AND
	|					(РегОст.Lineno = ПервоеДвижение.Lineno) AND
	|					(РегОст.Actno = ПервоеДвижение.Actno)
	|"; 



ошибка появилась после того как я добавил корреляционные переменные в подзапрос.
если следующий кусок убрать, то ошибки нету, запрос отрабатывает

Код
Выбрать все
	|					WHERE
	|						($ДвиженияПоПартии.Склад = $РегОст.Склад) AND
	|						($ДвиженияПоПартии.Номенклатура = $РегОст.Номенклатура) AND
	|						($ДвиженияПоПартии.Характеристика = $РегОст.Характеристика) AND
	|						($ДвиженияПоПартии.ЦенаРозн = $РегОст.ЦенаРозн) 



не могу понять в чем у меня ошибка
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка в прямом запросе (получить первое движение по регистру)
Ответ #1 - 07. Сентября 2012 :: 05:33
Печать  
как  бэ, 
1.регистр партий там не нужен, всё и так есть в остаткитмц
2. ORDER BY ДвиженияПоПартии.IDDoc, ДвиженияПоПартии.Lineno, ДвиженияПоПартии.Actno не дает ничего, точнее это будет не первое движение, если что
нужно по позиции документа сортировать хотя бы.
3. цель - поиметь первые приходы/расходы ? точнее, цену себестоимости из них ?

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



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ошибка в прямом запросе (получить первое движение по регистру)
Ответ #2 - 07. Сентября 2012 :: 05:52
Печать  
Eprst писал(а) 07. Сентября 2012 :: 05:33:
как  бэ,  
1.регистр партий там не нужен, всё и так есть в остаткитмц

а в запросе и нету регистра партий, это я так назвал запрос из таблицы остатков.
там несколько запросов и вложенных запросов - все по одному регистру.
под партией я в этом случае назвал комбинацию "склад, номенкл., характ., ценарозн"

Eprst писал(а) 07. Сентября 2012 :: 05:33:
2. ORDER BY ДвиженияПоПартии.IDDoc, ДвиженияПоПартии.Lineno, ДвиженияПоПартии.Actno не дает ничего, точнее это будет не первое движение, если что
нужно по позиции документа сортировать хотя бы.

ОК, пересортирую по позиции документа

Eprst писал(а) 07. Сентября 2012 :: 05:33:
3. цель - поиметь первые приходы/расходы ? точнее, цену себестоимости из них ?

цель - получить сумму и количество из самого первого движения, чтобы рассчитать цену, которая была в самом первом движении.
а затем нужно будет найти все остальные движения по этой же "партии", т.е. комбинации "склад, номенкл., характ., ценарозн" , в которых цена изменилась.

Долго объяснять зачем это нужно, в общем у бухгалтеров иногда пляшут цены, они не могут понять почему, вот и попросили сделать такую глобальную проверку.
Когда они увидят в каком движении другая цена, они откроют этот документ и дальше будут разбираться
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ошибка в прямом запросе (получить первое движение по регистру)
Ответ #3 - 07. Сентября 2012 :: 05:54
Печать  
ошибка появляется после добавления условия в подзапрос.
похоже что подзапрос просто не видит внешнего по отношению к нему запроса по таблице РегОст
  
Наверх
ICQ  
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Ошибка в прямом запросе (получить первое движение по регистру)
Ответ #4 - 07. Сентября 2012 :: 06:12
Печать  
es3000 писал(а) 07. Сентября 2012 :: 05:54:
похоже что подзапрос просто не видит внешнего по отношению к нему запроса по таблице РегОст
И не увидит никогда.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ошибка в прямом запросе (получить первое движение по регистру)
Ответ #5 - 07. Сентября 2012 :: 06:14
Печать  
и что делать?


Dmitry The Wing писал(а) 07. Сентября 2012 :: 06:12:
es3000 писал(а) 07. Сентября 2012 :: 05:54:
похоже что подзапрос просто не видит внешнего по отношению к нему запроса по таблице РегОст
И не увидит никогда.

а почему не видит?
ведь смысл вложенных подзапросов как раз в том, чтобы работать с корреляционными (связанными с внешним запросом) переменными
  
Наверх
ICQ  
IP записан
 
zk96
Senior Member
****
Отсутствует


1C++ rocks!

Сообщений: 320
Местоположение: Киев
Зарегистрирован: 15. Ноября 2009
Пол: Мужской
Re: Ошибка в прямом запросе (получить первое движение по регистру)
Ответ #6 - 07. Сентября 2012 :: 06:16
Печать  
Похоже метапарсер какое-то поле не правильно интерпретирует. Выполни запрос с отладкой. Будет видно, что за поле.
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ошибка в прямом запросе (получить первое движение по регистру)
Ответ #7 - 07. Сентября 2012 :: 06:17
Печать  
zk96 писал(а) 07. Сентября 2012 :: 06:16:
Похоже метапарсер какое-то поле не правильно интерпретирует. Выполни запрос с отладкой. Будет видно, что за поле.

выполнял... не видно ничего, все переменные на местах.
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ошибка в прямом запросе (получить первое движение по регистру)
Ответ #8 - 07. Сентября 2012 :: 06:20
Печать  
пробовал тоже самое сделать в Visual Foxpro.
ошибка та же самая.
как только во вложенный запрос добавляю сравнение с полями внешнего запроса - появляется ошибка.
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка в прямом запросе (получить первое движение по регистру)
Ответ #9 - 07. Сентября 2012 :: 06:26
Печать  
es3000 писал(а) 07. Сентября 2012 :: 06:20:
пробовал тоже самое сделать в Visual Foxpro.
ошибка та же самая.
как только во вложенный запрос добавляю сравнение с полями внешнего запроса - появляется ошибка.

а ты топ то убери - не будет ошибки
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ошибка в прямом запросе (получить первое движение по регистру)
Ответ #10 - 07. Сентября 2012 :: 07:03
Печать  
Eprst писал(а) 07. Сентября 2012 :: 06:26:
а ты топ то убери - не будет ошибки

без TOP 1 будет неправильный результат запроса
  
Наверх
ICQ  
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Ошибка в прямом запросе (получить первое движение по регистру)
Ответ #11 - 07. Сентября 2012 :: 07:04
Печать  
задал это же вопрос на мисте - тоже пока ничего не ответили
  
Наверх
ICQ  
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Ошибка в прямом запросе (получить первое движение по регистру)
Ответ #12 - 07. Сентября 2012 :: 07:37
Печать  
es3000 писал(а) 07. Сентября 2012 :: 07:03:
Eprst писал(а) 07. Сентября 2012 :: 06:26:
а ты топ то убери - не будет ошибки

без TOP 1 будет неправильный результат запроса


Он у тя что с топ, что без топ не верный всегда будет
  
Наверх
 
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Ошибка в прямом запросе (получить первое движение по регистру)
Ответ #13 - 07. Сентября 2012 :: 14:33
Печать  
разве при сортировке
ДвиженияПоПартии.IDDoc, ДвиженияПоПартии.Lineno, ДвиженияПоПартии.Actno
ты получишь первое движение? а если последнему созданному документу в базе зададут самую раннюю дату? помоему здесь нужно основываться на данных позиции документа а не на иддок

п.с.: сор, тему бегло смотрел и не заметил что в начале на это уже указывали

попробуй свои поля в кавычки заключить, в скуле это [] были, в фоксе не в курсе
  
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Ошибка в прямом запросе (получить первое движение по регистру)
Ответ #14 - 10. Сентября 2012 :: 02:01
Печать  
villy писал(а) 07. Сентября 2012 :: 14:33:
попробуй свои поля в кавычки заключить, в скуле это [] были, в фоксе не в курсе
У него не в том проблема. Он в подзапрос пытается передать данные, которые получает позже во внешнем запросе... а то, что это невозможно - его не сильно волнует...
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать