Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) выводит или пустой запрос или не все (число прочтений - 3296 )
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
выводит или пустой запрос или не все
13. Декабря 2006 :: 09:27
Печать  
всем привет. продолжаю осваивать прямые запросы (OLE DB).
запрос по регистру взаиморасчеты:
- контрагенты, кредДокументы
- начальный НачОст, приход, расход, конОст
фильтр по клиентам
выдает или пустую ТЗ или только частично... (сравниваю с "традиционным запросом")
     текстЗапроса = "
   
|      SELECT
|      VT.Контрагент as [Контрагент $Справочник.Контрагенты],
|      VT.КредДокумент as [КредДокумент $Документ],
|      Sum(VT.ДолгНачальныйОстаток) as ДолгНачальныйОстаток,
|      Sum(VT.ДолгПриход) as ДолгПриход,
|      Sum(VT.ДолгРасход) as ДолгРасход,
|      Sum(ДолгНачальныйОстаток) + Sum(ДолгПриход) - Sum(ДолгРасход) as ДолгКонечныйОстаток
|FROM (      SELECT
|            $РегИтоги.Контрагент as Контрагент,
|            $РегИтоги.КредДокумент as КредДокумент,
|            $РегИтоги.Долг as ДолгНачальныйОстаток,
|            0 as ДолгПриход,
|            0 as ДолгРасход,
|            $РегИтоги.Долг as ДолгКонечныйОстаток
|            FROM
|                  $РегистрИтоги.ВзаиморасчетыПокупателей as РегИтоги
|            WHERE
|                  РегИтоги.PERIOD = :ДатаПериодаОстатков~~
|                  AND (1=0
|                  OR $РегИтоги.Долг<>0)
|           AND $РегИтоги.Контрагент IN (SELECT Val FROM :ВременнаяТаблица)
|      UNION ALL
|      SELECT
|            $РегДвиж.Контрагент as Контрагент,
|            $РегДвиж.КредДокумент as КредДокумент,
|            $РегДвиж.Долг*(1-регДвиж.DEBKRED*2) as ДолгНачальныйОстаток,
|            0 as ДолгПриход,
|            0 as ДолгРасход,
|            $РегДвиж.Долг*(1-регДвиж.DEBKRED*2) as ДолгКонечныйОстаток
|            FROM
|                  $Регистр.ВзаиморасчетыПокупателей as РегДвиж
|            INNER
|                  JOIN 1SJourn as J ON РегДвиж.IDDOC=J.IDDOC
|            WHERE
|                  (J.DATE >= :ДатаНачалаОстатков~~) AND (J.DATE <= :ДатаКонцаОстатков~~) AND               (J.$ФлагРегистра.ВзаиморасчетыПокупателей=1)
|           AND $РегДвиж.Контрагент IN (SELECT Val FROM :ВременнаяТаблица)
|      UNION ALL      SELECT
|            $РегПрихРасх.Контрагент as Контрагент,
|            $РегПрихРасх.КредДокумент as КредДокумент,
|            0 as ДолгНачальныйОстаток,
|            (1-РегПрихРасх.DEBKRED)*$РегПрихРасх.Долг as ДолгПриход,
|            РегПрихРасх.DEBKRED*$РегПрихРасх.Долг as ДолгРасход,
|            0 as ДолгКонечныйОстаток
|            FROM
|                  $Регистр.ВзаиморасчетыПокупателей as РегПрихРасх
|            INNER
|                  JOIN 1SJourn as J ON РегПрихРасх.IDDOC=J.IDDOC
|            WHERE
|                  (J.DATE >= :ДатаНачала~~) AND (J.DATE <= :ДатаКонца~~) AND (J.$ФлагРегистра.ВзаиморасчетыПокупателей=1)
|             AND $РегПрихРасх.Контрагент IN (SELECT Val FROM :ВременнаяТаблица)
|) as VT
|
|
|GROUP BY
|      Контрагент,
|      КредДокумент
|HAVING
|      Sum(ДолгНачальныйОстаток) <> 0 or
|      Sum(ДолгПриход) <> 0 or
|      Sum(ДолгРасход) <> 0 or
|      Sum(ДолгКонечныйОстаток) <> 0";
     
     
ВременнаяТаблица = "Группа";
RS.УложитьСписокОбъектов(ВыбКлиенты, ВременнаяТаблица,"Номенклатура");
RS.УстановитьТекстовыйПараметр ("ВременнаяТаблица", ВременнаяТаблица);

ВыбДата=НачДата;
RS.УстановитьТекстовыйПараметр("ДатаНачала", НачДата);
RS.УстановитьТекстовыйПараметр("ДатаКонца", КонДата);
),-1));
RS.УстановитьТекстовыйПараметр("ДатаНачалаОстатков", BegOfMonth(ВыбДата));
RS.УстановитьТекстовыйПараметр("ДатаКонцаОстатков", ВыбДата);

RS.отладка(1);

тз_2 = RS.ВыполнитьИнструкцию(ТекстЗапроса);

и вопрос №2:
как вывести в таблицу реквизиты из документов?
например (КредДок.Менеджер.Код)

спасибо



  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: выводит или пустой запрос или не все
Ответ #1 - 13. Декабря 2006 :: 09:43
Печать  
Я так понял, у тебя DBF.
По вопросу №1
Почитай вот этот пост: http://itland.ru/forum//index.php?s=8ed1f238555d33afe2fe6f82702ec885&showtopic=1...

По вопросу №2:
Джойнить Справочник менеджеров
  
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: выводит или пустой запрос или не все
Ответ #2 - 13. Декабря 2006 :: 11:20
Печать  
JohnyDeath писал(а) 13. Декабря 2006 :: 09:43:
Я так понял, у тебя DBF.
По вопросу №1
Почитай вот этот пост: http://itland.ru/forum//index.php?s=8ed1f238555d33afe2fe6f82702ec885&showtopic=1...


если ты про это:

CAST(0 as Numeric(20,5)) as ДолгКонечныйОстаток

вместо 0 as ДолгКонечныйОстаток

пробовал - не помогает
а файлы с примерами скачать не получается
можешь сказать где именно?

JohnyDeath писал(а) 13. Декабря 2006 :: 09:43:
По вопросу №2:
Джойнить Справочник менеджеров


это мой второй запрос (в первом было всего 6 строк)
если не трудно, скажи какой именно текст join"а должен быть.

  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: выводит или пустой запрос или не все
Ответ #3 - 13. Декабря 2006 :: 12:56
Печать  
JohnyDeath писал(а) 13. Декабря 2006 :: 09:43:
Я так понял, у тебя DBF.
Почитай вот этот пост: http://itland.ru/forum//index.php?s=8ed1f238555d33afe2fe6f82702ec885&showtopic=1...


вроде все перечитал. что исправлять у себя что б работало не нашел. а примеры слишком сложные, что б  по ним учиться.
ПОМОГИТЕ КТО-НИТЬ!!!!
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: выводит или пустой запрос или не все
Ответ #4 - 13. Декабря 2006 :: 13:09
Печать  
1. Касты делай на все числовые поля. У тебя их как минимум 4.

2.
Что-то типа:
LEFT JOIN $Документ.Реализация as Реал ON РегПрихРасх.IDDOC = Реал.IDDOC
LEFT JOIN $Справочник.ФизЛица as Мен ON $Реал.Менеджер = Мен.ID
  
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: выводит или пустой запрос или не все
Ответ #5 - 13. Декабря 2006 :: 13:23
Печать  
JohnyDeath писал(а) 13. Декабря 2006 :: 13:09:
1. Касты делай на все числовые поля. У тебя их как минимум 4.

сделал так:
Код
Выбрать все
	текстЗапроса = "

|	SELECT
|	VT.Контрагент as [Контрагент $Справочник.Контрагенты],
|	VT.КредДокумент as [КредДокумент $Документ],
|	Sum(VT.ДолгНачальныйОстаток) as ДолгНачальныйОстаток,
|	Sum(VT.ДолгПриход) as ДолгПриход,
|	Sum(VT.ДолгРасход) as ДолгРасход,
|	Sum(ДолгНачальныйОстаток) + Sum(ДолгПриход) - Sum(ДолгРасход) as ДолгКонечныйОстаток
|FROM (	SELECT
|		$РегИтоги.Контрагент as Контрагент,
|		$РегИтоги.КредДокумент as КредДокумент,
|		CAST($РегИтоги.Долг as Numeric(20,5)) as ДолгНачальныйОстаток,
|		CAST(0 as Numeric(20,5)) as ДолгПриход,
|		CAST(0 as Numeric(20,5)) as ДолгРасход,
|		CAST($РегИтоги.Долг as Numeric(20,5)) as ДолгКонечныйОстаток
|		FROM
|			$РегистрИтоги.ВзаиморасчетыПокупателей as РегИтоги
|		WHERE
|			РегИтоги.PERIOD = :ДатаПериодаОстатков~~
|			AND (1=0
|			OR $РегИтоги.Долг<>0)
|	     AND $РегИтоги.Контрагент IN (SELECT Val FROM :ВременнаяТаблица)
|	UNION ALL
|	SELECT
|		$РегДвиж.Контрагент as Контрагент,
|		$РегДвиж.КредДокумент as КредДокумент,
|		CAST(($РегДвиж.Долг*(1-регДвиж.DEBKRED*2)) as Numeric(20,5)) as ДолгНачальныйОстаток,
|		CAST(0 as Numeric(20,5)) as ДолгПриход,
|		CAST(0 as Numeric(20,5)) as ДолгРасход,
|		CAST(($РегДвиж.Долг*(1-регДвиж.DEBKRED*2)) as Numeric(20,5)) as ДолгКонечныйОстаток
|		FROM
|			$Регистр.ВзаиморасчетыПокупателей as РегДвиж
|		INNER
|			JOIN 1SJourn as J ON РегДвиж.IDDOC=J.IDDOC
|		WHERE
|			(J.DATE >= :ДатаНачалаОстатков~~) AND (J.DATE <= :ДатаКонцаОстатков~~) AND (J.$ФлагРегистра.ВзаиморасчетыПокупателей=1)
|	     AND $РегДвиж.Контрагент IN (SELECT Val FROM :ВременнаяТаблица)
|	UNION ALL	SELECT
|		$РегПрихРасх.Контрагент as Контрагент,
|		$РегПрихРасх.КредДокумент as КредДокумент,
|		CAST(0 as Numeric(20,5)) as ДолгНачальныйОстаток,
|		CAST(((1-РегПрихРасх.DEBKRED)*$РегПрихРасх.Долг) as Numeric(20,5)) as ДолгПриход,
|		CAST((РегПрихРасх.DEBKRED*$РегПрихРасх.Долг) as Numeric(20,5)) as ДолгРасход,
|		CAST(0 as Numeric(20,5)) as ДолгКонечныйОстаток
|		FROM
|			$Регистр.ВзаиморасчетыПокупателей as РегПрихРасх
|		INNER
|			JOIN 1SJourn as J ON РегПрихРасх.IDDOC=J.IDDOC
|		WHERE
|			(J.DATE >= :ДатаНачала~~) AND (J.DATE <= :ДатаКонца~~) AND (J.$ФлагРегистра.ВзаиморасчетыПокупателей=1)
|		 AND $РегПрихРасх.Контрагент IN (SELECT Val FROM :ВременнаяТаблица)
|) as VT
|
|
|GROUP BY
|	Контрагент,
|	КредДокумент
|HAVING
|	Sum(ДолгНачальныйОстаток) <> 0 or
|	Sum(ДолгПриход) <> 0 or
|	Sum(ДолгРасход) <> 0 or
|	Sum(ДолгКонечныйОстаток) <> 0";
 



и ничего....
может чего не правильно?
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: выводит или пустой запрос или не все
Ответ #6 - 13. Декабря 2006 :: 16:48
Печать  
ау!! кто нибудь!!! help!!
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: выводит или пустой запрос или не все
Ответ #7 - 13. Декабря 2006 :: 17:48
Печать  
Вот смотри, ты вывалил запрос из нескольких десятков строк под вечер, и ожидаешь кто-то будет жертвовать своим временем чтобы разобраться в куче кода?

Я бы порекомендовал тебе разбить запрос на несколько маленьких и разбираться уже в них. Что я обычно и делаю.
А уж если не получится, то тогда бы просил помощи.


P.S. Я не в обиду.
  
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: выводит или пустой запрос или не все
Ответ #8 - 13. Декабря 2006 :: 18:05
Печать  
Arta писал(а) 13. Декабря 2006 :: 17:48:
Вот смотри, ты вывалил запрос из нескольких десятков строк под вечер, и ожидаешь кто-то будет жертвовать своим временем чтобы разобраться в куче кода?


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

Arta писал(а) 13. Декабря 2006 :: 17:48:
Я бы порекомендовал тебе разбить запрос на несколько маленьких и разбираться уже в них. Что я обычно и делаю.


просто чувствую что ошибка какая то мелкая... а при моём опыте написания прямых запросов, что один запрос, что 21...

Arta писал(а) 13. Декабря 2006 :: 17:48:
А уж если не получится, то тогда бы просил помощи.


целый день этим и занимаюсь

Arta писал(а) 13. Декабря 2006 :: 17:48:
P.S. Я не в обиду.


Ты все правильно говоришь. и обижаться глупо. просто меня уже клинит на простой задаче (а то что она простая я уверен)
  

работай с умом, а не до ночи!
Наверх
 
IP записан
 
Bond
Full Member
***
Отсутствует



Сообщений: 106
Зарегистрирован: 01. Ноября 2006
Пол: Мужской
Re: выводит или пустой запрос или не все
Ответ #9 - 14. Декабря 2006 :: 07:53
Печать  
Ошибку нашел Pavel (не знаю как зовут полностью).
и дело не в тексте запроса, а в голове моей убогой.

фильтр по контрагентам выглядел так

RS.УложитьСписокОбъектов(ВыбКлиенты, ВременнаяТаблица,"Номенклатура");
(это я скопировал из другого отчета)

а ведь реально:

RS.УложитьСписокОбъектов(ВыбКлиенты, ВременнаяТаблица,"Контрагенты");

всем спасибо что терпели мои не очень умные вопросы!

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

  

regsql.rar ( 24 KB | Загрузки )

работай с умом, а не до ночи!
Наверх
 
IP записан
 
D_Pavel
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 28
Зарегистрирован: 24. Июля 2006
Re: выводит или пустой запрос или не все
Ответ #10 - 14. Декабря 2006 :: 08:17
Печать  
Да точно, обновления в будущем можно качать с 1c.doom4.ru
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать