#0
by alexkozin
Коллеги, приветствую! Встал в ступор. По шаблону "накатал" внешнюю компоненту. Инициализируется нормально, никаких проблем, IInitDone отрабатывается нормально, но вот беда - ни одного определенного мной метода 1С не видит. То есть в компоненте есть мой метод methTest, но 1С при вызове метода ВК.methTest пишет "Метод объекта не обнаружен". Компонента зарегистрирована через regasm и инициализирована в 1С без ошибок. Платформа 1с 8.2.14.533 Куда копать? Заранее спасибо!
#2
by Кирпич
смотреть на свой код пока не вскочишь и воскликнешь: "о боже! неужели это я мог допустить такую глупую ошибку!"
#5
by alexkozin
'Сгенерируйте уникальный идентификатор компоненты (меню Tools - Create GUID) 'Укажите ProgID компоненты (по этому имени ее будет находить 1С). 'Пример регистрации компоненты в системном реестре, чтобы ее смогла найти 1С: Public Class vk_OLE Const c_AddinName As String = "vk_OLE" Public Sub New ' Обязательно для COM инициализации 'Вызывается при начале работы внешней компоненты (2 раза) Private Sub Init(<MarshalAs(UnmanagedType.IDispatch)> ByVal pConnection As Object) Implements IInitDone.Init 'Вызывается при начале работы внешней компоненты (2 раза) Private Sub Done Implements IInitDone.Done 'Вызывается при завершении работы внешней компоненты (2 раза) MessageBox.Show("Завершение работы ВК") Dim obj1C As Object 'Объект 1С Dim g_flagInit As Boolean 'Признак, что инициализация obj1C уже прошла '<MarshalAs(UnmanagedType.IDispatch)> Dim g_var As Object Dim g_var As Object Sub GetNProps(ByRef plProps As Integer) Implements ILanguageExtender.GetNProps 'Здесь 1С получает количество доступных из ВК свойств Sub FindProp(ByVal bstrPropName As String, ByRef plPropNum As Integer) Implements ILanguageExtender.FindProp 'Здесь 1С ищет числовой идентификатор свойства по его текстовому имени Select Case bstrPropName Sub GetPropName(ByVal lPropNum As Integer, ByVal lPropAlias As Integer, ByRef pbstrPropName As String) Implements ILanguageExtender.GetPropName 'Здесь 1С (теоретически) узнает имя свойства по его идентификатору. lPropAlias - номер псевдонима 'Функция генерирует исключение в 1С Sub Raise1CException(ByVal s As String) Dim ei As ExcepInfo '1004 - красный значок !!! '1005 - зеленый значок i '1006 - красный значок err Sub GetPropVal(ByVal lPropNum As Integer, ByRef pvarPropVal As Object) Implements ILanguageExtender.GetPropVal 'Здесь 1С узнает значения свойств pvarPropVal = Nothing Select Case lPropNum End Select Catch ex As Exception 'Обработчик исключительных ситуаций (ошибок) Sub SetPropVal(ByVal lPropNum As Integer, ByRef varPropVal As Object) Implements ILanguageExtender.SetPropVal 'Здесь 1С изменяет значения свойств Select Case lPropNum '///////////////////////////////////////////////////////// Sub IsPropReadable(ByVal lPropNum As Integer, ByRef pboolPropRead As Boolean) Implements ILanguageExtender.IsPropReadable 'Здесь 1С узнает, какие свойства доступны для чтения pboolPropRead = True ' Все свойства доступны для чтения Sub IsPropWritable(ByVal lPropNum As Integer, ByRef pboolPropWrite As Boolean) Implements ILanguageExtender.IsPropWritable 'Здесь 1С узнает, какие свойства доступны для записи pboolPropWrite = True ' Все свойства доступны для записи Sub FindMethod(ByVal bstrMethodName As String, ByRef plMethodNum As Integer) Implements ILanguageExtender.FindMethod 'Здесь 1С получает числовой идентификатор метода (процедуры или функции) по имени (названию) процедуры или функции plMethodNum = -1 Select Case bstrMethodName Sub GetMethodName(ByVal lMethodNum As Integer, ByVal lMethodAlias As Integer, ByRef pbstrMethodName As String) Implements ILanguageExtender.GetMethodName 'Здесь 1С (теоретически) получает имя метода по его идентификатору. lMethodAlias - номер синонима. Sub GetNParams(ByVal lMethodNum As Integer, ByRef plParams As Integer) Implements ILanguageExtender.GetNParams 'Здесь 1С получает количество параметров у метода (процедуры или функции) Select Case lMethodNum Sub GetParamDefValue(ByVal lMethodNum As Integer, ByVal lParamNum As Integer, ByRef pvarParamDefValue As Object) Implements ILanguageExtender.GetParamDefValue 'Здесь 1С получает значения параметров процедуры или функции по умолчанию pvarParamDefValue = Nothing 'Нет значений по умолчанию Sub HasRetVal(ByVal lMethodNum As Integer, ByRef pboolRetValue As Boolean) Implements ILanguageExtender.HasRetVal 'Здесь 1С узнает, возвращает ли метод значение (т.е. является процедурой или функцией) pboolRetValue = True 'Все методы у нас будут функциями (т.е. будут возвращать значение). Sub CallAsProc(ByVal lMethodNum As Integer, ByRef paParams As System.Array) Implements ILanguageExtender.CallAsProc 'Здесь внешняя компонента выполняет код процедур. А процедур у нас нет. Sub CallAsFunc(ByVal lMethodNum As Integer, _ ByRef pvarRetValue As Object, _ <MarshalAs(UnmanagedType.IDispatch)> ByRef paParams As System.Array) _ 'Здесь внешняя компонента выполняет код функций. Try pvarRetValue = 0 'Возвращаемое значение метода для 1С Select Case lMethodNum 'Порядковый номер метода '////////////////////////////////////////////////////////// Case Methods.methTest 'Реализуем метод для тестирования доступа к 1С If g_flagInit = False Then Dim obj0 As Object Case Methods.methSetValue 'Реализуем метод для установки значения из 1С в внешнюю компоненту Case Methods.methGetValue 'Реализуем метод для чтения значения в 1С из внешней компоненты 'Реализуем метод для очистки переменной (иначе 1С зависает в памяти) Catch ex As Exception 'Обрабатываем исключение (ошибку)
#7
by alexkozin
А вот ошибка: {Форма.Форма.Форма}: Метод объекта не обнаружен (methTest) Сообщить(ВК.methTest);
#8
by Serginio1
А зачем тебе ВК? посмотри Там кстати реализована ВК для получения глобального контекста и интерфейсов
#10
by alexkozin
Здарова! Да, попадает и загрузка и выгрузка компоненты робит отлично. IInitDone отрабатывает без проблем.
#11
by alexkozin
дык научиться хочу)) Кстати, спс за ссылку, обязательно ознакомлюсь, но для начала хотелось бы разобраться с ВК.
#12
by Serginio1
Так для того, что бы научиться, нужно посмотреть на уже существующие решения. Там есть и реализация ВК
#13
by Кирпич
Sub GetMethodName(ByVal lMethodNum As Integer, ByVal lMethodAlias As Integer, ByRef pbstrMethodName As String) Implements ILanguageExtender.GetMethodName это что за фигня? здесь ты должен возвращать имя метода по его номеру
#14
by Маратыч
Погодь, у тебя FindMethod что искать пытается, посмотри. Ты ей пихаешь methTest, а у нее в Case такого нет, есть только Test. Плюс еще.
#17
by alexkozin
приколюха в том что в отладчике да данных функций почему-то не доходит. Последний отрабатываемый метод это ILanguageExtender-овский RegisterExtensionAs Sub RegisterExtensionAs(ByRef bstrExtensionName As String) Implements ILanguageExtender.RegisterExtensionAs и усё.... даьше как будто выходит из отладчика
#18
by alexkozin
'///////////////////////////////////////////////////////////////////////////////// Sub FindMethod(ByVal bstrMethodName As String, ByRef plMethodNum As Integer) Implements ILanguageExtender.FindMethod 'Здесь 1С получает числовой идентификатор метода (процедуры или функции) по имени (названию) процедуры или функции plMethodNum = -1 Select Case bstrMethodName доделал, но один фиг толку 0 '///////////////////////////////////////////////////////////////////////////////// Sub GetMethodName(ByVal lMethodNum As Integer, ByVal lMethodAlias As Integer, ByRef pbstrMethodName As String) Implements ILanguageExtender.GetMethodName 'Здесь 1С (теоретически) получает имя метода по его идентификатору. lMethodAlias - номер синонима. pbstrMethodName = "" Select Case lMethodNum
#19
by alexkozin
Хожу отладчиком. Короче почему-то не заходит в методы FindMethod и т.д. В общем ооладчик не хотит ходить по методом интерфейса ILanguageExtender :(
#20
by ProgAL
У тебя ГУИД ком объекта ILanguageExtender должен быть точно таким как в шаблоек внешних компонент в примерах на диске ИТС. И у интерфейса IInitDone, IAsyncEvent, IStatusLine тоже.
#21
by ProgAL
Вероятно, причина именно в этом. 1с просто не видит твои интерфейсы, т к тыкается через кваериинтерфейс в предопределенные значения ГУИДов, а твои ГУИДы другие.
#22
by alexkozin
Клянуся ГУИД как надо именно такой, с другим даже компонента не регится AB634003-F13D-11d0-A459-004095E1DAEA :(
#28
by alexkozin
Ага, так и делаю. Создается нормально, отладчиком нормально ходит по интерфейсу IInitDone и по первому методу интерфейса ILanguageExtender "RegisterExtensionAs", но вот в остальные методы отладчик не идет почему-то. Осталось с помощью коллег выяснить почему) Будешь смеяться, но это пример))
#31
by Кирпич
какие нафиг чудеса?! Просто понятия нет никпкого. Когда будет понятие, сам свои ошибки видеть будешь, а не искать их через мисту методом тыка.
#34
by Serginio1
Не работающий вариант. А на будущее проще использовать 15. В ближайшем будущем прикручу автоматическую компиляцию врапера для обертки нетовских событий в комовские.
#38
by Сияющий в темноте
он там ещё и встр неправильно формирует его нужно создавать а не копировпть
#39
by alexkozin
у меня сейчас единственный вопрос остался, суть которого в следующем "почему отладчик не видит методов интерфейса ILanguageExtender кроме единственного 'RegisterExtensionAs'" По делу что-то будет сказано или забить уже мне? В примере от 1С был верхний вариант. В чем разница кроме того что написано по-разному?
#40
by Serginio1
Потому, что 33. Разница большая При ВК = Новый COMОбъект(ИмяВК) создается COMОбъект А при ВК = Новый(ИмяВК) Ищется ВК с зарегистрированным RegisterExtensionAs Один вызов твоей ВК делается при ПодключитьВнешнююКомпоненту(ИмяВК);
#41
by alexkozin
При ВК = Новый(ИмяВК) 1С вот такое говорит: vk_OLE : Общий член "CreateObject" для типа "_ComObject" не найден.. При чем говорит при вызове метода. Инициализируется без ошибок.
#46
by alexkozin
Имя ВК тоже такое же vk_OLE. Фигня в том что на VB.NET нигде не могу найти нормального рабочего примера. Изначально именно так и хотел поступить, но куда ни ткнусь - везде облом.
#47
by MM
А можно будет выкладывать проект на какой-нибудь бесплатный ресурс? А то, стармани не безграничные (
#48
by Serginio1
Да мне не жалко. Просто никому это не нужно. Я всегда кто попросит отправляю на поччту
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- V8 внешняя обработка.ПолучитьМакет
- Внешняя компонента SysFTP для 1С 7.7
- Внешняя компонента на С++
- Внешняя обработка. ПолучитьМакет("Макет1")
- Внешняя компонента.
- Внешняя печатная форма
- внешняя печатная форма М-4 для 1с8
- Ошибка внешней печ. формы. Метод объекта не обнаружен (Метаданные)
- Внешняя печатная форма. Метод объекта не обнаружен(Печать)
- ПолучитьОбъект() Метод объекта не обнаружен.
- Метод объекта не обнаружен (вывести)
- Внешняя обработка заполнения объекта в УФ. Как добраться до формы объекта
В этой группе 1С
- Не подключается расширение для работы с файлами
- После переноса из ЗУП 2.5 в ЗУП 3.0 пропал сотрудник
- РЛС: Включение РЛС в БП 3 ограничивает только изменение? или должно и чтение тоже?
- Почему в БП 3.0. отражение ЗАЧЕТА аванса по счету 60.1. отражается красным?
- Формирование фактической себестоимости в 1с УПП
- УПП 1.3 Списание продукции в рекламных целях
- Не выгружается xml файл книги покупок
- Должен ли НДС на перевыставляемые услуги сажаться в оборотку?
- Ошибка разбора xml
- Мобильное приложение. Включить геопозиционирование из 1С. Андроид.
- Конвертация данных, отладка модулей
- Перевести ридер Posiflex MR-2106U-3 в режим эмуляции com
- Как быстро и эффективно узнать, каких прав не хватает?
- Бухгалтерия 3.0 Как задать рабочую дату пользователя?
- Вычеты на детей и личные ЗУП 2.5. 2.5.94.2
- СКД нарастающий итог по отсортированному на убывание итог
- v7: Перетаскивание из 1С в проводник
- УФ - передача таблицы значений между сервером и клиентом
- Есть те кто работает с 1с: Аренда и Управление недвижимостью под УПП или БП
- 8.3.7: Проверка правомерности использования конфигурации