|
ГДЕ ПометкаУдаления = ЛОЖЬ | ☑ | ||
---|---|---|---|---|
0
crabzzy
24.10.12
✎
04:29
|
Здравствуйте,
столкнулся с кодом, вроде бы код хорошего программиста, но смутили секции в запросе вида ГДЕ ПометкаУдаления = ЛОЖЬ Не пойму, это для индексирования, или для понимания сотрудников, следующих программистов. Почему нельзя было сделать ГДЕ НЕ ПометкаУдаления? Для повышения читабельности так сделали? Спасибо! |
|||
1
golden-pack
24.10.12
✎
04:45
|
Все просто:
ГДЕ ПометкаУдаления = ЛОЖЬ //плохой программист ГДЕ НЕ ПометкаУдаления // хороший программист |
|||
2
snegovik
24.10.12
✎
04:54
|
(1) Каков критерий? Ведь первый вариант нагляднее. Только из-за того, что второй короче?
|
|||
3
SeraFim
24.10.12
✎
05:05
|
(2) не только короче, но и быстрее
в первом случае - выполняется операция сравнения, и затем уже отбор Во втором - сразу отбор |
|||
4
Cube
24.10.12
✎
05:09
|
(2) Думаю, что (1) прав. Не в делении на хороших и плохих, а в определении "правильности". Считаю, что если переменная уже типа "Булево", то сравнивать её с чем-либо не надо, т.к. это уже лишнее. Ну, вот смотри (пример):
Ты стоишь около автомата по приему мелочи. Автомат принимает только монеты номиналом 1 копейка (самая маленькая монета). Ты держишь в руках какую-нибудь монету и надо определить, это копейка или нет. Вариант 1: Берем нашу монету, ложим её рядом с эталонной монетой (копейкой) и сравниваем. Если монеты одинаковые, то бросаем нашу монету в автомат. Вариант 2: берем нашу монету и пытаемся скормить её автомату. Если автомат её захавал - то это была копейка. Согласись, второй вариант проще. Ведь зачем нам сравнивать монету? |
|||
5
golden-pack
24.10.12
✎
05:10
|
(3) ???
|
|||
6
korableg
24.10.12
✎
05:12
|
Здрастии Серафим, всё это не так булевская переменная имеет значнение ИСТИНА и при сравнении компилятор берет так
и сравнивает ГДЕ ПометкаУдаления = Истина - 1 операция сравнения ГДЕ НЕ ПометкаУдаления = Истина - 2 операции сравнения ГДЕ ПометкаУдаления = ЛОЖЬ - 1 операция Учите матлогику. |
|||
7
korableg
24.10.12
✎
05:16
|
НЕ ПометкаУдаления читабельнее и смотрится красивей
|
|||
8
golden-pack
24.10.12
✎
05:16
|
(6) запрос 1с транслируется в SQL. И сколько будет операций сравнения в SQL для ГДЕ НЕ ПометкаУдаления
|
|||
9
Cube
24.10.12
✎
05:17
|
(6) А может всё-таки так:
1). ГДЕ ПометкаУдаления = Истина - 2 операции сравнения 2). ГДЕ НЕ ПометкаУдаления = Истина - 3 операции сравнения 3). ГДЕ ПометкаУдаления = ЛОЖЬ - 2 операции сравнения 4). ГДЕ ПометкаУдаления - 1 операция сравнения 5). ГДЕ НЕ ПометкаУдаления - 1 операция сравнения ??? |
|||
10
Cube
24.10.12
✎
05:17
|
+(9) Ошибся, во 2-ом пункте тоже две операции сравнения...
|
|||
11
korableg
24.10.12
✎
05:20
|
ничего не так, а в скл по любому 1 операция потому что частичка НЕ возвращает ту же переменную только с обратным значением в нашем случае ЛОЖЬ, а передает ее 1с в язык скл уже в готовом виде.
где пометкаудаления=истина - 1 операция так как где пометкаудаления и пометкаудаления=истина - одно и тоже |
|||
12
Cube
24.10.12
✎
05:24
|
(11) Значит, ты утверждаешь, что "Истина" и "Истина = Истина" - это одно и то же?
|
|||
13
korableg
24.10.12
✎
05:26
|
для компилятора да, так как перед истина стоит еще оператор где, он вынужден его сравнивать в любом случае
|
|||
14
korableg
24.10.12
✎
05:27
|
он ведь берет переменную и в зависимости от ее значения ответвляет алгоритм, поэтому если даже чисто логически подумать ему приходится сравнивать
|
|||
15
Cube
24.10.12
✎
05:29
|
(13) А то что "Истина = Истина" это уже операция сама по себе, это ничего да?
По этой логике "1 = 1" и "1 = 2 + 3 - 4" одно и тоже и телодвижений в обоих случаях 1... |
|||
16
golden-pack
24.10.12
✎
05:31
|
Запрос sql показывайте уже
|
|||
17
korableg
24.10.12
✎
05:31
|
конечно это операция, операция сравнения, тоесть ты хочешь сказать что если не писать = истина, то компилятор тупо не сравнивает? если не сравнивает как машина будет производить дальнейшие действия по условию?
|
|||
18
Cube
24.10.12
✎
05:34
|
(17) В случае "ГДЕ ПометкаУдаления" компилятор сравнивает переменную со значением ИСТИНА - 1 операция.
В случае "ГДЕ ПометкаУдаления = ИСТИНА" компилятор сравнивает результат операции (которую тоже нужно вычислять) со значением ИСТИНА - 2 операции. P.S. Что, так сложно писать номер поста, на который отвечаешь? |
|||
19
korableg
24.10.12
✎
05:37
|
Прости Куб, я просто незнаю где ставить это чтоб помечалось.
Так какой операции? Присваивания тут нет, такое же сравнение. Это просто для удобочитаемости сделано. |
|||
20
D_Pavel
24.10.12
✎
05:44
|
(0) Никакой разницы нет как писать, оба варианта хорошие. Первый вариант нравится семеркоманам, второй семеркофобам. Зачем из мухи слона раздувать? Ничего плохого нет в том что программист так написал, просто ему так нравится.
Некоторые бывает пробелы не ставят вокруг арифметических знаков и скобок, их же за это никто не осуждает. |
|||
21
D_Pavel
24.10.12
✎
05:48
|
(19) Да, тут форум самопальный, видно даже по дизайну, и нет кнопки ответа на конкретное сообщение, надо руками писать скобки и число.
|
|||
22
Рэйв
24.10.12
✎
06:12
|
(0)Однохренственно.
Ты еще такты проца посчитай. |
|||
23
Ranger_83
24.10.12
✎
06:18
|
Норм.код-читабельный
|
|||
24
sda553
24.10.12
✎
07:05
|
пометкаудаления может null быть в случае если запрос так построен. Я не помню что будет если ГДЕ NULL. Может программист таким образом хотел сказать, что "левоприсоединяемый элемент справочника для данной строки и существует и не помечен на удаление"
|
|||
25
sda553
24.10.12
✎
07:08
|
А вообще я встречал следующие штуки
Функция Остаток(Склад, ДатаОстатка) Если Ложь Тогда Склад = Справочники.Склады.ПустаяСсылка(); КонецЕсли Вопрос на сообразительность, что это и зачем? |
|||
26
Starhan
24.10.12
✎
07:21
|
:) что бы дальше при написании кода автодополнение работало как у справочника Склады. :)
|
|||
27
H A D G E H O G s
24.10.12
✎
07:32
|
Бугага.
Хорошая, годная ветка |
|||
28
H A D G E H O G s
24.10.12
✎
07:34
|
Программиста из (0) - расстрэлять!
SeraFim - назначить начальником святой инквизиции долбодятлов! |
|||
29
DJ Anthon
24.10.12
✎
07:35
|
(25) чтобы создать переменную?
|
|||
30
H A D G E H O G s
24.10.12
✎
07:37
|
Не тупите.
Программер из (0) - молодец. Ибо кот вида Если УМашиПлющкиЕсть Тогда КонецЕсли; Если УМашиПлющкиЕсть=Истина Тогда КонецЕсли; при небулевой переменной УМашиПлющкиЕсть в первом случае выпадет в осадок, а во втором случае - нормально не отработает. |
|||
31
ДенисЧ
24.10.12
✎
07:37
|
А почему никто не сказал ещё, что ПометкаУдаления может быть ещё и NULL? Что тогда выдаст НЕ NULL?
|
|||
32
H A D G E H O G s
24.10.12
✎
07:37
|
Тот же стандарт он автоматом скорее всего применил в запросе.
|
|||
33
ДенисЧ
24.10.12
✎
07:38
|
тшорт.. Опоздал :-)
|
|||
34
H A D G E H O G s
24.10.12
✎
07:38
|
(31) Я сказал - ты не успел!
|
|||
35
H A D G E H O G s
24.10.12
✎
07:38
|
Ну всетаки я в Москве - байты быстрее ползут до Германии.
|
|||
36
Starhan
24.10.12
✎
07:57
|
(34) смотри (24) :)
и в (28) и (30) ты сам себе противоречишь :) |
|||
37
1Сергей
24.10.12
✎
08:13
|
(4) а почему бы не посмотреть на саму монету и определить номинал визуально? :)
|
|||
38
Нууф-Нууф
24.10.12
✎
08:15
|
НЕ в условиях запроса использовать не рекомендуется
|
|||
39
1Сергей
24.10.12
✎
08:16
|
(38) сам придумал?
|
|||
40
Нууф-Нууф
24.10.12
✎
08:17
|
(38) узнал когда готовился к эксперту
|
|||
41
Агент Инфостарта
24.10.12
✎
08:18
|
Смотрю на тему и на свой запрос
|ГДЕ | (НЕ ЗаданиеТорговомуПредставителю.ПометкаУдаления) Бежать исправлять? |
|||
42
rbcvg
24.10.12
✎
08:18
|
(37) "ложим" - что делаем?
|
|||
43
Нууф-Нууф
24.10.12
✎
08:18
|
(41) имхо сразу заявление на увольнение
|
|||
44
Starhan
24.10.12
✎
08:19
|
(41) более того валить вину на других. А так же сменить ник на мисте.
|
|||
45
Нууф-Нууф
24.10.12
✎
08:19
|
+ (44) и пол
|
|||
46
1Сергей
24.10.12
✎
08:21
|
(40) ОБС?
|
|||
47
mikecool
24.10.12
✎
08:23
|
и никто не вспомнил, что типа булево в мс скл нету...
|
|||
48
zlnk
24.10.12
✎
08:26
|
(42) >>"ложим" - что делаем?
кладём! |
|||
49
H A D G E H O G s
24.10.12
✎
08:30
|
(47) orly?
А че делает тип bit? Если забыть, что 1С на него положила и юзает binary(1) (наверное хранит чето кроме 2-х значений) |
|||
50
Нууф-Нууф
24.10.12
✎
08:31
|
(49) да. есть еще третье значение булево - ХЗ
|
|||
51
Sammo
24.10.12
✎
08:32
|
(46) Емнип, "Не" может покорежить план скулевского запроса. А если еще делать join по условие "Не в" может получиться вообще некрасивость
|
|||
52
kosts
24.10.12
✎
08:36
|
(25)
Лучше так
|
|||
53
Агент Инфостарта
24.10.12
✎
08:39
|
(52) Где взял не помню, но пользуюсь часто.
//[begin] ПОТОМ УДАЛИТЬ!!! // типизирование переменных без вреда для исполняемого кода #Если НЕ (Клиент Или Сервер Или ВнешнееСоединение) Тогда Если Ложь Тогда <?>НужнаяПеременная = "<Создание или назначение объекта нужного типа>"; КонецЕсли; #КонецЕсли //[end] ПОТОМ УДАЛИТЬ!!! |
|||
54
НЕА123
24.10.12
✎
08:47
|
(39)
из-за особенности построения мозгов, как результат юзания разговорного языка. отрицание может быть как отрицанием, так и усилением отрицания. т.е. ответ "нет" на вопрос "Ты не работаешь?" в русском, как правило, означает "нет, не работаю". в английском же "нет, работаю". вроде так... |
|||
55
1Страх
24.10.12
✎
08:50
|
а все потому что придумали хранить в базе Неопределено, придурки!
|
|||
56
mikecool
24.10.12
✎
08:51
|
(55) вызываешь дух Ненавижу1С?
|
|||
57
НЕА123
24.10.12
✎
08:55
|
(56)
в личной карточке это он и есть. |
|||
58
mikecool
24.10.12
✎
08:56
|
(57) ыыы, я лошпек )))
|
|||
59
Нууф-Нууф
24.10.12
✎
08:57
|
(58) ыыы, да ты лошпек )))
|
|||
60
mikecool
24.10.12
✎
08:58
|
(59) ты не отвлекайся ,пости больше голых девок )
|
|||
61
Axel2009
24.10.12
✎
09:09
|
пятницы не дождались..
|
|||
62
НЕА123
24.10.12
✎
09:10
|
(61)
де факто в Татарстане пятница. завтра праздник. |
|||
63
Axel2009
24.10.12
✎
09:20
|
кстати проверил, интересненько =)
select top 1000 * from dbo._AccRg24762 where not _Active = 1 Argument: OBJECT:([onyx_upp_sam].[dbo].[_AccRg24762].[_AccRg24762_ByPeriod_TRN]), WHERE:(CONVERT_IMPLICIT(int,[onyx_upp_sam].[dbo].[_AccRg24762].[_Active],0)<>(0)) EstimateIO: 192,5735 EstimateCPU: 8,972452 TotalSubtreeCost: 0,02843862 !!! select top 1000 * from dbo._AccRg24762 where _Active = 0 Argument: OBJECT:([onyx_upp_sam].[dbo].[_AccRg24762].[_AccRg24762_ByPeriod_TRN]), WHERE:(CONVERT_IMPLICIT(int,[onyx_upp_sam].[dbo].[_AccRg24762].[_Active],0)=(0)) EstimateIO: 192,5735 EstimateCPU: 8,972452 TotalSubtreeCost: 0,05277556 !!! |
|||
64
Axel2009
24.10.12
✎
09:28
|
(63)+ ошибся =)
для обоих запросов TotalSubtreeCost: 5,181245 надо было сравнивать с 0x01 и 0x00 =) так что считайте дальше количество операций сравнения. |
|||
65
Песец
24.10.12
✎
09:43
|
(25) В одинэсике нет аналога
/* много строк */ поэтому чтобы иметь возможность быстро включать/отключать кусок кода приходится писать Если Ложь Тогда //Если 1=0 для клюшек Склад = Справочники.Склады.ПустаяСсылка(); КонецЕсли; |
|||
66
Starhan
24.10.12
✎
09:54
|
(65) можно выделить область и закоментировать пачкой строк.
имхо (25) все таки для того что бы дальше когда пишешь код автодополение и контекстные подсказки работали с правильным типом переменной. По крайне мере я сама так делаю :). Пишу в начале метода. А после напиания удаляю такую строку. |
|||
67
Starhan
24.10.12
✎
09:54
|
сам* написания*
|
|||
68
Фокусник
24.10.12
✎
10:00
|
(0) Замер показывает, что код 1 быстрее :)
Выдает:
|
|||
69
Фокусник
24.10.12
✎
10:03
|
(25) Чтобы к "Склад" через "." в конфигураторе обращаться ;)
(регулярно это использую) |
|||
70
Reset
24.10.12
✎
10:06
|
(68)
ПеременнаяБулево = ЛОЖЬ: 11 сек. НЕ ПеременнаяБулево: 10 сек. |
|||
71
Reset
24.10.12
✎
10:06
|
Из любопытства.
|
|||
72
Cube
24.10.12
✎
10:07
|
(68) Нужно проводить по 10 замеров для каждой ситуации, причем, первый замер в каждой ситуации не учитывать.
|
|||
73
Axel2009
24.10.12
✎
10:08
|
(68) у меня выполнилось по 10 секунд этот код... ты на 3 пне сидишь чтоли?
|
|||
74
Фокусник
24.10.12
✎
10:10
|
(70) Интересно, раз в 10 увеличь счетчик
|
|||
75
Фокусник
24.10.12
✎
10:10
|
(73) Не, трехлетний ноутбук :) Ща на сервере попробую
|
|||
76
Reset
24.10.12
✎
10:10
|
имхо оно должно сравнимые результаты давать
|
|||
77
Axel2009
24.10.12
✎
10:11
|
ПеременнаяБулево = ЛОЖЬ: 101 сек.
НЕ ПеременнаяБулево: 92 сек. |
|||
78
Фокусник
24.10.12
✎
10:13
|
(72) Вот сейчас 10 раз и проверим - на разных компах/платформах, при разных условиях :)
|
|||
79
Reset
24.10.12
✎
10:13
|
Добавил нолик
ПеременнаяБулево = ЛОЖЬ: 110 сек. НЕ ПеременнаяБулево: 102 сек. |
|||
80
Reset
24.10.12
✎
10:13
|
(77) чорт у меня утюг :(
|
|||
81
Axel2009
24.10.12
✎
10:15
|
второй замер
ПеременнаяБулево = ЛОЖЬ: 101 сек. НЕ ПеременнаяБулево: 93 сек. |
|||
82
Starhan
24.10.12
✎
10:16
|
поменяйте местами и еще раз замертье )
|
|||
83
Axel2009
24.10.12
✎
10:16
|
я думаю за счет того, что при сравнении ПеременнаяБулево = ЛОЖЬ может быть Неопределено и ниче не вывалится, 1с делает доп преобразование переменной
|
|||
84
Reset
24.10.12
✎
10:18
|
Может, изза того, что в первом случае 2 "выражения" и одна лог операция, а во втором - 1 "выражение" и одна операция
|
|||
85
Reset
24.10.12
✎
10:21
|
написал циклы в 2 строку
ПеременнаяБулево = ЛОЖЬ: 52 сек. НЕ ПеременнаяБулево: 47 сек. |
|||
86
ДенисЧ
24.10.12
✎
10:21
|
код в (68) выдал
ПеременнаяБулево = ЛОЖЬ: 57 сек. НЕ ПеременнаяБулево: 60 сек. Так что... |
|||
87
Reset
24.10.12
✎
10:22
|
**в 1 строку :)
|
|||
88
Reset
24.10.12
✎
10:23
|
(86) 2:2
:D |
|||
89
Axel2009
24.10.12
✎
10:24
|
(82) поменял
НЕ ПеременнаяБулево: 96 сек. ПеременнаяБулево = ЛОЖЬ: 99 сек. |
|||
90
Starhan
24.10.12
✎
10:25
|
НЕ ПеременнаяБулево: 41 сек.
ПеременнаяБулево = ЛОЖЬ: 42 сек. |
|||
91
Chin
24.10.12
✎
10:27
|
(0) А вдруг пометка удаления NULL, а логика запроса требует наличия именно "ЛОЖЬ"? Всякое бывает. Понимаю, что запрос нужно строить, чтобы избегать таких ситуаций, но тем не менее все возможно...
|
|||
92
Axel2009
24.10.12
✎
10:28
|
(91) если пометка удаления NULL, то монопенисуально какое условие, оно вернет ЛОЖЬ и все
|
|||
93
Starhan
24.10.12
✎
10:29
|
ыы
ПеременнаяБулево <> ИСТИНА: 42 сек. ПеременнаяБулево = ЛОЖЬ: 41 сек. |
|||
94
Chin
24.10.12
✎
10:31
|
(92) Это понятно, но подобное условие может быть поставленно машинально, когда программист видит, что возможен NULL... Если у вас запрос на мильёны строк, и пара секунд критично, то да - жесть наверное. А так это все необоснованные придирки...
|
|||
95
Reset
24.10.12
✎
10:31
|
(91) Если возможен null, интерпретацию стоит явно предусматривать с помощь известной функции, а не полагаться на сравнение
|
|||
96
Cube
24.10.12
✎
10:32
|
Всё, шутки в сторону :)
ПеременнаяБулево = ЛОЖЬ (1): 11,731 сек. ПеременнаяБулево = ЛОЖЬ (2): 11,747 сек. ПеременнаяБулево = ЛОЖЬ (3): 11,731 сек. ПеременнаяБулево = ЛОЖЬ (4): 11,747 сек. ПеременнаяБулево = ЛОЖЬ (5): 11,815 сек. НЕ ПеременнаяБулево (1): 11,185 сек. НЕ ПеременнаяБулево (2): 11,185 сек. НЕ ПеременнаяБулево (3): 11,2 сек. НЕ ПеременнаяБулево (4): 11,201 сек. НЕ ПеременнаяБулево (5): 11,201 сек. Код: MSScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl"); MSScriptControl.Language = "javascript"; чВсего = 10000000; ЧислоПопыток = 5; ПеременнаяБулево = ЛОЖЬ; Для ТекПопытка = 0 По ЧислоПопыток Цикл Старт = MSScriptControl.eval("new Date().getTime()"); Для сч = 1 по чВсего Цикл Если ПеременнаяБулево = ЛОЖЬ Тогда КонецЕсли; КонецЦикла; Финиш = MSScriptControl.eval("new Date().getTime()"); Если ТекПопытка > 0 Тогда Сообщить("ПеременнаяБулево = ЛОЖЬ (" + ТекПопытка + "): " + (Финиш - Старт) / 1000 + " сек."); КонецЕсли; КонецЦикла; Для ТекПопытка = 0 По ЧислоПопыток Цикл Старт = MSScriptControl.eval("new Date().getTime()"); Для сч = 1 по чВсего Цикл Если НЕ ПеременнаяБулево Тогда КонецЕсли; КонецЦикла; Финиш = MSScriptControl.eval("new Date().getTime()"); Если ТекПопытка > 0 Тогда Сообщить("НЕ ПеременнаяБулево (" + ТекПопытка + "): " + (Финиш - Старт) / 1000 + " сек."); КонецЕсли; КонецЦикла; |
|||
97
1Страх
24.10.12
✎
10:34
|
я не понял, в (0) запрос, а народ язык 1с исследует
|
|||
98
Фокусник
24.10.12
✎
10:34
|
10 проверок, запуск на более быстром компе (сервер 16 ядер, но там народ есть):
в результате:
Был включен замер производительности:
т.е. в результате этого замера код "ПеременнаяБулево = ЛОЖЬ" медленнее на 10% чем код "НЕ ПеременнаяБулево" :) Поэтому, с учетом частоты вызываемого кода, разница не принципиальная, лучше в других (более проблемных) местах оптимизацией заниматься, чем в сравнении булева с булевом :) |
|||
99
Cube
24.10.12
✎
10:35
|
(98) Точность у тебя ацтой)) Запускай (96)
|
|||
100
Cube
24.10.12
✎
10:35
|
Сотка!
|
|||
101
Chin
24.10.12
✎
10:36
|
Может в запросе замереете?
|
|||
102
Фокусник
24.10.12
✎
10:36
|
(99) Окончательная точность на совести замера производительности :)
|
|||
103
Cube
24.10.12
✎
10:37
|
(101) Мы ждем когда ты это сделаешь.
|
|||
104
Chin
24.10.12
✎
10:45
|
(103) Да мне в принципе побоку - меня "ПометкаУдаления = Ложь" не смущает... :) Просто любопытно...
|
|||
105
Cube
24.10.12
✎
10:46
|
(104) Противоречие: "побоку" и "любопытно". Иди в себе разберись с начала)) Нам тут и без тебя проблем хватает :)
|
|||
106
Chin
24.10.12
✎
10:48
|
(105) Читай - "Мне в лом"... Я чипсы ем и наблюдаю!!! :)
|
|||
107
ptiz
24.10.12
✎
11:00
|
Ну и фигней вы тут страдаете :)
|
|||
108
Агент Инфостарта
24.10.12
✎
11:01
|
(107) Всяко лучше, чем дрочерство Собираем красивых одинесниц :))
|
|||
109
ErrorEd88
24.10.12
✎
11:05
|
(0) от безделья нечем заняться?
|
|||
110
spock
24.10.12
✎
11:16
|
А че, никто не проверял чтоли еще?
Ну сюрприз - транслятор платформы запросы вида: ВЫБРАТЬ Алиас.Ссылка ИЗ Документ.<ИмяДокумента> КАК Алиас ГДЕ НЕ Алиас.ПометкаУдаления и ВЫБРАТЬ Алиас.Ссылка ИЗ Документ.<ИмяДокумента> КАК Алиас ГДЕ Алиас.ПометкаУдаления = Ложь Приводит к одному: SELECT T1._IDRRef FROM _DocumentXXX T1 WITH(NOLOCK) WHERE (T1._Marked = 0x00) Платформа 8.2.13.219 |
|||
111
Chin
24.10.12
✎
11:21
|
(110) ЧТД...
|
|||
112
Axel2009
24.10.12
✎
11:27
|
||||
113
spock
24.10.12
✎
11:33
|
+110 для владельцев 8.1 - там все в явном виде:
WHERE Алиас._Marked = 0x00 и WHERE NOT Алиас._Marked = 0x01 соответственно, но погоду это не делает. |
|||
114
Cube
24.10.12
✎
11:57
|
Шутки в сторону 2! :))
Цифры понятнее букавок!)) Клиент-серверный вариант: В замере учавствует 40 542 объектов. ПометкаУдаления = ЛОЖЬ (Среднее из 500): 0,316 сек. НЕ ПометкаУдаления (Среднее из 500): 0,316 сек. Первый вариант дольше на (в среднем из 500) 0,000 сек. или на -0,120% Файловый вариант: В замере учавствует 40 542 объектов. ПометкаУдаления = ЛОЖЬ (Среднее из 500): 0,173 сек. НЕ ПометкаУдаления (Среднее из 500): 0,175 сек. Первый вариант дольше на (в среднем из 500) -0,002 сек. или на -0,901% Такую погрешность можно списать на вспышки на солнце :) Итог: Разницы нет! :) Код: MSScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl"); MSScriptControl.Language = "javascript"; ЧислоПопыток = 500; СреднееЗначение1 = 0; СреднееЗначение2 = 0; ВыводитьДетальныеЗаписи = Вопрос("Выводить детальные записи?", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Да; Запрос = Новый Запрос("ВЫБРАТЬ | ПриходныйКассовыйОрдер.Дата, | ПриходныйКассовыйОрдер.Номер |ИЗ | Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер |ГДЕ | ПриходныйКассовыйОрдер.ПометкаУдаления = ЛОЖЬ"); Сообщить("В замере учавствует " + Запрос.Выполнить().Выбрать().Количество() + " объектов."); Для ТекПопытка = 0 По ЧислоПопыток Цикл ОбработкаПрерыванияПользователя(); Состояние("Выполнено " + Формат(ТекПопытка * 50 / ЧислоПопыток, "ЧДЦ=1") + "%"); Старт = MSScriptControl.eval("new Date().getTime()"); Запрос.Выполнить(); Финиш = MSScriptControl.eval("new Date().getTime()"); Если ТекПопытка > 0 Тогда ТекВремя = (Финиш - Старт) / 1000; СреднееЗначение1 = СреднееЗначение1 + ТекВремя; Если ВыводитьДетальныеЗаписи Тогда Сообщить("ПометкаУдаления = ЛОЖЬ (" + ТекПопытка + "): " + Формат(ТекВремя, "ЧДЦ=3") + " сек."); КонецЕсли; КонецЕсли; КонецЦикла; СреднееЗначение1 = СреднееЗначение1 / ЧислоПопыток; Сообщить("ПометкаУдаления = ЛОЖЬ (Среднее из " + ЧислоПопыток + "): " + Формат(СреднееЗначение1, "ЧДЦ=3") + " сек."); Запрос = Новый Запрос("ВЫБРАТЬ | ПриходныйКассовыйОрдер.Дата, | ПриходныйКассовыйОрдер.Номер |ИЗ | Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер |ГДЕ | (НЕ ПриходныйКассовыйОрдер.ПометкаУдаления)"); Для ТекПопытка = 0 По ЧислоПопыток Цикл ОбработкаПрерыванияПользователя(); Состояние("Выполнено " + Формат(50 + ТекПопытка * 50 / ЧислоПопыток, "ЧДЦ=1") + "%"); Старт = MSScriptControl.eval("new Date().getTime()"); Запрос.Выполнить(); Финиш = MSScriptControl.eval("new Date().getTime()"); Если ТекПопытка > 0 Тогда ТекВремя = (Финиш - Старт) / 1000; СреднееЗначение2 = СреднееЗначение2 + ТекВремя; Если ВыводитьДетальныеЗаписи Тогда Сообщить("НЕ ПометкаУдаления (" + ТекПопытка + "): " + Формат(ТекВремя, "ЧДЦ=3") + " сек."); КонецЕсли; КонецЕсли; КонецЦикла; СреднееЗначение2 = СреднееЗначение2 / ЧислоПопыток; Сообщить("НЕ ПометкаУдаления (Среднее из " + ЧислоПопыток + "): " + Формат(СреднееЗначение2, "ЧДЦ=3") + " сек."); Сообщить("Первый вариант дольше на (в среднем из " + ЧислоПопыток + ") " + Формат(СреднееЗначение1 - СреднееЗначение2, "ЧДЦ=3") + " сек. или на " + Формат(100 * (СреднееЗначение1 - СреднееЗначение2) / СреднееЗначение2, "ЧДЦ=3") + "%"); Состояние("Готово"); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |