|
Как понимать "Если Не" | ☑ | ||
---|---|---|---|---|
0
Artemy55
24.04.15
✎
15:27
|
Как понять конструкцию Если Не? Точнее как она работает? Если 1 то 2, но Если Не 1 то пропускаетМолча?или всёравно 2... где-то я недопонимаю.
В примере вроде и так ищет пустой реквизит, зачем НЕ ? // Пример: Проверить, что во всех документах ПриходнаяНакладная заполнен реквизит Склад. ПустаяСсылкаСклада = Справочники.Склады.ПустаяСсылка(); Если Не Документы.ПриходнаяНакладная.НайтиПоРеквизиту( "Склад", ПустаяСсылкаСклада).Пустая() Тогда Сообщить("Есть документы, у которых не заполнен реквизит Склад"); КонецЕсли; |
|||
1
boozin
24.04.15
✎
15:28
|
Документы.ПриходнаяНакладная.НайтиПоРеквизиту(
"Склад", ПустаяСсылкаСклада).Пустая() = ЛОЖЬ |
|||
2
Господин ПЖ
24.04.15
✎
15:29
|
так пишут наркоманы
|
|||
3
Stim
24.04.15
✎
15:30
|
работает - не трожь!
|
|||
4
del123
24.04.15
✎
15:32
|
Посмотри что возвращает функция НайтиПоРеквизиту
|
|||
5
Stim
24.04.15
✎
15:34
|
(2) а ты можешь написать короче код по поиску документов с пустым складом?
|
|||
6
Cyberhawk
24.04.15
✎
15:37
|
А вдруг там Неопределено или Null?
|
|||
7
Artemy55
24.04.15
✎
15:38
|
Мне кажется там ошибка автора примера, "Не" там лишнее попросту или не к месту
|
|||
8
boozin
24.04.15
✎
15:39
|
Цитата из СП:
Синтаксис: Пустая() Возвращаемое значение: Тип: Булево. Истина - ссылка не указывает ни на какой объект (пустая ссылка); Ложь - в противном случае. Что непонятного...... |
|||
9
del123
24.04.15
✎
15:40
|
(7) все к месту
|
|||
10
grate
24.04.15
✎
15:40
|
(0) Если будет найден хотя бы один документ с пустым складом - метод НайтиПоРеквизиту вернёт ссылку на него, в свою очередь Пустая() вернет ЛОЖЬ. Поэтому и нужно НЕ.
|
|||
11
del123
24.04.15
✎
15:41
|
(10) Ну прям все разжевал, так же не интересно :)
|
|||
12
D_E_S_131
24.04.15
✎
15:44
|
(2) Чего это сразу "наркоман"?
|
|||
13
Ненавижу 1С
гуру
24.04.15
✎
15:45
|
(6) а?
|
|||
14
vde69
24.04.15
✎
15:45
|
у меня в программе склад составного типа Справочник/Пользователь/Контрагент если тип у реквизита неопределен - он твоим методом НЕ НАЙДЕТСЯ!!!!
более правильно искать запросом с условием где таблица.склад.ссылка есть null |
|||
15
Stim
24.04.15
✎
15:46
|
чтобы было понятнее:
ПустаяСсылкаСклада = Справочники.Склады.ПустаяСсылка(); ДокументСПустымСкладом = Документы.ПриходнаяНакладная.НайтиПоРеквизиту( "Склад", ПустаяСсылкаСклада); Если Не ДокументСПустымСкладом.Пустая() Тогда Сообщить("Есть документы, у которых не заполнен реквизит Склад"); КонецЕсли; |
|||
16
fisher
24.04.15
✎
15:47
|
(6) Потёр лампу? :)
|
|||
17
Господин ПЖ
24.04.15
✎
15:54
|
(12) твоих рук дело?
|
|||
18
fisher
24.04.15
✎
15:58
|
(17) Да ладно. В (0) - нормальный код. Проще комментарий воткнуть, чем плодить лишние строчки для повышения читабельности.
|
|||
19
Сильф
24.04.15
✎
15:58
|
(4) истину глаголит. А потом смотреть, что возвращает метод .Пустая(). Но да - код наркоманский.
|
|||
20
Сильф
24.04.15
✎
16:00
|
(18) документы с реквизитами составного типа сосут чупа-чупс вместе с разработчиком.
|
|||
21
Анцеранана
24.04.15
✎
16:02
|
(15) а так отработает?
ДокументСПустымСкладом = Документы.ПриходнаяНакладная.НайтиПоРеквизиту( "Склад", Справочники.Склады.ПустаяСсылка()); Если ЗначениеЗаполнено(ДокументСПустымСкладом) Тогда Сообщить("Есть документы, у которых не заполнен реквизит Склад"); КонецЕсли; |
|||
22
Kvant1C
24.04.15
✎
16:02
|
(19) >>Но да - код наркоманский.
А можете показать как можно красиво написать такой код? |
|||
23
fisher
24.04.15
✎
16:03
|
(20) Это ты к чему? Типа надо при кодинге закладываться на то, чтобы меньше рефакторить если вдруг в будущем тип реквизита сделают составным?
|
|||
24
vde69
24.04.15
✎
16:04
|
(20) во всех типовых есть куча документов с составными реквизитами...
у меня склад составной - очень удобно, видно что на складе, что у менеджеров, а что в тесте у клиентов. Реально удобно! |
|||
25
Бубка Гоп
24.04.15
✎
16:05
|
(21) ито красивее выглядит
|
|||
26
StanleyMarsh
24.04.15
✎
16:10
|
(0) раз на то пошло для минимизации памяти под используемые переменные следовало бы написать:
Если Не Документы.ПриходнаяНакладная.НайтиПоРеквизиту( "Склад", Справочники.Склады.ПустаяСсылка()).Пустая() Тогда Сообщить("Есть документы, у которых не заполнен реквизит Склад"); КонецЕсли; |
|||
27
StanleyMarsh
24.04.15
✎
16:12
|
(7) не лишнее. Выражение перед НЕ возвращает Ложь, если документы с незаполненным складом есть. Без НЕ - не провалится в Если.
|
|||
28
fisher
24.04.15
✎
16:13
|
(21) Это, кстати да - очень хороший вариант.
|
|||
29
Stim
24.04.15
✎
16:15
|
а если нет реквизита Склад?
|
|||
30
Сильф
24.04.15
✎
16:16
|
(24) я не к тому, что такие реквизиты не нужны, а к тому, что написано в (23)
(23) да, и ещё по куче разных причин (22) правильнее - запросом, но, может, с вашей точки зрения это не будет "красиво". |
|||
31
Дмитрий
24.04.15
✎
16:17
|
Я всегда пишу
Если Не А=Б, потому-что мне влом переключаться, чтобы написать Если А<>Б |
|||
32
Бубка Гоп
24.04.15
✎
16:18
|
(31) а зря, меньше НЕ - читабельнее код
|
|||
33
fisher
24.04.15
✎
16:20
|
(30) Ой, да ладно! Хоть сам всегда ЗначениеЗаполнено() юзаю (кроме примитивных типов), но "кучу разных причин" было бы интересно услышать.
|
|||
34
Дмитрий
24.04.15
✎
16:21
|
(32) я не даю его никому читать )), а лично мне без разницы
|
|||
35
bolobol
24.04.15
✎
16:24
|
(29) А если нет документа ПриходнаяНакладная...
|
|||
36
Stim
24.04.15
✎
16:27
|
(35) если нет документа - то не пройдет синтаксический контроль. а без реквизита склад - пройдет
|
|||
37
bolobol
24.04.15
✎
16:29
|
(36) Особенно КД чувствителен к синтаксическому контролю и строки для Выполнить, Вычислить.
|
|||
38
Сильф
24.04.15
✎
16:37
|
(33) ну основная - это то, что конфу пилил/пилишь/будешь пилить не ты один, и что там кто под названием "Склад" подразумевает - хз.
Или такой вопрос - а если это внешняя обработка? и заранее неизвестно, на какой конфе она будет запускаться? |
|||
39
fisher
24.04.15
✎
16:42
|
(38) Слабенькие аргументы. Но я соглашусь, что это плохой стиль. Зачем использовать более узкоприменимый прием, если без всяких затрат можно использовать более универсальный? Такой код я в основном в старых конфах встречаю, когда ЗначениеЗаполнено() в платформу еще не воткнули. Пример, судя по всему, тоже еще с тех времен.
|
|||
40
fisher
24.04.15
✎
16:45
|
В старых типовых, помню, была аналогичная функция в общих модулях. Но и на пустую ссылку тоже встречалось нередко.
|
|||
41
D_E_S_131
24.04.15
✎
16:53
|
(17) Конкретно этот — нет. Но в чем симптомы наркомании хотелось бы знать. Вполне себе читабельный код. Бывает, что и не такое в одну строку напишут. А конструкция "Не... Пустая()" лучше понимается, чем ""...Пустая() = ЛОЖЬ" (ИМХО конечно).
Меня вот так больше коробит
чем
|
|||
42
la luna llena
24.04.15
✎
16:54
|
Где-то читала, что нужно использовать НЕ вместо <> типа так быстрее(32)
|
|||
43
D_E_S_131
24.04.15
✎
17:23
|
Код №1 — 17.39 сек
Код №2 — 16,81 сек
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |