|
Сравнение идентичности одинаковых объектов в 1С даёт неравенство | ☑ | ||
---|---|---|---|---|
0
Darklight
24.09.14
✎
12:44
|
Товарищи я в шоке
Написал вот такое сравнение Если Метаданные.СвойстваОбъектов.Проведение=Метаданные.СвойстваОбъектов.Проведение Тогда сообщить("Равны!"); КонецЕсли; И оказалось - что они НЕ РАВНЫ! Имя свойства из коллекции Метаданные.СвойстваОбъектов значения не имеет! Аналогично можно и так написать ИмяСвойства = "Проведение"; //Любое имя свойства Если Метаданные.СвойстваОбъектов[ИмяСвойства]=Метаданные.СвойстваОбъектов[ИмяСвойства] Тогда сообщить("Равны!"); КонецЕсли; Версия платформы 8.3.5.1119 Это вообще как так может быть? |
|||
1
YFedor
24.09.14
✎
12:47
|
(0) А что тебе даст такое сравнение? Зачем сравнивать заведомо одно и то же?
|
|||
2
Рэйв
24.09.14
✎
12:48
|
Метаданные.СвойстваОбъектов.Проведение.Запретить=Метаданные.СвойстваОбъектов.Проведение.Запретить
|
|||
3
Рэйв
24.09.14
✎
12:48
|
значения сравнивай.Нахрена сравнивать ненужную фигню?
|
|||
4
palpetrovich
24.09.14
✎
12:48
|
(0) переходи на клюшки, там все правильно :)
|
|||
5
Крошка Ру
24.09.14
✎
12:50
|
(0) Объекты метаданных можно сравнивать на равенство. При этом проверяется идентичность объектов, а не совпадение значений свойств. То есть проверяется то, что сравнивается именно один и тот же объект конфигурации.
http://its.1c.ru/db/metod8dev#content:2318:1 |
|||
6
Darklight
24.09.14
✎
12:53
|
(1) Ну, проблема возникла в другом месте - я по этим значениям сортировал и сопоставлял два списка (иначе никак).
(4) Простите, куда переходить? (5) Я не сравниваю метаданные... |
|||
7
Darklight
24.09.14
✎
12:54
|
(1) И, как выяснилось, - это не совсем одно и тоже
|
|||
8
Мимохожий Однако
24.09.14
✎
12:57
|
Что ты хочешь сравнить?
|
|||
9
Darklight
24.09.14
✎
13:17
|
(8) Мне нужно сопоставить два ТЕКСТОВЫХ списка (из значений свойств метаданных). Один - идентификаторы на русском, другой - на английском
алгоритм (исходные таблицы одинаковы, и отличаются только названиями идентификаторов) Для каждого Строка из таблицаСвойствНаРусском Цикл Ключ = Строка.Владелец; Элемент = КешМетаданных.Получить(Ключ); Если Элемент = неопределено Тогда Элемент = Метаданные.СвойстваОбъектов[Ключ]; КешМетаданных.Вставить(Ключ, Элемент); КонецЕсли; Строка.Элемент = Элемент; КонецЦикла; Для каждого Строка из таблицаСвойствНаАНглийском Цикл Ключ = Строка.Owner; Элемент = КешМетаданных.Получить(Ключ); Если Элемент = неопределено Тогда Элемент = Метаданные.СвойстваОбъектов[Ключ]; КешМетаданных.Вставить(Ключ, Элемент); КонецЕсли; Строка.Элемент = Элемент; КонецЦикла; таблицаСвойствНаРусском.Сортировать("Элемент"); таблицаСвойствНаАНглийском.Сортировать("Элемент"); Данные = СоздатьПустойНаборДанныхОписанияМетаданныхПеречислений(); таблицаСвойств = Данные.СтруктураДанных; таблицаСвойств.Колонки.Добавить("Значение"); таблицаСвойств.Колонки.Добавить("Владелец"); таблицаСвойств.Колонки.Добавить("ЗначениеСиноним"); таблицаСвойств.Колонки.Добавить("ВладелецСиноним"); ПредВладелец = неопределено; ТекВладелец = неопределено; Для л = 0 по таблицаСвойствНаРусском.Количество()-1 Цикл СтрокаРус = таблицаСвойствНаРусском[л]; СтрокаИнг = таблицаСвойствНаАНглийском[л]; далее прочие алгоритмы КонецЦикла; |
|||
10
Darklight
24.09.14
✎
13:39
|
(9)Всё - поборол данную хрень (в рамках контекста моей задачи конечно) - код формирования колонки для сопоставления стал таким (кешировние повторного использования значения убирать не стал, но без него тоже всё должно работать):
КешМетаданных = Новый Соответствие; Для каждого Строка из таблицаСвойствНаРусском Цикл Ключ = Строка.Владелец; Элемент = КешМетаданных.Получить(Ключ); Если Элемент = неопределено Тогда Элемент = ТипЗнч(Метаданные.СвойстваОбъектов[Ключ][Строка.Значение]); КешМетаданных.Вставить(Ключ, Элемент); КонецЕсли; Строка.Элемент = Элемент; КонецЦикла; Для каждого Строка из таблицаСвойствНаАНглийском Цикл Ключ = Строка.Owner; Элемент = КешМетаданных.Получить(Ключ); Если Элемент = неопределено Тогда Элемент = ТипЗнч(Метаданные.СвойстваОбъектов[Ключ][Строка.Value]); КешМетаданных.Вставить(Ключ, Элемент); КонецЕсли; Строка.Элемент = Элемент; КонецЦикла; То есть, я сравниваю (алгоритм сортировки сравнивает значения типов, а не сами коллекции) - это равносильно такому сравнению Если ТипЗнч(Метаданные.СвойстваОбъектов.Проведение.Разрешить)=ТипЗнч(Метаданные.СвойстваОбъектов.Проведение.Разрешить) Тогда сообщить("Равны!"); КонецЕсли; Будут равны! Но если написать по-проще вот так Если ТипЗнч(Метаданные.СвойстваОбъектов.Проведение)=ТипЗнч(Метаданные.СвойстваОбъектов.Проведение) Тогда сообщить("Равны!"); КонецЕсли; то равенство тоже будет достигнуто, НО - проблема в том, что и вот так оно тоже будет (хотя это не истина): Если ТипЗнч(Метаданные.СвойстваОбъектов.Проведение)=ТипЗнч(Метаданные.СвойстваОбъектов.РежимУправленияБлокировкойДанныхПоУмолчанию) Тогда сообщить("Равны!"); КонецЕсли; а вот так уже не будут равны Если ТипЗнч(Метаданные.СвойстваОбъектов.Проведение.Разрешить)=ТипЗнч(Метаданные.СвойстваОбъектов.РежимУправленияБлокировкойДанныхПоУмолчанию.Автоматический) Тогда сообщить("Равны!"); КонецЕсли; Тем самым вопрос исчерпан! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |