Сравнение двоичных данных

26 марта 2013

Предисловие

В рамках задачи по работе с прикрепленными файлами к информационной базе может появиться необходимость проверки изменения сохраненных данных. Например, при изменении уже присоединенного файла необходимо проверить его отличие от ранее сохраненного в информационной базе, и если изменений нет, то запись элемента не производить.

Справочник "Хранилище дополнительной информации"

Пример решения подобной задачи реализуем в конфигурации "Управление производственным предприятием" версии 1.3 для справочника "ХранилищеДополнительнойИнформации".

Поставленная задача

Задача звучит довольно просто: "Необходимо добавить проверку изменения прикрепленного файла в справочнике "Хранилище дополнительной информации" на изменение. В случае отсутствия изменения запись в информационную базу не выполнять".

Присоединение файлов к элементу справочника "Организации"

Заказчик использует присоединение файлов для справочника "Организации", где приложение сохраняются в выше названный справочник. Поэтому тестирование доработки производится для элементе этого справочника.

Форма изменения состава присоединенных файлов (дополнительной информации)

Для тестирования будем прикреплять небольшие файлы. Если в прикрепленном элементе изменить файл, то запись, соответственно, произойдет, если старый и новый файлы отличаются.

Решение

При выполнении задания учтем тот момент, что конфигурация типовая и все изменения нужно вносить с учетом последующих обновлений из пакетов поставщика, т.е. не усложнять последующие обновления типовых объектов конфигурации. Поэтому проверку на изменение двоичных данных присоединенного файла будем осуществлять в обработчике подписки на событие "ПередЗаписью" для справочника "Хранилище дополнительной информации".

Мы внесли следующие изменения в структуру метаданных конфигурации:

Изменения в структуре метаданных конфигурации

В обработчике события подписки "ПерезЗаписьюХранилищеДополнительнойИнформации" содержится следующий программный код:

Программный код для проверки изменения двоичных данных

Таким образом, сравнение двоичных данных осуществляется по строкам, преобразование двоичных данных к которым выполнено по алгоритму BASE64. Для преобразования используется стандартный метод глобального контекста "Base64Строка()", в параметр которому передаются двоичные данные.

При выполнении тестирования, если мы попытаемся прикрепить тот же самый файл, что и был сохранен ранее, появится сообщение об ошибке:

Результат выполнения проверки

На этом задачу можно считать решенной.

Выводы

Мы реализовали механизм проверки изменения файла, прикрепленного к элементу справочника "ХранилищеДополнительнойИнформации", путем преобразования его двоичных данных к BASE64-строке и сравнения уже полученных строка. Способ рабочий, но если в базе сохраняются файлы большого размера мы можем получить значительное снижение производительности, поскольку тогда будут сравниваться строки очень большого размера.

Наилучшим вариантом было бы сравнение MD5-хешей файлов, но этот способ выходит за рамки текущей статьи.


comments powered by Disqus