Имя: Пароль:
1C
1С v8
Тип OleEnum в 1С
0 dchumak
 
21.12.21
11:36
Добрый день.

Можно-ли в 1С 8 использовать типы OleEnum для работы с внешней компонентой.

Есть компонента для подписи ЭЦП.

Код в 1С

Попытка
    KalkanCryptCOM = Новый COMОбъект("KalkanCryptCOMLib.KalkanCryptCOM");
Исключение
    ВызватьИсключение "Не установлен KalkanCryptCOMLib!";
КонецПопытки;

KalkanCryptCOM.Init();

Далее нужно вызвать у нее метод

Ответ = KalkanCryptCOM.SignData(АлиасСертификата, Флаги, ЗашифрованнаяДата, ВыходнаяПодпись);

Во флаги нужно передать список флагов в типе OleEnum.

Есть пример на Delphi, там тип описан вот так

type
  KALKANCRYPTCOM_FLAGS = TOleEnum;
const
  KC_SIGN_DRAFT =     $00000001;
  KC_SIGN_CMS     =      $00000002;
  KC_IN_PEM     =        $00000004;
  KC_IN_DER     =        $00000008;
  KC_IN_BASE64 =      $00000010;
  KC_IN2_BASE64 =     $00000020;
  KC_DETACHED_DATA =  $00000040;
  KC_WITH_CERT =      $00000080;
  KC_WITH_TIMESTAMP = $00000100;
  KC_OUT_PEM     =      $00000200;
  KC_OUT_DER     =      $00000400;
  KC_OUT_BASE64 =     $00000800;
  KC_PROXY_OFF =      $00001000;
  KC_PROXY_ON =       $00002000;
  KC_PROXY_AUTH =     $00004000;

Как подобное реализовать на 1С?

Спасибо.

1С:Предприятие 8.3 (8.3.18.1289).
1 acht
 
21.12.21
11:43
(0) Числами. TOleEnum - это банальное число: https://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.OleCtrls.TOleEnum

KC_SIGN_DRAFT = 1;
KC_SIGN_CMS = 2;
KC_IN_PEM = 4;
KC_IN_DER = 8;
...

Флаги = KC_SIGN_DRAFT + KC_IN_PEM;
2 H A D G E H O G s
 
21.12.21
12:18
Осталось только не отыграть хлебушка и понять, что все что после KC_IN_DER - не то, чем кажется и перевести из Hex в Dex
3 Garykom
 
гуру
21.12.21
12:33
(2) дык там банально *2
4 dchumak
 
21.12.21
12:33
(2) это нужно перевести из 16-ричной в десятичную системы?
KC_IN_BASE64 =      $00000010;
это
KC_IN_BASE64 =      16;
?
5 Garykom
 
гуру
21.12.21
12:34
(4) угу
точнее ты из 1С юзаешь 10-е же
6 Garykom
 
гуру
21.12.21
12:37
для общего развития это просто флаги из бит
которые можно удобно складывать получая составные

KC_SIGN_DRAFT = 1; //0001
KC_IN_PEM = 4;     //0100
KC_SIGN_DRAFT + KC_IN_PEM //0101
7 H A D G E H O G s
 
21.12.21
12:40
(3) Это тебе банально.
8 Garykom
 
гуру
21.12.21
12:41
(7) так это уровень школьной информатики
9 H A D G E H O G s
 
21.12.21
12:45
(8) Ты забыл в каком году живешь? Тут тебе не начало 2000-х.
10 dchumak
 
21.12.21
16:58
Спасибо большое, все получилось сделать.
11 dchumak
 
21.12.21
16:58
Это было нужно для отправки данных в маркировку Казахстана
12 dchumak
 
21.12.21
17:03
KCST_PKCS12 = 1;
Ответ = KalkanCryptCOM.LoadKeyStore(KCST_PKCS12, ПарольСертификата, ПутьКСертификату, "");

KC_SIGN_CMS         = 2;
KC_IN_BASE64         = 16;
KC_WITH_TIMESTAMP     = 256;
KC_OUT_BASE64         = 2048;

Флаги = KC_SIGN_CMS + KC_IN_BASE64 + KC_OUT_BASE64 +  KC_WITH_TIMESTAMP;
АлиасСертификата = "3c67d5b3fb14684d26b4cc6a543fba065f46fd64";
Ответ = KalkanCryptCOM.SignData(АлиасСертификата, Флаги, ЗашифрованнаяДатаВБейс64, Сигнатура);

может кому пригодится.
13 dchumak
 
21.12.21
17:04
Попытка
        KalkanCryptCOM = Новый COMОбъект("KalkanCryptCOMLib.KalkanCryptCOM");
    Исключение
        ВызватьИсключение "Не установлен KalkanCryptCOMLib!";
    КонецПопытки;

    KalkanCryptCOM.Init();

перед этим

компоненту берем из комплекта разработчика, также нужно будет поставить корневые и доверительные сертификаты (гост и рса).
14 makfromkz
 
26.12.21
19:30
(13) dchumak, давай общаться на эту тему, я ею тоже пытаюсь заниматься.
черкани мне на makospanov@mail.ru
15 gelpen28
 
25.04.22
20:23
Добрый день. не совсем понятно как подключить библиотеку разработчика к 1С достаточно перенести только файл KalkanCryptCOM.dll в папку с платформой или надо
что то переносить дополнительно из SDK, или необходимо всю папку SDK регистрировать подскажите кто в курсе ?
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.