Сравнение значений типа Хранилище
Сравнение значений типа Хранилище
(простое решение для тех, кто не нашел ничего подобного на просторах интернета и не имеет навыков быстрого формирования контрольных сумм CRC, md5 средствами 1С, но имеет желание или необходимость выполнения такого сравнения).
* было актуально для платформы 8.2, платформа 8.3 уже позволяет получить хеш MD5 или CRC32
- Описание
- Подробнее
Описание
Цель:
отслеживать изменение содержимого реквизитов, имеющих тип Хранилище, например, при реализации механизма хранения истории изменения прикрепленных к объекту файлов в типовой конфигурации.
Задача:
получить инструмент, позволяющий сравнивать двоичные данные на основании их строкового представления.
Решение:
Представляю Вам функцию для сравнения значений типа Хранилище:
Функция СравнитьХранилища(Хранилище1, Хранилище2)
Если ТипЗнч(Хранилище1)=Тип(«ХранилищеЗначения») Тогда
ДвоичныеДанные1 = Хранилище1.Получить();
ИначеЕсли ТипЗнч(Хранилище1)=Тип(«ДвоичныеДанные») Тогда
ДвоичныеДанные1 = Хранилище1;
Иначе
Возврат Неопределено;
КонецЕсли;
Если ТипЗнч(Хранилище2)=Тип(«ХранилищеЗначения») Тогда
ДвоичныеДанные2 = Хранилище2.Получить();
ИначеЕсли ТипЗнч(Хранилище2)=Тип(«ДвоичныеДанные») Тогда
ДвоичныеДанные2 = Хранилище2;
Иначе
Возврат Неопределено;
КонецЕсли;
Если (ДвоичныеДанные1 = Неопределено ИЛИ ДвоичныеДанные2 = Неопределено)
И НЕ (ДвоичныеДанные1 = Неопределено И ДвоичныеДанные2 = Неопределено)
Тогда
Возврат Ложь;
КонецЕсли;
Base64Строка1 = Base64Строка(ДвоичныеДанные1);
Base64Строка2 = Base64Строка(ДвоичныеДанные2);
Возврат Base64Строка1 = Base64Строка2;
КонецФункции
Вместо непосредсвенного использования Base64Строка для сравнения можно использовать хэши, сформированные, например, с помощью решения представленного здесь: «Простая и быстрая хэш функция (hash) средствами 1С (оптимизированный вариант)».
ВНИМАНИЕ: Начиная с версии платформы 8.3 вместо формирования строки Base64 уместее использовать получение хеша MD5 или CRC32 с помощью объекта «ХешированиеДанных«.
…
Хеш = ПолучитьMD5_Сервер(ТекстДляХеша);
…
Функция ПолучитьMD5_Сервер(Текст)
ОбъектХеш = Новый ХешированиеДанных(ХешФункция.MD5);
ОбъектХеш.Добавить(Текст);
Возврат ОбъектХеш.ХешСумма;
КонецФункции // ПолучитьMD5_Сервер

