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

28.08.12

Разработка - Групповая разработка (Git, хранилище)

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

См. также

Системы контроля версий для 1С-разработчиков.

1С-программирование DevOps и автоматизация разработки Групповая разработка (Git, хранилище) DevOps для 1С Платформа 1С v8.3 Платные (руб)

Основы командной разработки на 1С. Использование систем контроля версий при разработке на платформе 1С:Предприятие 8

4900 руб.

29.06.2022    9386    78    4    

112

Обновляемый список последних статей Инфостарт для профиля Github

Групповая разработка (Git, хранилище) Бесплатно (free)

Не знаете, чем бы таким заполнить свой профиль Github? Заполните его своими статьями на Инфостарт! Этот простой workflow сам соберет список ваших последних статей и будет периодически обновлять его для актуализации данных.

08.04.2024    915    bayselonarrend    2    

31

Процесс разработки с использованием GIT и расширений для 1С:ERP. Без EDT

Групповая разработка (Git, хранилище) Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Доработки 1С:ERP на крупных проектах можно организовать, не внося изменения в саму типовую конфигурацию, а используя только расширения и отдельные «микроконфигурации». Расскажем о том, как это сделать без EDT, используя процесс разработки GitHub Flow.

02.04.2024    4566    Begemoth80    24    

45

Особенности национального Workflow: Github Actions и OneScript

Групповая разработка (Git, хранилище) OneScript Бесплатно (free)

Сегодня мы посмотрим на Github Actions - встроенный инструментарий Github для автоматизации рабочих процессов. Разберем, что это такое, зачем и причем тут OneScript.

25.03.2024    1567    bayselonarrend    3    

38

Автоматизация процесса разработки с помощью сервиса GitFlic

Групповая разработка (Git, хранилище) Бесплатно (free)

GitFlic – первая в России полностью самостоятельная реализация сервиса для хранения репозиториев с исходным кодом. За три года разработки сервис GitFlic стал полноценным инструментом, которым можно заменить GitLab, GitHub и BitBucket. Расскажем о том, как выстроить в GitFlic процесс автоматического тестирования, статического анализа кода и сборки приложений.

05.03.2024    2079    user1989937    6    

16

OpenYellow - рейтинг открытых GitHub репозиториев для платформы 1С:Предприятие

Групповая разработка (Git, хранилище) Бесплатно (free)

Обновляемый топ GitHub репозиториев для 1С по всем языкам программирования и еще немного рассуждений про open-source.

05.02.2024    4011    bayselonarrend    15    

63

Насколько глубок 1С-ный GitHub?

Групповая разработка (Git, хранилище) Бесплатно (free)

Open-source проекты - важная часть мира программного обеспечения. 1С привычно держится немного в стороне от глобальных трендов, но бросить холодный статистический взгляд на положение дел мне показалось небезынтересным.

22.01.2024    8055    bayselonarrend    50    

87

TCP прокси-сервер хранилища конфигурации 1С

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) OneScript Платформа 1С v8.3 Бесплатно (free)

Продолжение истории с прокси хранилища, но уже не на HTTP, а на TCP и без падений по памяти веб-сервера. Проверяем комментарии хранилища, вызываем веб-хуки, старты пайплайнов, gitsync по событию помещения версии в хранилище. И все это полностью на знакомом и понятном OneScript.

17.01.2024    3006    kamisov    17    

60
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. anig99 2843 19.10.11 08:28 Сейчас в теме
Банальное фуфло. Не стоит публикации
2. pumbaE 19.10.11 13:17 Сейчас в теме
Если бы автор еще md5 высчитывал от хранилища, а потом их и сравнивал, вот это да. Тогда можно было бы говорить что в хранилище структура с ключами md5 и хранилище, при помещении в базу рассчитывается md5...
anig99 прав, фуфло. При постановке задачи первое, что приходит на ум base64 (для тех кто хотя бы раз читал справку по объекту Хранилище).
3. anig99 2843 19.10.11 13:53 Сейчас в теме
(2) а кто не читал, то ЗначениеВСтроку.
probkaotjizni; cargobird; +2 Ответить
6. cargobird 306 03.12.17 10:29 Сейчас в теме
4. artbear 1524 19.10.11 15:42 Сейчас в теме

Если (ДвоичныеДанные1 = Неопределено ИЛИ ДвоичныеДанные2 = Неопределено)
И НЕ (ДвоичныеДанные1 = Неопределено И ДвоичныеДанные2 = Неопределено)
Тогда
Возврат Ложь;
КонецЕсли;

Код нужен, чтобы максимально запутать себя и читателей кода? :(
vz1987; pavlo; +2 Ответить
5. пользователь 27.11.12 12:45
Сообщение было скрыто модератором.
...
7. user658699_heinrich2906 21.12.21 15:34 Сейчас в теме
Помог, спасибо.
Ну а высоколобые хейтеры - они всегда были, есть и будут
Оставьте свое сообщение