Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Может ли 1С 8.2 определить на каком COM порту находится модем ? (http://forums.kuban.ru/f1040/mozhet_li_1s_8_2_opredelit-_na_kakom_com_portu_nahoditsya_modem-2655551.html)

med 28.05.2012 09:40

Может ли 1С 8.2 определить на каком COM порту находится модем ?
 
Разрабатываем возможность рассылки СМС через GSM модем
более менее приемлемое решение нашли через внешнюю библиотеку:
RS=Новый COMОБъект("MSCOMMLib.MSComm");
RS.Settings = "115200,n,8,1";
RS.CommPort=5;
RS.Handshaking = 1;
RS.RThreshold = 1;
RS.SThreshold = 1;
RS.InputLen = 0;
RS.RTSEnable = 1;
RS.InputMode = 0 ;
Если RS.PortOpen тогда
RS.PortOpen=false;
КонецЕсли;
RS.PortOpen=True;
RS.Output="ATZ"+Символ(13);
Буфер="";
Пока ((Найти(СокрЛП(Буфер),"OK")=0) И (Найти(СокрЛП(Буфер),"ERROR")=0)) Цикл
Буфер=Буфер+СокрЛП(RS.Input);
КонецЦикла;
Сообщить(Буфер);
RS.Output="AT+CMGF=0"+Символ(13);
Буфер="";
Пока ((Найти(СокрЛП(Буфер),"OK")=0) И (Найти(СокрЛП(Буфер),"ERROR")=0)) Цикл
Буфер=Буфер+СокрЛП(RS.Input);
КонецЦикла;
Сообщить(Буфер);
RS.Output="AT+CMGS=26"+Символ(13);
Буфер="";
Пока ((Найти(СокрЛП(Буфер),"OK")=0) И (Найти(СокрЛП(Буфер),"ERROR")=0))Цикл
Буфер=Буфер+СокрЛП(RS.Input);
КонецЦикла;
Сообщить(Буфер);
RS.Output="0011000B919740186559F60008170C041F04400438043204350442"+Символ(26);

Тестовые СМС ки отправляются, но получается обработка привязана к данному системному блоку - на другом системнике ее запускаешь - уже неизвестно, какой там COM порт, надо узнавать и править...
а может 1С как как то опрашивать COM порты на предмет занятости?

med 28.05.2012 09:43

Еще нашли способ работать через запись/считывание:

модемЧ = Новый ЗаписьТекста("\\.\Com5",КодировкаТекста.ANSI);
Строк="ATIMEI"+Символ(13);
модемЧ.ЗаписатьСтроку(Строк);
Сообщить("Отправлена строка - "+ТекущаяДата());
модемЧ.Закрыть();
МодемЧ= Новый ЧтениеТекста();
МодемЧ.Открыть("\\.\Com5",КодировкаТекста.ANSI);
сч=0;
Буфер="";
Сообщить("Начало ожидания ответа - "+ТекущаяДата());
Пока ((Найти(СокрЛП(Буфер),"OK")=0) И (Найти(СокрЛП(Буфер),"ERROR")=0)) Цикл
Состояние(сч);
Буфер=Буфер+СокрЛП(МодемЧ.ПрочитатьСтроку());
Сообщить("Время цикла - "+ТекущаяДата());
сч=сч+1;
КонецЦикла;
Сообщить(сч);
Сообщить(Буфер);
Сообщить("Получен Ответ - "+ТекущаяДата());
Здесь всё хорошо ничего внешнего не используется, но обнаружились странные задержки по времени:
Отправлена строка - 25.05.2012 11:37:36
Начало ожидания ответа - 25.05.2012 11:37:36
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:38:42
Время цикла - 25.05.2012 11:39:15

ATIMEIManufacturer: TCT Mobile International LimitedModel: HSPA Data CardRevision: WX111000XXIMEI: 355249042491906+GCAP: +CGSM,+FCLASS,+DSManufacturer: TCT Mobile International LimitedModel: HSPA Data CardRevision: WX111000XXIMEI: 355249042491906+GCAP: +CGSM,+FCLASS,+DSOK
Получен Ответ - 25.05.2012 11:39:15
Т.е. ожидание ответа почти две минуты,
Может кто знает Из-за чего может быть такой долгий срок ответа ?

Ткачик 28.05.2012 09:57

Предлагаю вынести номер порта в константу, чтобы не править код.

VZ 28.05.2012 11:05

2-Ткачик > В атрибуты вызова метода...

med 28.05.2012 12:12

2-Ткачик > В принципе - да, это самый очевидный выход и так и сделаем если другого не найдем, просто не хотелось бы человеческий фактор совсем задействовать.3-VZ > А в атрибуты он откуда попадать будет ?

Ткачик 28.05.2012 12:13

(3) Я старый клюшечник и не знаю слов "атрибуты вызова метода"...


Текущее время: 23:43. Часовой пояс GMT +3.