Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Запрос не выдает записей (число прочтений - 5663 )
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 записан
     
    Dmitry The Wing
    God Member
    *****
    Отсутствует


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: Запрос не выдает записей
    Ответ #15 - 05. Сентября 2012 :: 07:18
    Печать  
    es3000 писал(а) 05. Сентября 2012 :: 07:12:
    а как проверить на NULL количество?
    Не на null, а на 0. Используй конструкцию CASE.

    es3000 писал(а) 05. Сентября 2012 :: 07:12:
    о блин! теперь из 1С-ки не вставляется текст запроса! вставляются каракули...
    что за наваждение Печаль
    Это стандартное поведение ОС Windows начиная с версии NT 5.0 (в простонародье "Windows 2000"). Пора бы уже знать...
      
    Наверх
     
    IP записан
     
    es3000
    God Member
    *****
    Отсутствует



    Сообщений: 536
    Зарегистрирован: 10. Июля 2006
    Re: Запрос не выдает записей
    Ответ #16 - 05. Сентября 2012 :: 07:33
    Печать  
    Dmitry The Wing писал(а) 05. Сентября 2012 :: 07:18:
    es3000 писал(а) 05. Сентября 2012 :: 07:12:
    о блин! теперь из 1С-ки не вставляется текст запроса! вставляются каракули...
    что за наваждение Печаль
    Это стандартное поведение ОС Windows начиная с версии NT 5.0 (в простонародье "Windows 2000"). Пора бы уже знать...

    так ведь все предыдущие посты я копировал тексты запросов из 1С-ки и вставлял сюда в форум нормально, без каракулей...
    воистину неисповедимы твои пути господи!

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


    1C++ rocks!

    Сообщений: 839
    Местоположение: Где-то в Сибири
    Зарегистрирован: 18. Августа 2009
    Пол: Мужской
    Re: Запрос не выдает записей
    Ответ #17 - 05. Сентября 2012 :: 07:37
    Печать  
    es3000 писал(а) 05. Сентября 2012 :: 07:33:
    Dmitry The Wing писал(а) 05. Сентября 2012 :: 07:18:
    es3000 писал(а) 05. Сентября 2012 :: 07:12:
    о блин! теперь из 1С-ки не вставляется текст запроса! вставляются каракули...
    что за наваждение Печаль
    Это стандартное поведение ОС Windows начиная с версии NT 5.0 (в простонародье "Windows 2000"). Пора бы уже знать...
    так ведь все предыдущие посты я копировал тексты запросов из 1С-ки и вставлял сюда в форум нормально, без каракулей...
    воистину неисповедимы твои пути господи!
    Для особо "продвинутых" пользователей ОС Windows намекну: раскладка в момент копирования...
      
    Наверх
     
    IP записан
     
    es3000
    God Member
    *****
    Отсутствует



    Сообщений: 536
    Зарегистрирован: 10. Июля 2006
    Re: Запрос не выдает записей
    Ответ #18 - 05. Сентября 2012 :: 07:39
    Печать  
    Dmitry The Wing писал(а) 05. Сентября 2012 :: 07:37:
    Для особо "продвинутых" пользователей ОС Windows намекну: раскладка в момент копирования...

    понятна Улыбка теперь работает Улыбка
      
    Наверх
    ICQ  
    IP записан
     
    es3000
    God Member
    *****
    Отсутствует



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

    Код
    Выбрать все
    	|				(CASE
    	|					WHEN ($РегОст.Количество = 0) THEN 0
    	|					ELSE ($РегОст.Сумма / $РегОст.Количество)
    	|				END) as ЦенаОтп
     
    
    


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



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: Запрос не выдает записей
    Ответ #20 - 05. Сентября 2012 :: 07:50
    Печать  
    В фоксе нет Case, там есть icase и синтаксис другой.

    ЗЫ: и проверка бестолковая, сумневаюсь, что в регистр пишут движения с нулевым количеством у вас.


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



    Сообщений: 536
    Зарегистрирован: 10. Июля 2006
    Re: Запрос не выдает записей
    Ответ #21 - 05. Сентября 2012 :: 08:00
    Печать  
    IIF сработал...
    спасибо мужики за помощь!
    теперь буду GROUP BY делать...
      
    Наверх
    ICQ  
    IP записан
     
    es3000
    God Member
    *****
    Отсутствует



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

    Ситуация такая.
    Нужно сделать отчет по записям регистра в следующем виде:

    группа движений регистра 1
        движение регистра 1.1
        движение регистра 1.2
        ...
    группа движений регистра 2
        движение регистра 2.1
        движение регистра 2.2
        ...

    То есть на первом уровне - это группировка движений, на втором уровне - сами движения.
    Сейчас я это сделал двумя запросами: первый выбирает движения, второй такой же запрос но с GROUP BY для группировки.
    Получается дважды выполняется выборка одних и тех же данных.

    Можно ли это как-то оптимизировать?
    Чтобы за одну выборку сформировать данные для отчета?
      
    Наверх
    ICQ  
    IP записан
     
    Eprst
    God Member
    *****
    Отсутствует



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: Запрос не выдает записей
    Ответ #23 - 05. Сентября 2012 :: 10:39
    Печать  
    Сделать один запрос. Результат удобнее через Индексированную ТЗ обрабатывать (или в классе, например, Класс.ИтогиПоГруппировкам)

    Зачем вам два  запроса  - загадка природы.

    На счет оптимизации запроса, смотреть в эту сторону:

    http://www.1cpp.ru/forum/YaBB.pl?num=1184317705

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


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



    Сообщений: 536
    Зарегистрирован: 10. Июля 2006
    Re: Запрос не выдает записей
    Ответ #24 - 05. Сентября 2012 :: 11:04
    Печать  
    Eprst писал(а) 05. Сентября 2012 :: 10:39:
    Сделать один запрос. Результат удобнее через Индексированную ТЗ обрабатывать (или в классе, например, Класс.ИтогиПоГруппировкам)

    Зачем вам два  запроса  - загадка природы.

    Ну, чисто теоретически, такой запрос может вернуть слишком большое количество записей, которые просто не поместятся в оперативной памяти. Соответственно - отчет не сформируется.
    Стандартные 1С-ные запросы такого недостатка не имеют.
    Вот и хотелось как-то избежать этой ситуации.
    Хотя конечно в ИТ удобней обрабатывать.

    Eprst писал(а) 05. Сентября 2012 :: 10:39:
    На счет оптимизации запроса, смотреть в эту сторону:

    http://www.1cpp.ru/forum/YaBB.pl?num=1184317705

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

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



    Сообщений: 3397
    Зарегистрирован: 08. Октября 2007
    Re: Запрос не выдает записей
    Ответ #25 - 05. Сентября 2012 :: 11:25
    Печать  
    es3000 писал(а) 05. Сентября 2012 :: 11:04:
    Стандартные 1С-ные запросы такого недостатка не имеют.


    Смех Смех Смех

    ЗЫ: Дык не выгружай в ТЗ, обходи выборкой, топая по записям

    и пофик, сколько там записей будет, мильён, али два.
      
    Наверх
     
    IP записан
     
    es3000
    God Member
    *****
    Отсутствует



    Сообщений: 536
    Зарегистрирован: 10. Июля 2006
    Re: Запрос не выдает записей
    Ответ #26 - 05. Сентября 2012 :: 13:06
    Печать  
    Eprst писал(а) 05. Сентября 2012 :: 11:25:
    es3000 писал(а) 05. Сентября 2012 :: 11:04:
    Стандартные 1С-ные запросы такого недостатка не имеют.


    Смех Смех Смех

    ЗЫ: Дык не выгружай в ТЗ, обходи выборкой, топая по записям

    и пофик, сколько там записей будет, мильён, али два.


    Дык...

    1С-ный запрос работает гораздо медленнее, тем более что им нельзя выбрать отдельные записи регистра (по крайней мере у меня не получилось).
    Поэтому я начал делать прямым запросом. А прямые запросы я привык использовать вместе с ИТ...

    Как прямой запрос использовать с выборкой? Можно примерчик? или ссылочку на примерчик?
      
    Наверх
    ICQ  
    IP записан
     
    Переключение на Главную Страницу Страницы: [1] 
    ОтправитьПечать