Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Cвой журнал с множественным отбором.... (число прочтений - 8136 )
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Cвой журнал с множественным отбором....
28. Июля 2008 :: 05:42
Печать  
Стандартная нестандартная задача Улыбка
Журнал с 6 видами доков, возможным отбором по 4 реквизитам в разном сочетании.
Табличное поле и все дела. Работает. Но меееееееедленно
Пробовал и класс РасшЖурнал использовать - тоже самое.
Попробовал с вьюхами - из-за того, что на них в "стандарте" не повесишь индексы - тоже медлнно.
Пните в нужном направлении, плз...
Текст запроса обычный - к 1сжурнал с отбором по видам, и джойны к шапкам соответсующих доков.
  
Наверх
ICQ  
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Cвой журнал с множественным отбором....
Ответ #1 - 28. Июля 2008 :: 08:51
Печать  
Умные дядьки, скажите хоть что-нибудь....
  
Наверх
ICQ  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Cвой журнал с множественным отбором....
Ответ #2 - 28. Июля 2008 :: 09:06
Печать  
Даже на анекдот не тянет.
Как думаешь о чем тебя тут спросят? А может быть не спросят?
  
Наверх
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Cвой журнал с множественным отбором....
Ответ #3 - 28. Июля 2008 :: 09:16
Печать  
trdm писал(а) 28. Июля 2008 :: 09:06:
Даже на анекдот не тянет.
Как думаешь о чем тебя тут спросят? А может быть не спросят?

Ну что, запрос привести? дык в нем "ничего военного"©.
План запроса курю-курю, курю-курю - "не  вставляет".
Готов ответить на все вопросы....
  
Наверх
ICQ  
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Cвой журнал с множественным отбором....
Ответ #4 - 28. Июля 2008 :: 09:48
Печать  
ну собственно - приводи все что сказал:
Цитата:
запрос привести

Цитата:
План запроса
  
Наверх
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Cвой журнал с множественным отбором....
Ответ #5 - 28. Июля 2008 :: 09:57
Печать  
Код
Выбрать все
SELECT
  Жур.row_id as row_id,
  Жур.Date_Time_IDDoc as Позиция,

  CASE
  WHEN Жур.IsMark = 1 THEN 6
  WHEN Жур.Closed & 1 = 1 THEN 1
  ELSE 0 END as Картинка,

  Жур.IDDoc as [Документ $Документ],
  Жур.IDDocDef as Документ_вид,

CASE
WHEN Жур.IDDOCDEF = $ВидДокумента.БюджетДоставки THEN 'БюджетДоставки'
WHEN Жур.IDDOCDEF = $ВидДокумента.ВозвратОтПокупателя THEN 'Возврат от покупателя'
WHEN Жур.IDDOCDEF = $ВидДокумента.ВозвратПоставщику THEN 'Возврат поставщику'
WHEN Жур.IDDOCDEF = $ВидДокумента.Доверенность THEN 'Доверенность'
WHEN Жур.IDDOCDEF = $ВидДокумента.ЗаказПоставщику THEN 'Заказ поставщику'
WHEN Жур.IDDOCDEF = $ВидДокумента.ЗаявкаПокупателя THEN 'Заявка покупателя'
WHEN Жур.IDDOCDEF = $ВидДокумента.ИнвентаризацияТМЦ THEN 'Инвентаризация ТМЦ'
WHEN Жур.IDDOCDEF = $ВидДокумента.ОприходованиеТМЦ THEN 'Оприходование ТМЦ'
WHEN Жур.IDDOCDEF = $ВидДокумента.Остатки THEN 'Остатки'
WHEN Жур.IDDOCDEF = $ВидДокумента.ПеремещениеТМЦ THEN 'Перемещение ТМЦ'
WHEN Жур.IDDOCDEF = $ВидДокумента.ПоступлениеПрочее THEN 'Поступление (услуги и пр.)'
WHEN Жур.IDDOCDEF = $ВидДокумента.ПоступлениеТМЦ THEN 'Поступление ТМЦ'
WHEN Жур.IDDOCDEF = $ВидДокумента.ПКО THEN 'Приходный кассовый ордер'
WHEN Жур.IDDOCDEF = $ВидДокумента.РКО THEN 'Расходный кассовый ордер'
WHEN Жур.IDDOCDEF = $ВидДокумента.Реализация THEN 'Реализация '
WHEN Жур.IDDOCDEF = $ВидДокумента.РеализацияПрочее THEN 'Реализация (ОС, НМА и пр.)'
WHEN Жур.IDDOCDEF = $ВидДокумента.СнятиеОстаткаЗаказа THEN 'Снятие остатка заказа'
WHEN Жур.IDDOCDEF = $ВидДокумента.СписаниеТМЦ THEN 'Списание ТМЦ'
WHEN Жур.IDDOCDEF = $ВидДокумента.Сторно THEN 'Сторнирование документа - основания'
WHEN Жур.IDDOCDEF = $ВидДокумента.СчетФактураВыданный THEN 'Счет-фактура выданный'
WHEN Жур.IDDOCDEF = $ВидДокумента.СчетФактураПолученный THEN 'Счет-фактура полученный'  
END as ВидДокумента,
CAST(LEFT(Жур.DATE_TIME_IDDOC, 8) as DATETIME) as ДатаДок,
Жур.DOCNO as НомерДок,
СпрКонтрагент.Descr as Контрагент,
СпрДоговор.Descr as Договор,
СпрСклад.Descr as Склад,
нный.Сумма,$ДокСчетФактураПолученный.Сумма) as [Сумма],
СпрАвтор.Descr as Автор,
СпрПроект.Descr as Проект,
СпрФирма.Descr as Фирма,
СпрЮрЛицо.Descr as ЮрЛицо,
Жур.$ОбщийРеквизит.ПравилоМиграции as [ПравилоМиграции],
Жур.$ОбщийРеквизит.ХроноПозиция as [ХроноПозиция],
Жур.$ОбщийРеквизит.СтатусДокумента as [СтатусДокумента $Перечисление.СтатусыДокументовОтгрузки]

FROM
	_1SJourn as Жур (NOLOCK)	    

LEFT JOIN $Документ.БюджетДоставки as ДокБюджетДоставки ON
    Жур.IDDoc = ДокБюджетДоставки.IDDoc	    

LEFT JOIN $Документ.ВозвратОтПокупателя as ДокВозвратОтПокупателя ON
    Жур.IDDoc = ДокВозвратОтПокупателя.IDDoc	    

LEFT JOIN $Документ.ВозвратПоставщику as ДокВозвратПоставщику ON
    Жур.IDDoc = ДокВозвратПоставщику.IDDoc	    

LEFT JOIN $Документ.Доверенность as ДокДоверенность ON
    Жур.IDDoc = ДокДоверенность.IDDoc	    

LEFT JOIN $Документ.ЗаказПоставщику as ДокЗаказПоставщику ON
    Жур.IDDoc = ДокЗаказПоставщику.IDDoc	    

LEFT JOIN $Документ.ЗаявкаПокупателя as ДокЗаявкаПокупателя ON
    Жур.IDDoc = ДокЗаявкаПокупателя.IDDoc	    

LEFT JOIN $Документ.ИнвентаризацияТМЦ as ДокИнвентаризацияТМЦ ON
    Жур.IDDoc = ДокИнвентаризацияТМЦ.IDDoc	    

LEFT JOIN $Документ.ОприходованиеТМЦ as ДокОприходованиеТМЦ ON
    Жур.IDDoc = ДокОприходованиеТМЦ.IDDoc	    

LEFT JOIN $Документ.Остатки as ДокОстатки ON
    Жур.IDDoc = ДокОстатки.IDDoc	    

LEFT JOIN $Документ.ПеремещениеТМЦ as ДокПеремещениеТМЦ ON
    Жур.IDDoc = ДокПеремещениеТМЦ.IDDoc	    

LEFT JOIN $Документ.ПоступлениеПрочее as ДокПоступлениеПрочее ON
    Жур.IDDoc = ДокПоступлениеПрочее.IDDoc	    

LEFT JOIN $Документ.ПоступлениеТМЦ as ДокПоступлениеТМЦ ON
    Жур.IDDoc = ДокПоступлениеТМЦ.IDDoc	    

LEFT JOIN $Документ.ПКО as ДокПКО ON
    Жур.IDDoc = ДокПКО.IDDoc	    

LEFT JOIN $Документ.РКО as ДокРКО ON
    Жур.IDDoc = ДокРКО.IDDoc	    

LEFT JOIN $Документ.Реализация as ДокРеализация ON
    Жур.IDDoc = ДокРеализация.IDDoc	    

LEFT JOIN $Документ.РеализацияПрочее as ДокРеализацияПрочее ON
    Жур.IDDoc = ДокРеализацияПрочее.IDDoc	    

LEFT JOIN $Документ.СнятиеОстаткаЗаказа as ДокСнятиеОстаткаЗаказа ON
    Жур.IDDoc = ДокСнятиеОстаткаЗаказа.IDDoc	    

LEFT JOIN $Документ.СписаниеТМЦ as ДокСписаниеТМЦ ON
    Жур.IDDoc = ДокСписаниеТМЦ.IDDoc	    

LEFT JOIN $Документ.Сторно as ДокСторно ON
    Жур.IDDoc = ДокСторно.IDDoc	    

LEFT JOIN $Документ.СчетФактураВыданный as ДокСчетФактураВыданный ON
    Жур.IDDoc = ДокСчетФактураВыданный.IDDoc	    

LEFT JOIN $Документ.СчетФактураПолученный as ДокСчетФактураПолученный ON
    Жур.IDDoc = ДокСчетФактураПолученный.IDDoc

 

  
Наверх
ICQ  
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Cвой журнал с множественным отбором....
Ответ #6 - 28. Июля 2008 :: 09:58
Печать  
Код
Выбрать все
LEFT JOIN $Справочник.Контрагенты as СпрКонтрагент
ON СпрКонтрагент.ID = т)

LEFT JOIN $Справочник.Договоры as СпрДоговор
ON СпрДоговор.ID = говор,$ДокСчетФактураВыданный.Договор,$ДокСчетФактураПолученный.Договор)

LEFT JOIN $Справочник.Склады as СпрСклад
ON СпрСклад.ID = клад)

LEFT JOIN $Справочник.Пользователи as СпрАвтор
ON СпрАвтор.ID = Жур.$ОбщийРеквизит.Автор

LEFT JOIN $Справочник.Проекты as СпрПроект
ON СпрПроект.ID = Жур.$ОбщийРеквизит.Проект

LEFT JOIN $Справочник.Фирмы as СпрФирма
ON СпрФирма.ID = Жур.$ОбщийРеквизит.Фирма

LEFT JOIN $Справочник.СвоиЮрЛица as СпрЮрЛицо
ON СпрЮрЛицо.ID = Жур.$ОбщийРеквизит.ЮрЛицо
INNER JOIN
  _1SCRDOC as ОтборКонтрагент ON ОтборКонтрагент.ChildID = Жур.IDDoc AND
			  ОтборКонтрагент.MDID = $ГрафаОтбора.Контрагент AND
			  ОтборКонтрагент.ParentVal = :Контрагент* AND
			  ОтборКонтрагент.Child_Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
WHERE
   Жур.IDDocDef IN анный,$ВидДокумента.СчетФактураПолученный) AND
(Жур.DATE_TIME_IDDOC BETWEEN :НачДата AND :КонДата~)
 

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


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Cвой журнал с множественным отбором....
Ответ #7 - 28. Июля 2008 :: 10:20
Печать  
Дык это... Какой же ты скорости хочешь от такого запроса?
Как минимум, сделай отдельную таблицы, из которой запрос у тебя будет брать данные во избежания этой кучи связываний и страшных Case-ов и Coalesce.
И еще покажи как ключ порядка назначаешь.
  
Наверх
 
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Cвой журнал с множественным отбором....
Ответ #8 - 28. Июля 2008 :: 10:30
Печать  
sadovnikov писал(а) 28. Июля 2008 :: 10:20:
Дык это... Какой же ты скорости хочешь от такого запроса?
Как минимум, сделай отдельную таблицы, из которой запрос у тебя будет брать данные во избежания этой кучи связываний и страшных Case-ов и Coalesce.
И еще покажи как ключ порядка назначаешь.

А в отдельную таблицу тоже довольно долго выбирается.
Ведь при обновлении туда надо будет перечитывать данные из журнала.
И что посоветуешь во временную  таблицу - журнал с выборкой по видам доков, а потом уже связывать с шапками? или связывать уже при отборе во временную таблицу?
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Cвой журнал с множественным отбором....
Ответ #9 - 28. Июля 2008 :: 12:37
Печать  
УстКлючПорядка("MDID,PARENTVAL,CHILD_DATE_TIME_IDDOC");

?
  
Наверх
 
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Cвой журнал с множественным отбором....
Ответ #10 - 28. Июля 2008 :: 12:41
Печать  
kiruha писал(а) 28. Июля 2008 :: 12:37:
УстКлючПорядка("MDID,PARENTVAL,CHILD_DATE_TIME_IDDOC");

?

Не совсем понял. Это в случае установленных отборов? А если отбора еще нет?
  
Наверх
ICQ  
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Cвой журнал с множественным отбором....
Ответ #11 - 28. Июля 2008 :: 13:10
Печать  
Mikeware писал(а) 28. Июля 2008 :: 12:41:
kiruha писал(а) 28. Июля 2008 :: 12:37:
УстКлючПорядка("MDID,PARENTVAL,CHILD_DATE_TIME_IDDOC");

?

Не совсем понял. Это в случае установленных отборов? А если отбора еще нет?


И FROM сделать из _1SCRDOC. В случае отбора по контрагенту.

Поставщик должен иметь возможность в случае когда табл поле запрашивает 10 строк обратится
к индексу и взять там 10 строк - а не перелопачивать всю таблицу.

Короче попробуй.

Без отборов стандартно индекс ACDATETIME, но лучше JOURNAL если доки в одном журнале
  
Наверх
 
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Cвой журнал с множественным отбором....
Ответ #12 - 28. Июля 2008 :: 14:00
Печать  
kiruha писал(а) 28. Июля 2008 :: 13:10:
И FROM сделать из _1SCRDOC. В случае отбора по контрагенту.

Поставщик должен иметь возможность в случае когда табл поле запрашивает 10 строк обратится
к индексу и взять там 10 строк - а не перелопачивать всю таблицу.

Короче попробуй.

Без отборов стандартно индекс ACDATETIME, но лучше JOURNAL если доки в одном журнале

Отбор я, естественно, делаю по графе отбора. А если тборов еще нет?
Доки принадлежат разным  общим журналам, но включены в один дополнительный. Пробовал отбор по _1SCRDOC по иду этого журнала - по _1sjourn получается быстрее
  
Наверх
ICQ  
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: Cвой журнал с множественным отбором....
Ответ #13 - 29. Июля 2008 :: 04:46
Печать  
Mikeware писал(а) 28. Июля 2008 :: 10:30:
А в отдельную таблицу тоже довольно долго выбирается.
Ведь при обновлении туда надо будет перечитывать данные из журнала.
И что посоветуешь во временную  таблицу - журнал с выборкой по видам доков, а потом уже связывать с шапками? или связывать уже при отборе во временную таблицу?


Я имел ввиду, что надо завсти свою таблицу (не временную). И триггерами писать в нее необходимые для журнала данные. Типа общих реквизитов.
  
Наверх
 
IP записан
 
Mikeware
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 262
Зарегистрирован: 27. Июля 2006
Пол: Мужской
Re: Cвой журнал с множественным отбором....
Ответ #14 - 29. Июля 2008 :: 05:08
Печать  
sadovnikov писал(а) 29. Июля 2008 :: 04:46:
Я имел ввиду, что надо завсти свою таблицу (не временную). И триггерами писать в нее необходимые для журнала данные. Типа общих реквизитов.

вариант.  Правда, имхо, избыточный... Плодим новые сущности.
И тем не менее, доп журнал 1С работает-то весьма быстро. Правда, в нем отборов нет. Я его попытался попрофилировать - создает курсор по _1SCRDOC, но так и не отловил, как он связывает с реквизитами и графами
Хочу такой же, только с отборами Улыбка
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать