Каталог решений - Сравнение значений типа Хранилище

Сравнение значений типа Хранилище

Сравнение значений типа Хранилище

В наличии

Сравнение значений типа Хранилище
(простое решение для тех, кто не нашел ничего подобного на просторах интернета и не имеет навыков быстрого формирования контрольных сумм 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_Сервер

has been added to your cart:
Оформление заказа