Переключение на Главную Страницу Страницы: 1 ... 24 25 [26] 27 28 ... 51 ОтправитьПечать
Очень популярная тема (более 25 ответов) Класс "ПрямойЗапрос" - обсуждения. Часть № 2. (число прочтений - 258708 )
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #375 - 13. Июля 2012 :: 04:07
Печать  
Eprst писал(а) 12. Июля 2012 :: 15:04:
в синтаксисе не уверен, ибо этим классом не пользуюсь


Пасиб! Уже сам к тому же пришел)
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #376 - 13. Июля 2012 :: 10:41
Печать  
А не проще один запрос к журналу, с соединениями с табличками документов (журнал с документами) и условиям по виду документа, периоду, проведению... мне кажется эффективнее будет. Или сначала выбрать из журнала в ВТ потом с ней соединяться из документов. В общем обращение к физической таблице свести к минимуму.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #377 - 13. Июля 2012 :: 10:45
Печать  
Код
Выбрать все
ВЫБРАТЬ
	$ТекДок.ТекущийДокумент КАК [Док $Документ.ВозвратОтПокупателя],
	$ТекДокТЧ.Товар КАК [Товар $Справочник.Номенклатура],
	$Жур.Фирма КАК [Фирма $Справочник.Фирмы],
	$ТекДок.Контрагент КАК [Контрагент $Справочник.Контрагенты],
	$ТекДок.МестоХранения КАК [Склад $Справочник.МестаХранения]
ИЗ
	Документ.ВозвратОтПокупателя КАК ТекДок $nolock
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
	ЖурналДокументов КАК Жур $nolock
ПО
	$ТекДок.ТекущийДокумент = $Жур.ТекущийДокумент
И
	($Жур.ДатаДокумента МЕЖДУ :лДатаНач И :лДатаКон~) И ($Жур.Проведен = 1)
ЛЕВОЕ СОЕДИНЕНИЕ
	ДокументСтроки.ВозвратОтПокупателя КАК ТекДокТЧ $nolock
ПО
	$ТекДокТЧ.ТекущийДокумент = $ТекДок.ТекущийДокумент
ГДЕ
	(Фирма В (ВЫБРАТЬ val ИЗ #глУсловие1) И Контрагент В (ВЫБРАТЬ val ИЗ #глУсловие3)) 



Все Ок, но как только в условие добавляю Склад:
Код
Выбрать все
ГДЕ
	(Фирма В (ВЫБРАТЬ val ИЗ #глУсловие1) И Контрагент В (ВЫБРАТЬ val ИЗ #глУсловие3) И Склад В (ВЫБРАТЬ val ИЗ #глУсловие4)) 


ругается "no such column: Склад"
До этого точно так же бился с "Фирма". Изначально было
Код
Выбрать все
	$Жур.Фирма КАК [РУ $Справочник.Фирмы], 


Так вот, пока псевдоним не поменял на "Фирма", так же ругалось на отсутствие колонки при фильтрации.
Где засада?

И еще вопрос: при UNION ALL как избежать ругательства "SELECTs to the left and right of UNION ALL do not have the same number of result columns". Т.е. например есть документ "ВозвратОтПокупателя" и "Оприходование". В "Оприходовании" нет поля "Контрагент". Что и как подсунуть в описании запроса для "Оприходование" вместо "Контрагент"?
  
Наверх
ICQ  
IP записан
 
Dolly_EV
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 152
Местоположение: Чита
Зарегистрирован: 22. Октября 2009
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #378 - 13. Июля 2012 :: 10:47
Печать  
vandalsvq писал(а) 13. Июля 2012 :: 10:41:
А не проще один запрос к журналу,

С фильтрами победю, буду дальше в этом направлении копать ))
  
Наверх
ICQ  
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #379 - 13. Июля 2012 :: 11:22
Печать  
Чтобы работало условие отбора на Контрагент, Склад, сделай свой запрос вложенным. Т.е.

Код
Выбрать все
ВЫБРАТЬ Контрагент КАК [Контрагент $Справочник.Контрагенты], Склад КАК [Склад $Справочник.МестаХранения]
ИЗ (ВЫБРАТЬ $Жур.Контрагент КАК Контрагент, $Док.МестоХранения КАК Склад
ИЗ Журнал КАК Жур
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ТвойДокумент КАК Док ПО ТекущийДокумент = ТекущийДокумент) КАК ВложенныйЗапрос
ГДЕ Контрагент В (ВЫБРАТЬ val ИЗ #Контрагенты) И Склад В (ВЫБРАТЬ val ИЗ #Склады) 

  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #380 - 13. Июля 2012 :: 11:30
Печать  
vandalsvq писал(а) 13. Июля 2012 :: 10:41:
А не проще один запрос к журналу, с соединениями с табличками документов (журнал с документами) и условиям по виду документа, периоду, проведению... мне кажется эффективнее будет. Или сначала выбрать из журнала в ВТ потом с ней соединяться из документов. В общем обращение к физической таблице свести к минимуму.


через лефт джоин со всеми доками?
Будет медленнее чем юнион
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #381 - 13. Июля 2012 :: 11:33
Печать  
ОК, ну тогда выборку из журнала можно изначально в ВТ засунуть индексы нужные повесить (на поля соединений) и  тогда мне кажется эффективнее будет.
Опять таки в SQL и в SQLite одинаковые запросы могут с разной эффективностью отрабатывать.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #382 - 13. Июля 2012 :: 11:37
Печать  
всё равно медленнее
Улыбка

Юнион обгонит. Можешь в 1sqa проверить на 2 -х видах документов, выбрав Клиентоса например из них, за период.
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #383 - 13. Июля 2012 :: 12:12
Печать  
Неее... я имел в виду, в том же юнионе соединение делать не с таблицей журнала документов, а предварительно выбрать в ВТ все необходимое по нескольким видам, повесить индексы и соединяться уже с ВТ. Что то вроде того:

Код
Выбрать все
ВНУТРЬ #ВТ_Журнал
ВЫБРАТЬ ТекущийДокумент, Проведен ...
ИЗ ЖурналДокументов КАК Жур
ГДЕ ВидДокумента В (ОдинВид, ВторойВид, ТретийВид)
И Проведен = 1 И ДатаДокумента МЕЖДУ :Начало И : Конец

// создаем индекс по виду и документу

ВЫБРАТЬ ...
ИЗ Документ.ОдинВид КАК ОдинВид
ВНУТРЕННЕЕ СОЕДИНЕНИЕ #ВТ_Журнал КАК Жур
ПО Жур.ВидДокумента = :ОДинВид И ОдинВид.ТекущийДокумент = Жур.ТекущийДокумент
ОБЪЕДИНИТЬ ВСЕ
..... 

  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #384 - 13. Июля 2012 :: 12:23
Печать  
Это не принципиально, имхо
При "множественном" соединении с табличкой журнала в юнионе нужно смотреть план запроса, там будет "аналог" того что и ты предложил - т.е 1 проход по _1sjourn с фильтром.. Скуль же "умный"
Улыбка
  
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #385 - 13. Июля 2012 :: 18:03
Печать  
Скуль да, а вот скульлайт не знаю как поступит. Вполне возможно что так же умно Улыбка))), но если нет то получим "бяку". Улыбка)) Поэтому я предпочитаю делать более простые запросы чтобы при построении плана возможность ошибиться была меньше.
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #386 - 30. Июля 2012 :: 15:11
Печать  
Подскажите, пожалуйста, как мне проделать такую штуку:
1) есть виртуальная таблица "Ревизия" с полем "ШтрихКод".
2) есть справочник.Номенклатуры с реквизитами: "ШтрихКод1", "ШтрихКод2".

Вопрос: Как мне сделать ЛЕВОЕ СОЕДИНЕНИЕ этих таблиц, если возможна ситуация, когда (Ревизия.ШтрихКод = спрНоменклатура.ШтрихКод1) ИЛИ (Ревизия.ШтрихКод = спрНоменклатура.ШтрихКод2)?

т.е. нужно, чтоб если не найдено соответствие в правой таблице по Поле1, искалось соответствие в правой таблице по Поле2
  
Наверх
 
IP записан
 
Kalen
Full Member
***
Отсутствует


1C++ rocks!

Сообщений: 185
Зарегистрирован: 29. Марта 2010
Пол: Мужской
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #387 - 30. Июля 2012 :: 19:17
Печать  
artamir писал(а) 30. Июля 2012 :: 15:11:
Как мне сделать ЛЕВОЕ СОЕДИНЕНИЕ этих таблиц, если возможна ситуация, когда (Ревизия.ШтрихКод = спрНоменклатура.ШтрихКод1) ИЛИ (Ревизия.ШтрихКод = спрНоменклатура.ШтрихКод2)?

Так соединяй 2 раза. Сначала по ШК1, потом по ШК2. В итоге выбирай непустую номенклатуру
Код
Выбрать все
coalesce(Ном1.id,Ном2.id) 

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



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #388 - 31. Июля 2012 :: 05:16
Печать  
Не надо ничего 2 раза соединять, достаточно OR в условии присоединения и усё.
  
Наверх
 
IP записан
 
artamir
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 58
Зарегистрирован: 03. Мая 2011
Re: Класс "ПрямойЗапрос" - обсуждения. Часть № 2.
Ответ #389 - 31. Июля 2012 :: 06:54
Печать  
Eprst писал(а) 31. Июля 2012 :: 05:16:
Не надо ничего 2 раза соединять, достаточно OR в условии присоединения и усё.


Я правильно себе представляю?

Код
Выбрать все
|ВЫБРАТЬ *
|  ИЗ
|     #VT_Revizii КАК Ревизии
|ЛЕВОЕ СОЕДИНЕНИЕ
|   Справочник.Номенклатура КАК спрНом $nolock
|ПО
|   (Ревизии.ШтрихКод = спрНом.ШтрихКод1)
|   ИЛИ
|   (Ревизии.ШтрихКод = спрНом.ШтрихКод2)
 


  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 24 25 [26] 27 28 ... 51
ОтправитьПечать