Имя: Пароль:
1C
1С v8
Создание dll на C# для 1С 8
0 pereval
 
21.04.20
19:02
Ребята, знающие, подскажите, второй день бьюсь.
Разрабатываю dll для 1С 8 на C#. Насколько я понял существует 2 способа интеграции с 1С: NativeApi и Com. NativeApi для не .NET приложений.
Получается у меня единственный путь только через COM?
Гугл дает мало ссылок именно на C#.
Наведите на правильный путь
1 Garykom
 
гуру
21.04.20
19:14
2 H A D G E H O G s
 
21.04.20
19:14
Я знал, что придет Егор.
3 Garykom
 
гуру
21.04.20
19:14
4 Garykom
 
гуру
21.04.20
19:15
(2) Я знал что ты не сможешь удержаться от этого коммента.
5 Serginio1
 
21.04.20
19:59
Егор спасибо!
http://catalog.mista.ru/public/457898/
6 Serginio1
 
21.04.20
20:00
7 sitex
 
naïve
21.04.20
20:34
(0) автор ты сразу лучше им пиши, все равно все будут знать что они придут )))
8 ДНН
 
21.04.20
20:47
То есть на C# можно написать полноценную NativeAPI внешнюю компоненту? Ограничений никаких нет? Смогу с TCP и UDP работать? И внешнее событие в 1С тоже?
9 Serginio1
 
21.04.20
20:59
(8)Да. http://catalog.mista.ru/public/548701/
Правда при этом можно оставить только нужные библиотеки по минимуму. Сделано было еще на .Net Core 1.1
10 Бертыш
 
21.04.20
23:11
Хотелось бы у наших знатаков C# попросить санкции перевести статью на английский и опубликовать на своём ресурсе
11 Serginio1
 
21.04.20
23:46
Если ты о моих статьях то публикуй, что хочешь. Я для людей старался. Просто к сожалению мои труды не особо то и востребованы.
12 pereval
 
22.04.20
12:01
(3) Это вот очень полезный и хороший пример. Ребята, спасибо. Двигаемся дальше. Как закончим компоненту - поделюсь бесплатно.
Остальные все комменты так же пришлись по теме.
Как получится все - напишу:-)
13 pereval
 
27.04.20
05:49
(3) Делаю dll согласно мануалу http://catalog.mista.ru/public/332786/
Скопировал папку V8.AddIn
Создал простейшую компоненту:

using System.Runtime.InteropServices;
namespace V8.AddIn
{
    public class SomeName
    {
        public SomeName()
        {
        }
        [Alias("Выполнить")]
        public string ProcessString(string text)
        {
            return "Hello world from c#";
        }
    }
    [Guid("6a81d0a9-6441-463f-a0c9-ec7b1f2cbd56")]
    [ProgId("AddIn.SomeComponent")]
    [ComVisible(true)]
    public class Some : LanguageExtenderAddIn
    {
        public Some() : base(typeof(SomeName), 1000)
        {
        }
    }
}
В настройках проекта выставил х64 (1С 64х битный)
Создал файл манифеста:
<?xml version="1.0" encoding="UTF-8" ?>
<bundle xmlns="http://v8.1c.ru/8.2/addin/bundle">;
    <component os="Windows" path="eSignPushTest.dll" type="native" arch="x86_64" />
</bundle>
Собрал в архив, залил в конфигурацию в ОбщийМакет как Внешнюю компоненту.
Пишу такой код в 1С

<br><pre>
    ПодключитьВнешнююКомпоненту("AddIn.SomeComponent");
    ОбъектКомпоненты = Новый("AddIn.SomeName");        
    ОбъектКомпоненты.Выполнить("Быстро");
</pre>
Не работает, пишет «Тип не определен (AddIn.SomeName)».

P.S. Пробовал вызывать НачатьУстановкуВнешнейКомпоненты(ОписаниеОповещения, "ОбщийМакет.eSignPushTest"); — пишет Компонента успешно установлена.
14 Garykom
 
гуру
27.04.20
05:57
(13) В след раз используй для кода теги
15 Garykom
 
гуру
27.04.20
05:57
(14)+
16 Garykom
 
гуру
27.04.20
05:57
(13) Что за ВК то пишешь, для чего?
17 Garykom
 
гуру
27.04.20
05:59
И да 1С у тебя точно x64 ?
Проверил на готовом примере без изменений что работает?
18 pereval
 
27.04.20
06:01
(14) Извиняюсь
(15) Исправлюсь. Первый раз
(16) Рукописная подпись с помощью планшета или Андроид приложения и интеграция ее в PDF
19 Garykom
 
гуру
27.04.20
06:04
(18) >Рукописная подпись с помощью планшета или Андроид приложения и интеграция ее в PDF

Прикольно.
А зачем в этом случае ВК обычная для 1С?

Как у у тебя будет выглядеть процесс подписи?
Вот есть комп и 1С на нем (тонкость клиент-сервер) и есть планшет/смартфон на Android.
Дальше что?
20 pereval
 
27.04.20
06:17
(19) Делаем бесплатное расширение для 1С Документооборот. Необходимо обеспечить предварительное чтение внутри 1С PDF файла и установить внутри документа место для подписи. Документ подписывают несколько человек. Факт подписания учитывается и храниться на сервере (сервисе). На Андроид приходит подписанту push уведомление с хэш PDF документа. Он подписывает стилусом или пальцем подпись.
Простая электронная подпись и визуализация реальной привычной подписи в электронном виде.

Также планируется использование планшетов, в течении месяца.
21 Garykom
 
гуру
27.04.20
06:37
(20) Так ВК то для описанного не нужна же.
В ПолеHTMLдокумента можно PDF показать и место для подписи указать.
Дальше все через http. Или внешний веб-сервис поднимать для обмена с андроид приложением или из 1С их опубликовать.
22 pereval
 
27.04.20
06:45
(21) Думали над таким вариантом. Есть проблемы с юзабилити. При установке подписи необходимо указывать углы верхний, нижний, левый, правый. Также пользователь может двигать и менять размер этого прямоугольника. Тут еще перспектива в том что например 5 подписанотов расписываются не в один момент времени, а постепенно. Необходимо отображать реальные подписи на подписываемом документе.
PDF также может быть многостраничный, может быть разных форматов и размеров. Плюс дальше необходимо будет все равно подключение девайсов типа стационарного планшета.
Подумали и решили что мы пользователям дадим такую компоненту, с которой им удобно будет подписывать документы удаленно.
23 Garykom
 
гуру
27.04.20
06:52
(22) ВК 1С конечно могут на клиенте отображать ГУИ (чтобы показать PDF и прочее) но они изначально для этого не предназначены!
Имхо лучше это делать как раз через HTML/JS, тогда легко и в браузере и в ПолеHTMLДокумента и просто отдельное приложение.

Сделайте просто отдельное WPF приложение тогда на C#/.Net и все.
1С прекрасно его запустит и данными по разному можно обмениваться.
24 pereval
 
27.04.20
07:42
(17) Windows 64, 1C в папке 64
(23) не хотел бы заставлять пользователей устанавливать дополнительное ПО. Чтобы не испытывать неудобство. Разные права пользователей. Профили.
25 Garykom
 
гуру
27.04.20
08:08
(24) Не надо ничего устанавливать - просто из макета двоичные данные в temp и оттуда запускается из 1С.
ВК работает кстати абсолютно аналогично, только dll копируется из макета и ровно такие же права нужны.
26 Garykom
 
гуру
27.04.20
08:09
(25)+ Если нужен внешний вьювер PDF файлов со своим функционалом - exe самое логичное же
27 Garykom
 
гуру
27.04.20
08:10
(26)+ ВК в виде DLL нужна только если хочется обратную связь в 1С через ВнешнееСобытие.
Но и тут логично делать exe + dll ВК.
28 trdm
 
27.04.20
08:33
(14) > В след раз используй для кода теги

они не работают
29 Garykom
 
гуру
27.04.20
08:37
(28) Странно.

У меня работают?
30 pereval
 
27.04.20
08:50
(26) во внешнем или стороннем вьювере не укажешь место для подписи
Черновой вариант пока вот такой
https://drive.google.com/file/d/1-NQ0C1vkCrPKkU0nbHqaolNG-1O1L6YU/view?usp=sharing

1С ников не хочу заставлять интегрировать к себе и устанавливать exe. Кто-то побоится. Кто-то не поймет. Хочется сделать красиво. И с точки зрения архитектуры, и с точки зрения разработчика 1С, а также пользователя порадовать:-)

(27) а хранить exe можно в 1С? Без установки ее на комп? Тут еще есть проблема - в идеале хочу чтобы на веб-клиенте работало.
31 Garykom
 
гуру
27.04.20
08:52
(30) >а хранить exe можно в 1С? Без установки ее на комп? Тут еще есть проблема - в идеале хочу чтобы на веб-клиенте работало.

Можно в макете хранить в двоичных данных (когда ВК там отдельный вид макета внешняя компонента).
На веб-клиенте будет работать если стоит "Расширение для работы с 1С:Предприятием"
https://chrome.google.com/webstore/detail/1centerprise-extension/pbhelknnhilelbnhfpcjlcabhmfangik
32 Garykom
 
гуру
27.04.20
08:54
(30) Просто засунуть формы для показа пользователю в ВК 1С это слегка нестандарт.
Т.е. можно но проблем много.

Проще как написал (26) и при необходимости (27)
33 trdm
 
27.04.20
08:57

//==============================================================================
// тест1() © trdm 2020-04-23 16:47


//==============================================================================
// тест1() © trdm 2020-04-23 16:47
34 trdm
 
27.04.20
08:58
test


Гугл дает мало ссылок именно на C#.
Наведите на правильный путь
35 trdm
 
27.04.20
08:58
Хм. работает.
36 Serginio1
 
27.04.20
13:19
Ну да <component os="Windows" path="eSignPushTest.dll" type="native" arch="x86_64" />
Только COM
Проще http://catalog.mista.ru/public/457898/

Ну а не COM на Ъ http://catalog.mista.ru/public/548701/
37 Garykom
 
гуру
27.04.20
13:26
(36) О!

Нет ли случаем хорошего примера на С++ с многопоточностью?
Для работы с rs232 надобно.

На Lazarus я уже наваял и вот хочу на С++ переписать.
38 Garykom
 
гуру
27.04.20
13:26
(37) *примера ВК для 1С на С++ с многопоточностью?
39 Бешеный заяц
 
27.04.20
13:32
(0) в своё время тоже пытался компоненту написать на C# потом плюнул и через строку параметры передавать стал.
реализовал подписание PDF файла с видимой печатью использовал библиотеку iTextSharp
40 Serginio1
 
27.04.20
14:02
Не плюсы это не моё. Я его использовал только для 1С и CEF https://habr.com/ru/post/321898/
Ну а в новых С++ там вроде и async появились
41 Serginio1
 
27.04.20
14:04
42 Garykom
 
гуру
27.04.20
14:07
(40) async то может и появился но вот rs232 он по прежнему блокируемый зараза.
Ожидание получения данных чтобы прочитать из порта надо в отдельном потоке запускать.
А еще надо несколько ком-портов чтобы одна вк на много девайсов.
43 Garykom
 
гуру
27.04.20
14:10
(41) У ТС не сертификаты а факсимиле - по сути графические файлы накладываются.
Имхо на HTML/JS это надо делать для 1С. Но и внешнее приложение тоже вариант, в комплекте с ВК для уведомлений 1С что файлик "подписан" и можно забирать.
44 Serginio1
 
27.04.20
14:18
Для .Net библиотек выше крыши. Для 8 ки и ВК не нужно, можно все через добавить обработчик http://catalog.mista.ru/public/417830/
(42) В С#  можно подключить на событие чтение порта. Но и запустить поток на чтение не проблема
45 Garykom
 
гуру
27.04.20
14:23
(44) C# это размеры ВК и зависимость от .Net
Кстати мне очень понравился пример ВК на Lazarus https://github.com/Zawullon/fpnativeapi
Который easyexample - там простейше ВК пилится.

Надо бы подобное на С++ и C# наваять, а затем и на Go.
46 Serginio1
 
27.04.20
14:31
(43) Это пример использования библиотек .Net в 1С. Наверняка есть куча готовых библиотек для сертификаты а факсимиле. Их легко использовать. Либо дописать свой код.
Суть один раз зарегистрировав NetObjetToIDispatch45 ты можешь использовать любые сборки .Net без COM регистрации
47 Garykom
 
гуру
27.04.20
14:40
(46) Так мне то не надо объяснять я в курсе про NetObjetToIDispatch45.
Но есть небольшой минусик - оно не пашет на сервере 1С.
Там или NativeAPI или уже классический зареганный COM-объект в Windows.
А Linux только NativeAPI ВК.
48 Бешеный заяц
 
27.04.20
14:51
(46) есть библиотека про неё уже писал iTextSharp называется, позволяет средствами pdf рисовать факсимилье в подписи, в том числе защищает от изменения итд, если нет желания возиться с внешней компонентой можно через командную строку все передавать как я и сделал
49 Serginio1
 
27.04.20
14:54
(48) А можно через NetObjetToIDispatch45 вызвать и не только iTextSharp
50 Serginio1
 
27.04.20
15:19
(48) Можно кучу задач решить через командную строку. Но у неё проблемы, не все можно решить.
Вот пример NetObjectToIDispatch45

Суть её в том, что 1С для вэб сервисов не поддерживает куки, а в данном случае авторизация идет чере куки. У вэб сервиса куча методов и классов.
Даже через ком написать всю инфраструктуру с сом совместимыми оюъектами куча времени. Но обертка NetObjetToIDispatch45  помогает использовать уже существующие классы
51 Garykom
 
гуру
27.04.20
16:03
(50) Cookie это обычные заголовки

Запрос.Заголовки.Получить("Cookie");

И можно обработать их в http сервисе на 1С и вернуть назад через Set-Cookie

Да возможно веб-сервисы (SOAP которые) в 1С не але с куками.
Ну так не вижу особой проблемы через http все сделать. Да низкий уровень ну что поделать.

Не ниже чем через .Net.
52 Serginio1
 
27.04.20
16:32
(51) В .Net ты даже меньше пишешь чем на 1С для получения объекта, вызова метода, а через http  это закат солнца вручную.
Кроме того там бывает и безопасность на уровне транспорта https://docs.microsoft.com/ru-ru/dotnet/framework/wcf/feature-details/transport-security-overview

Да и можно сделать 1-2 метода и пару классов. А когда их даже не десятки, а сотни?
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс