Имя: Пароль:
1C
 
Подскажите как связать 1Сv8 и MSMQ
0 serp1
 
25.12.07
14:31
Всем привет!

Научился создать очередь:
qinfo  = Новый COMОбъект("MSMQ.MSMQQueueInfo");
   qinfo.PathName = ".\private$\Test";
   qinfo.Create();

а дальше не могу понять как отправить сообщение в очередь и как прочитать. Пробую:
       qinfos  = Новый COMОбъект("MSMQ.MSMQQueueInfos");
       query = Новый COMОбъект("MSMQ.MSMQQuery");
   qinfos = query.LookupQueue("Test");
   qinfo = qinfos.Next;

       Если qinfo = null Тогда
       Сообщить("Очередь не найдена")
   КонецЕсли;

на строке: qinfos = query.LookupQueue("Test");    вылезает ошибка:

Ошибка при вызове метода контекста (LookupQueue): Произошла исключительная ситуация (MSMQQuery): Недопустимая строка с указанием класса

Помогите кто может простеньким примерчиком. Спасибо.
1 Биньковский Виталий
 
25.12.07
14:39
2 serp1
 
25.12.07
15:23
да по этой статье и учусь, но непонятно

Dim query As New MSMQQuery
Dim qinfos As MSMQQueueInfos
Set qinfos = query.LookupQueue(Label:="Test")


Label это вроде метка очереди но как последнюю строку переписать на 1С?
3 SilentMan
 
25.12.07
15:27
На ИТС есть пример работы с MSMQ и ВебСферой в контексте отправки и приема сообщений распределенки ...
4 Кураж
 
25.12.07
15:29
(0) "Проф. разработку" читал?...
5 serp1
 
25.12.07
15:43
спасибо SilentMan нашел пример
6 serp1
 
25.12.07
15:44
(4) а  что такое "Проф.разработка"?
7 Кураж
 
25.12.07
15:46
(6) Книжка такая толстая по восьмерке, там на эту тему есть, если не ошибаюсь...
8 serp1
 
25.12.07
15:47
спасибо попробую найти, посмотреть
9 Биньковский Виталий
 
25.12.07
15:52
лови сырцы из проф. разработки

   Процедура КнопкаВыполнитьНажатие(Кнопка)
   
       // Флаги
       MQ_SEND_ACCESS = 2;
       MQ_DENY_NONE = 0;
   
       qinfo = Новый COMОбъект("MSMQ.MSMQQueueInfo");
       
       ОчередьОбменаMSMQ = ".\MyLocale";
       ИмяФайлаСообщения = "data.xml";
       
       // Формируем путь к очереди на удаленном компьютере
       qinfo.PathName = ОчередьОбменаMSMQ + "_" + "ЦентрОфис";
       
       // Если очередь не создана, создаем
       Попытка
           qinfo.Create();
       Исключение
       КонецПопытки;
       
       // Открываем очередь на запись
       Очередь = qinfo.Open(MQ_SEND_ACCESS, MQ_DENY_NONE);
       
       ДанныеОбмена = Новый ЧтениеТекста;
       ДанныеОбмена.Открыть("c:\out.xml");
       
       // Создаем сообщение, содержащее данные обмена
       Сообщение = Новый COMОбъект("MSMQ.MSMQMessage");
       Сообщение.Label = ИмяФайлаСообщения;
       Сообщение.Body = ДанныеОбмена.Прочитать();
       Сообщение.ResponseQueueInfo = qinfo;
       
       // Помещаем сообщение в очередь
       Сообщение.Send(Очередь);
       
       Сообщить(" - Помещен файл " + ИмяФайлаСообщения + " в очередь " + ОчередьОбменаMSMQ);
       
       Очередь.Close();
       ДанныеОбмена.Закрыть();
   
   КонецПроцедуры
10 Биньковский Виталий
 
25.12.07
15:53
ещё

   
Процедура Загрузить(Кнопка)

   // Флаги
   MQ_DENY_NONE = 0;
   MQ_RECEIVE_ACCESS = 1;
   MQ_NO_TRANSACTION = 0;

   ОчередьОбменаMSMQ = ".\MyLocale";
   
   qinfo = Новый COMОбъект("MSMQ.MSMQQueueInfo");
   
   // Находим позицию начала имени очереди в АдресОбменаMSMQ
   // Хотя в нашем случае могли установить Индекс=2
   Индекс = СтрДлина(ОчередьОбменаMSMQ);
   Пока (Индекс <> 0) Цикл
       
       Если Сред(ОчередьОбменаMSMQ, Индекс, 1) = "\" Тогда
           Прервать;
       КонецЕсли;
       
       Индекс = Индекс - 1;
       
   КонецЦикла;
   
   // Собираем путь к очереди для чтения данных обмена
   // В нашем случае qinfo.PathName = ".\MyLocale_ЦентрОфис"
   qinfo.PathName = ".\" + Прав(ОчередьОбменаMSMQ, СтрДлина(ОчередьОбменаMSMQ) - Индекс) + "_" + "ЦентрОфис";
                   
   Попытка
       qinfo.Create();
   Исключение
   КонецПопытки;
   
   // Открываем очередь
   Очередь = qinfo.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE);
   
   // Временный объект необходим для поиска последнего сообщения
   СообщениеВрем = Новый COMОбъект("MSMQ.MSMQMessage");

   // Читаем первое сообщение
   СообщениеВрем = Очередь.Receive(MQ_NO_TRANSACTION, , , 0);
   
   Пока (СообщениеВрем <> Неопределено) Цикл
       
       Сообщение = СообщениеВрем;

       // Читаем последующие сообщения, если они присутствуют
       СообщениеВрем = Очередь.Receive(MQ_NO_TRANSACTION, , , 0);
       
   КонецЦикла;
   
   // Закрываем очередь
   Очередь.Close();
   
   // Если получили сообщение, разбираем его и передаем данные обмена
   // дальше для обработки
   Если Сообщение <> Неопределено Тогда
       ИмяФайлаСообщения = Сообщение.Label;
       ФайлОбмена = Новый ЗаписьТекста("c:\input.xml");
       ФайлОбмена.Записать(Сообщение.Body);
       ФайлОбмена.Закрыть();
       Сообщить(" - Принят файл обмена данными " + ИмяФайлаСообщения + " из очереди " + ОчередьОбменаMSMQ);
   КонецЕсли;
   
КонецПроцедуры
11 Биньковский Виталий
 
25.12.07
15:55
больше там ничего нет, есть WSMQ
12 serp1
 
25.12.07
16:04
Спасибо всем, разобрался