ХЕШ строка. Задача по уникальности/сравнению
На днях столкнулся со следующей задачей: разработать проверку уникальности элементов справочника по элементам табличной части этого же справочника.
Если более предметно, в справочнике Номера ГТД есть табличная часть Прослеживаемые комплектующие, в которой хранятся номера РНПТ для комплектующих с их количеством.
Если есть второй элемент с такими же номерами РНПТ и количеством независимо от порядка, то он считается не уникальным.
По опыту решения прошлых задач, пришел к решению с использованием ХЕШ строки, которую получаю следующим образом:
🔹 Получаю ТЗ из колонок ТЧ;
🔹 Сортирую ТЗ, чтобы всегда было одна последовательность;
🔹 Создаю массив со строками, куда записываю «РНПТ + Количество»;
🔹 Перевожу массив в строку с помощью функции «ЗначениеВСтрокуВнутр()»;
🔹 Создаю объект ХешированиеДанных с типом MD5;
🔹 И получая Хеш сумму, убираю пробелы;
🔹 Затем записываю полученные данные в реквизит объекта.
------------
ТаблицаДляХеширования = ПрослеживаемыеКомплектующие.Выгрузить(,"РНПТ, Количество");
ТаблицаДляХеширования.Сортировать("РНПТ, Количество");
МассивРНПТ = Новый Массив;
Для каждого СтрРНПТ из ТЗ_РНПТКоличество Цикл
МассивРНПТ.Добавить(СтрРНПТ.РНПТ.Код + " " + СтрРНПТ.Количество)
КонецЦикла;
СтрокаДляХеширования = ЗначениеВСтрокуВнутр(МассивРНПТКолво);
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5);
ХешированиеДанных.Добавить(СтрокаДляХеширования );
РеквизитХЕШ_ТЧ = СтрЗаменить(ХешированиеДанных.ХешСумма," ","");
------------
В итоге остается сравнивать на уникальность не ТЧ, а только один реквизит.
А где вы применяете Хеширование?💬
Случайный пост > > >
Вспомогательные сервисы
#ЕБ_Повседневность
На днях столкнулся со следующей задачей: разработать проверку уникальности элементов справочника по элементам табличной части этого же справочника.
Если более предметно, в справочнике Номера ГТД есть табличная часть Прослеживаемые комплектующие, в которой хранятся номера РНПТ для комплектующих с их количеством.
Если есть второй элемент с такими же номерами РНПТ и количеством независимо от порядка, то он считается не уникальным.
По опыту решения прошлых задач, пришел к решению с использованием ХЕШ строки, которую получаю следующим образом:
🔹 Получаю ТЗ из колонок ТЧ;
🔹 Сортирую ТЗ, чтобы всегда было одна последовательность;
🔹 Создаю массив со строками, куда записываю «РНПТ + Количество»;
🔹 Перевожу массив в строку с помощью функции «ЗначениеВСтрокуВнутр()»;
🔹 Создаю объект ХешированиеДанных с типом MD5;
🔹 И получая Хеш сумму, убираю пробелы;
🔹 Затем записываю полученные данные в реквизит объекта.
------------
ТаблицаДляХеширования = ПрослеживаемыеКомплектующие.Выгрузить(,"РНПТ, Количество");
ТаблицаДляХеширования.Сортировать("РНПТ, Количество");
МассивРНПТ = Новый Массив;
Для каждого СтрРНПТ из ТЗ_РНПТКоличество Цикл
МассивРНПТ.Добавить(СтрРНПТ.РНПТ.Код + " " + СтрРНПТ.Количество)
КонецЦикла;
СтрокаДляХеширования = ЗначениеВСтрокуВнутр(МассивРНПТКолво);
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5);
ХешированиеДанных.Добавить(СтрокаДляХеширования );
РеквизитХЕШ_ТЧ = СтрЗаменить(ХешированиеДанных.ХешСумма," ","");
------------
В итоге остается сравнивать на уникальность не ТЧ, а только один реквизит.
А где вы применяете Хеширование?
Случайный пост > > >
Вспомогательные сервисы
#ЕБ_Повседневность