Имя: Пароль:
1C
 
сравнение номенклатуры в двух Таблицах значений
0 ksenod
 
21.06.19
13:41
кусок кода
Если (СтрСтараяТЗВнеш.Номенклатура = СтрСтараяТЗВнут.Номенклатура) Тогда

Отладчиком вижу что там лежит одно и то же, но сравнение дает ЛОЖЬ, в чем подвох и как их правильно сравнивать?
1 palsergeich
 
21.06.19
13:43
Если ссылочные типы, то сравни так
Строка(СтрСтараяТЗВнеш.Номенклатура.УникальныйИдентификатор()) = Строка9СтрСтараяТЗВнут.Номенклатура.УникальныйИдентификатор())
Если строка - проверь невидимые символы
2 1Сергей
 
21.06.19
13:43
Типы какие у Номенклатуры?
3 lxs
 
21.06.19
13:44
(0) Больше кода давай, то, что ты тут показал - херня полная
4 Timon1405
 
21.06.19
13:44
Добавь в код и посмотри что пишет
Сообщить(""+СтрСтараяТЗВнеш.Номенклатура+" *** "+ТипЗнч(СтрСтараяТЗВнеш.Номенклатура));
Сообщить(""+СтрСтараяТЗВнут.Номенклатура+" *** "+ТипЗнч(СтрСтараяТЗВнут.Номенклатура));
5 palsergeich
 
21.06.19
13:47
(4) Как вариант тоже, бывает и такое)
6 ksenod
 
21.06.19
13:52
(1) Спасибо работает, можете рассказать почему так?
7 ksenod
 
21.06.19
13:53
(2) СправочникСсылка (3) Уже ответили.
8 palsergeich
 
21.06.19
13:55
(6) Странно, это всего лишь должно было облегчить диагностику, там ссылка на элемент приводилась к строке, с точки зрения операции действия равнозначные, что сравнивать ссылку, что представление ее GUID.
Я просто думал на то, что есть абсолютные дубли элементов, такое бывает при корявых обменах, и тогда доказать, что элементы в БД действительно разные можно только по GUID
9 ksenod
 
21.06.19
13:55
(1) Сравнивал выгруженные таблицы реализаций товаров и услуг(документ из бух3.0)
10 lxs
 
21.06.19
13:55
он по COM получал таблицу и сравнивал COMссылку с внутренней ссылкой.
11 palsergeich
 
21.06.19
13:56
(10) А тогда все ясно
В таком случае сравнение по GUID рулит
12 ksenod
 
21.06.19
13:58
(10) Функция получающая на вход 2 тз и ищущая одинаковую номенклатуру в этих двух тз.
13 ksenod
 
21.06.19
14:01
(10) Можете подсказать где прочитать про это? вот мой псевдокод без мешуры
Документ1=ССылкаНаДок.ПолучитьОбъект();
ВыборкаДетальныеЗаписи = ССылкаНаДок.Товары.Выгрузить();
Документ2=ССылкаНаДок.ПолучитьОбъект();
ВыборкаДетальныеЗаписи = ССылкаНаДок.Товары.Выгрузить();
Потом цикл в цикле по строкам документа сравниваю номенклатуру, почему простое сравнение без GUID не справилось?
14 1Сергей
 
21.06.19
14:03
(10) как ты это протелепатировал?
15 lxs
 
21.06.19
14:04
(14) Интуиция - способность головы чуять жопой)
16 Serg_1960
 
21.06.19
14:06
(14) +1
Да, действительно откуда инсайд. Не уж то только глядя на "ТЗВнеш"и "ТЗВнут"?
17 ksenod
 
21.06.19
14:09
Мне серьёзно интересно, можете рассказать где можно прочитать про эти сравнения, что именно он сравнивает когда я делаю как написал выше, какие ссылки попадают в сравнение? Буду благодарен за любую ссылку на лекцию-документацию.
18 lxs
 
21.06.19
14:10
(13) Потому что не сравнивают com-ссылки
19 ksenod
 
21.06.19
14:14
(18) Но я вроде бы не использовал com ссылки, если я например в 1 документе создам 2 строки с одинак номенклатурой и сравню из как в (0)  то получу так же ложь. Или я по дефолту использую com в конструкции типа ССылкаНаДок.Товары.Выгрузить();
20 lxs
 
21.06.19
14:14
(19) ССылкаНаДок - это что?
21 ksenod
 
21.06.19
14:15
(20) ДокументСсылка.РеализацияТоваровУслуг
22 lxs
 
21.06.19
14:16
(21) ДокументСсылка - это что?
23 lxs
 
21.06.19
14:16
тьфу))))))))
24 lxs
 
21.06.19
14:17
Покажи инициализацию ССылкаНаДок
25 Йохохо
 
21.06.19
14:17
(23)(15) гвинпин
26 ksenod
 
21.06.19
14:20
(24) На форме её выбираю, это её реквизит.
27 1Сергей
 
21.06.19
14:27
(26) всё из тебя клещами доставать надо. нормально рассказывай что с чем сравниваешь и откуда
28 ksenod
 
21.06.19
14:29
(27)
Документ=ССылкаНаДок.ПолучитьОбъект();
    ВыборкаДетальныеЗаписи = ССылкаНаДок.Товары.Выгрузить();
    НормализованнаяТЗ = ВыборкаДетальныеЗаписи.СкопироватьКолонки();
    Для Каждого СтрСтараяТЗВнеш Из ВыборкаДетальныеЗаписи Цикл
        Сч = СтрСтараяТЗВнеш.НомерСтроки+1;
        Пока Сч <  ВыборкаДетальныеЗаписи.Количество() Цикл
            СтрСтараяТЗВнут = ВыборкаДетальныеЗаписи[Сч];
            Сч=Сч+1;
            Если (СтрСтараяТЗВнеш.Номенклатура.УникальныйИдентификатор() = СтрСтараяТЗВнут.Номенклатура.УникальныйИдентификатор()) Тогда

Вот кусок кода, ССылкаНаДок реквизит с формы, там ручками выбирается документ, хочу склеить строки с одинаковой номенклатурой.
29 ksenod
 
21.06.19
14:32
(27) бп3.0 без без доработок
30 1Сергей
 
21.06.19
14:35
(28) в запросы не умеешь, да?
31 ksenod
 
21.06.19
14:44
(30) Умею, но зачем тут? Вопрос же не в этом был. Ес
32 hhhh
 
21.06.19
15:27
(31) уникальные идентификаторы точно разные, это не обсуждается. Нельзя сравнивать

Если (СтрСтараяТЗВнеш.Номенклатура.УникальныйИдентификатор() = СтрСтараяТЗВнут.Номенклатура.УникальныйИдентификатор()) Тогда


сравнивай строки.
33 ksenod
 
22.06.19
11:35
(32) Но строки разные, интересует именно равенство номенклатур, и с этим сравнением скрипт отработал так как я от него ожидал.
34 Chameleon1980
 
22.06.19
15:52
(0) может у тебя в одном случае ссылка, а в другом объект?
что-то часто у тебя получить объект в смеси с "сравнение ссылок"
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший