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

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_Сервер

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Групповая разработка (Git, хранилище) EDT Программист 1С:Предприятие 8 Россия Бесплатно (free)

Синхронизируйте свой проект EDT с хранилищем конфигурации так же легко, как в git клиенте. По кнопке Pull в проект EDT подтягиваются изменения из хранилища, по кнопке Push ваш коммит из git репозитория проекта EDT улетает в хранилище конфигурации.

09.07.2026    1849    DmitryShehovtsev    4    

18

Архивирование (backup) Групповая разработка (Git, хранилище) Системный администратор Программист Бесплатно (free)

Как дать возможность каждому разработчику 1С вести разработку, тестирование и оптимизацию на собственной полноразмерной копии базы и при этом не тратить миллиарды рублей и тысячи часов на развертывание тестового окружения, а так же экономить дисковое пространство? Расскажем о том, как с помощью инструмента Database Lab получать полноразмерные копии базы 1C на СУБД PostgreSQL за считанные секунды (даже в случае использования многотерабайтных баз).

15.12.2025    10657    nasonkin    18    

31

Инструменты администратора БД Групповая разработка (Git, хранилище) Обновление 1С Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 2.х 1С:Библиотека стандартных подсистем Абонемент ($m)

Обработка, объединяющая в себе использование инструментов БСП по администрированию кластера серверов и запуска скриптов для автоматического обновления конфигурации из хранилища.

4 стартмани

17.11.2025    2979    14    KovrovtsevAS    0    

12

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

Проектная разработка в 1С живет в условиях жестких дедлайнов, меняющихся команд и нестабильных CI/CD. В статье показываем, как быстро и без лишних затрат внедрить Git на ERP-проектах, продать идею себе и команде и избежать типичных подводных камней. Разберем ветвление, подходы к командной работе, интеграцию с таск-трекерами и особенности тяжелых конфигураций.

04.09.2025    21612    bozo    42    

12

EDT Групповая разработка (Git, хранилище) Программист 1С:Предприятие 8 Бесплатно (free)

Плагин, расширяющий функциональность EDT, предоставляя возможность работы с хранилищем конфигурации 1С без использования 1С:ГитКонвертер.

04.08.2025    15068    ZigRinat85    54    

53

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Программист 1С:Предприятие 8 1С:Библиотека стандартных подсистем Абонемент ($m)

Позволяет проектировать и выполнять сценарии, состоящие из команд 1С, Git и CMD, а также решать конфликты слияния напрямую из 1С с помощью KDiff3. Предустановлен набор команд для автоматизации сборки CFE-файлов.

1 стартмани

29.07.2025    5768    9    gorsheninsn    6    

29
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. anig99 2865 19.10.11 08:28 Сейчас в теме
Банальное фуфло. Не стоит публикации
2. pumbaE 19.10.11 13:17 Сейчас в теме
Если бы автор еще md5 высчитывал от хранилища, а потом их и сравнивал, вот это да. Тогда можно было бы говорить что в хранилище структура с ключами md5 и хранилище, при помещении в базу рассчитывается md5...
anig99 прав, фуфло. При постановке задачи первое, что приходит на ум base64 (для тех кто хотя бы раз читал справку по объекту Хранилище).
3. anig99 2865 19.10.11 13:53 Сейчас в теме
(2) а кто не читал, то ЗначениеВСтроку.
MikZ; probkaotjizni; cargobird; +3 Ответить
6. cargobird 324 03.12.17 10:29 Сейчас в теме
(3)Помогло, спасибо.
4. artbear 1589 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 Сейчас в теме
Помог, спасибо.
Ну а высоколобые хейтеры - они всегда были, есть и будут
Для отправки сообщения требуется регистрация/авторизация