|
Вылетает 1С при получений данных с Com порта используя ВК написанной на C#(.NET) | ☑ | ||
---|---|---|---|---|
0
Serega_1
25.04.23
✎
11:36
|
Всем привет!
Что имеем: чистая конфигурация 1С, в ней реализуется подключение к самописной на С#(.NET) внешней компоненте которая ведет обмен по ком порту. 1С инициирует открытия порта и отправку данных в ком порт путем вызова соответствующих функций ВК. ВК при получении данных с ком порта генерирует событие которое передается в 1С процедуру путем ее подключения через ДобавитьОбработчик testEvent,ТестСобытия. При поступлении данных с ком порта в ВК, данные обрабатываются функцией указанной в свойствах(DataReceived) ком порта, в этой функции вызывается функция генерации события 1С testEvent(); И вот на момент вызова функции testEvent(), 1С вылетает, просто рушится процесс. При отладке ВК выяснилось что возникает ошибка "System.Reflection.TargetException: Объект не соответствует конечному типу". Для примера если вызвать функцию testEvent() в момент открытия порта либо отправки данных, то событие срабатывает без каких либо проблем. А именно при приходе данных возникает ошибка. Ниже код C#, Функция open() в которой для теста в начале вызывается testEvent(), которое срабатывает и генерирует событие в 1С без проблем public bool open() { try { testEvent(); port = new SerialPort(); port.PortName = "COM" + _ComNumber.ToString(); port.BaudRate = _ComSpeed; port.DataBits = 8; port.Parity = System.IO.Ports.Parity.None; port.StopBits = System.IO.Ports.StopBits.One; port.ReadTimeout = 1000; port.WriteTimeout = 1000; port.DtrEnable = true; port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); port.Open(); return true; } catch (Exception e) { _Error = "ERROR: невозможно открыть порт:" + e.ToString(); Console.WriteLine(_Error); return false; } } И функция при приеме данных, тут на момент вызова testEvent() вылетает ошибка private void DataReceivedHandler( object sender, SerialDataReceivedEventArgs e) { testEvent(); } Процедура события в 1С ТестСобытия() просто вызывает сообщение Процедура ТестСобытия() Экспорт Сообщить(1); КонецПроцедуры; Что интересно, на ПК(где ведется разработка) компонента работает без ошибок, на двух других ПК где тестировалось 1С вылетает. Версия платформы 1С 8.3.19.1467(x64), компонента так же компилируется для x64 Сборка винды(19045.2846) на всех 3 ПК одинакова так же одинаковы и версии .NET Единственная разница только в том что на ПК где это работает установлена Windows 10 Enterprise, на двух других Professional. Пробовал ставить Visual studio на ПК где не работает, предполагалось что каких то компонентов не хватает для работы, но картина не изменилась. |
|||
1
Garykom
25.04.23
✎
10:13
|
(0) Отдели работу с rs-232 (COM) от 1С
И в целом ВК лучше не использовать, используй внешнее приложение - аля микросервис И работай с ним из 1С по http |
|||
2
Serega_1
25.04.23
✎
11:34
|
(1) Отделить в каком плане? Допустим при вызове компоненты из 1С, компонента сама сделает все необходимые операции с rs232, но по выполнению всех операции по обмену с rs232, мне необходимо вызвать событие в 1С, что я пытаюсь сделать но без успешно.
Компонента пишется для работы с торговым оборудование(считывателем mifare карт). Немного почитал про микросервисы, как я понял они работают на веб сервере, и работают в режиме запрос-ответ, 1С шлет http запрос, сервис отвечает. Если не так поправьте. Возникает вопрос как микросервис может сделать обратный вызов в 1С, без запроса 1С?(событие обнаружение считывателем карты и генерации событий в 1С об обнаружении карты) |
|||
3
Garykom
25.04.23
✎
11:43
|
(2) Отделить в прямом
Напиши отдельное приложение на C# или еще на чем, которое работает с rs232 Проверь что все отлично работает А затем прикрути к нему http сервер и http клиента смотря что надо Можно из 1С стучаться через HTTPСоединение А можно http-сервис в 1С опубликовать и дергать его из внешнего приложения по событию считывания |
|||
4
Garykom
25.04.23
✎
11:47
|
(3)+ Если надо на клиенте 1С то все становится слегка сложней но не сильно
Если нельзя в делать запросы при ожидании в цикле на клиенте То нужна ВК но всего одна и универсальная Которая умеет как http-сервер и вызывать ОбработкаВнешнегоСобытия |
|||
5
Garykom
25.04.23
✎
11:49
|
(4)+ аля https://infostart.ru/public/327266/
|
|||
6
Serega_1
25.04.23
✎
11:58
|
(3) А чем вообще обусловлено что ВК лучше не использовать?
Ваш вариант рабочий, но сложность реализации немного повышается ввиду установки веб сервера, опубликовании базы, и настройка работы 1с и микросервиса как клиента и сервера одновременно. Так как необходимо и со стороны 1С инициализировать считыватель с определёнными параметрами, так и со стороны микросервиса слать события о результатах считывания, ибо постоянно опрашивать из 1С нет возможности. Да и выбор пал именно на ВК ввиду того что другое оборудование так же работают через ВК, но ВК используются готовые(напримере сканера штрихкодов, используется штатная компонента от 1С), поэтому как то и хотелось все по одному принципу сделать. Компонента была написана отлажена и вроде бы все ОК, пока дело не дошло до установки на другой ПК |
|||
7
MWWRuza
25.04.23
✎
14:27
|
(0) >> Что интересно, на ПК(где ведется разработка) компонента работает без ошибок, на двух других ПК где тестировалось 1С вылетает.
Версия ФреймВорка на компах, где вылетает, не соответствует той, под которую скомпилирована? |
|||
8
Garykom
25.04.23
✎
14:41
|
(6) >А чем вообще обусловлено что ВК лучше не использовать?
разрядность, разные ОС, общие глюки когда у тебя внешнее приложение - его можно отдельно будет поменять, не трогая 1С |
|||
9
Serega_1
25.04.23
✎
14:57
|
(7) Проверял, версии фреймворка стоят одинаковые, даже пробовал Visual ставить на тот пк где вылетает, подумал может какой компонент отсутствует, в итоге ничего не изменилось
|
|||
10
PloAl
25.04.23
✎
15:22
|
А ВК натив или СОМ, а может ВК и не ВК а СОМ объект?
Все СОМ обычно регистрировать надо под администратором. Сильно много "СОМ" плохо, как говориться первый блин СОМом). |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |