Вход | Регистрация
    1  2   
1С:Предприятие :: 1С:Предприятие 8 общая

Очень нужен шаблон внешней компоненты для 1С 8 (не 7.7) на Visual Basic-е

Очень нужен шаблон внешней компоненты для 1С 8 (не 7.7) на Visual Basic-е
Я
   Cyrix
 
04.05.19 - 22:43
Здравствуйте!
Кто знает, как написать внешнюю компоненту для 1С 8 не на Visual C++ а на Visual Basic 6 ?
На диске ИТС какой-то бред для 8.0, который не работает. Мне необходимо ПодключитьВнешнююКомпоненту("TestVK.dll","Test",ТипВнешнейКомпоненты.Native)
затем ВК = Новый ("AddIn.TestVK");
ВК.ShowAbout() - и тут должно показаться окно VB6 (желательно модально) с одной единственной кнопкой "ОК", которая закрывает это окно и возвращает управление в 1С

Вот кааак это сделать??

ПодключитьВнешнююКомпоненту("TestVK.dll","Test",ТипВнешнейКомпоненты.Native) подключается нормально, а вот дальше при ВК = Новый ("AddIn.TestVK") - ошибка! Тип не определён (AddIn.TestVK)

Я пытался подключить как Компонент = Новый COMОбъект("test.Class1");

На VB6 писал в Class1:

Public Sub test()
   MsgBox ("ok")
End Sub

вроде бы как подключился Компонент = Новый COMОбъект("test.Class1") без ошибок, но при попытке выполнить в 1С
Компонент.test();
получил Н-И-Ч-Е-Г-О! Ни сообщения "ок", ни ошибки, вообще ничего!
просто Компонент.test() молча выполнилось и всё!

я готов даже рассмотреть вариант на Visual Basic .NET, если есть такое решение

помогите разобраться, я совсем запутался!
 
 
   Asmody
 
1 - 04.05.19 - 23:09
   Garykom
 
2 - 04.05.19 - 23:14
(1) Он хочет на VB6 из "Microsoft Visual Studio 6.0", не VB.NET
   Garykom
 
3 - 04.05.19 - 23:17
(0) Изучать http://www.codenet.ru/progr/vbasic/Create-DLL/

NativeAPI ВК на VB6 написать не выйдет, только COM
   Cyrix
 
4 - 04.05.19 - 23:23
А COM позволит мне открыть окно Visual Basic-а?
   Garykom
 
5 - 04.05.19 - 23:23
ТипВнешнейКомпоненты.COM используй если ВК на VB6.

И да
ПодключитьВнешнююКомпоненту("ОбщийМакет.МойМакет", "МойМакетAddIn", ТипВнешнейКомпоненты.Native);
МояКомпонента = Новый("AddIn.МойМакетAddIn.AddInNativeExtension");    

Текст МойМакетAddIn - произвольный. Единственное условие - он должен совпадать в приведенных выше вызовах. 
Строка AddInNativeExtension - уже указана в шаблоне компоненты (RegisterExtensionAs), ее не надо менять.
Переменную МояКомпонента рекомендуется описать в модуле управляемого и обычного приложения как Перем МояКомпонента Экспорт.
https://its.1c.ru/db/metod8dev/content/5887/hdoc

В твоем случае было бы
ПодключитьВнешнююКомпоненту("TestVK.dll","Test",ТипВнешнейКомпоненты.Native);
ВК = Новый("AddIn.Test.TestVK")
   Garykom
 
6 - 04.05.19 - 23:24
(4) Что значит "открыть окно Visual Basic-а" ?
   Garykom
 
7 - 04.05.19 - 23:27
(5) Они изобрели переименование ВК при подключении, на случай если разные создатели ВК зафигачили одно "RegisterExtensionAs", чтобы можно было такие одинаковые одновременно юзать.
   Cyrix
 
8 - 04.05.19 - 23:34
(6) - в Visual Basic я создаю форму form1 с кнопкой "ок" - могу я вызвать эту форму из 1С?
   Garykom
 
9 - 04.05.19 - 23:35
(8) Да, но будет куча глюков не умеючи.
И учти в новых конфах 1С отказ от модальности ))
   Cyrix
 
10 - 04.05.19 - 23:45
Беда... делаю по методике http://www.codenet.ru/progr/vbasic/Create-DLL/
не подключается ни как COM ни как Native :о(
   ViSo76
 
11 - 04.05.19 - 23:48
Я то думал VB6 успешно подох, но нет... Не забудь что vb6 без библиотек не работает, так как он компилируется в p-код, а не в машинные инструкции и если ты захочешь запустить на другом компьютере, то библиотеки потребуются...
   ViSo76
 
12 - 04.05.19 - 23:50
(10) как ком нужно делать комсервер ( exe или dll ). А так же regsvr32 регистрировать
   Cyrix
 
13 - 04.05.19 - 23:52
(12) сделал, зарегистрировал, проверил в ссылках - всё есть
   ViSo76
 
14 - 04.05.19 - 23:53
(13) Эксел видит? Попробуй из vba вызвать
   Garykom
 
15 - 04.05.19 - 23:56
(10) А тебе ее и не надо подключать как ВК.

Просто regsvr32 и ВК = Новый("AddIn.TestVK"), причем соблюдая разрядность 1С надо x86 (32 битная).
   Garykom
 
16 - 04.05.19 - 23:57
(15)+ Если хочешь COM ВК по стандарту 1С, то придется делать не просто ActiveX (COM-object) а еще кучу всего внутря
https://its.1c.ru/db/metod8dev#content:3221:hdoc:_com_comp
   ViSo76
 
17 - 05.05.19 - 00:01
(15) да там можно через ком вызывать, а не как внешнюю компоненту.
(0) зачем тебе именно внешнюю компоненту нужно?
   Cyrix
 
18 - 05.05.19 - 00:05
(17) внешнюю не нужно, можно и COM но как открыть форму "Form1" созданную в ActiveX DLL на Visual Basic 6? Неужели придётся делать этот кошмар https://its.1c.ru/db/metod8dev#content:3221:hdoc:_com_comp ?
   ViSo76
 
19 - 05.05.19 - 00:06
(18) в начпле в екселе убедись что работает, а потом через тупо новый СОМОбьект попробуешь в 1с
   ViSo76
 
20 - 05.05.19 - 00:08
Подключи через референс твой ком. Если в списке нет, то беда... Если есть подключи и вызови метод. Если будет работать, тогда в 1с делай
   Cyrix
 
21 - 05.05.19 - 00:13
(19) (20) - работает
   ViSo76
 
22 - 05.05.19 - 00:15
(21) в 1с как?
   Cyrix
 
23 - 05.05.19 - 00:25
(22) в 1С почему-то подвисает этот COMОбъект - запмрает мою DLL-ку и я не могу её перезаписать, пока не выключишь 1С и то только минуты через 2-3 отпускает! Не пойму в чём дело?
   Cyrix
 
24 - 05.05.19 - 00:31
при вызове модальной формы - 1С виснет насмерть! :о( хотя vba работает
   Garykom
 
25 - 05.05.19 - 00:32
(24) Залость то какая )) Какая хоть конфа то?
   Garykom
 
26 - 05.05.19 - 00:35
Создание окон в среде "1С:Предприятия 8"
Внешние компоненты могут создавать свои окна для отображения различной информации, используя интерфейс IExtWndsSupport. Компонента может создавать два типа окон: модальные диалоги, немодальные диалоги.

Модальные диалоги

Модальные диалоги создаются самой компонентой, но при их создании необходимо в качестве родительского окна указать окно, возвращаемое методом GetAppMainFrame для того, чтобы диалог не воспринимался операционной системой как отдельная задача с кнопкой на полосе задач. Работа системы "1С:Предприятие" приостанавливается до завершения работы с диалогом.

Немодальные диалоги

Немодальные диалоги также создаются самой компонентой, но при их создании необходимо в качестве родительского окна указать окно, возвращаемое методом GetAppMDIFrame для того, чтобы диалог не воспринимался операционной системой как отдельная задача с кнопкой на полосе задач. Диалог не останавливает работу 1С:Предприятия и по сути аналогичен формам 1С:Предприятия. Однако следует учесть, что созданный диалог не входит в список открытых окон и не появляется на панели окон, поэтому использование таких диалогов не рекомендуется (вместо них можно использовать формы самого 1С:Предприятия).

В "1С:Предприятии 8" возможность создания окон сохранена в сокращенном виде для совместимости с существующими компонентами. Для отображения нестандартной информации в окнах "1С:Предприятия 8" рекомендуется использовать формы с элементами управления ActiveX или же Активные документы. Ниже приведены описания методов интерфейса IExtWndsSupport. Возможность работы с окнами отсутствует в Веб-клиенте.
   Cyrix
 
27 - 05.05.19 - 00:38
(25) БП 3.0, окно Form1 появилось в диспетчере задач и если его снять, то 1С оживает, но почему этот Form1 невидим?

(26) а вот здесь, как говориться - приплыли
   Garykom
 
28 - 05.05.19 - 00:47
(27) БП3 давным давно УФ и отказ от модальности.
Делай обычное окно, не модальное.
   Cyrix
 
29 - 05.05.19 - 00:52
(28) если ставлю не модально, то:

Ошибка инициализации модуля: ВнешняяОбработка.ДвижениеПоСкладамВнешняя.МодульОбъекта
по причине:
{ВнешняяОбработка.ДвижениеПоСкладамВнешняя.МодульОбъекта(23)}: Ошибка при вызове метода контекста (ShowAbout)
Компонент.ShowAbout();
по причине:
Произошла исключительная ситуация (TestDLL): Automation error
   Cyrix
 
30 - 05.05.19 - 00:57
Non-modal forms cannot be displayed in this host application from an ActiveX DLL, ActiveX Control, or Property Page.
 
 Рекламное место пустует
   Garykom
 
31 - 05.05.19 - 00:58
(29) Ну да все правильно, падает и возвращает назад в 1С ошибку что упало.
   Cyrix
 
32 - 05.05.19 - 00:59
(30) !!!
   H A D G E H O G s
 
34 - 05.05.19 - 01:01
MsgBox("test", 4096);
   Garykom
 
35 - 05.05.19 - 01:37
Короче выкинь эту каку VB6 и ставь уже Lazarus или Visual Studio 2019
   Cyrix
 
36 - 05.05.19 - 01:58
у меня Visual Studio 2010, так не могу нигде найти пример внешней компоненты 1С8 на Visual Basic.NET
   Cyrix
 
37 - 05.05.19 - 02:09
https://its.1c.ru/db/files/1CITS/EXE/VNCOMPS/VNCOMPS.zip - не собирается, ошибки доступа к ключу реестра... ерунда какая-то

где взять РАБООООЧИЙ пример для VB.NET?
   H A D G E H O G s
 
38 - 05.05.19 - 02:13
(37) Не пишут ВК на vb.net, юзайте Дельфи
   Garykom
 
39 - 05.05.19 - 02:22
(37) Книга знаний: Написание внешних компонент для 1С на VB.NET и C# дали в самом начале в (1)

Прочитать все и сделать
regasm.exe ИмяКомпоненты.dll /codebase

Компоненты только COM понятно а не Native будут.
   Garykom
 
40 - 05.05.19 - 02:22
И да регать ВК (в т.ч. первый запуск из 1С) от имени админа ))
   Cyrix
 
41 - 05.05.19 - 08:36
(39) сейчас специально снесу VS2010 и поставлю VS2005 ради примера, который в ссылке
   Garykom
 
42 - 05.05.19 - 08:44
(41) Пример который в ссылке прекрасно открывается и компилируется на любой версии VS после 2005.
https://i.paste.pics/d99639bbbacaf94b49a007f33d0a42f8.png

Вот это https://i.paste.pics/e33d2339f2a871057712316f4cfc5612.png лечится запуском VS от имени админа.
Или убрать автоматическую регистрацию через regasm, снять галочку "Регистрация для COM-взаимодействия"
https://i.paste.pics/81f289d4c9d9a3a13e7dfab9c7e481fa.png

И будет "сборка успешно" на проекте VS2005 открытом с конвертацией в VS2017
   Garykom
 
43 - 05.05.19 - 08:44
Имхается кому то яйки мешают танцевать ))
   Cyrix
 
44 - 05.05.19 - 23:43
(43) зато они есть
   Cyrix
 
45 - 08.05.19 - 10:56
VS запущен от администратора и при сборке COM Interop registration failed. Ошибка при обращении к реестру OLE.
   Garykom
 
46 - 08.05.19 - 11:29
(45) Значит запрещен доступ к реестру даже для "администратора"
   Cyrix
 
47 - 08.05.19 - 11:58
(46) как проверить/разрешить? права пользователей?
   Cyrix
 
48 - 08.05.19 - 12:08
Дал все права ко всем веткам реестра, администратору, пользователю, административной группе... и всё равно ошибка доступа к реестру
   Garykom
 
49 - 08.05.19 - 12:11
Сними галку чтобы не регал сборку и попробуй зарегать ее вручную через regasm, что напишет

regasm.exe ИмяКомпоненты.dll /codebase
   Garykom
 
50 - 08.05.19 - 12:12
Могут быть разные глюки типа не тот regasm или еще что с версиями .Net
   Garykom
 
51 - 08.05.19 - 12:13
В крайнем случае новый проект пусто по http://catalog.mista.ru/public/151246/ и туда нужный код добавить ручками.
Бывают ситуации когда проще винду переустановить или на другом компе чем разбираться почему глючит.
   Cyrix
 
52 - 08.05.19 - 12:27
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\V7ExtTemlate\bin>regasm v7extsample.dll /codebase
Microsoft .NET Framework Assembly Registration Utility 4.6.1055.0
для Microsoft .NET Framework 4.6.1055.0
c Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

RegAsm : warning RA0000 : Регистрация неподписанной сборки с использованием пара
метра /codebase может вызвать конфликт данной сборки с другими приложениями, кот
орые могут быть установлены на том же компьютере. Параметр /codebase предназначе
н только для подписанных сборок. Присвойте сборке строгое имя и повторите регист
рацию.
Типы зарегистрированы успешно

C:\V7ExtTemlate\bin>
   Garykom
 
53 - 08.05.19 - 12:32
(52) Нет слов. Вы про разницу между версиями .Net когда нибудь слышали?
   Garykom
 
54 - 08.05.19 - 12:33
(53)+ Это примерно как обработку 1С77 открывать в 1С8 и удивляться ух ты оно открылось но что то глючит ))
   Cyrix
 
55 - 08.05.19 - 12:36
компонента V7ExtTemlate из примера только для 7.7?
   Garykom
 
56 - 08.05.19 - 12:41
(55) В 2005 году скорее всего под .NET Framework 2.0 пример написан.
Более новые VS позволяют работать и со старыми версиями и там практически полная совместимость по возрастающей но не всегда.

Использовать сборку скомпилированную под старую версию .Net (при условии установки нужной CLR) можно и на 1С 7.7 и на 1С8 и на чем то ином совсем.
   Cyrix
 
57 - 08.05.19 - 15:31
у кого есть архив HowToComObjectFor1C.rar из статьи http://catalog.mista.ru/public/151246/ ?
   Cyrix
 
58 - 09.05.19 - 11:27
видимо ни у кого :о(
   Cyrix
 
59 - 09.05.19 - 12:28
Ошибка    1    Cannot register type library "C:\V7ExtTemlate\bin\V7ExtSample.tlb". Ошибка при обращении к реестру OLE. (Исключение из HRESULT: 0x8002801C (TYPE_E_REGISTRYACCESS))    V7ExtSample

Запущено от администратора, которому можно ВСЁ
   Cyrix
 
60 - 09.05.19 - 12:34
вопрос (59) снят - распрекрасный брандмауэр windows
   Cyrix
 
61 - 10.05.19 - 01:25
Компоненту подключил через COMОбъект, реализовал интерфейсы IInitDone, ILanguageExtender
а вот как сделать так, чтобы модальное окно не зависало - не могу понять.
Видимо как то ещё нужно IExtWndsSupport использовать, но как - тоже не пойму
   Cyrix
 
62 - 10.05.19 - 09:15
Не хочет больше никто со мной общаться :о(
   DJ Anthon
 
63 - 10.05.19 - 10:37
боюсь, что в этой области не так много специалистов
   Cyrix
 
64 - 10.05.19 - 11:00
Может кто нибудь знает чем и как заменяется метод CreateAddInWindow ?
в 7.7 он работает на ура и всё создаёт, но вот в 8.3 совершенно CreateAddInWindow игнорируется
   Cyrix
 
65 - 10.05.19 - 13:58
Написал ВК и окно появилось! Ура! Но только в 1С 8.0 и 32-х разрядной
делаю тоже самое на 8.3 x64 и получаю ошибку:

 Тип не определен (AddIn.test.uraaa)

подключаю так:
ПодключитьВнешнююКомпоненту("AddIn.uraaa","test",ТипВнешнейКомпоненты.Native);
ВК = Новый ("AddIn.test.uraaa");

в чём может быть дело? В разрядности 1С?

а что - библиотеки ВК для 32-х разрядных 1С-ок не подключаются к 64-х разрядным 1С-кам?
   Garykom
 
66 - 10.05.19 - 14:05
Да не подключаются, пиши x86_64 ВК для 1С 64
 
 Рекламное место пустует
   Garykom
 
67 - 10.05.19 - 14:11
(66)+ Ну или настраивай в винде https://techtalk.gfi.com/32bit-object-64bit-environment/
   MM
 
68 - 10.05.19 - 14:15
(64) Создание окон в среде 1С:Предприятия 8
В 1С:Предприятии 8 эта возможность сохранена в сокращенном виде для совместимости с существующими компонентами. Для отображения нестандартной информации в окнах 1С:Предприятия 8 рекомендуется использовать формы с элементами управления ActiveX или же Активные документы. Ниже приведены описания методов интерфейса IExtWndsSupport.
https://its.1c.ru/db/metod8dev/content/1902/hdoc/
В новой версии документации старше (1С 8.0) по ВК CreateAddInWindow, вообще, не упоминается.
(65) DLL х32 никогда не загружаются в процессы x64, и наоборот.
(66) Преимущество СОМ объектов написанных под .NET состоит в том, что их можно зарегистрировать и как х32, и как х64 объекты.
   Garykom
 
69 - 10.05.19 - 14:17
(68) >Преимущество СОМ объектов написанных под .NET состоит в том, что их можно зарегистрировать и как х32, и как х64 объекты.

Я уже нихрена не понимаю что и на чем ТС ваяет, может уже на дельфи перешел из VB6 ))
   Cyrix
 
70 - 10.05.19 - 15:24
Ребят, мне скоро уже дурку можно будет вызывать с санитарами...

Чем конструктивно отличается этот ВК = Новый COMОбъект("AddIn.testDLL")
 от ВК = Новый (AddIn.test.testDLL) ?
У этого COM-объекта нет интерфейсов IInitDone и ILanguageExtender или что ?
Или они там тоже есть, но по другому реализованы?

Как мне понять какая у меня получилась DLL на VB6 если я реализовал там эти IInitDone и ILanguageExtender и не только - COM-овская или Native ?
Как COM она не регистрируется - в службах компонентов при попытке зарегистрировать пишет что нет ни одного метода и никаких интерфейсов.

уже нервный тик... глаз дёргается :о(
   Garykom
 
71 - 10.05.19 - 15:29
(70) Когда ты вызываешь "AddIn.testDLL" то обращаешься в COM объекту в системе windows.

Когда вызываешь "AddIn.test.testDLL" то предварительно переобозвал (алиас по умному) ВК в ПодключитьВнешнююКомпоненту и теперь можешь создавать(обращаться) объекты через test
   Garykom
 
72 - 10.05.19 - 15:31
см (5) уже писал же
   Cyrix
 
73 - 10.05.19 - 15:33
судя по (5) у меня никакой не Native
   Garykom
 
74 - 10.05.19 - 15:39
   Cyrix
 
75 - 10.05.19 - 16:22
ВК = Новый COMОбъект ("AddIn.testDLL");
 Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса
   Garykom
 
76 - 10.05.19 - 16:24
(75) А в системе то зарегал свою "AddIn.testDLL" ? regsvr32 или regasm смотря что у тебя
   Garykom
 
77 - 10.05.19 - 16:25
(76)+ Причем учитывая разрядность системы и ВК
   Cyrix
 
78 - 10.05.19 - 16:29
зарегал regsvr32.exe учитывая разрядность
   Cyrix
 
79 - 10.05.19 - 16:30
что такое Новый COMОбъект("V83.COMConnector.1") ???
   Cyrix
 
80 - 10.05.19 - 16:41
это соединитель COM-компонеты с 1С, но какая компонента соединяется то? V83.COMConnector ? а кто она такая эта V83.COMConnector? Мне нужна моя - AddIn.testDLL !
   Cyrix
 
81 - 10.05.19 - 16:54
   Cyrix
 
82 - 10.05.19 - 16:55
   Cyrix
 
83 - 10.05.19 - 16:55
долбаный радиКАЛ!!!!
https://a.radikal.ru/a08/1905/74/81d2ae576643.jpg
   Cyrix
 
84 - 10.05.19 - 16:56
Почему в нижнем поле пусто???
   Cyrix
 
85 - 11.05.19 - 03:25
Потому, что основной код нужно писать в Class Modules, а не где попало
   Cyrix
 
86 - 11.05.19 - 10:16
COMConnector не видит методов объекта, хотя они там есть :о(
   Cyrix
 
87 - 11.05.19 - 10:18
COMConnector вообще ничего не видит! Зачем он вообще нужен? Для связи из 1С в идентичную 1С?
   Garykom
 
88 - 11.05.19 - 10:24
Ну можно и в другую 1С, если правильную коннектору (нужной версии) или олю применять.
   Cyrix
 
89 - 11.05.19 - 19:41
Олю я не люблю.
Добился я таки от Visual Basic 6.0 полноценной внешней компоненты, 1С её приняла и полюбила. Могу теперь выводить формы VB6, правда только модальные, ну и ладно! Меня это вполне устраивает!
Затык был в том, что я пытался загрузить 32-х разрядную DLL на x64 1C. Как только установил x86 1C-ку - сразу же всё зарегистрировалось, все классы и методы увиделись и ничего не подвисает.
Теперь буду разбираться дальше. Мне надо передавать в 1С из VB6 готовый результат запроса по справочнику "Номенклатура", но как это сделать пока не знаю.
   ViSo76
 
90 - 12.05.19 - 07:18
(89) Может из 1с в VB6?
   Cyrix
 
91 - 12.05.19 - 09:14
из 1С в мою компоненту надо передать параметры запроса, а в компоненте надо опять обратиться в 1С, тайно получить результат запроса и передать его назад в 1С
   Cyrix
 
92 - 12.05.19 - 11:57
Как работает метод ILanguageExtender_CallAsFunc ?
почему он ничего не возвращает в 1С?
   Cyrix
 
93 - 13.05.19 - 12:06
Возвращает, только в виде текста
   Cyrix
 
94 - 15.05.19 - 11:34
Все, кто думает, что написать внешнюю компоненту для 1С (32 разряда) на VB6 невозможно - знайте! Вы ошибаетесь!!
   H A D G E H O G s
 
95 - 15.05.19 - 11:43
(94) Ты - молоток!
   Garykom
 
96 - 15.05.19 - 11:48
(94) А теперь попробуй ее на Windows 10 запустить на платформе 1С x86_64 ибо в x86 уже памяти не хватает обычно.
   Serginio1
 
97 - 23.05.19 - 14:09
   Cyrix
 
98 - 27.05.19 - 17:22
(96) Бог с этими 64-х битами... как запустить ВК на серверной части 1С! Запускается только на клиенте! Вот это беда, так беда!
   H A D G E H O G s
 
99 - 27.05.19 - 17:24
(98) Нормально запускается.
   Cyrix
 
100 - 27.05.19 - 17:26
(99) пишет, что метод не найден, а &НаКлиенте всё работает
  1  2   

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.