![]() |
![]() |
![]() |
|
Помогите с запросом | ☑ | ||
---|---|---|---|---|
0
SuperMario
08.05.09
✎
11:00
|
ВЫБРАТЬ
ЗаказПоставщику.Ссылка, ЗаказПоставщику.ДатаПоступления, ЗаказПоставщику.ДатаОплаты, ПлатежноеПоручениеИсходящее.Ссылка КАК Ссылка1, ПлатежноеПоручениеИсходящее.Контрагент.Ссылка, ПлатежноеПоручениеИсходящее.Контрагент.ОсновнойБанковскийСчет.Ссылка, ПлатежноеПоручениеИсходящее.Контрагент.ИНН, ПлатежноеПоручениеИсходящее.СуммаДокумента, ПлатежноеПоручениеИсходящее.Комментарий, ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.СтатьяДвиженияДенежныхСредств, ПлатежноеПоручениеИсходящее.Подразделение.Ссылка ИЗ Документ.ПлатежноеПоручениеИсходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеИсходящееРасшифровкаПлатежа ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику ПО ПлатежноеПоручениеИсходящее.ДокументОснование.ДокументОснование.Ссылка = ЗаказПоставщику.Ссылка ПО ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка = ПлатежноеПоручениеИсходящее.Ссылка ГДЕ ЗаказПоставщику.Дата МЕЖДУ &Дата1 И &Дата2 вместо ПОЛНОЕ СОЕДИНЕНИЕ получается ВНУТРЕННЕЕ Т.е. не достает заказы постащику у котовых нет ПлатежноеПоручениеИсходящее Если построить запрос так: ВЫБРАТЬ ЗаказПоставщику.Ссылка, ЗаказПоставщику.ДатаПоступления, ЗаказПоставщику.ДатаОплаты, ПлатежноеПоручениеИсходящее.Ссылка КАК Ссылка1, ПлатежноеПоручениеИсходящее.Контрагент.Ссылка, ПлатежноеПоручениеИсходящее.Контрагент.ОсновнойБанковскийСчет.Ссылка, ПлатежноеПоручениеИсходящее.Контрагент.ИНН, ПлатежноеПоручениеИсходящее.СуммаДокумента, ПлатежноеПоручениеИсходящее.Комментарий, ПлатежноеПоручениеИсходящее.Подразделение.Ссылка ИЗ Документ.ПлатежноеПоручениеИсходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеИсходящееРасшифровкаПлатежа ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику ПО ПлатежноеПоручениеИсходящее.ДокументОснование.ДокументОснование.Ссылка = ЗаказПоставщику.Ссылка ГДЕ ЗаказПоставщику.Дата МЕЖДУ &Дата1 И &Дата2 то все работает, но нет данных по статье движения ДС (это таб. часть в платежке). |
|||
1
azernot
08.05.09
✎
11:07
|
Кури вот это условие
ПО ПлатежноеПоручениеИсходящее.ДокументОснование.ДокументОснование.Ссылка = ЗаказПоставщику.Ссылка И нахрена тебе полное соединение, если тебе в первую очередь нужны заказы? Юзай правое соединение. |
|||
2
Лирик
08.05.09
✎
11:14
|
ВЫБРАТЬ
ЗаказПоставщику.Ссылка, ЗаказПоставщику.ДатаПоступления, ЗаказПоставщику.ДатаОплаты, ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка КАК Ссылка1, ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка.Контрагент, ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка.Контрагент.ОсновнойБанковскийСчет, ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка.Контрагент.ИНН, ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка.СуммаДокумента, ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка.Комментарий, ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.СтатьяДвиженияДенежныхСредств, ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка.Подразделение ИЗ Документ.ПлатежноеПоручениеИсходящее.РасшифровкаПлатежа КАК ПлатежноеПоручениеИсходящееРасшифровкаПлатежа ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику КАК ЗаказПоставщику ПО ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка.ДокументОснование = ЗаказПоставщику.Ссылка ГДЕ ЗаказПоставщику.Дата МЕЖДУ &Дата1 И &Дата2 Таблица ПлатежноеПоручениеИсходящее лишняя, проверь условия соединения |
|||
3
SuperMario
08.05.09
✎
11:15
|
(1) изначально предполагалось, что нужно все доки у которых не проходит
ПлатежноеПоручениеИсходящее.ДокументОснование.ДокументОснование.Ссылка = ЗаказПоставщику.Ссылка + те, у кторых условие соблюдается (т.е ПОЛНОЕ). Потом переиграли задачу, но это не суть. |
|||
4
SuperMario
08.05.09
✎
11:21
|
azernot спасиб! Прокурил соединение, арбайтен.
Лирик спасиб за варинт. Моно и так, но привык через соединение. Кстать вопрос. Видел вариант как (2). Но сам пользую левое соединение шапки с табл. частью. Как правильнее? |
|||
5
Лирик
08.05.09
✎
11:44
|
Соединение на порядок медленнее (по крайней мере так учили)
|
|||
6
73
08.05.09
✎
11:49
|
(4)(5)
ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка.Контрагент - неявное соединение с шапкой. ПлатежноеПоручениеИсходящееРасшифровкаПлатежа.Ссылка.Контрагент.ИНН - еще одно со справочником Контрагентов. Чудес не бывает. Как же без соединений данные из других таблиц достать? Вариант без шапки (2) - лучше читается, запутаться сложнее. |
|||
7
hhhh
08.05.09
✎
11:52
|
(4) в варианте (2) не попадают документы с пустой табличной частью. Например, если нужно подсчитать количество строк в документах, тогда вариант с соединением
|
|||
8
Ненавижу 1С
гуру
08.05.09
✎
11:53
|
(5) через точку это тоже ЛЕВОЕ соединение
|
|||
9
Лирик
08.05.09
✎
12:04
|
ВЫБРАТЬ
РеализацияТоваровУслугТовары.НомерСтроки, РеализацияТоваровУслуг.Номер ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ПО (РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка) - Время выполнения 2.830 ВЫБРАТЬ РеализацияТоваровУслугТовары.НомерСтроки, РеализацияТоваровУслугТовары.Ссылка.Номер ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары - Время выполнения 0.18 Что я не правильно делаю? :) |
|||
10
73
08.05.09
✎
12:07
|
(9) Все правильно.
Тлько я думаю, что во втором случае все же не Левое а Внутреннее. |
|||
11
Ненавижу 1С
гуру
08.05.09
✎
12:08
|
(10) кстати возможно, тогда я прав в v8: ЛЕВОЕ и ВНУТРЕННЕЕ СОЕДИНЕНИЕ
|
|||
12
Aprobator
08.05.09
✎
12:11
|
(11) может быть. Надо тестить, а не гадать в таких случаях.
|
|||
13
Ненавижу 1С
гуру
08.05.09
✎
12:12
|
(9) версия какая SQL или файловая?
|
|||
14
Лирик
08.05.09
✎
12:12
|
Файловая
|
|||
15
73
08.05.09
✎
12:12
|
Сравнивать со вторым запросом из (9) корректнее такой запрос
ВЫБРАТЬ РеализацияТоваровУслугТовары.НомерСтроки, РеализацияТоваровУслуг.Номер ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ПРАВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары //ВНУТРЕННЕЕ ПО (РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка) |
|||
16
Ненавижу 1С
гуру
08.05.09
✎
12:15
|
(14) ну файловая неинтересно, там 1С сама распоряжается ))
|
|||
17
Лирик
08.05.09
✎
12:21
|
(16) Будет время попробую.
(15) Возможно. Кстати если твой запрос загнать в конструктор - последний сделает из него как в (9). |
|||
18
Ненавижу 1С
гуру
08.05.09
✎
12:23
|
(17) нет, там важно в какую сторону соединение
|
|||
19
73
08.05.09
✎
12:23
|
(17) Нет. Правое на Левое заменит, но! он таблицы местами поменяет.
|
|||
20
Лирик
08.05.09
✎
12:27
|
Я так понимаю, что соединять нужно большую таблицу с меньшей (для быстродействия)?
|
|||
21
IOL
08.05.09
✎
12:30
|
>вместо ПОЛНОЕ СОЕДИНЕНИЕ получается ВНУТРЕННЕЕ
может не в тему, но база под чем крутиться, просто под ПГ были какието ограничения, |
|||
22
73
08.05.09
✎
12:31
|
(20) Я думаю, соединять надо по поставленной задаче.
Первый запрос в (9) вернет все доки, даже с пустыми ТЧ. Второй - только с непустыми ТЧ. Поэтому они разные. |
|||
23
Ненавижу 1С
гуру
08.05.09
✎
12:34
|
Результаты:
ЛЕВОЕ = 0,010552 ВНУТРЕННЕЕ = 0,009402 через точку = 0,009148 данных маловато, тока начали работать в 8.1 Процедура КнопкаВыполнитьНажатие(Кнопка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслугТовары.НомерСтроки, | РеализацияТоваровУслуг.Номер |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг | ПО РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка |ГДЕ | РеализацияТоваровУслуг.Дата = &Дата"; Запрос.УстановитьПараметр("Дата",НачалоМесяца(ТекущаяДата())); РезультатЗапроса = Запрос.Выполнить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслугТовары.НомерСтроки, | РеализацияТоваровУслуг.Номер |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг | ПО РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка |ГДЕ | РеализацияТоваровУслуг.Дата = &Дата"; Запрос.УстановитьПараметр("Дата",НачалоМесяца(ТекущаяДата())); РезультатЗапроса = Запрос.Выполнить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслугТовары.НомерСтроки, | РеализацияТоваровУслугТовары.Ссылка.Номер |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары |ГДЕ | РеализацияТоваровУслугТовары.Ссылка.Дата = &Дата"; Запрос.УстановитьПараметр("Дата",НачалоМесяца(ТекущаяДата())); РезультатЗапроса = Запрос.Выполнить(); КонецПроцедуры |
|||
24
73
08.05.09
✎
13:04
|
Результаты (23) без ограничения по дате:
Тип Док1 - однократно: РезультатЗапросаТочка = Запрос.Выполнить(); 1 2,206696 35,46 РезультатЗапросаВнутр = Запрос.Выполнить(); 1 2,146396 34,49 РезультатЗапросаЛевое = Запрос.Выполнить(); 1 1,868299 30,02 Тип Док1 - 5-кратно: РезультатЗапросаТочка = Запрос.Выполнить(); 5 9,504820 33,62 РезультатЗапросаЛевое = Запрос.Выполнить(); 5 9,422038 33,33 РезультатЗапросаВнутр = Запрос.Выполнить(); 5 9,335256 33,03 Тип Док2 - однократно: РезультатЗапросаЛевое = Запрос.Выполнить(); 1 1,136862 33,58 РезультатЗапросаТочка = Запрос.Выполнить(); 1 1,124520 33,21 РезультатЗапросаВнутр = Запрос.Выполнить(); 1 1,121538 33,12 Тип Док2 - 5-кратно: РезультатЗапросаЛевое = Запрос.Выполнить(); 5 5,815986 33,95 РезультатЗапросаВнутр = Запрос.Выполнить(); 5 5,711888 33,34 РезультатЗапросаТочка = Запрос.Выполнить(); 5 5,601147 32,70 Данных достаточно. Так что примерно один хр. Зависит, как я думаю, от конкретных данных и SQL. |
|||
25
SuperMario
08.05.09
✎
13:09
|
(22) отличия есть, согласен.
Но 1С овцы,блин, отжигают. Например счет фактура выданный. Табл. часть по опренделению не будет пустая. Даже если накладные не списком, то запись в ТЧ будет. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |