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


1C++ rocks!

Сообщений: 20
Зарегистрирован: 01. Февраля 2010
Прямые запросы
01. Февраля 2010 :: 11:42
Печать  
Добрый день, являюсь человеком который пытается разобраться в прямых запросах, есть потребность выбрать все документы вида: РасходнаяНакладная у которых есть подчиненный документ вида:НалоговаяНакладная, при этом нужно выводить номер и дату налоговой, контрагента и склад расходной и при этом посчитать сумму услуг и товаров в ней, вот я написал запрос где выводит все документы у которых есть налоговая за период но не могу написать чтоб в запрос еще и выводило номер и дату налоговой....
           |SELECT
           |      right(Жур.date_time_iddoc, 9) [Док $Документ.РасходнаяНакладная],
           |       MAX($РасходнаяНакладная.Склад) as [Склад $Справочник.МестаХранения] ,
           |       MAX($РасходнаяНакладная.Контрагент) as [Контрагент $Справочник.Контрагенты],
           |  SUM(CASE WHEN $СпрН.ВидТовара = :Услуга THEN $РасходнаяНакладнаяС.СуммаСНДС END) as Услуги,
           |  SUM(CASE WHEN $СпрН.ВидТовара = :Товар THEN $РасходнаяНакладнаяС.СуммаСНДС END) as Товары
           |FROM
           |      _1SJourn Жур (nolock)
           |LEFT JOIN
           |  $Документ.РасходнаяНакладная as РасходнаяНакладная (nolock) ON РасходнаяНакладная.IDDoc = Жур.IDDoc
           |LEFT JOIN
           |  $ДокументСтроки.РасходнаяНакладная as РасходнаяНакладнаяС (nolock) ON РасходнаяНакладнаяС.IDDoc = Жур.IDDoc
           |LEFT JOIN
           |  $Справочник.Номенклатура as СпрН (nolock) ON СпрН.ID = $РасходнаяНакладнаяС.Товар
           |WHERE
           |      Жур.Date_Time_IDDoc between :НачДата and :КонДата ~
           |      AND Жур.IDDocDef = $ВидДокумента.РасходнаяНакладная
           |   AND exists(
           |SELECT
           |*
           |FROM
           |      _1SCRDOC ЖурПод (nolock)
           | INNER JOIN
           |      _1SJourn ЖурД (nolock) on ЖурПод.Child_Date_Time_IDDoc = ЖурД.Date_Time_IDDoc
           |WHERE
           |      ЖурПод.MDID = 0
           |      AND ЖурПод.ParentVal = 'O1' + $ВидДокумента36.РасходнаяНакладная + right(Жур.Date_Time_IDDoc, 9)
           |   AND ЖурД.IDDocDef = $ВидДокумента.НалоговаяНакладная
           |)
           |GROUP BY
           | Жур.Date_Time_IDDoc
           |ORDER BY
           | Жур.Date_Time_IDDoc
           |";
хочу еще добавить что в принципе решил эту проблему по перебору от налоговой но может есть мысли как это сделать в этой конструкции...
« Последняя редакция: 01. Февраля 2010 :: 14:23 - Сережа »  
Наверх
 
IP записан
 
MichaelM
YaBB Newbies
*
Отсутствует



Сообщений: 10
Зарегистрирован: 20. Августа 2007
Пол: Мужской
Re: Прямые запросы
Ответ #1 - 01. Февраля 2010 :: 12:50
Печать  
чтобы была понятна жизненная позиция автора
http://www.forum.mista.ru/topic.php?id=458138&all=1

читать литературу времени нет, а плодить ветки -есть.
Вечная борьба экстенсивного - интенсивного.
  
Наверх
 
IP записан
 
Сережа
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 01. Февраля 2010
Re: Прямые запросы
Ответ #2 - 01. Февраля 2010 :: 13:05
Печать  
MichaelM писал(а) 01. Февраля 2010 :: 12:50:
чтобы была понятна жизненная позиция автора
..........................

читать литературу времени нет, а плодить ветки -есть.
Вечная борьба экстенсивного - интенсивного.

причем тут это?
  
Наверх
 
IP записан
 
MichaelM
YaBB Newbies
*
Отсутствует



Сообщений: 10
Зарегистрирован: 20. Августа 2007
Пол: Мужской
Re: Прямые запросы
Ответ #3 - 01. Февраля 2010 :: 13:49
Печать  
что бы Вам не пришдось еще раз сказки идитские рассказывть


А собственно по вопросу топика
Запрос неправильно составлен поэтому и ответ будет неправильный но зато результат быстрый

Сделайте еще один джоин с    _1SCRDOC  и      _1SJourn Жур
и получите номер DOCNO DATE_TIME_IDDOC.

НО оперируя только практическим  материалом и не изучая теоретический, в запросах (прамых) не разобраться.

те будут пародии неосмысленные.
  
Наверх
 
IP записан
 
Сережа
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 01. Февраля 2010
Re: Прямые запросы
Ответ #4 - 01. Февраля 2010 :: 13:56
Печать  
хз конечно к чему первый сообщение....

про второе сообщение-слова дельные, мне тоже кажется что запрос в принципе нормальный если не нужно получать данные с подчиненного документа, вопрос тогда такой:правильнее отбирать с подчиненного документа в данном случае? и еще вопрос раз уж Вы написали про "изучая теоретический" где можно почитать как правильно составлять запросы более сложные чем просто select * from, заранее благодарен.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Прямые запросы
Ответ #5 - 01. Февраля 2010 :: 14:21
Печать  
Запрос к Налоговым накладным, затем через 1SCRDOC  - все родительские документы, там фильтр на расходные накладные. Далее, разворачивая в нужных направлениях, получать остальные данные. Как то так, наверное...
  
Наверх
ICQ  
IP записан
 
Сережа
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 01. Февраля 2010
Re: Прямые запросы
Ответ #6 - 01. Февраля 2010 :: 14:30
Печать  
Salimbek писал(а) 01. Февраля 2010 :: 14:21:
Запрос к Налоговым накладным, затем через 1SCRDOC  - все родительские документы, там фильтр на расходные накладные. Далее, разворачивая в нужных направлениях, получать остальные данные. Как то так, наверное...


я так в принципе интуитивно и понимаю, но как сказал  MichaelM :Запрос неправильно составлен поэтому и ответ будет неправильный но зато результат быстрый -- хотелось бы услышать чего не правильный,причину, а то как бы можно :Сделайте еще один джоин с    _1SCRDOC  и      _1SJourn Жур ....
  
Наверх
 
IP записан
 
MichaelM
YaBB Newbies
*
Отсутствует



Сообщений: 10
Зарегистрирован: 20. Августа 2007
Пол: Мужской
Re: Прямые запросы
Ответ #7 - 01. Февраля 2010 :: 14:30
Печать  

Вопрос правильности и оптимальности - разные вопросы.

Правильней избегать избыточности: избыточности групприровок
избыточности чтений данных  (таблиц и индексов)
В Вашем запросе и то т дугое  есть.

А оптимальность строго зависит от конкретных условий.





Собствено по  воросу

Павильней отбирать (обединять ) таблицу ТЧ
а таблицу  "Шапки" с контрами и складами обединять в самую последнюю очередь  вместе с типизацией 1с++

те примерно так

select
поля с типизацией
join таблицы-расшифровки
From
  (Select  Развертка по гркппировкам (товар, услуга)
   from
     (Select  СуммированиеПоГруппировкам (документ,ВидТовара )

весь запрос за Вас я писать не буду тк Вы за это деньги получаете.


сответственно не будет глупости типа
MAX($РасходнаяНакладная.Контрагент)

...


Вобщем этому учатся не за 10 постов без подготовки.
И когдато я тоже писал полный бред  и брал за это деньги.


  
Наверх
 
IP записан
 
Сережа
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 01. Февраля 2010
Re: Прямые запросы
Ответ #8 - 01. Февраля 2010 :: 14:44
Печать  
MichaelM писал(а) 01. Февраля 2010 :: 14:30:
весь запрос за Вас я писать не буду тк Вы за это деньги получаете.


вот не поверите, но я за прямые запросы ни каких денег не получаю, просто решил начать разбираться в них, и опять же спрошу про литературу которую Вы читали чтоб стать таким гуру, а за данные совету скажу Вам спасибо, в общем понятно мне стало, осталось теперь только это осознать окончательно и составлять правильные запросы.
  
Наверх
 
IP записан
 
MichaelM
YaBB Newbies
*
Отсутствует



Сообщений: 10
Зарегистрирован: 20. Августа 2007
Пол: Мужской
Re: Прямые запросы
Ответ #9 - 01. Февраля 2010 :: 15:15
Печать  
про литературу не помогу. В основном я учился на статьях форумов.
Но очень интенсивно. в течении 2 меяцев (исп срок). тк устроился в контору где 250 активных пользователей.

Вобщем последней из книг я читал руководство администратора MS SQL 2005  двутомник.

Но толкового всеобъемлещего труда по запрсам не видел.  думаю такой есть и на русском. просто мне он не нужен.

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

сейчас с помощью MS Profiler я без этих ухищирений обзожусь.
Если нет реальных задач, то сложно их придумать. Например я собираю интересные (мне) задачи которые бывают на форумах впрок.

В частности вашау тема с RIGHT(Date_Time_IDDoc,9)
и выяснил, что опасная конструкция.


чтобы научится писать "правильные" запросы
надо научиться понимать план исполнения запроса.
(сответственно индексы статистики распараллеливание..)
я пользовался только графическим.
  
Наверх
 
IP записан
 
Сережа
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 20
Зарегистрирован: 01. Февраля 2010
Re: Прямые запросы
Ответ #10 - 01. Февраля 2010 :: 15:22
Печать  
MichaelM писал(а) 01. Февраля 2010 :: 15:15:
чтобы научится писать "правильные" запросы
надо научиться понимать план исполнения запроса.
(сответственно индексы статистики распараллеливание..)
я пользовался только графическим.


да у меня вообще нету задач каких либо с прямыми запросами,просто решил начать в них разбератся (может для будущего) а про графически это у Вас были таблицы и Вы графически рисовали что должно получиться на выходе?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать