|
Запрос в цикле (или цикл в запросе)? | ☑ | ||
---|---|---|---|---|
0
Мисти
15.10.13
✎
16:36
|
Как решить, как быстрее будет работать обработка табличной части - расчет (с несколькими запросами по доп. реквизитам и т.д.) по каждой строчке отдельно, или все нужные (а, возможно, и лишние) данные посчитать сразу для всей табличной части, а потом из результата запроса вытягивать нужное?
|
|||
1
eklmn
гуру
15.10.13
✎
16:38
|
1 запрос и все
|
|||
2
DexterMorgan
15.10.13
✎
16:39
|
что такое цикл в запросе?
|
|||
3
vicof
15.10.13
✎
16:40
|
(0) Известная велосипедистка Мисти не сдавала экзамен на специалиста по платформе.
|
|||
4
exwill
15.10.13
✎
16:40
|
(2) Это - запрос в цикле наоборот.
|
|||
5
Мисти
15.10.13
✎
16:41
|
(3) не-а, не сдавала. И не сдам никогда! У меня склероз, до сих пор всё ищу в словарике "7-8"
|
|||
6
vicof
15.10.13
✎
16:42
|
(5) Пейте таблеточки
|
|||
7
Мисти
15.10.13
✎
16:42
|
(2) Я пояснила, что я имею в виду.
Просто часть данных заведомо не понадобиться. Не, ну теоретически - возможно все-все условия указать в запросе и не искать лишнего, но так я не умею. |
|||
8
Зойч
15.10.13
✎
16:43
|
Какая то слабенькая попытка потроллить. До Светы тебе ой как далеко
|
|||
9
Enders
15.10.13
✎
16:45
|
А потом: "1С тормозит, на костёр 1С" =)))
|
|||
10
Мисти
15.10.13
✎
16:45
|
(9) и без меня тормозит.
|
|||
11
Мисти
15.10.13
✎
16:54
|
Ну так что, всё в одном запросе? А 1с разве не рассчитвает по строкам?
|
|||
12
Dmitry1c
15.10.13
✎
16:55
|
(11) делай рекурсивный запрос в цикле
|
|||
13
kiruha
15.10.13
✎
16:55
|
(0)
Самое медленное - запрос Он должен быть один. Не должны по возможности извлекаться лишние данные И потом не должно быть в постобработке обращений через точку. Пост обработка это доли сек если нет супер пупер партионного учета |
|||
14
Chai Nic
15.10.13
✎
16:56
|
Запрос в цикле - это хорошо. Особенно если при этом выводить прогресс-бар с процентиками. Это бухгалтера любят, это настраивает на позитив.. можно спокойно попить кофе.
|
|||
15
Infsams654
15.10.13
✎
17:03
|
(11) это вопрос к Defender-у. Удивляюсь, зачем запрос, ежели в объекте ТЧ уже есть. Если чего-то не хватает, доставай обычными методами объекта (который уже есть). Ну уж, если нет, то как хочешь
|
|||
16
kiruha
15.10.13
✎
17:05
|
(13)+
Не , ну если очень постараться можно завесить и постобработку результата запроса - например в цикле создавать ТЗ по 10 000 элементов |
|||
17
azernot
15.10.13
✎
17:09
|
Лучше выполнить одни большой запрос, потом проверить данные подзапросами в цикле, и плюс убедиться в корректности обращением через точку к объектам. Для надёжности и в целях подстраховки.
|
|||
18
User_Agronom
15.10.13
✎
17:12
|
А передать табличную часть в запрос как параметр?
И тогда будет один запрос. Или я что-то неправильно понял? |
|||
19
Мисти
15.10.13
✎
17:13
|
Хватит издеваться!
А вот серьезно, неужели "для каждого стр из Объект.Товары" - существенно медленнее, чем если это выгрузить в таблицу? |
|||
20
Dmitry1c
15.10.13
✎
17:15
|
(19) один раз открыть дверь или сто раз открыть дверь?
|
|||
21
Мисти
15.10.13
✎
17:15
|
Предположим, по списку номенклатуры нужно искать доп. реквизиты, но в зависимости от разных условий (в частности, от остатка на складе, который в другом запросе, в один я их точно не объединю) нужно искать разные доп. реквизиты. Можно сразу найти все и потом из таблицы вытаскивать нужные, или в в цикле по каждой строчке - но зато искать только нужное, где-то доп. реквизиты и вовсе не нужны.
|
|||
22
azernot
15.10.13
✎
17:17
|
(21) Доп реквизиты - это одна таблица. Если всё так сложно, получай все, а потом по необходимости используй нужные.
|
|||
23
kiruha
15.10.13
✎
17:18
|
(21)
>>в один я их точно не объединю Выгружаешь результат во временную (Поместить) Дальше с ней работаешь Все в один запрос сувать не надо |
|||
24
Мисти
15.10.13
✎
17:21
|
А несколько запросов отдельно, или в пакете - принципиально на скорость влияют?
|
|||
25
azernot
15.10.13
✎
17:22
|
(24) В пакете - в смысле пактным запросом? Конечно принципиально. Пакетный обычно быстрее.
|
|||
26
kiruha
15.10.13
✎
17:28
|
Если про поместить - я большой разницы не заметил
|
|||
27
kiruha
15.10.13
✎
17:29
|
Менеджер временных должен быть один
|
|||
28
hhhh
15.10.13
✎
17:33
|
(24) там время всех запросов приблизительно одинаково у вас. Поэтому 100 запросов по 100 строкам табчасти будет выполняться ровно в 100 раз больше, чем один запрос по 100 строкам.
|
|||
29
azernot
15.10.13
✎
17:41
|
(23) Не думаю, что если не хватает знаний для простого объединения запросов по остаткам и доп.реквизитам номенклатуры, хватит знаний для объединения данных об остатках номенклатуры помещённых во временную таблицу с данными о доп. реквизитах в одном менеджере временных таблиц запроса..
|
|||
30
zladenuw
15.10.13
✎
17:49
|
(29) та да
|
|||
31
Мисти
15.10.13
✎
18:03
|
У меня будет 2 запроса, а в циклке по строкам я разберусь, что откуда брать.
|
|||
32
Мисти
15.10.13
✎
18:06
|
Ну а простой вопрос:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Свойство, | НоменклатураДополнительныеРеквизиты.Значение, | НоменклатураДополнительныеРеквизиты.Ссылка |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Ссылка В(&МассивНомен)"; Запрос.УстановитьПараметр("МассивНомен", МассивНомен); Как красиво вставить туда массив? У меня вот так пока МассивНомен = Новый Массив; Для Каждого СтрокаТовары Из ВыборкаДокументы.Ссылка.Товары Цикл МассивНомен.Добавить(СтрокаТовары.Номенклатура); КонецЦикла; Ну и, кстати, работает - незаметно как. Быстро. Хотя некрасиво, конечно. |
|||
33
Eugene_life
15.10.13
✎
18:11
|
(32) Открой для себя МассивНомен =ВыборкаДокументы.Ссылка.Товары.ВыгрузитьКолонку(Номенклатура");
|
|||
34
kiruha
15.10.13
✎
18:22
|
Вообще то достаточно Ссылки
|
|||
35
kiruha
15.10.13
✎
18:25
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Свойство, | НоменклатураДополнительныеРеквизиты.Значение, | НоменклатураДополнительныеРеквизиты.Ссылка |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Ссылка |В(ВЫБРАТЬ РАЗЛИЧНЫЕ | ПоступлениеТоваровУслугТовары.Номенклатура |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары |ГДЕ | ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка)"; |
|||
36
Зойч
15.10.13
✎
18:31
|
(35) двойка тебе
|
|||
37
Мисти
15.10.13
✎
19:10
|
Не надо двойку, надо совет.
|
|||
38
sttt
15.10.13
✎
21:31
|
как то так:
------------- ВЫБРАТЬ НоменклатураДополнительныеРеквизиты.Свойство, НоменклатураДополнительныеРеквизиты.Значение, НоменклатураДополнительныеРеквизиты.Ссылка ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты ПО РеализацияТоваровУслугТовары.Номенклатура = НоменклатураДополнительныеРеквизиты.Ссылка ГДЕ РеализацияТоваровУслугТовары.Ссылка В(&МассивДокументов) |
|||
39
Лефмихалыч
15.10.13
✎
21:38
|
(0) у тех, кто использует запросы в цикле без жизненной на то необходимости, денег нет и не будет. Народная примета
|
|||
40
ilkoder
15.10.13
✎
21:41
|
это опять же смотря какой сервер и какой запрос - можно запросом по всем документам за год сервер и вообще положить, а разбив на части потихоньку выполнить. мне нравится запрос из нескольких складывать через временные... забыл как они и называются в запросе "ПОМЕСТИТЬ В"
|
|||
41
sttt
15.10.13
✎
21:42
|
(39) злыдень)))
|
|||
42
lEvGl
гуру
15.10.13
✎
22:21
|
не знаю известную велосипедистку лично, как некоторые отписавшиеся в теме, но трололо, по-моему, витает в воздухе. по теме - речь идет о регистре сведений ЗначенияСвойстОбъектов?
|
|||
43
sttt
15.10.13
✎
22:25
|
(42) не угадал, смотри внимательно (32) это УТ11
|
|||
44
ilkoder
15.10.13
✎
22:27
|
Дополнительные реквизиты - это табличная часть справочника номенклатура вроде...
|
|||
45
dmpl
15.10.13
✎
22:31
|
(35) Это будет глючить. Потому что ТЧ в БД и ТЧ в объекте не обязаны совпадать. Да, кстати, а если документ новый и еще ни разу не записанный - что делать?
|
|||
46
kiruha
15.10.13
✎
23:19
|
(45)
Посмотри на выборку девушки - документы не новый. Как довести до ума с массивом - пущай сама думает Разница с (38) никакой нет, если не нужны реквизиты из ТЧ А что такое ТЧ в объекте - вообще не понял |
|||
47
kiruha
15.10.13
✎
23:27
|
В варианте 38 она может получить в 10 раз больше строк, чем необходимо, что не комильфо
|
|||
48
фобка
15.10.13
✎
23:34
|
Ответ можно узнать очень просто - реализовать оба варианта и замерить
|
|||
49
dmpl
16.10.13
✎
08:18
|
(46) Вот я записал документ со 100500 строками, потом открыл документ, очистил табличную часть и добавил 1 строку. Твой запрос даст 100500 строк вместо 1.
|
|||
50
mishgan75
16.10.13
✎
09:16
|
(46) разница с 38 очень даже есть выражается в скорости(35 будет выполняться существенно дольше)
табличная часть товары в документе (измененном, но еще не записанном) будет отличаться от данных в Базе |
|||
51
sttt
16.10.13
✎
09:28
|
(47)(50) про ограничения ничего не было сказано))
|
|||
52
sttt
16.10.13
✎
09:51
|
(50) сделал как у нее в (32), на каждую строку в документе выводит доп. реквизит, что просили то и получили. ну может малость недоделан, выборку документов в этот же запрос закинуть вместо МассивДокументов
|
|||
53
kiruha
16.10.13
✎
09:52
|
(50)
Вы что издеваетесь ? Предположим что есть 10 000 документов с 10 строками 10 свойств. 500 различной номенклатуры Вариант слевым соединением даст 10 000 * 10 * 10 = 1 млн строк Вариант "в" (ссылку заменить на массив) даст 500*10 = 5000 строк |
|||
54
dmpl
16.10.13
✎
10:18
|
(53) Быстро, но неправильно - это не наш метод.
|
|||
55
mishgan75
16.10.13
✎
10:29
|
(53) если в (38) добавить "Различные" или сгруппировать правильно запрос, результатом будут те же 5000 строк, только выполняться он будет раз в 100 быстрее (35)
|
|||
56
mishgan75
16.10.13
✎
10:30
|
(50),(52) с моей точки зрения ты предложил гораздо более правильное решение
|
|||
57
mishgan75
16.10.13
✎
10:31
|
+(56) естественно к постам (51)(52)
|
|||
58
kiruha
16.10.13
✎
11:32
|
(55)
Можно поинтересоваться с какой стати Вы так решили ? Видели план запроса, делали замеры или с чего ? |
|||
59
sttt
16.10.13
✎
11:56
|
))))
ВЫБРАТЬ РАЗЛИЧНЫЕ ТестовыйДокументТовары.Товар КАК Товар ПОМЕСТИТЬ СписокТоваров ИЗ Документ.ТестовыйДокумент.Товары КАК ТестовыйДокументТовары ГДЕ ТестовыйДокументТовары.Ссылка.Дата МЕЖДУ &Начало И &Конец ИНДЕКСИРОВАТЬ ПО Товар ; ВЫБРАТЬ ТоварыДополнительныеРеквизиты.Свойство, ТоварыДополнительныеРеквизиты.Значение, ТоварыДополнительныеРеквизиты.Ссылка ИЗ СписокТоваров КАК СписокТоваров ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Товары.ДополнительныеРеквизиты КАК ТоварыДополнительныеРеквизиты ПО СписокТоваров.Товар = ТоварыДополнительныеРеквизиты.Ссылка |
|||
60
sttt
16.10.13
✎
11:56
|
(58) тогда лучше это мерять (59)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |