|
Запрос к табличной части текущего документа. Какой в этом смысл? | ☑ | ||
---|---|---|---|---|
0
Lex_Liven
29.03.14
✎
08:52
|
Всем привет.
Разбирая чужой код, наткнулся на странную организацию обработки проведения одного документа. Суть в том, что в обработке зачем-то делается запрос к табличной части этого документа с условием ГДЕ
причем никаких больше отборов не задается, после получения результата все строки тупо перебираются одна за другой. Какой смысл в таком коде? Почему нельзя было использовать цикл "Для Каждого" по табчасти документа? |
|||
1
Wobland
29.03.14
✎
08:55
|
а чего это нельзя было?
|
|||
2
Lex_Liven
29.03.14
✎
08:57
|
Вот и я спрашиваю, какие у автора кода могли быть причины написать именно так? Зачем так вообще делается?
|
|||
3
Lex_Liven
29.03.14
✎
09:01
|
Я понимаю, когда леается запрос к ТЧ с каким-то отбором, чтобы не все строки перебирать. Но зачем делать запрос ко всей ТЧ? Что дает такой метод? Прирост производительности относительно одного простого цикла? Сомневаюсь.
|
|||
4
Wobland
29.03.14
✎
09:02
|
забей
|
|||
5
Lex_Liven
29.03.14
✎
09:02
|
(4) Не хочу. Я хочу понять, зачем. Я хочу переписать этот код на один простой цикл. И опасаюсь, что упадет производительность.
|
|||
6
Lex_Liven
29.03.14
✎
09:03
|
(5) Тем более, что проведение документа и так занимает пару минут. (В ТЧ порядка 2-3 тысяч строк).
|
|||
7
zak555
29.03.14
✎
09:05
|
полный текст запроса приведи
|
|||
8
Wobland
29.03.14
✎
09:05
|
вот я раньше бумажные книги читал. а страницу перелистывал всегда одной рукой - любой случайно выбранной. надо же как-то определиться, каким образом перебирать ТЧ
|
|||
9
Lex_Liven
29.03.14
✎
09:10
|
Полный текст запроса:
"ВЫБРАТЬ
|
|||
10
Lex_Liven
29.03.14
✎
09:11
|
Выбираются ВСЕ колонки ТЧ и ВСЕ ее строки.
|
|||
11
Lex_Liven
29.03.14
✎
09:12
|
(8) Мы теряем время во-первых, на запрос к ТЧ, во вторых, потом на перебор результата.
Я просто не верю, что это может быть быстрее одного перебора по ТЧ. |
|||
12
hhhh
29.03.14
✎
09:13
|
(10) это для скорости, если групповое проведение документов, ваше "Для Каждого" раз в 15 будет медленнее, чем запрос. А бухгатера ведь очень часто перепроводят документы, поэтому это важно.
|
|||
13
Lex_Liven
29.03.14
✎
09:14
|
(12) То есть все-таки, Запрос + "Пока Рез.Следующий() Цикл" - быстрее, чем "Для Каждого"?
Тогда возникает вопрос номер два. Почему в типовых это редко используется? (Честно говоря, вообще ни разу не встречал) |
|||
14
Wobland
29.03.14
✎
09:18
|
(13) мы тут как-то спец.олимпиаду устраивали - Спавочник.Выбрать против запроса. бывает такое, что объектный подход работает быстрее, для этого нужны какие-то особенные флуктуации в атмосфере и железо. но бывает, на миллисекунды, конечно.
судя по тому, как ты описал свою ситуацию, ты занимаешься онанизмом. поэтому (4) |
|||
15
Lex_Liven
29.03.14
✎
09:21
|
(14) Судя по этому комментарию, не (4), а "делай как тебе удобнее". Собственно, такой ответ меня устраивает.
|
|||
16
Wobland
29.03.14
✎
09:21
|
хорошо. забей на этот вопрос и пиши, как удобней ;)
|
|||
17
mistеr
29.03.14
✎
09:22
|
(14) >Спавочник.Выбрать против запроса
А-ха-ха! Хорошая шутка. |
|||
18
Wobland
29.03.14
✎
09:23
|
(17) замерь
|
|||
19
HEKPOH
29.03.14
✎
09:24
|
(0) Проведи опыт.
Сделай замер производительности по двум алгоритмам. Оч хочется посмотреть на результат :) (17) Это не шутка. Объектный метод, действительно, иногда работает не медленнее запроса |
|||
20
mistеr
29.03.14
✎
09:24
|
(15) Это скорее следование общему подходу из типовых: при проведении использовать сохраненное состояние объекта из БД, согласованное со всем остальными данными. Просто в данном конкретном случае другие данные в запросе не используются.
|
|||
21
HEKPOH
29.03.14
✎
09:25
|
(20) Объект уже записан!
|
|||
22
mistеr
29.03.14
✎
09:25
|
(19) Я к тому, что Справочник.Выбрать() и делает запрос.
|
|||
23
m-serg74
29.03.14
✎
09:39
|
(15) не тупи, запрос с таким условием "только к записанным данным"
|
|||
24
Lex_Liven
29.03.14
✎
09:43
|
(23) Мне одному кажется, или в событии "ОбработкаПроведения" - документ уже записан?
|
|||
25
Мимохожий Однако
29.03.14
✎
09:44
|
(0)Какая конфигурация? ИМХО, это важно.
|
|||
26
Wobland
29.03.14
✎
09:46
|
(24) мне тоже так кажется
|
|||
27
HEKPOH
29.03.14
✎
09:47
|
(24) Сделай вывод сам по (20) :)
|
|||
28
HEKPOH
29.03.14
✎
09:47
|
т.е. по (21)
|
|||
29
Lex_Liven
29.03.14
✎
09:52
|
(28) Очевидно, что выводы делать я не могу. Я же туплю, судя по (23) :)
(20) А какие могут быть несогласования в (данных документа) с (данными того же документа из базы) в момент его проведения? (25) Это не важно просто потому, что вопрос был о двух подходах к одному действию в общем случае. |
|||
30
mistеr
29.03.14
✎
09:55
|
(21) И что?
|
|||
31
HEKPOH
29.03.14
✎
09:57
|
(30) читай (0)
|
|||
32
Мимохожий Однако
29.03.14
✎
09:57
|
(29)Продолжай партизанить. Жди, когда подтянутся телепаты.
|
|||
33
HEKPOH
29.03.14
✎
09:58
|
+(31) а именно, "Какой смысл?"
|
|||
34
Lex_Liven
29.03.14
✎
09:59
|
(32) Да какие телепаты? Что вам даст название конфигурации? Она написана кем-то с нуля, абсолютно не связана с типовыми.
Прочитайте внимательно сам вопрос (0) и (29), часть 3. |
|||
35
HEKPOH
29.03.14
✎
10:06
|
(34) Давай уже замер производительности в студию!)))))
|
|||
36
mistеr
29.03.14
✎
10:07
|
(29) В данном случае несогласования нет. Я говорю про общий подход, который применяется в любом случае. Если завтра понадобится приджойнить еще какой-нибудь регистр для проверки, не нужно будет много переделывать (с цикла на запрос).
|
|||
37
Belomor
29.03.14
✎
10:13
|
(5) "И опасаюсь, что упадет производительность." - религия не позволяет использовать замер производительности?
|
|||
38
Lex_Liven
29.03.14
✎
10:14
|
(35) Замер производительности будет позже. Что-то мне подсказывает, что та оптимизация, которую я уже проделал, дает куда больше результатов :)
Но чисто академический интерес остался, так что замер будет. (37) Религия позволяет сначала спросить, а потом делать, а не сделать и переделывать. |
|||
39
Мимохожий Однако
29.03.14
✎
10:14
|
(34)Применение объектного метода с перебором и запросом в конечном итоге завершается запросом к серверу. Тебе уже несколько раз сказали про замер, но результатов пока нет.
|
|||
40
ДенисЧ
29.03.14
✎
10:16
|
при условии "Она написана кем-то с нуля" - проще спросить разработчика
|
|||
41
Lex_Liven
29.03.14
✎
10:17
|
(39) То есть вы два часа пытаетесь спросить, фаловая это база или серверная? Отвечаю. Файловая.
(40) А если разработчик уже недоступен? Представляете, и такое бывает. |
|||
42
Lex_Liven
29.03.14
✎
10:40
|
Замеры готовы. Как их выкладывать?
|
|||
43
Lex_Liven
29.03.14
✎
10:46
|
В двух словах. Цикл "Для Каждого Строка ИЗ ТЧ" действительно выполняется выполняется дольше, чем, "Пока Рез.Следующий()" по выборке.
НО! Вся связка "запрос + цикл" занимает примерно столько же времени. Делать больше число сравнений у меня нет ни времени, ни желания. Я для себя делаю вывод, что цикл по ТЧ просто проще писать, а запрос с обработкой результата более гибок при каких-то сложных проверках и возможном расширении базы. |
|||
44
H A D G E H O G s
29.03.14
✎
10:47
|
(39) Вы путаете.
|
|||
45
H A D G E H O G s
29.03.14
✎
10:48
|
(43) Это кусок типового подхода, забей.
|
|||
46
H A D G E H O G s
29.03.14
✎
10:48
|
(43) Ну там Остатки по номенклатуре получить, к примеру.
И потом перебрать результат запроса. Просто у тебя упрощенный случай. |
|||
47
Lex_Liven
29.03.14
✎
10:49
|
(46) Я понял. Об этом и говорю.
|
|||
48
H A D G E H O G s
29.03.14
✎
10:50
|
(47) Тебе - тупо перебирать ТЧ документа, не лезть запросом на сервер. Он, да, будет быстр и шустр, ибо попадание в Индекс почти 100%, но все равно.
|
|||
49
H A D G E H O G s
29.03.14
✎
10:51
|
Но когда нужны остатки - тогда ТИПОВЫЕ и 1С рекомендуют механизм (0).
Но я с ними - не согласен :-) |
|||
50
User_Agronom
29.03.14
✎
10:51
|
(0) Как вариант.
Прог писал что-то. Поисковик выдал пример решения (с форума или еще откуда). Прог оттуда скопировал блок и заточил под свою задачу. Так оказалось быстрее. А теперь давайте всем форумом искать глубинные причины. Работает? Значит нормально. |
|||
51
H A D G E H O G s
29.03.14
✎
10:52
|
(50) Как вариант, прог писавший (0) - сдавал 1С:Специалист
|
|||
52
Lex_Liven
29.03.14
✎
10:56
|
(48) Не люблю обращение "Тебе - тупо..." Меня как будто оскорбить пытаются.
В данном конкретном случае весь (неграмотный)код вообще переписать надо. У меня тут во-первых, два запроса и два цикла, во-вторых, идиотское движение со списанием всех 3000 строк и оприходование их обратно, в-третьих, проверка некоторых условий все равно идет, но реализвано в цикле, а не в запросе. Короче, (неграмотный)код и есть. Я уже переписал его и доволен результатом. (51) прог, писавший (0) - это я или прог, писавший код который я привел? |
|||
53
Мимохожий Однако
29.03.14
✎
11:02
|
(52)Не переживай. Ты самый лучший прог.
|
|||
54
Lex_Liven
29.03.14
✎
11:05
|
(53) Я тоже люблю язв без чувства юмора.
|
|||
55
Diamond905
29.03.14
✎
11:41
|
а надо было просто
| ИнвентаризацияСостав.Товар, | Сумма(ИнвентаризацияСостав.КолФ) КАК Колф, | ИнвентаризацияСостав.Цена, | Сумма(ИнвентаризацияСостав.СумФ) КАК Сумф |ИЗ | Документ.Инвентаризация.Состав КАК ИнвентаризацияСостав |ГДЕ | ИнвентаризацияСостав.Ссылка = &Ссылка | СГРУППИРОВАТЬ ПО | ИнвентаризацияСостав.Товар | ИнвентаризацияСостав.Цена"; Тогда дублирующаяся номенклатура в строках бы лучше проходила |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |