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



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Запрос не выдает записей
03. Сентября 2012 :: 17:44
Печать  
Код
Выбрать все
Функция ПолучитьДанные (пТЗДвижения)

	Состояние("Формирование остатков...");

	лКомандаОЛЕ = ПодготовитьКомандуОЛЕ();

	ТекстЗапроса = "
	| SELECT
	|		Движения.*
	|	FROM
	|	(
	|		 SELECT
	|				$РегОст.Склад as [Склад $Справочник.Склады],
	|				$РегОст.Номенклатура as [Номенклатура $Справочник.Номенклатура],
	|				$РегОст.Характеристика as [Характеристика $Справочник.Характеристики],
	|				$РегОст.ЦенаРозн as ЦенаРозн,
	|				$РегОст.Количество as Количество,
	|				$РегОст.Сумма as Сумма,
	|				($РегОст.Количество / $РегОст.Сумма) as ЦенаОтп
	|		FROM $Регистр.Остатки as РегОст
	|		WHERE
	|			Регистр.Остатки.date >= :пзНачДата~~
	|			AND
	|			Регистр.Остатки.date <= :пзКонДата~~
	|	) as Движения
	|";

	тзВозвраты = СоздатьОбъект("ИндексированнаяТаблица");
	Попытка
		лКомандаОЛЕ.УстановитьТекстовыйПараметр("пзНачДата", НачДата);
		лКомандаОЛЕ.УстановитьТекстовыйПараметр("пзКонДата", КонДата);
		лКомандаОЛЕ.ВыполнитьИнструкцию(ТекстЗапроса, тзВозвраты);
		тзВозвраты.ВыбратьСтроку();
	Исключение
		Сообщить("Невозможно получить возвраты!" + РазделительСтрок + ОписаниеОшибки());
		Возврат 0;
	КонецПопытки;

	Возврат 1;

КонецФункции

 



таблица значений при просмотре всегда пустая, хотя записи в регистре точно есть за указанный период.
Помогите разобраться в чем мой косяк?
  
Наверх
ICQ  
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Запрос не выдает записей
Ответ #1 - 04. Сентября 2012 :: 02:13
Печать  
  • У тебя есть движения или остатки? Потому как ты смотришь только движения, а остатки в запросе получены не будут.
  • Нафига тебе вложенность, если ты ее не пользуешь? Я про Движения.*.
  • Кто запретит вызвать запрос в режиме отладки и посмотреть? У меня есть подозрения на дату, - сравни ее с датой движений.
  • У тебя не используется поле DEBKRED, - как ты определишь, приход это или расход?
  
Наверх
 
IP записан
 
es3000
God Member
*****
Отсутствует



Сообщений: 536
Зарегистрирован: 10. Июля 2006
Re: Запрос не выдает записей
Ответ #2 - 04. Сентября 2012 :: 02:38
Печать  
Dmitry The Wing писал(а) 04. Сентября 2012 :: 02:13:
  • У тебя есть движения или остатки? Потому как ты смотришь только движения, а остатки в запросе получены не будут.

  • движения и остатки есть, но мне нужно выбрать только движения, остатки не нужны

    Dmitry The Wing писал(а) 04. Сентября 2012 :: 02:13:
  • Нафига тебе вложенность, если ты ее не пользуешь? Я про Движения.*.

  • Когда этот запрос будет корректно работать, дальше я буду добавлять группировку результатов вложенного запроса "Движения".

    Dmitry The Wing писал(а) 04. Сентября 2012 :: 02:13:
  • Кто запретит вызвать запрос в режиме отладки и посмотреть? У меня есть подозрения на дату, - сравни ее с датой движений.

  • Дату проверял - дата правильная, движения есть точно за эту дату

    Dmitry The Wing писал(а) 04. Сентября 2012 :: 02:13:
  • У тебя не используется поле DEBKRED, - как ты определишь, приход это или расход?

  • Потом добавлю это поле, когда эта часть заработает
      
    Наверх
    ICQ  
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: Запрос не выдает записей
    Ответ #3 - 04. Сентября 2012 :: 05:14
    Печать  
    es3000 писал(а) 04. Сентября 2012 :: 02:38:
    Dmitry The Wing писал(а) 04. Сентября 2012 :: 02:13:
  • Нафига тебе вложенность, если ты ее не пользуешь? Я про Движения.*.
  • Когда этот запрос будет корректно работать, дальше я буду добавлять группировку результатов вложенного запроса "Движения".
    Во время отладки это сильно мешает. Вот я к чему.

    es3000 писал(а) 04. Сентября 2012 :: 02:38:
    Dmitry The Wing писал(а) 04. Сентября 2012 :: 02:13:
  • Кто запретит вызвать запрос в режиме отладки и посмотреть? У меня есть подозрения на дату, - сравни ее с датой движений.
  • Дату проверял - дата правильная, движения есть точно за эту дату
    Как проверял?
    Смотрел отладочный результирующий код запроса?
    Посмотри обязательно. Возможно, таогда сразу все вопросы и отпадут.
    Но лишнюю вложенность лучше пока убрать.

    P.S.: При делении всегда проверяй, что не на ноль делишь...
      
    Наверх
     
    IP записан
     
    Salimbek
    God Member
    *****
    Отсутствует



    Сообщений: 862
    Зарегистрирован: 06. Июня 2006
    Пол: Мужской
    Re: Запрос не выдает записей
    Ответ #4 - 04. Сентября 2012 :: 05:41
    Печать  
    Dmitry The Wing писал(а) 04. Сентября 2012 :: 05:14:
    Но лишнюю вложенность лучше пока убрать.

    И типизируй значения всегда только на самом верхнем уровне запроса
    Цитата:
    P.S.: При делении всегда проверяй, что не на ноль делишь...

    +500
    и, обычно, цену считают делением суммы на количество, а не наоборот
      
    Наверх
    ICQ  
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: Запрос не выдает записей
    Ответ #5 - 04. Сентября 2012 :: 06:19
    Печать  
    Убери типизацию из вложенного подзапроса

    ЗЫ:
    :пзНачДата~~ вот в этом вся ошибка еще.

    Или у тя запрос к дбф базе ?

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



    Сообщений: 536
    Зарегистрирован: 10. Июля 2006
    Re: Запрос не выдает записей
    Ответ #6 - 04. Сентября 2012 :: 08:08
    Печать  
    Dmitry The Wing писал(а) 04. Сентября 2012 :: 05:14:
    Как проверял?
    Смотрел отладочный результирующий код запроса?
    Посмотри обязательно. Возможно, таогда сразу все вопросы и отпадут.

    а как его проверить?
      
    Наверх
    ICQ  
    IP записан
     
    es3000
    God Member
    *****
    Отсутствует



    Сообщений: 536
    Зарегистрирован: 10. Июля 2006
    Re: Запрос не выдает записей
    Ответ #7 - 04. Сентября 2012 :: 08:09
    Печать  
    Eprst писал(а) 04. Сентября 2012 :: 06:19:
    Или у тя запрос к дбф базе ?

    да, база DBF
      
    Наверх
    ICQ  
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: Запрос не выдает записей
    Ответ #8 - 04. Сентября 2012 :: 08:28
    Печать  
    Этот запрос что выдает?
    Код
    Выбрать все
    	ТекстЗапроса = "
    	|		 SELECT
    	|				$РегОст.Склад as [Склад $Справочник.Склады],
    	|				$РегОст.Номенклатура as [Номенклатура $Справочник.Номенклатура],
    	|				$РегОст.Характеристика as [Характеристика $Справочник.Характеристики],
    	|				$РегОст.ЦенаРозн as ЦенаРозн,
    	|				$РегОст.Количество as Количество,
    	|				$РегОст.Сумма as Сумма,
    	|				$РегОст.Сумма / $РегОст.Количество as ЦенаОтп
    	|		FROM $Регистр.Остатки as РегОст
    	|		WHERE РегОст.date between :пзНачДата~~ and :пзКонДата~~
    	|"; 
    
    
      
    Наверх
     
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: Запрос не выдает записей
    Ответ #9 - 04. Сентября 2012 :: 08:41
    Печать  
    es3000 писал(а) 04. Сентября 2012 :: 08:08:
    Dmitry The Wing писал(а) 04. Сентября 2012 :: 05:14:
    Как проверял?
    Смотрел отладочный результирующий код запроса?
    Посмотри обязательно. Возможно, таогда сразу все вопросы и отпадут.
    а как его проверить?
    Перед выполнением запроса добавь
    Код
    Выбрать все
    лКомандаОЛЕ.Отладка(1); 
    
    
      
    Наверх
     
    IP записан
     
    es3000
    God Member
    *****
    Отсутствует



    Сообщений: 536
    Зарегистрирован: 10. Июля 2006
    Re: Запрос не выдает записей
    Ответ #10 - 05. Сентября 2012 :: 06:34
    Печать  
    Eprst писал(а) 04. Сентября 2012 :: 08:28:
    Этот запрос что выдает?
    Код
    Выбрать все
    	ТекстЗапроса = "
    	|		 SELECT
    	|				$РегОст.Склад as [Склад $Справочник.Склады],
    	|				$РегОст.Номенклатура as [Номенклатура $Справочник.Номенклатура],
    	|				$РегОст.Характеристика as [Характеристика $Справочник.Характеристики],
    	|				$РегОст.ЦенаРозн as ЦенаРозн,
    	|				$РегОст.Количество as Количество,
    	|				$РегОст.Сумма as Сумма,
    	|				$РегОст.Сумма / $РегОст.Количество as ЦенаОтп
    	|		FROM $Регистр.Остатки as РегОст
    	|		WHERE РегОст.date between :пзНачДата~~ and :пзКонДата~~
    	|"; 
    
    


    Работает!
      
    Наверх
    ICQ  
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: Запрос не выдает записей
    Ответ #11 - 05. Сентября 2012 :: 06:43
    Печать  
    • Забудь про звездочку в запросах.
    • Типизируй всегда только на ВЕРХНЕМ уровне запроса.
    • Проверяй на нули прежде чем делить.
    • Пользуй отладку для выявления ошибок.
    И будет тебе счастье.
      
    Наверх
     
    IP записан
     
    es3000
    God Member
    *****
    Отсутствует



    Сообщений: 536
    Зарегистрирован: 10. Июля 2006
    Re: Запрос не выдает записей
    Ответ #12 - 05. Сентября 2012 :: 06:43
    Печать  
    дело оказалось в том, что в условии надо написать:

    Код
    Выбрать все
    	|			РегОст.date >= :пзНачДата~~
    	|			AND
    	|			РегОст.date <= :пзКонДата~~
     
    
    

    или
    Код
    Выбрать все
    	|			РегОст.date between :пзНачДата~~ and :пзКонДата~~
     
    
    


    то есть обращаться к регистру через РегОст

    а у меня было:

    Код
    Выбрать все
    	|			[b]Регистр.Остатки[/b].date >= :пзНачДата~~
    	|			AND
    	|			[b]Регистр.Остатки[/b].date <= :пзКонДата~~
     
    
    


    Хотя странно
      
    Наверх
    ICQ  
    IP записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: Запрос не выдает записей
    Ответ #13 - 05. Сентября 2012 :: 06:46
    Печать  
    es3000 писал(а) 05. Сентября 2012 :: 06:43:
    Хотя странно
    Нет ничего странного.
    Ошибки выполнения не было потому, что такое имя существует - это псевдоним таблицы, но не работало потому, что к твоему запросу условие не было привязано.
      
    Наверх
     
    IP записан
     
    es3000
    God Member
    *****
    Отсутствует



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

    о блин! теперь из 1С-ки не вставляется текст запроса! вставляются каракули...
    что за наваждение Печаль
      
    Наверх
    ICQ  
    IP записан
     
    Переключение на Главную Страницу Страницы: [1] 2 
    ОтправитьПечать