Имя: Пароль:
1C
1С v8
Вопрос по функции "?"
,
0 БалбесВ1с
 
27.03.12
09:17
ФИОРуководителя = ?(Ответственный.ФизЛицо.Пол = Перечисления.ПолФизическихЛиц.Мужской,"Уважаемый ","Уважаемая ")+СокрЛП(""+Ответственный);
Подскажите пожалуйста почему если не выбрать Ответственный то возвращается Уважаемая?
Как это исключить,чтоб ничего не писало в случае если Ответственный не заполнено?
1 butterbean
 
27.03.12
09:18
ФИОРуководителя = ?(ЗначениеЗаполнено(Ответственный),?(Ответственный.ФизЛицо.Пол = Перечисления.ПолФизическихЛиц.Мужской,"Уважаемый ","Уважаемая "),"")+СокрЛП(""+Ответственный);
2 Rusty Nail
 
27.03.12
09:19
еще условие воткнуть?
3 vasilii85
 
27.03.12
09:19
(0)А, подумать?
4 БалбесВ1с
 
27.03.12
09:21
(1)Спасибо.
(3)Я просто не нашел эту функцию в справке.А тупо втыкать ещё Если не хотелось.У меня и так запрос в цикле ))
5 Фокусник
 
27.03.12
09:22
(4) "?" хуже, чем если, ИМХО :)
6 Shurjk
 
27.03.12
09:23
(1) Как все запутано, а простое И не спасет отца мировой революции?
7 butterbean
 
27.03.12
09:24
(6) в каком месте??
8 Fish
 
27.03.12
09:24
(5) И чем же хуже? Расскажи :)
(7) В условии.
9 orefkov
 
27.03.12
09:25
(6)
Не спасет
10 orefkov
 
27.03.12
09:26
(4)
Когда начинается цикл, запросы надо умерить.
11 Живой Ископаемый
 
27.03.12
09:28
2(6) Всегда будет ложь...
12 butterbean
 
27.03.12
09:28
(8) в каком месте условия??
13 Fish
 
27.03.12
09:29
(12) в (9) всё правильно. "И" - не спасёт.
14 Serg_1960
 
27.03.12
09:33
(шутка)

ФИОРуководителя = ?(Не ЗначениеЗаполнено(Ответственный),"Уважаемый(ая)","Уважаем" + ?(Ответственный.ФизЛицо.Пол = Перечисления.ПолФизическихЛиц.Мужской,"ый","ая"))+СокрЛП(" "+Ответственный);
15 БалбесВ1с
 
27.03.12
09:33
В (1) Работает корректно во 3х случаях.Руководствуясь принципом оккама остановлюсь на этом решении.
16 Фокусник
 
27.03.12
09:33
(8)
1) менее нагляден, чем "Если"
2) менее "ремонтопригодна" эта конструкция (что продемонстрировал пример из (0)). Появилось доп. условие и уже не удобно. С "Если" бы такого вопроса не возникло :)

PS разумеется, там где "кровь-из-носу" нужно обойтись одной строкой, "?" не заменим.
17 Ненавижу 1С
 
гуру
27.03.12
09:35
вставлю свои 2 копейки:

СоответствиеПола = Новый Соответствие();
СоответствиеПола.Вставить(Перечисления.ПолФизическихЛиц.Мужской,"Уважаемый ");
СоответствиеПола.Вставить(Перечисления.ПолФизическихЛиц.Женский,"Уважаемая ");
СоответствиеПола.Вставить(Перечисления.ПолФизическихЛиц.ПустаяСсылка(),"");

ФИОРуководителя = СоответствиеПола[Ответственный.ФизЛицо.Пол]+СокрЛП(Ответственный);
18 Serg_1960
 
27.03.12
09:36
Фокусник говорит об "читабельности" кода. И он прав. Имхо.
19 ale-sarin
 
27.03.12
09:38
(17) А разве при не указанном ответственном "Ответственный.ФизЛицо.Пол" вернет "Перечисления.ПолФизическихЛиц.ПустаяСсылка()"?
20 Serg_1960
 
27.03.12
09:38
(17) В третьей строке, вместо "" - надо "Уважаемое" :)

"Контакты третьего рода"(с)
21 Fish
 
27.03.12
09:38
(18) Не знаю, мне что если, что "?" одинаково удобно читать. Конечно, на вкус и цвет...
Некоторые и рекурсию понять не могут.
22 Ненавижу 1С
 
гуру
27.03.12
09:40
(19) а разве нет?
23 hhhh
 
27.03.12
09:42
(22) ты же на этом собаку съел. Вернет НЕОПРЕДЕЛЕНО.
24 Ненавижу 1С
 
гуру
27.03.12
09:45
(23) собак не ем:
Сообщить(ТипЗнч(Справочники.Пользователи.ПустаяСсылка().ФизЛицо.Пол)); //выдает
Пол физических Лиц
25 Reset
 
27.03.12
09:46
(23) Вернет пустую ссылку
26 ale-sarin
 
27.03.12
09:48
(24),(25) Это если "Ответственный" однозначно Ссылка Физлица, а ведь может быть и "Пользователи".
27 butterbean
 
27.03.12
09:49
(26) там всегда "Пользователи"
28 Reset
 
27.03.12
09:49
(26) При чем здесь ответственный? Р-р о реквизите "пол" со значение перечесление
29 Ненавижу 1С
 
гуру
27.03.12
09:49
(26) в (24) если ты ВНИМАТЕЛЬНО посмотришь, то там исходилось из того, что Пользователи
30 ale-sarin
 
27.03.12
09:50
(28), (29) Ай-й-ай, я ослеп. Прошу прощения. Все норм.
31 Песец
 
27.03.12
09:52
//как в (1), но более читабельно и редактируемо.
ФИОРуководителя =
Если НЕ ЗначениеЗаполнено(Ответственный) Тогда
ФИОРуководителя = "";
ИначеЕсли Ответственный.ФизЛицо.Пол = Перечисления.ПолФизическихЛиц.Мужской Тогда
ФИОРуководителя = "Уважаемый ";
Иначе
ФИОРуководителя = "Уважаемая ";
КонецЕсли;
ФИОРуководителя = ФИОРуководителя + СокрЛП(""+Ответственный);
32 Фокусник
 
27.03.12
09:52
(21) Дело не в "понять", а в затратах времени (потрачено 2 секунды или 5 секунд - это ведь тоже важно...) на осознание чужого (или уже забытого) кода :)

Когда конструкция "?" громоздкая, приходится вчитываться, где там запятая...
Хотя, если длинную конструкцию "?" так оформить:


Результат = ?(
условие,
результат1,
результат2
);


тогда тоже становится удобно читать, и при необходимости дорабатывать(!), однако это ведь почти "Если" и получается ;)

PS "ремонтопригодность": технарям должен быть понятен этот термин, "чистые программисты", наверное не сразу допрут, что я имел ввиду :)

всё вышеизложенное, сугубое ИМХО :)
33 БалбесВ1с
 
27.03.12
09:53
(17)Согласен.Красиво.Но раньше когда программировал пользовался конструкциями навроде (1)
34 Steel_Wheel
 
27.03.12
10:00
надо программистам за красоту кода доплачивать
35 Песец
 
27.03.12
10:00
// (31+) редактировать не проблема :

ФИОРуководителя =
Если НЕ ЗначениеЗаполнено(Ответственный) Тогда
ФИОРуководителя = "";
ИначеЕсли НЕ ЗначениеЗаполнено(Ответственный.ФизЛицо) Тогда
ФИОРуководителя = "";
ИначеЕсли НЕ ЗначениеЗаполнено(Ответственный.ФизЛицо.Пол) Тогда
ФИОРуководителя = "";
ИначеЕсли Ответственный.ФизЛицо.Пол = Перечисления.ПолФизическихЛиц.Мужской Тогда
ФИОРуководителя = "Уважаемый ";
Иначе
ФИОРуководителя = "Уважаемая ";
КонецЕсли;
ФИОРуководителя = ФИОРуководителя + СокрЛП(""+Ответственный);
36 vasilii85
 
27.03.12
10:01
(34)+10005000
37 Ненавижу 1С
 
гуру
27.03.12
10:02
(35) достаточно проверять

Если НЕ ЗначениеЗаполнено(Ответственный.ФизЛицо.Пол) Тогда