Циклический избыточный код (CRC32) и NativeAPI

06.02.14

База данных - Архивирование (backup)

p1c8crc.dll - внешняя подключаемая через NativeAPI компонента из которой можно получить контрольную сумму для строки и предназначена для проверки целостности данных.

Скачать исходный код

Наименование Файл Версия Размер
Скомпилированная ВК
.dll 85,00Kb
2
.dll 85,00Kb 2 Скачать
Исходный код ВК
.zip 9,89Kb
4
.zip 9,89Kb 4 Скачать
Конфигурация
.cf 73,79Kb
2
.cf 73,79Kb 2 Скачать

Недавно озадачился получением CRC кода для строк табличной части и вот что из этого получилось. Работы по настоящей тематике проходили в несколько этапов.

Этап 1

Изучение теоретических основ расчета CRC. На этом этапепомогли статьи " Циклический избыточный код" и "Элементарное руководство
по CRCалгоритмам обнаружения ошибок"

Этап 2

Знакомство с NativeAPI для 1С8. Отличная, доходчивая и (главное) дополненая примерами статья "ВК NativeAPI на Delphi и FreePascal"

Этап 3

Оставим теорию и переходим к практике. На любимом Delphi была напишем и скомпилируем dll, которая экспортирует единственную функцию "РасчитатьCRC32". Ей передается единственный строковый параметр, а на выходе получается строка в виде hex.

В модуле проекта объявляем класс:  

TCRC32Class = class(TV8UserObject)
  public
    function crc32Func(RetValue: PV8Variant; Params: PV8ParamArray; const ParamCount: integer; var v8:TV8AddInDefBase): boolean;
  end;

и его реализацию:

function TCRC32Class.crc32Func(RetValue: PV8Variant;
  Params: PV8ParamArray;
  const ParamCount: integer;
  var v8:TV8AddInDefBase): boolean;
var
  p: WideString;
  res: string;
begin
  try
    p := V8AsWString(@Params[1]);
    res := IntToHex(CRC32String(p),0);
    V8SetWString(RetValue, res);
    result := True;
  except
    on E : Exception do begin
      res:='['+E.ClassName+'] '+E.Message;
      V8SetWString(RetValue, res);
      result := False;
    end;
  end;
end;

также в части инициализации библиотеки пишем вот такой код:

  with ClassRegList.RegisterClass(TCRC32Class, 'ExecExtention', 'TCRC32Class') do
  begin
    AddFunc('crc32Func', 'РасчитатьCRC32', @TCRC32Class.crc32Func, 1);
  end;

Функция CRC32String реализована в модуле ucrc32.pas, а класс TV8UserObject описан и реализован в модуле v8napi.pas (см. ссылку во втором этапе). Об окончании этого этапа работ сигнализирует файл p1c8crc.dll.

Этап 4

Теперь осталось подключить внешнюю компоненту к конфигурации 1С8.2 и использовать ее. Для этого создадим общий модуль "ОбщийМодульCRC32". В нем напишем вот такой код:

Функция ИнициализироватьКомпонентуCRC32() Экспорт
    Попытка
        ПодключитьВнешнююКомпоненту("ОбщийМакет.p1c8crc", "CRC32Lib", AddInType.Native);
        ОбъектВК = Новый("AddIn.CRC32Lib.ExecExtention");   
    Исключение
        Сообщить("Ошибка создания объекта внешней компоненты AddIn.CRC32Lib.ExecExtention");
        Возврат Ложь;
    КонецПопытки;

     Адрес = ПоместитьВоВременноеХранилище(ОбъектВК, Новый УникальныйИдентификатор);
     ПараметрыСеанса.нсиКомпонентаCRC32 = Адрес;
     Возврат Истина;
КонецФункции

Функция ПолучитьКомпонентуCRC32() Экспорт
     Возврат ПолучитьИзВременногоХранилища(ПараметрыСеанса.нсиКомпонентаCRC32);
КонецФункции

В модуле сеанса проинициализируем компоненту. Для того чтобы вызвать внешнюю компоненту и проверить ее создадим обработку с табличной частью "ТЧ" (реквизиты: наименование, код и crc32) и команду "РасчитатьCRC". Код получился следующий:

&НаСервере
Процедура РасчитатьCRCСерверная()
    
    ВК = ОбщийМодульCRC32.ПолучитьКомпонентуCRC32();
    Для Каждого Стр Из Объект.ТЧ Цикл
        врСтрока = Стр.Наименование+";"+Стр.Код+";";
        Стр.CRC32 = ВК.РасчитатьCRC32(врСтрока);
    КонецЦикла;    
    
КонецПроцедуры


&НаКлиенте
Процедура РасчитатьCRC(Команда)
    РасчитатьCRCСерверная();
КонецПроцедуры

P.S.

Чуть не забыл. В общих макетах нужно создать макет с двоичными данными и именем "p1c8crc". В нее загрузить полученный на этапе 3 файл p1c8crc.dll.

crc32 nativeapi ВК dll

См. также

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

Архивирование (backup) Журнал регистрации Поиск данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

21600 руб.

15.05.2017    42645    10    24    

38

BackUPv8 - система резервного копирования баз 1С

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Автоматическое создание копий файловых и серверных информационных баз 1С Предприятие 8 и размещение копий в облаке Яндекс.Диск, локальном или сетевом ресурсе.

1200 руб.

03.09.2014    14832    15    6    

18

Автоматическое резервное копирование любой клиент-серверной базы 1С в формате DT с удалением сеансов, архивацией, изменением расширения (8.3.14+, расширение)

Архивирование (backup) Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней.

6000 руб.

06.11.2012    70229    622    44    

80

Резервное копирование журнала транзакций, наконец-то!

Архивирование (backup) Администрирование СУБД Россия Бесплатно (free)

Постараюсь объяснить, зачем нужно резервное копирование именно журнала транзакций, а не только базы данных, и почему я словно сбросил груз, настроив его - как, покажу, естественно. Кстати, будут скрипты T-SQL (с подробными комментариями) - отличный способ сделать администрирование базы более уютным.

04.12.2023    6269    n_mezentsev    15    

26

Резервное копирование и восстановление 1С баз на PostgreSQL в Windows с помощью pgAdmin, bat-файлов и планировщика

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данной инструкции будет описано, как с помощью pgAdmin, bat-файлов и планировщика заданий Windows организовать резервное копирование, восстановление и хранение копий баз данных.

07.10.2022    20541    sapervodichka    36    

143

Архивирование базы в dt и дамп postgres

Архивирование (backup) Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Захотелось клиентам выгрузку архива баз, и выгрузку в дт, готовые скрипты с сети не заработали. Может, кому-то поможет. Релиз 8.3.18.1741.

1 стартмани

25.08.2022    4810    2    Gnom-Gluck    6    

7
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. gislink 37 07.02.14 09:19 Сейчас в теме
Пишется то "Рассчитать" ;-) Единственный метод, и тот с ошибкой написан.
Прикрепленные файлы:
kuzyara; zarius; +2
Оставьте свое сообщение