В чем разница в сравнении перечисления?

1. alexlkt 09.08.18 14:17 Сейчас в теме
Кто может объяснить какие варианты сравнения возможны:

Если ДанныеПечати.Контрагент.ЮрФизЛицо=Перечисления.ЮрФизЛицо.ЮрЛицоНеРезидент Тогда
					ПечатьКодТНВЭД=1;
				КонецЕсли;


или такой вариант:
Если СокрЛП(ДанныеПечати.Контрагент.ЮрФизЛицо)="Юр. лицо, за пределами РФ" Тогда
					ПечатьКодТНВЭД=1;
				КонецЕсли;


где ДанныеПечати.Контрагент.ЮрФизЛицо=ПеречислениеСсылка.ЮрФизЛицо

данное условие находится в Обработка.ПечатьОбщихФорм.МодульМенеджера

Если можно более развернутый ответ почему нельзя или можно!
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 298 09.08.18 14:28 Сейчас в теме
(1) поменяют представление перечисления, и придется перепиливать весь код где такое условие стояло.
3. herfis 500 09.08.18 14:45 Сейчас в теме
Первый вариант - канонический (еще лучше - с использованием функции ПредопределенноеЗначение).
Второй хоть ничего смертельного в себе и не несет (вряд ли кто-то будет менять синоним элемента представления), но пованивает.
Потому что хороший код всегда сравнивает ссылки, а не наименования. Тем более непонятно почему так не делать, когда никакой проблемы это делать не составляет. Когда такое видишь, то к разработчику сразу возникают вопросы. Потому что у хорошего разработчика на такое рука в принципе "сбиться" не может.
Ну и как уже сказали, вероятность изменения синонима элемента перечисления все же остается. Лично мне бы даже в голову не пришло проверять при этом конфу на предмет вот таких вот перлов.
4. enschede 09.08.18 14:57 Сейчас в теме
Все правильно выше написали. То есть главный критерий тут - устойчивость кода и ответственность за его работоспособность..
СокрЛП(ДанныеПечати.Контрагент.ЮрФизЛицо)="Юр. лицо, за пределами РФ"

Такой вариант ломается в пользовательской части с помощью, в-общем-то, стандартного функционала, ничем не запрещенного. Ответственность за это на разработчике, который этот код писал.
ДанныеПечати.Контрагент.ЮрФизЛицо=Перечисления.ЮрФизЛицо.ЮрЛицоНеРезидент

Такой вариант тоже можно сломать. Но только в конфигураторе, поменяв само перечисление. Здесь уже ответственность на том, кто вносит изменения.
5. user652236_dima_-_- 09.08.18 15:30 Сейчас в теме
во всех случаях лучше выбрать ЮрФизЛицо контрагента запросом, (и любые реквизиты элемента) т.к. при таком написании весь элемент попадет в оперативную память.
на большом массиве это будет заметно, ведь у контрагента есть ещё табличные части, и они также почитаются.

добавить в данные печати и выбрать потом:
ДанныеПечати.ЮрФизЛицоКонтрагента
6. enschede 09.08.18 15:39 Сейчас в теме
(5) Ну, это уже высокие материи. Автор темы вроде какой-то типовой код выдернул и про него спрашивает. Пределов для оптимизации не существует, всегда можно написать код, который будет работать оптимальнее, только всегда ли это кому-то нужно?
7. herfis 500 09.08.18 15:54 Сейчас в теме
(5) Ничего страшного в обращении через точку нет, если это происходит не в цикле. Узким местом это не станет никогда, а значит эту неоптимальность можно смело принести в жертву повышению лаконичности и читабельности кода, которая в мире энтерпрайз-разработки ценится гораздо выше.
8. enschede 09.08.18 15:57 Сейчас в теме
(7) Это на экзамене по платформе запугают людей, а потом они боятся даже через точку обращаться в коде. А потом долго, долго на практике вникают, где границы применения всех этих пугательных рекомендаций.
10. herfis 500 09.08.18 16:09 Сейчас в теме
(8) Пугают правильно. Лучше знать, чем не знать и лучше перебдеть, чем недобдеть. Хорошие программисты всегда из перфекционистов выходят :) Практика и здравый смысл потом расставят вещи по своим местам.
9. enschede 09.08.18 16:00 Сейчас в теме
(7) Потому что на практике если всем рекомендациям следовать, то получается, что на простейшую обработку на какое-нибудь групповое изменение учетных данных в базе нужно кучу времени убить.
А потом глядишь на примеры кода типовых конфигураций и понимаешь, что "запрос в цикле" - это не такая уже непогрешимая вещь.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот