Вот наткнулся на своеобразный механизм работы функции ХешированиеДанных(). Задача следующая: в двух базах имеется один и тот же документ, перенесенный через ЗаписьXML (GUID и прочие реквизиты совпадают полностью). Требуется сравнить "снимок" документа, чтобы понять отличается он или нет (например, если пользователь поменял какое-то значение в реквизите документа).
Код используется следующий:

```1c
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    ЗаписатьXML(ЗаписьXML, Ссылка.ПолучитьОбъект());
    ДанныеСтрока = ЗаписьXML.Закрыть();

    Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
    Хеш.Добавить(ДанныеСтрока);

    Результат = Хеш.ХешСумма;
```

Если сравнить ДанныеСтрока на равенство - будет Истина. Плагин ТС для сравнения файлов тоже выдает равенство, расчет суммы MD5 через ТС так же выдает одинаковое значение, НО в 1С суммы стабильно разные. Что за особенность такая функции ХешированиеДанных?
Как можно снять "снимок" документа, не перебирая значения его реквизитов?
---
Вот такая конструкция начала выдавать одинаковые Хеши. По большому счету, для моей задачи этого будет достаточно, т.к. наличие лишних пробелов в текстовых полях на "снимок" документа не влияют.

```1c
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    ЗаписатьXML(ЗаписьXML, Ссылка.ПолучитьОбъект());
    ДанныеСтрока = ЗаписьXML.Закрыть();

    ДанныеСтрока = СтрЗаменить(ДанныеСтрока, " ", ");
    ДанныеСтрока = СтрЗаменить(ДанныеСтрока, Символы.ВК, ");
    ДанныеСтрока = СтрЗаменить(ДанныеСтрока, Символы.ВТаб, ");
    ДанныеСтрока = СтрЗаменить(ДанныеСтрока, Символы.НПП, ");
    ДанныеСтрока = СтрЗаменить(ДанныеСтрока, Символы.ПС, ");
    ДанныеСтрока = СтрЗаменить(ДанныеСтрока, Символы.ПФ, ");
    ДанныеСтрока = СтрЗаменить(ДанныеСтрока, Символы.Таб, ");

    Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
    Хеш.Добавить(ДанныеСтрока);
    Вывести(Хеш.ХешСумма);
```

Всем спасибо за помощь
---
Приложите файлы со значениями ДанныеСтрока из одной базы и из другой базы.
---
в обеих базах данные идентичные полностью
---
мы народ недоверчивый: скиньте, пожалуйста, файлы, сформированные в разных базах)
---
делаю через переменную с типом "Строка" на форме, потом copy-paste и ТС
---
суммы на ТС и 1С сравнивали? С ней есть совпадение у какой базы?
---
совпадений нет. но я так подозревая, что проблема в том, что в ТС я делаю хеш файла, возможно от самого файла еще что-то прилипает
---
Взял твой код, два раза повторил на одном документе - поимел один хеш.
Ты как делал?
---
в одной базе хеш всегда одинаковый, и в другой одинаковый. но между собой они отличаются.
---
А платформа одна и та же?
---
да. платформа 1С:Предприятие 8.3 (8.3.14.1779), конфигурации к хранилищу подключены. документ "рожается" в одной базе, потом переносится во вторую вместе с GUID'ом
---
т.е. две строки идентичны, платформа одна и та же, а хеш разный? "ДанныеСтрока" равны, получается, для разных баз?

ЗЫ: Вообще, хеш весьма опасно пользовать для сравнения двух сущностей, в которых бит больше, чем в хеше. MD5 - это 128 бит. 128 бит - это 16 символов. Так вот если в исходных данных символов больше 16-ти, то каждый дополнительный бит - это коллизии. Например, есть у Вас текст в 1000 байт (килобайт, не путать с кибибайтом). В итоге количество коллизий одного и того же хеша будет равно 2^(8000-128), т.е. 2^7872 - это оооочень большое число. А с большими числами как? Найдется ситуация, когда хеши двух разных документов будут одинаковы.

ЗЫЗЫ: Пример: у нас в системе есть механизм поиска лицевых счетов по их реквизитам в регистре с хешами. Так вот у меня был документ с 10к строк всего, в котором было аж ДВЕ коллизии, т.е. три строки с разным содержимым дали один и тот же хеш, хотя вроде бы 128 бит - это овер дохрена (2^128).
---
строки идентичны, да. платформа одна и та же - да. а хеш в разных базах разный. ДанныеСтрока через copy-paste в блокнотик дают одинаковый результат.

а какой еще можно подобрать способ для сравнения объектов, чтобы не перебирать все подряд реквизиты? я думал. что суть хеша - выдавать один и тот же результат, базируясь на одних и тех же исходных данных.

p.s. есть подозрения, что проблема тут во всяких спец символах, которые появляются после ЗаписьXML.Закрыть(). пробовал через СтрЗаменить() прогонять пробелы, переносы и т.п. - не помогает
---
Важная особенность (только что нашел): если в Хеш.Добавить(Строка) передать просто строку - то Хеш в двух базах начинает совпадать. Видимо проблема именно в том, что ДанныеСтрока получаются из ЗаписьXML.Закрыть()
---
Значит какие-то различия есть.
---
возможно проблема в BOM-символах. ОТ них при записи XML не избавиться, при том при копировании через блокнот они не копируются. Запишите XML в обоих базах в файл, потом файлы сравните.
---
размер разный, содержание одинаковое. Чертовщина какая-то ((
---
сравнивать нужно байты, а не текст. Выложите оба файла
---
файлики, выплюнутые 1С через ТекстовыйДокумент.УстановитьТекст().Записать()

p.s. сравнил средствами ТС по содержимому - текст совпал. А вот когда стал сравнивать по байтам - стали отличаться.
---
да, нашел это же место. теперь вот надо придумать, как от этого мусора избавиться. и откуда он вообще взялся, если документа через XML переносился (обработка выгрузка загрузка данных)
---
разница здесь:
<НазначениеПлатежа>Оплата за поставки продуктов по накладным за период с 12.02.2021 г. по 21.02.2021 г.
Сумма 488439-38 руб.
В т.ч. НДС (20%) 60116-96 руб., НДС (10%) 11612-52 руб.</НазначениеПлатежа>
В переводе строк. В одном Это 0A (перевод строки), в другом это 0D0A (возврат каретки и перевод строки).
---
Вот такая конструкция начала выдавать одинаковые Хеши. По большому счету, для моей задачи этого будет достаточно, т.к. наличие лишних пробелов в текстовых полях на "снимок" документа не влияют.

```1c
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    ЗаписатьXML(ЗаписьXML, Ссылка.ПолучитьОбъект());
    ДанныеСтрока = ЗаписьXML.Закрыть();

    ДанныеСтрока = СтрЗаменить(ДанныеСтрока, " ", ");
    ДанныеСтрока = СтрЗаменить(ДанныеСтрока, Символы.ВК, ");
    ДанныеСтрока = СтрЗаменить(ДанныеСтрока, Символы.ВТаб, ");
    ДанныеСтрока = СтрЗаменить(ДанныеСтрока, Символы.НПП, ");
    ДанныеСтрока = СтрЗаменить(ДанныеСтрока, Символы.ПС, ");
    ДанныеСтрока = СтрЗаменить(ДанныеСтрока, Символы.ПФ, ");
    ДанныеСтрока = СтрЗаменить(ДанныеСтрока, Символы.Таб, ");

    Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
    Хеш.Добавить(ДанныеСтрока);
    Вывести(Хеш.ХешСумма);
```

Всем спасибо за помощь