|   |   | 
| 
 | Создание 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 метода и пару классов. А когда их даже не десятки, а сотни? | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |