![]() |
![]() |
![]() |
|
Что лучше: 10 простых запросов или 1 большой....? | ☑ | ||
---|---|---|---|---|
0
nop
21.10.08
✎
17:47
|
...или 1 большой, с ОБЪЕДИНИТЬ и(или) СГРУППИРОВАТЬ и(или) ХХХ СОЕДИНЕНИЕ ?
|
|||
1
Krom
21.10.08
✎
17:54
|
(0), думаю, универсального рецепта нет
|
|||
2
sam_sam
21.10.08
✎
17:56
|
1 большой. По крайней мере 1С так рекомендует, выбирать данные из базы данных 1Раз. Объеденить работает быстрее, чем Соединение. Сгруппировать - это тут вобще причем?
|
|||
3
nop
21.10.08
✎
17:56
|
(1) я тоже, способ с 10 маленькими мне удобнее, потому использую его везде в документах. Но мучают сомнения ...
|
|||
4
nop
21.10.08
✎
17:57
|
(2) спс
|
|||
5
H A D G E H O G s
21.10.08
✎
17:57
|
(2) Как можно сравнивать Объединение и Соединение?
(0) Глупости спрашиваете, уважаемый. |
|||
6
Fragster
гуру
21.10.08
✎
17:58
|
ИМХО 2 запроса будут работать дольше, чем один с Объединить... как и соединение... нужно просто при использовании этих конструкций учитывать, сколько данных и сколько раз сервер будет лопатить...
|
|||
7
Stepa86
21.10.08
✎
17:59
|
можно еще пакетный запрос юзать - за одно обращение к базе можно несколько мелких запросов сделать...
|
|||
8
Serg_1960
21.10.08
✎
17:59
|
Лучше один большой... и без ошибок :)
|
|||
9
nop
21.10.08
✎
18:01
|
(7) Как пакетный использовать?
|
|||
10
Stepa86
21.10.08
✎
18:06
|
Работа с пакетными запросами
Платформа 1С:Предприятие 8.1 позволяет работать с пакетами запросов. В пакетном запросе тексты запросов разделяются символом «;». Запросы исполняются последовательно, при этом временные таблицы, которые были созданы во время исполнения какого-либо запроса будут существовать до окончания исполнения всего пакета запроса или до исполнения в пакете запроса, уничтожающего данную временную таблицу. Например: Запрос = Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | УчетНоменклатурыОстаткиИОбороты.Номенклатура, | УчетНоменклатурыОстаткиИОбороты.КоличествоПриход, | УчетНоменклатурыОстаткиИОбороты.КоличествоРасход, | УчетНоменклатурыОстаткиИОбороты.КоличествоКонечныйОстаток |ПОМЕСТИТЬ УчетНоменклатуры |ИЗ | РегистрНакопления.УчетНоменклатуры.ОстаткиИОбороты(, , Авто, , ) КАК УчетНоменклатурыОстаткиИОбороты |; | |ВЫБРАТЬ | УчетНоменклатуры.Номенклатура, | УчетНоменклатуры.КоличествоРасход, | УчетНоменклатуры.КоличествоКонечныйОстаток |ИЗ | УчетНоменклатуры КАК УчетНоменклатуры |; Результат=Запрос.Выполнить(); Первый запрос создает временную таблицу, данные из которой используются во втором запросе. Если объекту Запрос, исполняющему пакетный запрос, установлен менеджер временных таблиц, временные таблицы, которые не были уничтожены в рамках пакетного запроса, сохранятся в установленном менеджере. В тексте пакетного запроса возможно использование и уничтожение временных таблиц, которые существовали в установленном менеджере временных таблиц на момент запуска пакета на исполнение. Метод ВыполнитьПакет() Кроме метода Выполнить(), последовательно выполняющего все запросы пакета и возвращающего результат последнего запроса в пакете, платформа 1С:Предприятие 8 предоставляет еще один метод – ВыполнитьПакет(). Этот метод последовательно выполняет все запросы и возвращает массив результатов для каждого запроса из пакета в последовательности расположения запросов в тексте пакета. Результатом выполнения запроса на уничтожение временной таблицы является значение Неопределено, которое также помещается в массив результатов. (с) V8AddDoc81.htm |
|||
11
Stepa86
21.10.08
✎
18:07
|
+ (10) появились в 11ом релизе
|
|||
12
Мелкий бес
21.10.08
✎
18:10
|
(10) пакетный запрос шире будет
см. ВыполнитьПакет() |
|||
13
Stepa86
21.10.08
✎
18:12
|
(12) м? что то не так???
|
|||
14
nop
21.10.08
✎
18:14
|
(11) Ясно, спасибо. Пока остановлюсь на 10 маленьких запросах, т.к. переделка под Пакеты займет не меньше времени чем под 1 большой запрос
|
|||
15
Живой Ископаемый
21.10.08
✎
18:18
|
(14) А Почему? Давай вместе попробуем? У меня вот как раз в консоли два запроса, которые я думал объединить, а теперь попробую пакетно выполнить.. в чем по-твоему может быть трудность?
|
|||
16
nop
21.10.08
✎
18:22
|
(15) Оригинальный запрос
|ВЫБРАТЬ | СУММА(ЗарплатаКВыплате.Сумма) КАК СуммаВыплачено |ИЗ | Документ.РасходныйКассовыйОрдер.ВыплатаЗаработнойПлаты КАК РасходныйКассовыйОрдерВыплатаЗаработнойПлаты | | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплате | ПО РасходныйКассовыйОрдерВыплатаЗаработнойПлаты.Ведомость = ЗарплатаКВыплате.Ссылка | И РасходныйКассовыйОрдерВыплатаЗаработнойПлаты.СчетУчета = ЗарплатаКВыплате.СчетУчета | | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОВыплатахРаботникамОрганизацийПоПлатежнымВедомостям КАК РанееВыплаченныеСуммы | ПО РасходныйКассовыйОрдерВыплатаЗаработнойПлаты.Ведомость = РанееВыплаченныеСуммы.Ведомость | И ЗарплатаКВыплате.Физлицо = РанееВыплаченныеСуммы.Физлицо | И ЗарплатаКВыплате.СчетУчета = РанееВыплаченныеСуммы.СчетУчета | И РанееВыплаченныеСуммы.Регистратор <> &Ссылка |ГДЕ | РасходныйКассовыйОрдерВыплатаЗаработнойПлаты.Ссылка = &Ссылка | И ЗарплатаКВыплате.ВыплаченностьЗарплаты = &Выплачено | И РанееВыплаченныеСуммы.Физлицо ЕСТЬ NULL |"; |
|||
17
Живой Ископаемый
21.10.08
✎
18:22
|
а
|
|||
18
SnarkHunter
21.10.08
✎
18:24
|
Лучше сорок раз по разу, чем за раз по сорок раз...
|
|||
19
Stepa86
21.10.08
✎
18:27
|
(15) могут быть трудности в том, что консоли (на сколько я знаю) не приспособлены еще работать с пакетами... =)
|
|||
20
Живой Ископаемый
21.10.08
✎
18:29
|
(19) Я имел в виду, что как раз составные части в консоли у меня уже отлажены, Но имеют разный набор полей, и теперь их нужно объединить.. А так - можно выполнить пакетно в коде, и получить массив результатов не объединяя и отлаживая объединенный запрос - верно?
|
|||
21
Stepa86
21.10.08
✎
18:34
|
(20) кроме выполнения нескольких различных несвязанных запросов одновременно мне нравится пакетно работать с временными таблицами - одним запросом закинул данные, поработал с ними, получил результат и удалил все временные таблицы...
|
|||
22
nop
21.10.08
✎
18:36
|
(16) + Переделанный запрос под выполнение в цикле
Запрос.Текст = " |ВЫБРАТЬ | СУММА(ЗарплатаКВыплате.Сумма%%Постфикс%%) КАК СуммаВыплачено |ИЗ | Документ.РасходныйКассовыйОрдер.ВыплатаЗаработнойПлаты КАК РасходныйКассовыйОрдерВыплатаЗаработнойПлаты | | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК ЗарплатаКВыплате | ПО РасходныйКассовыйОрдерВыплатаЗаработнойПлаты.Ведомость = ЗарплатаКВыплате.Ссылка | И РасходныйКассовыйОрдерВыплатаЗаработнойПлаты.СчетУчета%%Постфикс%% = ЗарплатаКВыплате.СчетУчета%%Постфикс%% | | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОВыплатахРаботникамОрганизацийПоПлатежнымВедомостям КАК РанееВыплаченныеСуммы | ПО РасходныйКассовыйОрдерВыплатаЗаработнойПлаты.Ведомость = РанееВыплаченныеСуммы.Ведомость | И ЗарплатаКВыплате.Физлицо = РанееВыплаченныеСуммы.Физлицо | И ЗарплатаКВыплате.СчетУчета%%Постфикс%% = РанееВыплаченныеСуммы.СчетУчета | И РанееВыплаченныеСуммы.Регистратор <> &Ссылка | И РанееВыплаченныеСуммы.ВидУчета = ЗарплатаКВыплате.ВидУчета |ГДЕ | РасходныйКассовыйОрдерВыплатаЗаработнойПлаты.Ссылка = &Ссылка | И ЗарплатаКВыплате.ВыплаченностьЗарплаты = &Выплачено | И РанееВыплаченныеСуммы.ВидУчета В (&ВидУчета) | И РанееВыплаченныеСуммы.Физлицо ЕСТЬ NULL |"; Запрос.Текст = ОбработатьШаблонЗапроса(Запрос.Текст, ПолучитьСвойстваВидаУчета(ву.ВидУчета)); |
|||
23
nop
21.10.08
✎
18:37
|
(22) вот функцию ОбработатьШаблонЗапроса() превратить данный (например) запрос в сложный запрос я ещё не научил ... ибо сам офигеваю
|
|||
24
AmoreMe
21.10.08
✎
18:38
|
(19)Уже на июльском ИТС консоль может работать с пакетами...
|
|||
25
Stepa86
21.10.08
✎
18:42
|
(24) кто ж так часто ИТСники смотрит =)
|
|||
26
nop
21.10.08
✎
18:43
|
(25) я вообще его не юзаю - денег заплатить не было, а он мне токо 2 раза понадобился всего
|
|||
27
AmoreMe
21.10.08
✎
18:47
|
Давайте мэйл скину сейчас...
|
|||
28
YauheniL
21.10.08
✎
18:53
|
(0) лучше 1 оптимальный
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |