|
Создание 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
|
|
|||
34
trdm
27.04.20
✎
08:58
|
test
|
|||
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
|
(39) Пример проверки сертификата без написания ВК https://ru.stackoverflow.com/questions/532477/Проверка-подписи-ЭЦП-в-файле-online-проверка-сертификата-используя-c-через-биб
|
|||
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 метода и пару классов. А когда их даже не десятки, а сотни? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |