Имя: Пароль:
1C
1С v8
MSCOMM32.ocx назначить событие onComm
0 lEvGl
 
гуру
17.10.19
17:39
Доброго всем

Подскажите, как программно назначить событие библиотеки onComm к конкретной процедуре в модуле

ComPort = Новый COMОбъект("MSCOMMLib.MSComm.1");
ComPort.CommPort = 9;
ComPort.PortOpen = Истина;
ComPort.OutPut = Символ(49) + Символ(13);

После отправки в порт команды устройство возвращает в буфер ответ, где содержатся нужные данные. Если разместить актив Х на форме, то у него есть обработчик события onComm и проблем нет. У меня несколько устройств на разных портах(номера портов на разных машинах разные), поэтому создаю их программно, типа "динамически", возможности "мышкой" назначить обработчик события нет. Если например в шарпе можно
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

То какие могут быть варианты в нашей платформе?
1 lEvGl
 
гуру
17.10.19
18:52
ап
2 lEvGl
 
гуру
18.10.19
09:14
неужели никто не решил
3 lEvGl
 
гуру
18.10.19
10:08
текучка
4 lEvGl
 
гуру
18.10.19
12:11
вверх
5 Garykom
 
гуру
18.10.19
12:29
(0) На нашей платформе можно использовать ВК или веб-сервисы.
6 lEvGl
 
гуру
18.10.19
12:32
(5) да уже сделал на этой библиотеке, переделывать на вк не хочется
варианты то есть, но приходится вручную отлавливать данные - по количеству символов или по CommEvent ил еще как, но при этом страдает надежность
7 lEvGl
 
гуру
18.10.19
12:37
у нее, у библиотеки, должен быть класс событий, но как он называется не ясно, соответственно комобъект создать не получается

если правильно понимаю
Новый COMОбъект("MSCOMMLib.MSComm")

MSComm - это класс, тогда должно быть типа

Новый COMОбъект("MSCOMMLib.Events")

но имя неизвестно
8 lEvGl
 
гуру
18.10.19
12:37
хотя это все догадки, описания не нашел
9 Garykom
 
гуру
18.10.19
12:37
Блин используй уже обработчик ожидания и не страдай.
10 lEvGl
 
гуру
18.10.19
12:39
а что он даст? каждую секунду смотреть в буфер или я не так понял?
11 lEvGl
 
гуру
18.10.19
12:49
гм... я знаю только ПодключитьОбработчикОжидания(Процедура, Время), не об этом речь?
12 Garykom
 
гуру
18.10.19
12:54
(10) (11) Угу каждую секунду смотри что в ComPort.Input
13 lEvGl
 
гуру
18.10.19
13:06
в этом и проблема - нет синхронизации между устройством и программой, если посмотреть слишком рано или слишком поздно, то данных не будет. А компьютеры разные, скорость выполнения операций разная, поэтому у одного выполнение получения занимает 0.3 секунды, а у другого 0.5, у третьего может процессор антивирусом загрузиться и он будет обрабатывать 3 секунды. Через событие это решается оптимально и надежно - появились данные в буфере, генерится событие onComm. Генерится именно в тот момент, когда это нужно, а читая буфер по своим таймерам я получаю обрывки строк, то первую часть строки, то вторую, то совсем ничего. Микрософтовский функционал надежнее за счет схемы реализации
14 Garykom
 
гуру
18.10.19
13:23
(13) см (5)
15 lEvGl
 
гуру
18.10.19
13:31
и на том спасибо, хотя бы понятно, что так не реализуется
16 lEvGl
 
гуру
18.10.19
14:40
хотя... может увидит тот, кто все таки сделал это)
17 lEvGl
 
гуру
20.10.19
17:58
делается через

НазначитьОбработчик Событие, Обработчик;

кто то пожадничал
18 ДенисЧ
 
20.10.19
18:01
(17) Так делается или не работает?
19 lEvGl
 
гуру
20.10.19
18:05
(18) там же русским по белому написано

да и встречал это триста раз на форумах, но не приходилось использовать
20 acht
 
20.10.19
18:09
(19) > там же русским по белому написано

А то, что оно называется "ДобавитьОбработчик", а не "НазначитьОбработчик" там написано?
21 lEvGl
 
гуру
20.10.19
18:18
ах ты ж ёпырст, где же ты был??
в пятницу в середине рабочего дня не нашлось никого, кроме одного, прошли мимо. а тут на тебе, в воскресенье вечером, когда публики процентов 10 на форуме сидит - сколько знающих появилось
сказал бы я, да бан получать / нарушать общественный порядок не хочется
22 МихаилМ
 
20.10.19
18:35
модераторы, перенесите ветку из раздела 1с8 в it
23 Garykom
 
гуру
20.10.19
18:41
(22) По логике надо в юмор переносить.
24 acht
 
20.10.19
19:14
(21) >в пятницу

Ответ начальника пожарных был краток: "Потому что они были на работе"...
25 lEvGl
 
гуру
20.10.19
22:15
(23) в "загадки логики" может?
26 Garykom
 
гуру
20.10.19
22:20
(25) Юмор потому что удивляет непонимание ИТ технологий от типа программиста.
27 Garykom
 
гуру
20.10.19
22:21
28 Garykom
 
гуру
20.10.19
22:28
Да можно попробовать

ДобавитьОбработчик ComPort.onComm, НашаПроцедура();


Но оно глючит по страшному, 1С часто просто падает.
29 Garykom
 
гуру
20.10.19
22:31
Поэтому правильно это свою ВК, которая работает с COM портом и умеет в 1С ОбработкаВнешнегоСобытия


Кста для 1С 7.7 юзали http://www.1cpp.ru/forum/YaBB.pl?num=1152684759/all
30 lEvGl
 
гуру
21.10.19
10:41
(26) то есть ты типа на свое усмотрение позаботился о глупом и несведущем - не сказал про обработчик, потому что это "неправильно". А правильно, значит, это набаянить вк с интерфейсами, что бы просто взять данные с порта, при этом многие юзают даже не библиотеку, а просто через запись/чтение файла делают, если этого достаточно. Судя по твоим рекомендациям из (9) и (12) тут кто то другой не понимает принципов работы схем/интерфейсов взаимодействия программно аппаратной части. Не поверишь - много зависит от того как работает устройство, оно может работать запрос/ответ, может постоянно лить в порт данные или само по какому то событию выкидывать и еще несколько вариантов

27, 29 оставь эти ссылки себе, этих вк уже миллион и сейчас где то пишется миллион первая, предлагаешь написать свою миллион вторую, нахрена козе баян? вопрос был простой - как назначить обработчик

(22) обработчик в 1С ВЕРСИИ 8, есть штатные функции
31 lEvGl
 
гуру
21.10.19
10:42
(24) ну это совсем лол
32 Garykom
 
гуру
21.10.19
10:53
(30) А ты сказал какая у тебя версия 1С ?

С обычными виндовыми ком объектами 1С любая умеет работать, обработчики назначать не все платформы, да и то глюки на практике.
Можно считать что нет этой возможности и самое правильное (5) или хотя бы (9).
33 lEvGl
 
гуру
21.10.19
11:02
причем здесь версия? я про ветку ответил на (22)
смешные вы, один говорит что из категории 1С8 надо перенести в IT, другой, что я не обозначил версию платформы

ты, как трупраграммист (присвоение себе этого эпитета тебе видимо дает + много чсв), должен был понять проблемы реализации (9), я объяснил и уже не раз
по (5) тоже объяснил - это называется изобретать велосипед

(28) а вот это надо проверить, у меня на машине все нормально работает, действительно есть баг?
34 Garykom
 
гуру
21.10.19
11:41
(33) >действительно есть баг
Подозреваю это зависит от многих факторов, в т.ч. версии винды, платформы 1С и т.д.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший