0. Kuzja_R 319 20.06.12 13:00 Сейчас в теме

Шаблон внешней компоненты на C#

Шаблон внешней компоненты для 1С:Предприятие на C#.

Перейти к публикации

Вознаграждение за ответ
Показать полностью
Комментарии
Избранное Подписка Сортировка: Древо
1. Andry.Boris 55 21.06.12 01:08 Сейчас в теме
Плюсую...
но... есть вопрос?
В длл только элементарные действия или можно работать с базой (справочниками, документами...)
Если можно пример на шарпе с обработкой справочника...
2. Kuzja_R 319 21.06.12 02:17 Сейчас в теме
(1) Andry.Boris, можно, но я с этим еще не разобрался, поэтому примера нет. Могу, как вариант, дать ссылку. Там этот вопрос рассматривается.
3. TigeRuS 22.06.12 08:36 Сейчас в теме
Вообще не вижу смысла данной компоненты. Все плюсы, которые указывает автор статьи спорные: например, выгрузка/загрузка в xml - это запросто можно сделать используя средства 1С. Я лучше буду программировать либо в 1С, либо на шарпе, но вместе зачем их скрещивать. У них разные области применения.
5. Kuzja_R 319 22.06.12 10:05 Сейчас в теме
(3) TigeRuS, данной компоненты - это какой? Я в своей ни о каких плюсах не говорю. По ссылке, которую я привел выше тоже плюсы/минусы не рассматриваются. Слово "xml" там встречается ровно 1 раз, когда говорится о способе хранения настроек проекта VB.NET. Вы о чем? Сам придумал преимущество и сам его опроверг. :)
И тот, и другой пример - просто примеры создания внешних компонент: мой - как это сделать на c#, в статье по ссылке - как из компоненты работать с объектами 1С (ответ на (1)).
С утверждением о разных областях применения согласен. Именно по этому они удачно дополняют друг друга через механизм ВК.
8. awk 687 23.06.12 01:20 Сейчас в теме
(3) TigeRuS, Только сегодня накатал на C# СОМ обертку для Regex, т.к. VBScript.RegExp не понимает UTF-8.
15 мин и счастье в кармане. Так что есть что расширять в 1С. Хотя регулярных выражений как не было в ней, так и нет. Лучше бы 1С вместо XML регулярные выражения в общие объекты включила.
pvlunegov; KilloN; gortol; +3 Ответить
12. vitaliy.ermolenko 50 27.06.12 11:38 Сейчас в теме
(3) TigeRuS, ВК оч. удобны для связки например 1с со скайпом или тем же астериском, из самой 1с по-моему этого не реализовать
61. 10.08.15 04:15 Сейчас в теме
(3) TigeRuS, Внешние компоненты в 1С давно используют для написания обработчиков драйверов ТО. Так как в "сыром" виде эти драйвера использовать в 1С нереально)
4. saiten 224 22.06.12 09:50 Сейчас в теме
А неплохо. Плюсанул. Но кое-что непонятно:
1. Зачем подключено System.EnterpriseServices? Я что-то упустил?
2. Назначение интерфейса IMyComponent.
3. Работа со свойствами не реализована?
6. Kuzja_R 319 22.06.12 10:33 Сейчас в теме
(4) saiten,
1. System.EnterpriseServices осталось в наследство от примера из отличной статьи. Там это пространство имен нужно было для работы с COM+. Можно и без него, согласен.
2. Интерфейс IMyComponent нужен для работы процедуры RegisterExtensionAs, которая перебирает все интерфейсы и хэширует имена методов, объявленных в них.
3. Со свойствами - да есть проблема: интерфейсы не могут содержать поля. Может быть кто-то из уважаемой публики предложит решение?

P.S.
Как вариант, добавлять имена свойств в хэш таблицы в процедуре RegisterExtensionAs хардкодом. И реализовать GetPropVal, SetPropVal, IsPropReadable, IsPropWritable.
7. saiten 224 22.06.12 11:33 Сейчас в теме
Интерфейс IMyComponent нужен для работы процедуры RegisterExtensionAs, которая перебирает все интерфейсы и хэширует имена методов, объявленных в них.
Л-логично... Просто, несколько проще было бы, на мой взгляд делать так: хэш заполнять по this.GetType().GetMethods(), а функционал компоненты отделить от реализации интерфесов:
class myTestComponent:myComponent
{
 public int Go(int Param1, int Param2)
...

А вообще, респект. Делал похожую штуку, только до публикации так и не дошло, бо потребовалась реализация native API под тонкий клиент и не удалось решить красиво проблему со свойствами.
9. Kuzja_R 319 23.06.12 13:13 Сейчас в теме
(7) saiten, функционал конечно нужно как-то отделять от интерфейса. Только думаю, что так просто не получится. 1С создает и работает с объектом MyComponent (в данном примере). Если мы создаем производный класс myTestComponent и в нем определяем методы, как получит доступ к ним MyComponent? И если принята модель, что пользовательские методы объединяются в отдельный интерфейс, то как туда попадут они из производного класса? Тут нужно что-то другое придумывать...

Если кому интересно, реализовал работу со свойствами. Выложил свежий файл.
10. saiten 224 24.06.12 12:39 Сейчас в теме
(9)Собственно, 1С создаст объект типа MyTestComponent и будет работать с ним через методы, определённые в MyComponent (естественно, для производного класса, надо установить ComVisible(true) и Guid). При этом this будет указывать на объект MyTestComponent, таким образом ничто не помешает 1С вызывать методы MyTestComponent, имея ссылку на MyComponent через Invoke, т.к. this.GetType().GetMethods() вернёт описания методов как в базового, так и в производного классов. Описывать же пользовательские методы компоненты в отдельном интерфейсе нет необходимости, и логического смысла, в общем-то, тоже: класса вполне достаточно.
11. Kuzja_R 319 24.06.12 22:18 Сейчас в теме
(10) saiten, да, вынес функционал для подключения к 1С в отдельный класс. Спасибо за предложение!
14. Aleksey.Bochkov 19.07.12 00:13 Сейчас в теме
Наивный вопрос - а нет ли такого же примера на vb? :)
15. Kuzja_R 319 19.07.12 00:21 Сейчас в теме
(14) albochkov, мне, пока я изучал вопрос, вроде не попадался.
16. softest 01.08.12 22:14 Сейчас в теме
Спасибо, мне помогла взял себе на заметку!
17. IRLes 186 02.08.12 01:06 Сейчас в теме
Спасибо, нужно будет поработать над ней для своих целей :)
18. avhrst 514 31.08.12 23:21 Сейчас в теме
Плюс однозначно
У меня вызвало теплые воспоминания когда я давно давно писал на C# ВК для 1С v7 :)
19. Kuzja_R 319 01.09.12 15:47 Сейчас в теме
(18) avhrst, да, технологии сто лет, а готового работающего примера с комментариями что и для чего найти не получилось. Теперь есть.
20. vz1987 15 06.09.12 17:31 Сейчас в теме
Спасибо большое за пример!
Но меня возникла проблема: ПодключитьВнешнююКомпоненту("AddIn.MyComponent") отрабатывает, а создание объекта Новый("AddIn.MyComponent") вылетает с исключением Тип не определен (AddIn.MyComponent)
21. Kuzja_R 319 06.09.12 18:06 Сейчас в теме
(20) vz1987, регистрация компоненты с помощью regasm.exe проходит без ошибок? В реестре создаются ключи HKEY_CLASSES_ROOT\AddIn.AddIn и HKEY_CLASSES_ROOT\AddIn.MyComponent?

В Visual Studio есть возможность автоматически регистрировать компоненту при компиляции. Для этого в свойствах проекта на закладке "Построение" нужно поставить галку "Регистрировать для COM-взаимодействия" и на закладке "Приложение" -> "Сведения о сборке" -> "Сделать сборку видимой для COM".
22. vz1987 15 07.09.12 20:45 Сейчас в теме
(21) regasm выдает warning RA0000: Registring an unsigned assembly with /codebase can... и в конце пишет, что Types registred successfully.
Ключи создаются в реестре, но по другому пути: HKEY_USERS\S-1-5-21-2345514615-3774356936-3805296294-1001\Software\Classes\AddIn.AddIn. М.б. в этом собака зарыта?
23. Kuzja_R 319 07.09.12 21:30 Сейчас в теме
(22) vz1987, могу предположить, что у вас нет прав на запись в ветку HKEY_CLASSES_ROOT, поэтому пишет в HKEY_USERS. Попробуйте запускать bat файл с правами администратора.
24. vz1987 15 12.09.12 15:17 Сейчас в теме
(23) удалось записать в HKEY_CLASSES_ROOT, но результат тот же...
25. vz1987 15 12.09.12 15:41 Сейчас в теме
(23) разобрался. Поплотней изучил код вашей компоненты и нашел:
public const string AddInName = "ExpoServer";
Соответственно, в 1С, обращение
Компонента = Новый("AddIn.ExpoServer");
решает все проблемы.
Еще раз спасибо большое за пример, теперь буду развивать его в своем направлении:)
26. Kuzja_R 319 12.09.12 16:20 Сейчас в теме
(25) vz1987, извините. Да, моя ошибка. Поправил.
27. Abadonna 3721 21.09.12 05:32 Сейчас в теме
(23)
могу предположить, что у вас нет прав на запись в ветку HKEY_CLASSES_ROOT

Вот только поэтому я и свалил на технологию Native ;)
Вечная проблема прав, особенно в правильных сетках, где юзверь вообще локальных административных прав не имеет.
29. ZOOBR 02.11.12 22:55 Сейчас в теме
(27) Легко сказать, да вот примеров типа "как свалить на Native API" я не нашёл(конечно имею ввиду C# и 1С 8.2), хотя только по данной технологии можно сделать кроссплатформенное решение. Относительно Вк, иногда проще написать библиотеку NET для работы с ней по технологии COM, так как зачастую функционал ВК не требует тесного взаимодействия с 1С, а лишь выполняет роль очередного "костыля", у меня например это шифрование и битовые операции. Поэтому рекомендую оценить необходимость написания ВК по технологии 1С, иногда это необходимо, а иногда и наоборот. Автору конечно+.
30. Abadonna 3721 03.11.12 06:30 Сейчас в теме
(29) ZOOBR,
Легко сказать, да вот примеров типа "как свалить на Native API" я не нашё

Могу конечно ошибаться, но на ИТС примеры на CPP, он разве шибко от "до диез" отличается?

так как зачастую функционал ВК не требует тесного взаимодействия с 1С, а лишь выполняет роль очередного "костыля"

Тогда ее и писать не стоит, куча всяких костылей :( Я стараюсь делать для себя так, чтобы моя ВК все мои потребности удовлетворяла, не хватило - туда же дописал.
Вот, например: http://dev.1tsm.ru/project/148
31. ZOOBR 03.11.12 14:20 Сейчас в теме
(30) НЕ поверишь, отличается. И если бы всё с Native API было так гладко да просто, то инфостарт уже наводнился бы болванками типа "Hello World!" на C#. Конечно когда нибудь всё изменится, разберёмся я думаю, тут ничего невозможного конечно нет.
Под костылём я подразумевал не отдельную библиотеку, а лишь очередную функцию которой она будет пополняться(я у себя например подобную библиотеку юзаю не только для 1С). Всё это я говорил относительно того, что не всегда нужно придерживаться технологии ВК 1С, а можно например просто COM юзать, и пиши туда чего хошь. Да, теряется кроссплатформенность, но этого недостатка не лишена и стандартная ВК 1С(не Native API), которая по сути тот же COM.
32. Abadonna 3721 03.11.12 14:28 Сейчас в теме
(31) ZOOBR,
"которая по сути тот же COM"
кто и что по сути com я в курсе, я их испокон веков пишу ;)
Я вот то, что проблема регистрации в реестре мало кого трогает - так это, видать, юзают в сетках, где кому попало такие права на запись раздаются
33. ZOOBR 03.11.12 23:59 Сейчас в теме
(32) То что ты в курсе я даже не сомневался, не обижайся. Расписывал скорее для остальных читателей комментов. Насчёт прав не совсем согласен. Например всё то что я упоминал работает у меня исключительно на сервере, где регистрацией COM кроме меня никто не ведает. Клиентские шняги стараюсь не делать, а если и приходится, то далеко не для всех(да и зарегистрить ком для пользователя домена проблемы не составляет). Еще раз подчёркиваю, что я никак не умоляю достоинств Native API, а как раз наоборот. Просто сам пишу сейчас на NET и когда в своё время захотел освоить данную технологию инфы толком не нашёл. Адаптировать с CPP конечно как то можно я думаю, но времени на это сейчас нет как видно и у многих других. Буду рад если кто-то поделится когда нибудь "рыбой". Но что-то я уже конечно флудом занялся. Больше не буду.)
34. Abadonna 3721 04.11.12 04:30 Сейчас в теме
(33)
работает у меня исключительно на сервере, где регистрацией COM кроме меня никто не ведает.

Во! Ключевой момент! А у нас в холдинге, например, 1С-УППшник мечтает хотя бы о доле прав. А нех! :)
Если утрировать - без разрешения нашего кабинета даже в туалет сходить нельзя :)))
28. DragonAgo 11 21.09.12 08:35 Сейчас в теме
Спасибо, можно ввзять на заметку
35. dragonCat 28.11.12 16:15 Сейчас в теме
Вопрос: будет ли вышеописанный пример работать на 7.7? Уже почти неделю пытаюсь чформировать ВК на C#, но 7.7 ее видеть категорически отказывается. Зато восьмерка - без проблем.
Попутно вопрос: комунить вообще когда либо удавалось создать ВК на C# для 1С:7.7?
37. Kuzja_R 319 28.11.12 17:05 Сейчас в теме
(35) dragonCat, с 7.7 не работает. Компоненту, сделанную по этому шаблону, 1С видит и подгружает, но при вызове функций на стороне компоненты возникают ошибки приведения типов. Если получится решить вопрос, дайте знать, пожалуйста.
38. dragonCat 28.11.12 17:44 Сейчас в теме
(37) Удалось таки скачать файл, построил по нему dll с небольшими дополнениями (систем формз добавил, что бы мессаджбокс вывести). Все заработало (7.7, 27й движок).

Код в 1С:
	ИмяВК = "AddIn.MyComponent";
	Сообщить("Открываем "+ИмяВК);
	Сообщить("Результат = " + ПодключитьВнешнююКомпоненту(ИмяВК));
	
	ВК = СоздатьОбъект(ИмяВК);
	Сообщить(Строка(ВК));
	
	Результат = ВК.Go(84, 2);
	Сообщить("Компонента посчитала! Ответ = "+Результат);
	
Показать


Результат выводится...
С типами проблема вполне возможна, но она решается гораздо проще, чем заставить 1С увидеть компоненту :)
36. dragonCat 28.11.12 16:16 Сейчас в теме
К сожалению, скачать приведенный в статье пример пока не могу, да и не уверен, что поможет, т.к. все скрины на восьмерке...
39. Steelvan 31.03.13 11:43 Сейчас в теме
Поднять форум на 1С с этой компонентой http://infostart.ru/public/149676/ получится?

Например, объединить http://infostart.ru/public/78388/ и вашу разработку.

Думаю, это было бы интересно службе поддержки франчайзи или фрилансеру.

У нас сейчас используется форум на phpBB, приходится дублировать задачи в 1С.

Позже, может прикрутим автообмен.

Пишу сюда, т.к. там отключены комментарии.
40. Kuzja_R 319 31.03.13 13:07 Сейчас в теме
(39) Steelvan, получится. Зачатки такого форума есть в решении ExpoServer: Домоуправление. Если есть конкретные вопросы-предложения - в личку.
41. Zas1402 11.06.13 11:25 Сейчас в теме
Вот только поэтому я и свалил на технологию Native ;)

Если по Native API компоненту не нужно регистрировать при любом клиенте?
42. fox2010 17.07.13 15:46 Сейчас в теме
При вызове метода asyncEvent.ExternalEvent не из главного потока (например вызываем в событии DataReceived у SerialPort) происходит слкдующая ошибка:
Невозможно привести COM-объект типа "System.__ComObject" к интерфейсному типу "IAsyncEvent". Операция завершилась со сбоем, поскольку вызов QueryInterface COM-компонента для интерфейса с IID "{AB634004-F13D-11D0-A459-004095E1DAEA}" возвратил следующую ошибку: Интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).

Буду рад любой помощи.
49. bsl 22.11.14 16:15 Сейчас в теме
(42) fox2010, Здравствуйте! Также нарвался на данную проблему, но решилось просто: регистрировать библиотеку надо с ключом /tlb, а не /codebase. Под 8.3 работает прекрасно, спасибо автору!
sigmov; bss; +2 Ответить
43. Shrek2015 18.07.13 10:34 Сейчас в теме
44. Mozar 7 31.07.13 15:24 Сейчас в теме
Отличный шаблон, давно искал такой.
45. Дуб 69 25.09.13 13:41 Сейчас в теме
Штука интересная. Но ни разу не понял - как инициировать ВнешнееСобытие
46. Kuzja_R 319 25.09.13 14:35 Сейчас в теме
(45) Дуб, для внешнего события в 1С нужно вызывать asyncEvent.ExternalEvent(...)
47. Alever 4 03.02.14 09:38 Сейчас в теме
Спасибо большое за довольно простое и четкое объяснение по работе с ДЛЛ-ками. От себя же могу только добавить - нашел интересное видео как сделать DLL на C# в Visual Studio. - http://www.youtube.com/watch?v=hinh5pfnbII
Free_Danial; +1 Ответить
48. ineshyk 14.10.14 17:38 Сейчас в теме
Странно, но на сервере не работает ПодключитьВнешнююКомпоненту. В чем может быть проблема?
50. vz1987 15 04.02.15 19:10 Сейчас в теме
Kuzja_R, в случае, если на одной машине планируется использовать несколько внешних компонент, подобно этой, как избежать конфликта имен классов? Ведь в этом шаблоне помимо AddIn.<ИмяКомпоненты> регистрируется еще AddIn.AddIn.
51. dave2000 91 12.02.15 15:44 Сейчас в теме
Такой вопрос. Если мы обращаемся в 1С к свойствам и методам, описанным в компоненте, то все окей. А если мы вызываем произвольные методы или свойства, тут все как-то странно. Например:

Компонента.Prop = 3; //Правильное свойство
Компонента.Prop1 = 3; //Такого свойства нет, но при присваивании даже не ругается
Компонента.Petyua = 3; //Такого свойства нет, но при присваивании даже не ругается
Компонента.Popa = 3; //Такого свойства нет, но при присваивании даже не ругается

Компонента.Go(10, 5); //Правильная функция
Компонента.Goga(10, 5); //Такой функции нет, но выдает "Недостаточно фактических параметров"
Компонента.Goga_123(); //Такой функции нет, но выдает "Недостаточно фактических параметров"
Компонента.Gogogogogo(); //Такой функции нет, но выдает "Недостаточно фактических параметров"

Почему не ругается на неправильные методы и свойства? Чем это чревато?

Как научить компоненту распознавать русские названия методов и свойств? Помнится, когда-то давно писал ВК на Делфи, там это было реализовано.
52. ture 233 25.02.15 17:45 Сейчас в теме
Ссылка на объект не указывает на экземпляр объекта.
1C 8.2.17
тута ==> asyncEvent.ExternalEvent("AddIn", "error", e.ToString());

после этого ==> булРез=ПодключитьВнешнююКомпоненту("AddIn.MyComponent");
oCom = Новый COMОбъект("AddIn.MyComponent");
oCom.Go(10,0);
53. bayce 24 02.03.15 21:30 Сейчас в теме
54. karapuzzzz 61 23.03.15 12:11 Сейчас в теме
Спасибо. Очень выручил шаблон, когда надо было срочно написать драйвер для работы с весами через COM. Единственное, что я не понял, так это регистрация компоненты. Через regasm все получилось нормально. А можно ли это сделать через стандартный regsvr32? При попытке выдает что точка входа в процедуру dllregisterserver не найдена. Информации я не нашел.
55. cool.vlad4 43 24.03.15 10:49 Сейчас в теме
(54) karapuzzzz, нет, нельзя. дотнетовские сборки регистрируются только через regasm.
56. PoniMan 21.05.15 02:07 Сейчас в теме
Глупый вопрос - когда у какого-либо из интерфейсов скачанного проекта меняю GUID или банально переписываю 1 в 1 код в свой проект, где устанавливаю свои GUID'ы для соответствующих интерфейсов, при подключении в 1С ругается "Тип не определен (AddIn.MyComponent)". Конечно, перед этим сборку пересобираю и перерегистрирую в винде. Не понимаю, почему так может происходить. Кто-нибудь может подсказать?
57. aworld 26.05.15 22:18 Сейчас в теме
(56) PoniMan, судя по этой статье у ряда классов должны быть предопределенные guidы
58. PoniMan 09.06.15 12:48 Сейчас в теме
(57) aworld, спасибо огромное, все перерыл. Все оказалось очевидным. Я наоборот думал, что все GUID должны быть уникальными.
59. Nikola23 404 09.08.15 22:32 Сейчас в теме
Да, я очень плохо разбираюсь в шарпе, но подскажите плз:
Я создал на шарпе тип(класс), аналогичный дереву значений 1с с 2мя колонками.
Возвращаю такое дерево в 1с, определяется как Com_объект. Причина такого поведения понятна.
Непонятно, как из компоненты инициализировать тип дерево значений и на стороне компоненты заполнить его, а затем возвратить готовый результат.

А может совсем по другому необходимо действовать?
60. Kuzja_R 319 09.08.15 23:41 Сейчас в теме
(59) Nikola23, проще всего создать нужное дерево на стороне 1С, потом вызывать функции компоненты, возвращающие простые типы и этими результатами заполнять дерево значений. Если нужно от компоненты получать сложные составные данные, тогда используйте разделители в строках или xml-разметку. На стороне 1С разбираете ответ и заполняете дерево.
62. allegrosoft 41 27.08.15 22:08 Сейчас в теме
Почему в win 8 не работает, хотя зарегистрировалась без проблем? В ХР все норм.
63. spec8s 256 02.09.15 08:20 Сейчас в теме
(62) allegrosoft, win 10 тоже не работает, сам сом загеристрировался
64. BigTaur 64 22.01.16 14:56 Сейчас в теме
Не пойму почему событие для 1Ски срабатывает, если возникает в методе вызванном из 1Ски и не срабатывает, если возникает внутри. Т.е.
public void SendEvent()
{
asyncEvent.ExternalEvent("AddIn", "SendEvent", "Внешнее событие");
}
Событие возникает при вызове метода из 1Ски Компонента.SendEvent() и появляется во ВнешнееСобытие().
И если я например напишу:
public void SendEvent()
{
SendEvInternal();
}

public void SendEvent()
{
asyncEvent.ExternalEvent("AddIn", "SendEvent", "Внешнее событие");
}
И вызову Компонента.SendEvent() - то ничего не происходит, 1Ска события не видит.
Помогите пожалуйста, уже всю голову сломал.
65. BigTaur 64 22.01.16 15:17 Сейчас в теме
Сам себе отвечу ибо идея пришла сразу после мессаджа, нужно методы запихать в один поток или как оно там. Добавление директивы [STAThread] перед методами решает проблему.
66. izidakg 139 04.05.16 23:28 Сейчас в теме
то что проверена на 1С:Предприятие 8.3.7.2027 прекрасно, НО не стоит народ путать
скачивал этот пример еще в 2014, скачал и сейчас - нет ни одного файла чтоб отличался хотя бы временем
только цена за скачивание с 1 до 5 возросла
67. Kuzja_R 319 04.05.16 23:36 Сейчас в теме
(66) izidakg, где-то обозначено, что есть изменения в публикации? Вроде нет. Написано о том, что шаблон был успешно проверен на новых платформах. Исходный код не менялся, потому что и старый отлично работает. Как говорится, новые песни нужны тому, у кого старые плохие. А цена - да, теперь другая. Инфляция-с.
68. ture 233 05.05.16 16:47 Сейчас в теме
(67) что так дешево? разве это не может стоить дороже с Вашей точки зрения?
69. Kuzja_R 319 05.05.16 17:52 Сейчас в теме
(68) ture, не думаю, что пустая заготовка может стоить дороже. У тех, кто пишет ВК и зарабатывает на этом, полно своего кода. А те, кто только начинает разбираться, вряд ли готовы платить серьезные деньги только за "посмотреть".
70. ture 233 06.05.16 10:05 Сейчас в теме
(69) пустая заготовка является началом для любой новой компоненты. Это как чистый лист, чтоб сразу начать работу по выбранному предмету, не теряя время на детали красивого взаимодействия с платформой. По опыту написания на с++ скажу прямо - не смыслят гуру в своем коде, глаз уже замалеван и здесь очень важно делиться опытом и показывать альтернативу, чтоб оставалось в коде только полезное и правильное, а не куча фантомов. По идее первичный образец должна давать 1С, но её образец не рассчитывался на конечный продукт. Этот последний факт открывает целое поле для работы и самовыражения.
71. the_master 22.08.16 06:37 Сейчас в теме
Пустая и не рабочая заготовка, но жлобство - "наше все"!!!!
72. Kuzja_R 319 22.08.16 17:09 Сейчас в теме
(71) the_master, камрад, у тебя 0 рейтинга, 0 публикаций (платных, бесплатных) за 10 лет на сайте. При этом ты позволяешь себе кого-то в чем-то обвинять? Не пиши сюда больше, пожалуйста.
73. user650881_aleksander.ep-rza 13.12.16 13:22 Сейчас в теме
Вопрос по компоненте
Почему не может инициализироваться на сервере ?
Функция ИнициализацияСервер() всегда возвращает ложь.
скрин во вложении.
Прикрепленные файлы:
adrianbaltatu; +1 Ответить
74. supiyan 25.12.16 16:22 Сейчас в теме
а по натив апи C# есть что?
76. Free_Danial 15 07.10.17 21:39 Сейчас в теме
Огромное спасибо доброму человеку за публикацию!!!!!!
77. KonstB 172 08.02.18 00:06 Сейчас в теме
Есть возможность подключить ВК через: ПодключитьВнешнююКомпоненту(<Местоположение>, <Имя>, <Тип>)?
78. kleorn 28.02.18 10:52 Сейчас в теме
После нескольких дней бесплодных попыток (то-ли лыжи не едут, то-ли еще что...) использовать одну из наработок для создания внешней компоненты для 1С - наконец-то сумел "заставить задышать" у себя именно данную публикацию.
Для этого пришлось применить (наугад) следующие изменения:
1. Перекомпилировал проект в Visual Studio 2012 (может быть не было необходимости, просто чтобы точно получился 64-разрядный вариант)
2. Подправить в батничке параметр для regasm-а: вместо "/codebase" написал "/tlb"
3. Избавился от русских букв в пути к расположению dll
4. Написал в 1с77:
ПодключитьВнешнююКомпоненту("AddIn.MyComponent"); 
j=СоздатьОбъект("AddIn.MyComponent");
Сообщить(j.go(12,3) );

И оно вернуло "4" :)

Теперь о печальном...
В 1С:8.3.11.3034 - у меня не заработало.
Пишу так:
&НаКлиенте
Процедура ПослеПодключенияВК(парам1,парам2)экспорт 
	С=Новый("Addin.MyComponent");
КонецПроцедуры 

&НаКлиенте
Процедура Инициализация(Команда)
	ОповещениеВК=Новый ОписаниеОповещения("ПослеПодключенияВК", ЭтаФорма);
	НачатьПодключениеВнешнейКомпоненты(ОповещениеВК,"AddIn.MyComponent");
КонецПроцедуры
Показать

В параметре "парам1" - возвращает "ложь". В строке "С=Новый("Addin.MyComponent");" - вылетает с ошибкой "Тип не определен (AddIn.Mycomponent)"

ОС: Win2012R2x64
1С: 8.3.11.3034 x64
VS 2012 x64

Есть идеи?
79. kleorn 03.03.18 23:36 Сейчас в теме
При этом
Сообщить(j.go(12,0) );
Возвращает 0, а обработка внешнего события не вызывается:

Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)    экспорт
	Сообщить(Источник);
	Сообщить(Событие);
	Сообщить(Данные);
КонецПроцедуры
80. kleorn 06.03.18 13:07 Сейчас в теме
Так, ладно, чего-то намутил с разрядностью(в VS ) - в итоге компонента заработала и на 1С: 8.3.11.3034 x64
То есть как заработала:
Вот этот код выполняется без ошибок:
&НаКлиенте
Процедура ПослеПодключенияВК(парам1,парам2)экспорт 
    С=Новый("Addin.MyComponent");
КонецПроцедуры 

&НаКлиенте
Процедура Инициализация(Команда)
    ОповещениеВК=Новый ОписаниеОповещения("ПослеПодключенияВК", ЭтаФорма);
    НачатьПодключениеВнешнейКомпоненты(ОповещениеВК,"AddIn.MyComponent");
КонецПроцедуры
Показать

Однако дальше начинаются проблемы. Если добавить вызов демонстрационной функции Go:
&НаКлиенте
Процедура ПослеПодключенияВК(парам1,парам2)экспорт 
    С=Новый("Addin.MyComponent");
    Сообщить(С.GO(12,3));
КонецПроцедуры 

&НаКлиенте
Процедура Инициализация(Команда)
    ОповещениеВК=Новый ОписаниеОповещения("ПослеПодключенияВК", ЭтаФорма);
    НачатьПодключениеВнешнейКомпоненты(ОповещениеВК,"AddIn.MyComponent");
КонецПроцедуры
Показать

На строке "Сообщить(С.GO(12,3));" вылетает с ошибкой 1С: "Использование синхронных вызовов на клиенте запрещено".
Начал читать про асинхронное программирование в C# но пока далек от полного понимания того, как модифицировать исходник сборки.
81. KonstB 172 06.03.18 22:09 Сейчас в теме
(80) Ничего не надо модифицировать -> Надо читать ИТС! )))))

Сам вчера с этим столкнулся, когда компоненту на конфе с запретом синхронных вызовов запустил.

Скопировал с ИТС: https://its.1c.ru/db/v839doc#bookmark:dev:TI000001867

Использование внешних компонент в асинхронном режиме имеет ряд особенностей:

1. Подключение внешней компоненты выполняется с помощью асинхронного метода НачатьПодключениеВнешнейКомпоненты().

2. Для обращения к свойствам внешней компоненты следует использовать асинхронные методы НачатьУстановку<ИмяСвойства>() и НачатьПолучение<ИмяСвойства>().

3. Вместо обращения к методу компоненты следует использовать асинхронные методы НачатьВызов<ИмяМетода>().

Методы Начать…() автоматически добавляются платформой к существующим свойствам и методам внешней компоненты. Саму внешнюю компоненту не требуется отдельно перерабатывать для поддержки работы в асинхронном режиме, однако необходимо выполнить перекомпиляцию существующей внешней компоненты для поддержки асинхронной работы.

Для метода НачатьВызов…() первым параметров следует указывать описание оповещения, а остальные параметры соответствуют набору параметров оригинального метода внешней компоненты.

При использовании веб-браузеров Google Chrome и Mozilla Firefox поддерживается только асинхронное подключение и использование внешних компонент, в том время как для других веб-браузеров допустимо использование как синхронного, так и асинхронного способа работы. Это определяется свойством конфигурации Режим использования синхронных вызовов расширений платформы и внешних компонент (см. здесь).
Показать


в Вашем случае:
&НаКлиенте
Процедура ПослеПодключенияВК(парам1,парам2)экспорт 
    С=Новый("Addin.MyComponent");
	ОповещениеПослеВызова = Новый ОписаниеОповещения("ПослеВызова", ЭтотОбъект, ДополнительныеПараметры);
    С.НачатьВызовGO(ОповещениеПослеВызова,12,3);
КонецПроцедуры 

&НаКлиенте
Процедура ПослеВызова(РезультатВызова, ПараметрыВызова, ДополнительныеПараметры) Экспорт

	Сообщить(РезультатВызова);	

КонецПроцедуры // ПослеВызова()

Показать


Остался вопрос: Как смотреть параметры в отладчике?
84. kleorn 06.03.18 23:07 Сейчас в теме
По поводу:
(81)
Остался вопрос: Как смотреть параметры в отладчике?

Поясните вопрос.
85. KonstB 172 06.03.18 23:47 Сейчас в теме
(84) В "синхронном" режиме параметр "Prop" отображается в отладчике. Ничего критичного, просто не удобно.
Прикрепленные файлы:
86. kleorn 07.03.18 09:53 Сейчас в теме
(85)
Понятно. Ну тут видимо ничего нельзя сделать
87. KonstB 172 09.03.18 20:06 Сейчас в теме
82. kleorn 06.03.18 22:32 Сейчас в теме
Большое спасибо, я на нечто подобное втайне надеялся. Ведь действительно, это же 1С вызывает метод объекта на C#-е. Значит она (1С) и должна вызывать его асинхронно.
Сейчас буду пробовать.
Правда немного не понял, что Вы указали в строке:
" С.< b >НачатьВызов< / b >GO(ОповещениеПослеВызова,12,3);"
Или это просто для отображения тут, на ветке, жирным шрифтом? Но все равно чем-то же должно разделяться "НачатьВызов" и "GO"... в любом случае еще раз спасибо за наводку.
83. kleorn 06.03.18 22:48 Сейчас в теме
Оказывается, ничем не должно разделяться. Именно так и сработало: С.НачатьВызовGO(....
88. and60 27.04.18 11:28 Сейчас в теме
Добрый день.
Может подскажете, поможет ли мне эта компонента, или совет дадите :
мне необходимо из одной программы (не 1С):
- желательно кодом на C# передать в 1С параметр (строку)
- в 1С отловить это событие
- обработать
- каким то макаром вернуть результат обработки в вызвавшую событие программу(пока не знаю как это реализовать)

И поясните, если не сложно :
1) 1С без внешней компоненты не может перехватить внешнее событие?
2) Какие есть варианты возврата результата обработки из 1С ? Не хочется проверять периодически на наличие файла с результатом...
90. seregasame 19.07.18 20:39 Сейчас в теме
(88)
2) Какие есть варианты возврата результата обработки из 1С ? Не хочется проверять периодически на наличие файла с результатом...

а http-сервис \ http-запрос не подойдет?
91. and60 19.07.18 23:53 Сейчас в теме
(90) спасибо, именно так уже давно и реализовал свою часть со стороны 1С (http запрос - запрос на сервере 1С - обработка - возврат результата). Правда со стороны программистки, которая должна была сделать свою часть на С# так ничего и не дождался... но это уже не мой вопрос...
89. seregasame 17.07.18 18:20 Сейчас в теме
У кого то получилось заставить компоненту работать на сервере?
92. OldthiefXXX 149 20.07.18 18:48 Сейчас в теме
Как заставить ее работать на сервере??????
93. thcrym 30.07.18 08:46 Сейчас в теме
При разработке на С# учел для себя (я использовал MS VS 2017 Community Edition):
В свойствах проекта
Вкладка Приложение - Целевая платформа - тут указываете версию .NET, и эта версия должна устанавливаться на машину, где будет вызов COM DLL.
В этой же вкладке Сведения о сборке - выставляете флаг Сделать сборку видимой для COM. Равнозначно тому если Вы в файле AssemblyInfo.cs изменили строку на [assembly:ComVisible(true)]
Во вкладке Сборка я выставлял значение Цель платформы в AnyCPU. Чтоб вызывалась из х32 и х64 клиента (поправьте, если ошибаюсь)
Тут же выставлял флаг Регистрация для COM-взаимодействия. А это равнозначно вызову RegAsm с ключом /codebase. Выставлял чтобы тут же собирать проект и тестировать. Иначе приходилось б вручную вызывать RegAsm.

У меня Win7x64, 1С клиент толстый x32. Себе на комп установил такую же версию .Net Framework, что и при разработке. Скопировал готовую DLL в C:\Windows\SysWOW64. Далее с правами админа командная строка - и выполнить команду C:\windows\Microsoft.NET\Framework\vВашаВерсия.Net\RegAsm.exe <Путь+ВашаDLL> /codebase

Я пробовал также вызвать regasm из каталога с версией Framework64 - не заработало. Видимо если сборка чисто х64, только тогдла регистрация отсюда.

Надеюсь кому нибудь поможет.
94. rakhimov9 11.10.18 22:19 Сейчас в теме
А возможно ее подключить как com объект?. Т. е. через: Новый COMОбъект()?
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Консультант-аналитик 1С (ЗУП)
Санкт-Петербург
Полный день

Руководитель группы сервисов ЭДО, ЭЦП и криптографии
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы интеграций (1С)
Москва
зарплата от 150 000 руб.
Полный день

Руководитель группы сервисов FRM на 1С
Москва
зарплата от 150 000 руб.
Полный день