ХЕШ строка. Задача по уникальности/сравнению



На днях столкнулся со следующей задачей: разработать проверку уникальности элементов справочника по элементам табличной части этого же справочника.



Если более предметно, в справочнике Номера ГТД есть табличная часть Прослеживаемые комплектующие, в которой хранятся номера РНПТ для комплектующих с их количеством.

Если есть второй элемент с такими же номерами РНПТ и количеством независимо от порядка, то он считается не уникальным.



По опыту решения прошлых задач, пришел к решению с использованием ХЕШ строки, которую получаю следующим образом:



🔹 Получаю ТЗ из колонок ТЧ;

🔹 Сортирую ТЗ, чтобы всегда было одна последовательность;

🔹 Создаю массив со строками, куда записываю «РНПТ + Количество»;

🔹 Перевожу массив в строку с помощью функции «ЗначениеВСтрокуВнутр()»;

🔹 Создаю объект ХешированиеДанных с типом MD5;

🔹 И получая Хеш сумму, убираю пробелы;

🔹 Затем записываю полученные данные в реквизит объекта.



------------



ТаблицаДляХеширования = ПрослеживаемыеКомплектующие.Выгрузить(,"РНПТ, Количество");

ТаблицаДляХеширования.Сортировать("РНПТ, Количество");



МассивРНПТ = Новый Массив;



Для каждого СтрРНПТ из ТЗ_РНПТКоличество Цикл

МассивРНПТ.Добавить(СтрРНПТ.РНПТ.Код + " " + СтрРНПТ.Количество)

КонецЦикла;



СтрокаДляХеширования = ЗначениеВСтрокуВнутр(МассивРНПТКолво);



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

ХешированиеДанных.Добавить(СтрокаДляХеширования );



РеквизитХЕШ_ТЧ = СтрЗаменить(ХешированиеДанных.ХешСумма," ","");



------------



В итоге остается сравнивать на уникальность не ТЧ, а только один реквизит.



А где вы применяете Хеширование? 💬



Случайный пост > > >

Вспомогательные сервисы



#ЕБ_Повседневность