Имя: Пароль:
1C
 
Почему выражение ПустаяСсылка <> ПустаяСсылка возвращает истину?
,
0 Momus
 
27.02.23
16:32
https://pastenow.ru/b419779c5473afa21a52ec0f8dda461b
Выражение ПроверяемыйОбъект[ИмяПоля] <> Ссылка[ИмяПоля] возвращает истину, где
ПроверяемыйОбъект[ИмяПоля] - пустая ссылка справочника,
Ссылка[ИмяПоля] - пустая ссылка этого же справочника
1 trdm
 
27.02.23
16:37
Не даром же пустаяСсылка - это метод менеджеров, а не глобального объекта.
2 Momus
 
27.02.23
16:37
ПроверяемыйОбъект - ДокументОбъект уже ранее записанный, но возможно измененный (Организация из скриншота не меняется).
3 Волшебник
 
модератор
27.02.23
16:37
Надо проверять так:

Если ссылка.Пустая() Тогда
4 Momus
 
27.02.23
16:39
(3) это в моем случае вышло так, что проверяемый реквизит - пустая ссылка. Вообще это типовой код ДО 2.1, проверяющий изменения реквизитов до и после записи
5 Garykom
 
гуру
27.02.23
16:40
(3) Надо проверять так:

Если НЕ ЗначениеЗаполнено(ссылка) Тогда
6 Momus
 
27.02.23
16:40
т.е. это не баг, а фича и для пустые ссылки нельзя сравнивать?
7 Momus
 
27.02.23
16:40
две пустые ссылки*
8 Garykom
 
гуру
27.02.23
16:42
(6) (7) имхо поведение не определено
тупо не реализована equals функция
9 Momus
 
27.02.23
16:45
(8) странно, что это в типовом ДО. Код должен проверять изменения подписанного файла. Получается, что эта проверка никогда не срабатывает, кроме тех случаев, когда вообще все реквизиты заполнены и пустые ссылки не сравниваются)
10 Hmster
 
27.02.23
16:45
Может у тебя ИмяПоля это 2 разные переменные?
11 Momus
 
27.02.23
16:46
(10) на скрине видно, что нет
12 Garykom
 
гуру
27.02.23
16:48
(0) Мне у тебя на скрине очень не нравится "Ссылка[ИмяПоля]"
Иногда Ссылка может быть в модуле служебным и перекрываться с неопределенным поведением
13 Hmster
 
27.02.23
16:48
(11) ПроверяемыйОбъект["Организация"] <> Ссылка["Организация"]. Так что получается? визуально может выглядеть как одна переменная но бывает буквы меняют на другой язык
14 Momus
 
27.02.23
16:51
(13) Да, так. Выражение "ПроверяемыйОбъект["Организация"] <> Ссылка["Организация"]" возвращает тоже истину
15 Momus
 
27.02.23
16:52
(12) Ссылка в данном случае - это параметр процедуры общего модуля
16 Garykom
 
гуру
27.02.23
16:53
А ПроверяемыйОбъект и Ссылка что такое?
Какой тип имеют?
17 Garykom
 
гуру
27.02.23
16:55
И да ты надеюсь в курсе что .ПустаяСсылка() менеджера и .Ссылка незаписанного элемента это две разные вещи?
Хотя .Ссылка незаписанного тоже "пустая"
18 Momus
 
27.02.23
16:56
(16) ПроверяемыйОбъект - ДокументОбъект уже ранее записанный, но возможно измененный (Организация из скриншота не меняется).
Ссылка - ДокументОбъект.Ссылка, переданный в общий модуль в качестве параметра
19 Momus
 
27.02.23
16:58
(17) Думаю это ключ к решению. Я меняю только номер документа, но возможно разработчики меняют также, например, организацию, даже если она не изменилась.
20 Momus
 
27.02.23
17:00
(19) Так и есть. Всем спасибо
21 Hmster
 
27.02.23
17:00
А если это сначала загнать в переменные
Перменная1 = ПроверяемыйОбъект[ИмяПоля];
Перменная2 = Ссылка[ИмяПоля];

И Проверить
Перменная1 = Перменная2
Перменная1 <> Перменная2
Не Перменная1 = Перменная2
?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший