Имя: Пароль:
1C
 
Что лучше: 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 оптимальный
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший