Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) запрос: док-ты у которых нет подчиненных. (число прочтений - 4043 )
Loko
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 01. Мая 2008
Пол: Мужской
запрос: док-ты у которых нет подчиненных.
15. Ноября 2011 :: 09:37
Печать  
помогите, пожалуйста, с запросом в 1с++.
нужен список всех документов за период определенного вида (например, "Заявка"), у которых нет подчиненных документов.
  
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: запрос: док-ты у которых нет подчиненных.
Ответ #1 - 15. Ноября 2011 :: 09:50
Печать  
Примерно так:
Код
Выбрать все
|SELECT
|	T1.IDDOC AS [Документ $Документ],
|	T1.IDDOCDEF AS Документ_вид
|FROM
|	_1SGOURN AS T1 WITH (NOLOCK)
|WHERE
|	T1.IDDOCDEF = $ВидДокумента.Заявка
|	AND NOT EXISTS (SELECT TabRod.CHILDID FROM _1SCRDOC As TabRod WITH (NOLOCK) WHERE (TabRod.MDID = 0) AND (SUBSTRING(TabRod.PARENTVAL,7,9) = T1.IDDOC))
 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: запрос: док-ты у которых нет подчиненных.
Ответ #2 - 15. Ноября 2011 :: 10:03
Печать  
чорт, щас придёт trad  и расскажет о неэффективности данного запроса.
Улыбка


  
Наверх
 
IP записан
 
Loko
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 13
Зарегистрирован: 01. Мая 2008
Пол: Мужской
Re: запрос: док-ты у которых нет подчиненных.
Ответ #3 - 15. Ноября 2011 :: 10:03
Печать  
везде одни и те же люди))

спасибо еще раз)
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: запрос: док-ты у которых нет подчиненных.
Ответ #4 - 15. Ноября 2011 :: 11:16
Печать  
ага, подтверждаю, туфта полнейшая
  

1&&2&&3
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: запрос: док-ты у которых нет подчиненных.
Ответ #5 - 15. Ноября 2011 :: 11:43
Печать  
Согласен, но другого выхода нет, только Подстрока. Ну или формировать длиннй ИД: "O1" + 36-ричное значение вида Документа (4 символа) + T1.IDDOC + 8 пробелов. Но не факт что в этом случае будет быстрее.

По этому поводу в таблицу _1SJOURN есть предложение добавить 2 Поля IDDOC13 и IDDOC23 и обновлять по тригеру OnInset добавлять эти значения.
  
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: запрос: док-ты у которых нет подчиненных.
Ответ #6 - 15. Ноября 2011 :: 13:14
Печать  
в данном случае 8 пробелов совершенно не обязательны
  

1&&2&&3
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: запрос: док-ты у которых нет подчиненных.
Ответ #7 - 15. Ноября 2011 :: 14:04
Печать  
(0)
Код
Выбрать все
ТекстЗапроса = "
|select top 1 Жур100.iddoc
|  _1Sjourn Жур100 (NOLOCK)
|  INNER JOIN
|  _1SCRDOC Отбор100  (NOLOCK) ON Отбор100.ChildID = Жур100.IDDoc
|AND	    Отбор100. MDID = 0
|AND	    Отбор100.ParentVal = :ВыбДок*
|  WHERE  Жур100.IDDocDef = $ВидДокумента.Заявка
|and Жур100.ISMARK = 0
|";
Запрос.УстановитьТекстовыйПараметр("ВыбДок", ТекДок);
ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
 




только еще добавлено что документ Заявка не помечен на удаление.
Если в тз одна строка до док заявка есть в подчинении иначе нет.

ps невнимательно прочитал задачу.
не увидел что   (0)  нужны все документы за период
(7) решает другую задачу определяем есть ли у конкретного документа в подчинении хотя бы один док заявка или нет.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: запрос: док-ты у которых нет подчиненных.
Ответ #8 - 15. Ноября 2011 :: 14:37
Печать  
по моему для (0) надо так

Код
Выбрать все
ТекстЗапроса = "
|SELECT
|	Жур100.IDDOC AS [Док $Документ.Заявка]
|FROM
|	_1Sjourn AS Жур100 WITH (NOLOCK)
|WHERE
|    Жур100.IDDOCDEF = $ВидДокумента.Заявка
|    AND NOT EXISTS (SELECT TabRod.MDID FROM _1SCRDOC As TabRod WITH (NOLOCK)
|		WHERE TabRod.MDID = 0
|		AND   TabRod.PARENTVAL = 'O1'+$ВидДокумента36.Заявка +  Жур100.IDDOC + '	  '
|		)
|";

 

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: запрос: док-ты у которых нет подчиненных.
Ответ #9 - 15. Ноября 2011 :: 14:43
Печать  
pvase писал(а) 15. Ноября 2011 :: 11:43:
Согласен, но другого выхода нет, только Подстрока. Ну или формировать длиннй ИД: "O1" + 36-ричное значение вида Документа (4 символа) + T1.IDDOC + 8 пробелов. Но не факт что в этом случае будет быстрее.

факт что будет быстрее. попробуй ответить почему.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: запрос: док-ты у которых нет подчиненных.
Ответ #10 - 16. Ноября 2011 :: 07:33
Печать  
Можно и без exists написать, вот только, не уверен, что будет быстрее.
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: запрос: док-ты у которых нет подчиненных.
Ответ #11 - 16. Ноября 2011 :: 07:42
Печать  
Eprst писал(а) 16. Ноября 2011 :: 07:33:
Можно и без exists написать, вот только, не уверен, что будет быстрее.

ms sql сервер  очень хорошо обрабатывает полусоеденения и антисоеденения.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: запрос: док-ты у которых нет подчиненных.
Ответ #12 - 16. Ноября 2011 :: 07:48
Печать  
Это, просветите, в чем семеряжный смысл добавления 8 пробелов к полю ?
Смысл ?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: запрос: док-ты у которых нет подчиненных.
Ответ #13 - 16. Ноября 2011 :: 08:32
Печать  
еще, конкретно в этом запросе, IDDOC вполне можно заменить на нечто другое что уже присутствует в ключе индекса
  

1&&2&&3
Наверх
 
IP записан
 
pvase
God Member
*****
Отсутствует



Сообщений: 923
Местоположение: Киев
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: запрос: док-ты у которых нет подчиненных.
Ответ #14 - 16. Ноября 2011 :: 08:45
Печать  
Eprst писал(а) 16. Ноября 2011 :: 07:48:
Это, просветите, в чем семеряжный смысл добавления 8 пробелов к полю ?
Смысл ?

По идее нет, за это спасибо MS SQL. Но есть некоторое замечание, если установлен SET ANSI_PADDING ON - то для Char значений указывать полное значение, чтобы этим не занимался SQL при обработке запросов. Хотя это все теория, в практике, MS SQL с таким преобразованием хорошо справляется. Единственное, при использовании индексов, с таким преобразованием будет делаться hash или loop по индексу.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать