Имя: Пароль:
1C
1С v8
НайтиПоКоду()
🠗 (Волшебник 29.10.2020 18:07)
,
0 mr_1C
 
29.10.20
16:48
1. Если НужнаяНомен.Код = "ЦБ0025637 Тогда 60% (3)
2. Если НужнаяНомен = Справочники.Номенклатура.НайтиП 40% (2)
Всего мнений: 5

Всем добрый вечер. 2 вопроса:
1) что отрабатывается быстрее в условии (даже на миллиардные доли секунды):
Если НужнаяНомен = Справочники.Номенклатура.НайтиПоКоду("ЦБ0025637") Тогда
или
Если НужнаяНомен.Код = "ЦБ0025637 Тогда ?
2) Какой из вариантов более корректный?
1 Kigo_Kigo
 
29.10.20
16:51
так что бы сделать НужнаяНомен.Код = "ЦБ0025637 Тогда  нужно циклом перебрать всю номенклатуру, не?
2 Василий Алибабаевич
 
29.10.20
16:52
(0) Эти две конструкции выполняют АБСОЛЮТНО разные действия.
Сравнивать поиск в базе со сравнением реквизита текущего элемента? Это очень мощно. И очень внушаить.
3 ДенисЧ
 
29.10.20
16:52
Если НужнаяНомен у тебя уже в кеше, то эквипе.....но.
4 Deal with it
 
29.10.20
16:54
(0) сделать замер производительности при отладке обоих вариантов не предлагать?
5 youalex
 
29.10.20
16:59
(0) Если НужнаяНомен - объект (или (3)) - то 2
иначе 1.
КонецЕсли)
6 УдавВПопугаях
 
29.10.20
17:29
2

Если НужнаяНомен.Код = "ЦБ0025637 Тогда
7 УдавВПопугаях
 
29.10.20
17:30
быстрее
8 УдавВПопугаях
 
29.10.20
17:30
а быстрее и корректней - не всегда одно и тоже
9 Kassern
 
29.10.20
17:35
(0) Хотелось бы узнать в контексте чего данные конструкции используются...А потом появится еще с десяток номенклатур, которые нужно по условию проверить, будешь через ИЛИ пихать в условие?=) Имхо, привязываться к какому то коду номенклатуры для обработки события это уже как то архитектурно не правильно. Тем более, если данное условие отрабатывает в цикле.
10 youalex
 
29.10.20
17:46
>>2. Если НужнаяНомен.Код = "ЦБ0025637 Тогда    100% (1)    
>>1. Если НужнаяНомен =

ТС коварен))
11 unregistered
 
29.10.20
17:55
(0) Голосовалка составлена некорректно. (впрочем на мисте это проблема едва ли не 99% всех голосовалок)
Не хватает пунктов
3. "Одинаково".
4. "Оба варианта - редкостный *авнокод".

Я бы голосовал за п.4.

Но если вопрос чисто теоретический и не имеет отношения к реальному применению в жизни, то примерно за одинаковое время они отработают. По первому пункту НайтиПоКоду() будет искать ссылку по индексируемому полю "Код", чтобы вернуть Ссылку. По второму пункту будет искать по индексируемому полю "Ссылка", чтобы вернуть Код. Как отработает кэш при повторном обращении - фиг его знает.

Если НужнаяНомен.Код = "ЦБ0025637 Тогда
12 unregistered
 
29.10.20
17:56
примерно за одинаковое время они отработают.

Если НужнаяНомен = Справочники.Номенклатура.НайтиП
13 MishaD
 
29.10.20
17:58
Я может чего не понимаю, но вроде как при обращении через точку к реквизиту читается весь объект, что явно медленнее поиска.

Если НужнаяНомен = Справочники.Номенклатура.НайтиП
14 unregistered
 
29.10.20
18:00
Если в справочнике нет контроля уникальности кодов или есть контроль, но в результате каких-либо обменов эта уникальность нарушена, то НайтиПоКоду() вернёт первую попавшуюся с нужным кодом номенклатуру (которых может быть несколько в базе) и тогда условие не сработает, не смотря на то, что код совпадает.
15 oslokot
 
29.10.20
18:04
Если объект уже известен, то простая операция сравнения реквизита (код) со значением гораздо быстрее чем платформенный запрос
В этом случае запрос в базу НайтиПоКоду() лишний и нахрен не нужен

Если НужнаяНомен.Код = "ЦБ0025637 Тогда
16 youalex
 
29.10.20
18:05
(11) По 2 -пункту будет тащить из БД весь объект, если НужнаяНомен - это ссылка, и  если нет (3)
17 Волшебник
 
29.10.20
18:08
(0) Проведите замер производительности и доложите
18 УдавВПопугаях
 
29.10.20
18:12
(13) может я чего не понимаю, но ссылка уже есть, уже притащили и в память сунули, никаких обращений к базе быть не должно, не?
19 MishaD
 
29.10.20
18:17
(18) без замера это всё теория.
20 УдавВПопугаях
 
29.10.20
18:18
(19) это логика)
21 ДенисЧ
 
29.10.20
18:23
(18) Ссылка - это просто набор символов. Но не объект
22 УдавВПопугаях
 
29.10.20
18:24
ну во всяком случае так должно быть, ссылку получаем со всеми полями и через точку обращения к скл уже не происходит, не проверял, на истину не претендую
23 УдавВПопугаях
 
29.10.20
18:29
(21) объект тут и не нужен, хотя в (0) может и объект, но какая разница, если скорость выполнения будет зависеть от наличия обращения к БД при использовании точки. мне кажется, что ссылка что объект если уже получен, то больше в бд ходить не будет хоть через точку обращаешься хоть через запятую
24 youalex
 
29.10.20
18:30
(22) Ссылка это просто ГУИД с типом. В ней нет данных объекта. За данными объекта (за кодом в т.ч.) нужно сходить в БД. После того как вы один раз сходили в БД при вызове "НужнаяНомен.Код", данные объекта пишутся в кэш объектов, и дальше данные уже тянутся из кэша (если он не протух, понятно)
25 УдавВПопугаях
 
29.10.20
18:34
(24) это точно? надо профайлером посмотреть
"Ссылка это просто ГУИД с типом. В ней нет данных объекта" - такая формулировка смущает конечно, объект в понятиях 1с это программный Объект, переменная, в которой есть уникальная "ссылка" на запись в скл и объектная среда предоставляет возможность изменять ее
26 УдавВПопугаях
 
29.10.20
18:36
изменять в программной среде, а в скл изменения пойдут только при записи
27 УдавВПопугаях
 
29.10.20
18:44
как бы ссылка потому и ссылка, что она ссылается на запись в бд, а запись состоит из набора колонок с УИДом в одной из них, объект - реализация ссылки объектным языком для возможности изменения
28 youalex
 
29.10.20
18:51
29 УдавВПопугаях
 
29.10.20
19:40
(28) спасибо, почитал
30 rudnitskij
 
30.10.20
14:33
Опыт подсказывает, что если ускорение быстродействия ищут в подобных вещах, то торможение происходит совсем в другом месте.
Я тут когда-то давно спрашивал, не выполняется ли быстрее код 1С, написанный англоязычными операторами. Настолько велико было отчаяние...
ТС, расскажи лучше, что в целом тормозит? Заполнение документа? Открытие формы? Открытие базы?
Пробовал ли замер производительности?
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой