Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) Проставить реквизит у подчинённых документов (число прочтений - 10439 )
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #15 - 21. Августа 2006 :: 08:05
Печать  
Т.к. вид документа ты в итоге не используешь,
Код
Выбрать все
|SELECT ЖурП.IDDOC [Док $Документ]
//|	ЖурП.IDDOCDEF Док_вид 

можно заменить на
Код
Выбрать все
|SELECT Отбор.CHILDID 

и убрать последний join (который AS ЖурП).

Если ты используешь УРИБ, это изменение не будет выгружаться.

Свёрнут = 1 будет и для тех ПриемЗаказов, у которых нет подчинённых документов.

Возможно, стоит добавить условие Свёрнут = 0.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
green
Junior Member
**
Отсутствует



Сообщений: 29
Местоположение: Астрахань
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #16 - 21. Августа 2006 :: 11:35
Печать  
berezdetsky
Уриб и т.п. - не критично - это для организации новой базы и переноса туда справочников и опр. документов.
Переделывать пока не буду - главное что работает :О) - менее минуты - меня вполне устроит.
Цитата:
Свёрнут = 1 будет и для тех ПриемЗаказов, у которых нет подчинённых документов.
- так и должно быть
Цитата:
Возможно, стоит добавить условие Свёрнут = 0.
- не обязательно - обработка будет запускаться всего 1 раз. Ещё раз спасибо.
  
Наверх
 
IP записан
 
green
Junior Member
**
Отсутствует



Сообщений: 29
Местоположение: Астрахань
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #17 - 14. Сентября 2006 :: 14:46
Печать  
Данная тема получает продолжение....
(Вообще если кому интересно - это не стандартная "резка" базы (по многим причинам не могу использовать универсальную, которой уже неоднократно пользовался - это чтоб избежать лишних вопросов).)
Теперь к условию ещё добавлиось, что в случае, если у заказа, есть подчинённый документ "ПКО" или "СтрокаВыпискиПриход", то необходимо проверить их подчинённые документы и в случае наличия у них подчинённого "РКО" у него тоже установить реквизит "Свернут".
Вот что у меня получилось:
Код
Выбрать все
|UPDATE _1SJOURN
|SET _1SJOURN.$ОбщийРеквизит.Свёрнут = 1
|WHERE _1SJOURN.IDDOC IN(
|SELECT Отбор.CHILDID
//|SELECT ЖурП.IDDOC [Док $Документ]
//|	ЖурП.IDDOCDEF Док_вид
|FROM _1SJOURN AS Жур With (NOLOCK)
|	INNER JOIN $Документ.ПриемЗаказов AS Док With (NOLOCK) ON Жур.IDDOC = Док.IDDOC
|	INNER JOIN _1SCRDOC AS Отбор With (NOLOCK) ON Отбор.PARENTVAL = 'O1' + $ВидДокумента36.ПриемЗаказов + Жур.IDDOC
//|	INNER JOIN _1SJOURN AS ЖурП With (NOLOCK) ON Отбор.CHILDID = ЖурП.IDDOC
|WHERE
|(($Док.ДатаГотовности = '17530101')OR(($Док.ДокументНакладная = $ПустойИД)AND($Док.ДокументКонец = $ПустойИД)))
|AND ((Жур.CLOSED & 1) = 1)
|AND (Отбор.MDID = 0)
|UNION ALL
|SELECT
|  ЖурПРЗ.IDDoc
//|  ЖурПРЗ.IDDoc as [Док $Документ]
//|  ЖурПРЗ.IDDocDef as Док_вид
|FROM
|  _1SJourn ЖурПРЗ
|INNER JOIN
|  $Документ.ПриемЗаказов as ДокПРЗ ON ДокПРЗ.IDDoc = ЖурПРЗ.IDDoc
|WHERE
|(($ДокПРЗ.ДатаГотовности = '17530101')OR(($ДокПРЗ.ДокументНакладная = $ПустойИД)AND($ДокПРЗ.ДокументКонец = $ПустойИД)))
//|  $ДокПРЗ.Готовность = 0 AND
|AND ЖурПРЗ.IDDocDef = $ВидДокумента.ПриемЗаказов AND
|  ЖурПРЗ.Closed & 1 = 1
|
|UNION ALL
|SELECT РКО.IDDOC
|FROM _1SCRDOC AS РКО With (NOLOCK)
|INNER JOIN
|	(SELECT ЖурП2.IDDOC
|		ЖурП2.IDDOCDEF Док_вид
|	FROM _1SJOURN AS Жур2 With (NOLOCK)
|		INNER JOIN $Документ.ПриемЗаказов AS Док2 With (NOLOCK) ON Жур2.IDDOC = Док2.IDDOC
|		INNER JOIN _1SCRDOC AS Отбор2 With (NOLOCK) ON Отбор2.PARENTVAL = 'O1' + $ВидДокумента36.ПриемЗаказов + Жур2.IDDOC
|		INNER JOIN _1SJOURN AS ЖурП2 With (NOLOCK) ON Отбор2.CHILDID = ЖурП2.IDDOC
|	WHERE
|	(($Док2.ДатаГотовности = '17530101')OR(($Док2.ДокументНакладная = $ПустойИД)AND($Док2.ДокументКонец = $ПустойИД)))
|	AND ((Жур2.CLOSED & 1) = 1)
|	AND (Отбор2.MDID = 0)
|	AND ((ЖурП2.IDDOCDEF = 'ПКО')OR(ЖурП2.IDDOCDEF = 'СтрокаВыпискиПриход'))) AS Parent
|ON (РКО.PARENTVAL = 'O1' + $ВидДокумента36.ПКО + Parent.IDDOC) OR (РКО.PARENTVAL = 'O1' + $ВидДокумента36.СтрокаВыпискиПриход + Parent.IDDOC)
|INNER JOIN _1SJOURN AS Жур3 ON РКО.IDDOC = Жур3.IDDOC
|WHERE Жур3.IDDOCDEF = 'РКО'
|)";

 



Пока запрос не проверял - только набросал - пора домой. Но может, кто что подкорректирует особенно после последнего юниона - не нравится мне этот громоздкий кусок..... Буду благодарен.
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2344
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #18 - 15. Сентября 2006 :: 05:25
Печать  
Чето смущает меня фраза
WHERE Жур3.IDDOCDEF = 'РКО'
не лучше ли
WHERE Жур3.IDDOCDEF = $ВидДокумента.<Нужный вид документа>
?
  
Наверх
IP записан
 
green
Junior Member
**
Отсутствует



Сообщений: 29
Местоположение: Астрахань
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #19 - 15. Сентября 2006 :: 09:17
Печать  
Ок. Это исправлю - мелочи.
  
Наверх
 
IP записан
 
green
Junior Member
**
Отсутствует



Сообщений: 29
Местоположение: Астрахань
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #20 - 18. Сентября 2006 :: 08:36
Печать  
В очередное продолжении темы - просветите пожалуйста, кто знает почему запрос вида:
Код
Выбрать все
|SELECT РКО2.CHILDID
|FROM _1SCRDOC AS РКО2 With (NOLOCK)
|INNER JOIN
|	(SELECT ЖурП6.IDDOC,
|		ЖурП6.IDDOCDEF Док_вид
|	FROM _1SJOURN AS Жур6 With (NOLOCK)
|		INNER JOIN $Документ.ПриемЗаказов AS Док6 With (NOLOCK) ON Жур6.IDDOC = Док6.IDDOC
|		INNER JOIN _1SCRDOC AS Отбор6 With (NOLOCK) ON Отбор6.PARENTVAL = 'O1' + $ВидДокумента36.ПриемЗаказов + Жур6.IDDOC
|		INNER JOIN _1SJOURN AS ЖурП6 With (NOLOCK) ON Отбор6.CHILDID = ЖурП6.IDDOC
|	WHERE
|	(($Док6.ДатаГотовности = '17530101')OR(($Док6.ДокументНакладная = $ПустойИД)AND($Док6.ДокументКонец = $ПустойИД)))
|	AND ((Жур6.CLOSED & 1) = 1)
|	AND (Отбор6.MDID = 0)
|	AND ((ЖурП6.IDDOCDEF = $ВидДокумента.СтрокаВыпискиПриход)or(ЖурП6.IDDOCDEF = $ВидДокумента.ПКО))) AS Parent With (NOLOCK)
|ON ((РКО2.PARENTVAL = 'O1' + $ВидДокумента36.СтрокаВыпискиПриход + Parent.IDDOC)or(РКО2.PARENTVAL = 'O1' + $ВидДокумента36.ПКО + Parent.IDDOC))
|INNER JOIN _1SJOURN AS Жур7 With (NOLOCK) ON РКО2.CHILDID = Жур7.IDDOC
|WHERE Жур7.IDDOCDEF = $ВидДокумента.РКО

 



работал 30 минут и я его отменил....
А если разделить на два запроса без or - отдельно по строке и второй по ПКО, то работают 3 и 10 сек соответсвенно - оч. интересно.....?
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2344
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #21 - 21. Сентября 2006 :: 19:09
Печать  
green писал(а) 18. Сентября 2006 :: 08:36:
В очередное продолжении темы - просветите пожалуйста, ..?

ниасилил...
  
Наверх
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #22 - 22. Сентября 2006 :: 06:00
Печать  
у меня подобное было, при этом росла таблица TempDB, из чего я для себя сделал выод что не оптимально составил запрос... после его "переосмысления" запрос стал отрабатывать нормально и быстро... как тут говорят, когда всеми условиями попал в индекс, все просто зашуршало...
и запрос был примерно похож на твой, у тебя проблема в джоинах и условиях, причем у тебя их куча еще и подзапросе... если найду как я сделал запрос по подчиненным одним запросом выложу, но у меня была такая же ситуация...
вобщем в 2-х словах: у тебя не оптимально составлен текст запроса...

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

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #23 - 22. Сентября 2006 :: 09:44
Печать  
а вот и обещанный пример
Код
Выбрать все
    ТекстЗапр="select
	|	ВыбСч.Клиент [Клиент $Справочник.Клиенты],
	|"+СоставитьСтрокуВыборкиСальдо(ДоковПлюс,ДоковМинус,"$Плюс","$Минус",1)+"
	|
	|from (select  distinct
	|		Журн.IDDOC Счет,
	|		$Cч.Клиент Клиент
	|
	|	from _1SJOURN as Журн (nolock)
	|	left outer join $Документ.Счет as Cч (nolock) on Журн.IDDOC=Cч.IDDOC
	|	left outer join $ДокументСтроки.Счет as ТчCч (nolock) on Журн.IDDOC=ТчCч.IDDOC
	|
	|	where
	|		Журн.IDDOCDEF in ($ВидДокумента.Счет, $ВидДокумента.СчетМТ)
	|			and Журн.CLOSED%2=1
	|			and $ДокументСтроки.Счет.ВидУчетаСтр<>:ТипУчТорг
	|			and Left(Журн.DATE_TIME_IDDOC,8)<=:ДатаОст"
	+СоствитьСтрокуИзВнешПарамIN(ВыбКлиенты,"$Cч.Клиент","ВыбКлиент",0,1) +"
	|	) as ВыбСч
	|
	|left outer join _1SCRDOC as ЖурналПодч (nolock) on
	|	substring(ЖурналПодч.PARENTVAL,7,9)=ВыбСч.Счет
	|left outer join _1SJOURN as Журнал (nolock) on
	|	Журнал.IDDOC=ЖурналПодч.CHILDID
	|"+СоствитьСтрокиСоединенийДоков(СписДоковПлюс,"Журнал.IDDOC","Плюс")+"
	|"+СоствитьСтрокиСоединенийДоков(СписДоковМинус,"Журнал.IDDOC","Минус")+"
	|
	|where "+СоствитьСтрокуИзВидовДоковIN(СписокВсехДоков,"Журнал.IDDOCDEF",1) +"
	|	and $ОбщийРеквизит.ВидУчета<>:ТипУчТорг
	|	and Журнал.CLOSED%2=1
	|	and left(Журнал.DATE_TIME_IDDOC,8)<=:ДатаОст
	|group by ВыбСч.Клиент
	|";
 

  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
green
Junior Member
**
Отсутствует



Сообщений: 29
Местоположение: Астрахань
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Проставить реквизит у подчинённых документов
Ответ #24 - 22. Сентября 2006 :: 13:35
Печать  
Спасибо - короче, понял, что надо самому рыть почему так произошло....
Просто очень удивило, что один запрос с OR работал 30 минут и до конца не отработал, а разделил на 2 и объеденил юнионом - всё "зашуршало" :о)))))
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать