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


I Love YaBB 2!

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

чтобы попасть в индекс PARENT
по таблице _1SCRDOC
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



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

По идее нет, за это спасибо MS SQL. Но есть некоторое замечание, если установлен SET ANSI_PADDING ON - то для Char значений указывать полное значение, чтобы этим не занимался SQL при обработке запросов. Хотя это все теория, в практике, MS SQL с таким преобразованием хорошо справляется. Единственное, при использовании индексов, с таким преобразованием будет делаться hash или loop по индексу.

попытка запудрить мозг детектед
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



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

чтобы попасть в индекс PARENT
по таблице _1SCRDOC

в данном случае и без пробелов в индекс нормально подаем
  

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


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: запрос: док-ты у которых нет подчиненных.
Ответ #18 - 16. Ноября 2011 :: 09:06
Печать  
trad писал(а) 16. Ноября 2011 :: 09:00:
Z1 писал(а) 16. Ноября 2011 :: 08:55:
Eprst писал(а) 16. Ноября 2011 :: 07:48:
Это, просветите, в чем семеряжный смысл добавления 8 пробелов к полю ?
Смысл ?

чтобы попасть в индекс PARENT
по таблице _1SCRDOC

в данном случае и без пробелов в индекс нормально подаем

ну в этом случае надеемся на какие-то неявные преобразования типов а так для успокоения получается более понятно для человека.ну можно еще без пробелов поставить  cast(.. as char(23))
но все это уже наверное для окончательного плана выполнения не принципиально

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



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

1&&2&&3
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать