7.7 COM объект передает данные в виде массива

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем trioka, 28 сен 2011.

  1. TopicStarter Overlay
    trioka
    Offline

    trioka Опытный в 1С

    Регистрация:
    21 окт 2009
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    1с ругается на полученную LIST. Тип переменой не поддерживается
    а в примере вот так в скрипте

    Код:
      // Функция ожидания SMS: WaitForSMS (TimeOut) возвращает 0 если сообщение получено.
    // Затем нужно получить список сообщений и обработать его:
    
    var SMSList = Device.SMSList ();
    for (i = 0; i < SMSList.length; i++) {
    
    var InId    = SMSList[i].toArray ()[0];  // Идентификатор сообщения
    var InPhone = SMSList[i].toArray ()[2];  // Номер телефона
    var InText  = SMSList[i].toArray ()[3];  // Текст сообщения
    
    Device.DeleteSMS (InId);   // Удалить сообщение из телефона
    }
    
    
    
    в 1С выглядит так
    Код:
    Процедура ПринятьСМС()
    Device.Open();
    Result = Device.WaitForSMS(300);
    Если Result <> 0 Тогда
    Сообщить("СМС не получено");
    Иначе
    List = Device.SMSList(); //(или - List = Device.SMSList) пишет: Тип переменой не поддерживается.
    Сообщить("СМС получено");
    КонецЕсли;
    Device.Close();
    КонецПроцедуры
    
    
    как средствами 1С достать InId, InPhone, InText
  2. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    не совсем понял о чем речь, но может быть "Result.SMSList"? и что вообще вернулось в Result
  3. TopicStarter Overlay
    trioka
    Offline

    trioka Опытный в 1С

    Регистрация:
    21 окт 2009
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    ждем СМС. отправляю СМС. вылетает ошибка. а надо чтобы показал от кого пришло и что пришло.

    Метод WaitForSMS ожидает входящее СМС заданное время.
    Синтаксис
    WaitForSMS (LONG Timeout, LONG * Result)
    Параметры
    Timeoutвремя ожидания входящего СМС в секундах. Нулевое значение означает бесконечное время ожидания.
    Результат
    Название константы Значение Описание
    DEVICE_S_OK 0 (0x00) СМС получено
    DEVICE_S_INTERRUPTED 4 (0x04) ожидание прервано
    DEVICE_S_TIMEOUT 5 (0x05) время ожидания истекло
    Описание
    Метод ожидает входящее СМС заданное время. Нулевое значение времени ожидания означает бесконечное ожидание. Ожидание может быть прервано асинхронным вызовом функции Cancel. Список полученных СМС можно получить функцией SMSList
    Примеры
    Показать пример на JavaScript
    var Device = new ActiveXObject ("CallOffice.Device");
    Device.Open ();
    var Result = Device.WaitForSMS (120);
    if (Result == 0) {
    alert("Получено SMS")
    }
    Device.Close ();
    ----------------------------------------
    Свойство SMSList позволяет получить список принятых СМС сообщений. Список принятых сообщений возвращается в виде двумерного массива, каждая строка которого - отдельное СМС, а столбцы имеют значение:
    0 - номер СМС;
    1 - статус СМС (0 - сообщение не прочитано; 1 - сообщение прочитано);
    2 - номер телефона с которого отправлено СМС.
    3 - текст сообщения
    Для удаления сообщений следует использовать метод DeleteSMS.
  4. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    из массива можно дергать обычными средствами.. Тут еще остается вопрос с параметрами SMSList()

    Код:
    		Result  = 0;
    Device.WaitForSMS(300,Result);
    If Result <> 0 Then ...
    Var List[3];
    Device.SMSList(List);    
    InId = List[1];
    InPhone = List[2];
    InText = List[3];
    
    
  5. TopicStarter Overlay
    trioka
    Offline

    trioka Опытный в 1С

    Регистрация:
    21 окт 2009
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    нет. не работает, дело не в том что я не умею работать с массивами, а в том что как только 1С видит обращение к SMSlist сразу выдает ошибку.
    можно ли вставить скрипт на VBA непосредственно в тело модуля?
  6. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    vb плохо владею, но должно выглядеть что-то типа такого:
    Код:
            scrptCtrl=createobject("MSScriptControl.ScriptControl");
    scrptCtrl.language="vbscript";
    scrptCtrl.addcode("
    |Function WaitForSMS() ...
    |End Function");
    Result = scrptCtrl.run("WaitForSMS");
    
    
  7. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    почему бы массив не заменить строкой с разделителями на крайняк?
  8. TopicStarter Overlay
    trioka
    Offline

    trioka Опытный в 1С

    Регистрация:
    21 окт 2009
    Сообщения:
    52
    Симпатии:
    0
    Баллы:
    26
    Что либо надо регистрировать для этого? DLL или еще чего от VBA, я им вапще не владею, но в хелповнике примеры на VBA.
    PS а это точно 1С код? почему не на Русском.
    я бы разделил, если бы получил.
  9. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    Регистрировать не надо ничего.
    Это не VBA это VBS.
    Можешь написать scrptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");

Поделиться этой страницей