Closed SimolSem closed 4 years ago
Добрый день. Присоединяюсь к просьбе о готовой dll. Ночью обновили платформу с 8.3.5 на 8.3.9 и компонента от Simplit перестала работать. Срочно ищем замену. Пытались сами скачать Visual Studio и скомпилировать, но пока все безуспешно.
Я пока не понимаю, почему пересохранение файла-исходника в кодировку Windows-1251 дает правильный результат (свойства ВК отображаются в правильной кодировке), ведь платформа 1С вроде бы как на UTF-8. Плюс в этой кодировке исходник на гитхабе весь в кракозяблах. BROM-Asterisk-Native.zip
Сразу скажу, что проект я давно забросил, и как он сейчас работает - проверить не имею возможности.
Никак не могу зарегистрировать ее. И через regsvr32 и через методы самой 1С.
Это Native-компонента, ее не надо регистрировать в системе. См. метод глобального контекста УстановитьВнешнююКомпоненту()
Для тестов можно сделать короче:
Попытка Результат = ПодключитьВнешнююКомпоненту("D:\BROM-Asterisk-Native.dll", "Test", ТипВнешнейКомпоненты.Native);
Если Результат Тогда ОбъектКомпоненты = Новый("AddIn.Test.ROM-Asterisk-Native"); ОбъектКомпоненты.Подключиться("127.0.0.1"); КонецЕсли; Исключение Сообщить("Исключение при инициализации"); КонецПопытки;
Этот метод я использовал в первую очередь. dll вместе с xml манифеста закинул в zip, и добавил его в общий макет как двоичные данные.
Ну, если вот прямо сейчас у меня она подключается, а у Вас нет, значит ей нужны какие-то сишные библиотеки, которых у Вас нет. Дело в том, что некоторое время назад был пулл-реквест от другого разработчика, и я его принял. Там появилось несколько методов, связанных с лицензированием и демо-режимом (которых у меня не было и не будет). Возможно, разработчик использовал какие-то зависимости.
У меня нет сейчас возможности это проверить.
Предлагаю поставить MS VC++ 2015 и скомпилировать самому. Единственное, нужно будет переконвертировать файл AddInNative.cpp в кодировку Windows1251 (опять же, ХЗ почему, у меня было все нормально и без этого).
Открыть файл AddInNative.cpp в VS 2015, затем Файл - Дополнительные параметры сохранения. Выбрать кодировку Кириллица (Windows) - Кодовая страница 1251. Нажать ОК. Пересобрать проект.
Кракозяблы в 1С исчезнут.
Хорошо, попробуем. Спасибо!
@Sancho-R Можешь дать контакт? мне тоже надо это решить, может что и придумаем. У меня пока на Подключить: Ошибка при вызове метода контекста (Подключиться): Ошибка вызова метода внешней компоненты
У меня нет сейчас компьютера, я с планшета по RDP - это неудобно. У меня нет времени этим заниматься. Код надо проверить после патча от другого программиста - я за ним НЕ проверял. У меня нет астериска под рукой.
@shachneff да, спасибо. То я написал @Sancho-R Будем пробовать запустить.
@SimolSem открыл в профиле свою почту, можно написать туда. Кстати, у нас получилось установить компоненту на компьютерах с Win 7, а на сервере с Win 2008 R2 и на компах с Win 8 выходит ошибка установки, как на моем втором скриншоте. Там, где установилось, тоже попадаем на ошибку: "Ошибка при вызове метода контекста (Подключиться): Ошибка вызова метода внешней компоненты".
Писалась и собиралась на Win10. Вот прямо сейчас делаю так и никакой ошибки нет.
Попытка Результат = ПодключитьВнешнююКомпоненту("D:\BROM-Asterisk-Native.dll", "Test", ТипВнешнейКомпоненты.Native);
Если Результат Тогда ОбъектКомпоненты = Новый("AddIn.Test.ROM-Asterisk-Native"); ОбъектКомпоненты.Подключиться("127.0.0.1"); КонецЕсли; Исключение Сообщить("Исключение при инициализации"); КонецПопытки;
Да, если у Подключиться не указать порт, то ошибки нет Но у компоненты свойство Подключено все равно ложь Буду думать дальше.....
Она простая как валенок! Я хочу, но не могу сейчас ей заняться! Там дел на 30 минут, зная С++ и имея * для отладки
я ставил себе позавчера студию и поломалась винда :)
Ага, там похоже все параметры должны быть сроковые, а не числовые как в оригинале Уже подключилась, иду дальше
РежимПрослушивания надо булево передать, а было число В конце выложу обработку 1С, когда запущу
Обработка https://cloud.mail.ru/public/7XiR/HSJ7X5UwL
Спасибо большое!!
Подстроился под косячную компоненту? Может исправим компоненту? :)
Получается надо порт в Подключить принимать число/строка и РежимПрослушивания число/булево чтобы наверняка, но я не силен в С++
Исправлю на днях, спасибо за найденный баг. Пишите еще.
Завтра буду разбирать УстановитьРегулярноеВыражение не работает "Newchannel.{1,}|Bridge.{1,}"
Вопросы по запуску и подключению компоненты можно задать мне. Все последние правки вносил я. Сильно ногами не пинать. На этой компоненте я учился писать на с++. Куда выложить готовый ДТ для 1С?
Свойство Описание Подключено Принимает «1» если подключено, «0»: если нет (Булево, нельзя установить из 1С) РежимПрослушивания Устанавливает для компоненты режим отсылки внешних событий в 1С (Булево, можно установить из 1С) РегулярноеВыражение Регулярное выражение Стандартной библиотеки C++. (Не забываем про экранирование символов.Привет С++) Версия Текущая версия компоненты. (Последняя версия всегда будет доступна на сайте или по запросу.) ОшибкаКакСобытие На данном этапе развития компоненты не задействовано. ДемонстрационныйРежим Признак работы компоненты в ДЕМО-Режиме (Булево, нельзя установить из 1С 🙂 )
Метод Описание Подключиться(АдресСервера, ПортСервера) Дает команду на подключение компоненты к серверу Asterisk. Имеет два параметра(АдресСервера(Строка), ПортСервера(Строка)) Отключиться() Дает команду на отключение от сервера Asterisk ВыполнитьКоманду(СтрокаКоманды) Дает команду на передачу команды серверу Asterisk. Тавтология какая-то. 🙂 Отправляет указанный текст в AMI и уже компонента ждет результата. А 1С продолжает работать. Результат будет выведен как внешнее событие. Асинхронный запрос. РежимПрослушивания(Режим) Устанавливает режим отсылки внешних событий в 1С. На этом этапе проверяется Ключ продукта. Если Ключ продукта неверный, то компонента будет работать в демо-режиме. УстановитьРегулярноеВыражение(Regex) Устанавливает свойство «РегулярноеВыражение», с проверкой на его корректность
В регулярных выражениях используется библиотека стандартных подсистем с++ regEx = str_regex; С кодировкой сам не могу понять. При заливке на ГИТ все побилось.
Вот и я пытался изучать С++ на этой компоненте. Но в определенный момент времени потребность в компоненте отпала (изменилось место работы) - и вот результат: заброшенный код, который стали писать вы все. Спасибо!
Привет! Вот пытаюсь по тестировать, но что-то не получается. Подключаю компоненту - все ок Дальше подключаюсь к астериску - Подключиться("ip","port") - все ок В обработчике событий, показывает одно событие: ROM-Asterisk-Native Connected Server:данные сервера и на этом все... Может подскажите что еще надо сделать? Или есть у кого простенький пример обработки подключения? Пробовал - Action: login (и далее нужные параметры) - вроде без ошибок Пробовал менять РежимПрослушивания(True/False) - вроде без ошибок А вот событие не показываются..
В Pull Request два файла. Пример подключения и работы. В модуле управляемого приложения в процедуре ПриНачалеРаботыСистемы добавить УправлениеТелефониейКлиент.Активизировать();
Забыл. В модуле управляемого приложения добавить процедуру
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) //ДанныеСобытия=УправлениеТелефониейКлиент.ДанныеВСоответствие(Данные); //Сообщить("Источник="+ Источник+ " Событие="+Событие+" Данные="+Данные);
// ИнноваТелефония
Если Источник = "InnovaIT-Asterisk-Native" Тогда
УправлениеТелефониейКлиент.ОбработатьВнешнееСобытие(Событие,Данные);
КонецЕсли;
// Конец ИнноваТелефония
КонецПроцедуры
И добавить две глобальные переменные
Перем ПараметрыПриложения Экспорт; Перем ГлТелефония Экспорт;
Спасибо! А это точно пример с этой компонентой? Смущает другое название источника.. И еще вопрос, будет работать только на управляемом приложении? А на обычном?
Это пример из форка. Который я притащил сюда. Работает в боевом режиме. При 50 сотрудниках. Полёт нормальный.
На обычном тоже будет работать. Только по технологии native
Все получилось. Теперь воюю с регулярными выражениями. Спасибо!
А чем мои не устроили?
Устроили =) Разбираюсь что и как работает Там в комментариях описано Newstate, Hangup - сейчас пробую их подключать и смотрю что получается
ECMAScript в помощь. Не забываем экранировать.
Доброго времени суток. Не могу понять что не так делаю.
Не УДАЛОСЬ подключить загрузить компоненту для связи с Asterisk{Обработка._ПанельТелефонии.Форма.ПанельУФ.Форма(81)}: Ошибка при вызове метода контекста (ЗагрузитьВнешнююКомпоненту): Ошибка при загрузке внешней компоненты
Не создать объект внешней компоненты для связи с Asterisk.{Обработка._ПанельТелефонии.Форма.ПанельУФ.Форма(25)}: Тип не определен (AddIn.ROM-Asterisk-Native)
Сборка проходит успешно, но при установке вот такая проблема: Может кто подскажет что не так делаю?
Запуск в толстом клиенте? Так же важна разрядность клиента.(Я не профи, но у меня вроде как заработало :) )
В тонком клиенте тоже работает, только не в WEB.
DimanoOVS может сбросишь dll? Или может я не так подключаю:
АдресВнешнейКомпоненты = "D:\1C\asterisk\BROM-Asterisk-Native-master\Debug\ROM-Asterisk-Native1.dll"; УстановитьВнешнююКомпоненту(АдресВнешнейКомпоненты);
?
так нельзя. Она в zip архиве должна быть с XML вида "
У меня так
Функция ЗагрузитьКомпонентуТелефонии_NativeAPI() Попытка ПутьКФайлу=Объект.ПутьКФайлуВК; Результат = ПодключитьВнешнююКомпоненту(ПутьКФайлу, "sip", ТипВнешнейКомпоненты.Native); Сообщить(Результат); Сообщить(ПутьКФайлу); Исключение Сообщить(Результат+"Не удалось подключить загрузить компоненту для связи с Asterisk"+ОписаниеОшибки()); Возврат Ложь; КонецПопытки; КонецФункции
Использую только Native
Положил в архив с файлом MANIFEST.xml: `<?xml version="1.0" encoding="UTF-8"?>
Скачай два файла. "Управление телефонией сервер" и управлениеТелефониейКлиент. Соответственно расположи их в общих модулях.
абыл. В модуле управляемого приложения добавить процедуру
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) //ДанныеСобытия=УправлениеТелефониейКлиент.ДанныеВСоответствие(Данные); //Сообщить("Источник="+ Источник+ " Событие="+Событие+" Данные="+Данные);
// ИнноваТелефония Если Источник = "InnovaIT-Asterisk-Native" Тогда УправлениеТелефониейКлиент.ОбработатьВнешнееСобытие(Событие,Данные); КонецЕсли; // Конец ИнноваТелефония
КонецПроцедуры
И добавить две глобальные переменные
Перем ПараметрыПриложения Экспорт; Перем ГлТелефония Экспорт;
Замени источники на свои
УправлениеТелефониейКлиент не вижу
Добрый день! А можно попросить положить и скомпилированную DLL? Попросил товарища скомпилировать (он и писал предыдущее ижью про заголовки) он скомпилил, кодировка не 1251 в dll и свойства с методами - крякозяблы. А при вызове методов латинской 1С возвращает ошибку при вызове метода "Подключиться" причем написано кракозяблами, хотя я вызывал "Connect". Получается dll сопоставило Connect=Подключиться но что-то скомпилилось не так и не работает. (старая dll на 8.2 рабтает с этим экземпляром астериска)