gifts2017

1C + .NET Framework 2.0

Опубликовал Tone2010 Tone2010 (Tone2010) в раздел Программирование - Внешние компоненты

Данный компонент, позволяет использовать сборки (или исходный код C#) .NET Framework 2.0 в среде 1С:Предприятие. Как известно на базе Framework сейчас работает большинство приложений под платформу Windows, поэтому я считаю актуальным иметь такую возможность из 1С. Преимущества:  решение любых системных  задач без использования WMI, и использования готовых решений в виде сборок .NET.

Данный компонент, позволяет использовать сборки (или исходный код C#) .NET Framework 2.0 в среде 1С:Предприятие. Скопировать в каталог BIN и запустить только один раз (для регистрации).
c:\Program Files\1Cv77\BIN\PluginsCSharp.exe install [or uninstall]

Должен быть установлен .NET Framework 2.0
Использовать:
В коде:

Процедура ПриОткрытии()

ок = ПодключитьВнешнююКомпоненту("AddIn.LanguageCSharp");

Если ок = 0 тогда

Сообщить("Неудалось загрузить внешнюю компоненту");

КонецЕсли;

pluginsCSharp = СоздатьОбъект("AddIn.LanguageCSharp");

КонецПроцедуры

 

Зайти в меню "Параметры", должна появиться вкладка Framework 2.0
Файл с настройками храниться в КаталогИБ()
Не забываем добавлять References к коду.
Поддерживаемые методы в контексте 1С:
ЗАГРУЗИТЬСБОРКИ
ВЫГРУЗИТЬСБОРКИ
ПОМОЩЬ
ЗАГРУЗИТЬСБОРКИИЗФАЙЛА
ДОБАВИТЬСБОРКУВФАЙЛКОНФИГУРАЦИИ
КОДОБРАБОТКИ
ИСХОДНЫЙКОДОБРАБОТКИ

Все загруженные сборки можно использовать, в контексте 1С.

Namespace:ClassName - должен быть уникальным при одном вызове ЗАГРУЗИТЬСБОРКИ

 

Рекомендации:

При работе с сетевыми дисками и сетью добавляем разрешения, например

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\caspol -m -ag All_Code -url N:\DataBase\* FullTrust -n "Сервер" -d "Каталог Базы данных"
или так C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\caspol -m -ag All_Code -url \\server\DataBase\* FullTrust -n "Сервер" -d "Каталог Базы данных"

 

Расположение файлов:

Файл ВК (PluginsCSharp.exe) обязательно должен лежать в каталоге программы.

Файл конфигурации: КаталогИБ()+"pluginsC#.xml"

Файлы сборок (.dll;*.cs;*.vb) лежат в каталоге: КаталогИБ()+"pluginsC#"

Ключ реестра, для смены вручную:

[HKEY_LOCAL_MACHINE\SOFTWARE\1C\1Cv7\7.7]
"pluginsC#_cfg_file"="[Путь к файлу конфигурации]"

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
PluginsCSharp.exe
.exe 92,00Kb
26.04.10
104
.exe 92,00Kb 104 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Аркадий Кучер (Abadonna) 16.04.10 07:20
Автор, помести файл для скачивания, иначе публикация будет снята.
2. Alxd (salexdv) 16.04.10 08:31
Требуем файл и примеры использования! :!:
3. Аркадий Кучер (Abadonna) 16.04.10 09:47
2 minikos. За что плюс?!!! За картинку? Так и до бана недалеко...
4. Аркадий Кучер (Abadonna) 16.04.10 09:49
Даю автору время до 20.00 Москвы для прикрепления файла. Потом обработка будет удалена
5. Александр Рытов (Арчибальд) 16.04.10 10:03
(3) А вот компенсирую его :evil:
6. Tone2010 Tone2010 (Tone2010) 16.04.10 10:19
Не знаю ребята, файл точно подцеплял, но почему он не взялся не знаяю, я даже галку поставил главный. Вот держите.
Прикрепленные файлы:
PluginsCSharp.exe
7. Александр Рытов (Арчибальд) 16.04.10 10:35
(6) Воспитательный минус снимаю.
8. Епрст (Ёпрст) 16.04.10 10:36
Не появляется вкладка в параметрах.
9. Аркадий Кучер (Abadonna) 16.04.10 10:45
(6) Вопрос снят. На будущее: при перестройке портала возможны глюки, желательно проверять после заливки. Выйди с ИС и опять зайти на свою разработку.
Что касается minikos - всё в силе, чтобы не глядя не плюсовал
10. Аркадий Кучер (Abadonna) 16.04.10 10:50
+(9)А вот я не глядя плюс поставлю :D Ибо люблю, когда не 1С-код
11. Dmitry Dmitry (Dimasik2007) 16.04.10 13:51
Под восьмерку планируется?
Tone2010; +1 Ответить
12. Епрст (Ёпрст) 16.04.10 14:30
Тем кто скачал, у кого ЭТО заработало вообще ?
13. Александр Рытов (Арчибальд) 16.04.10 15:18
(12)А никто не говорил, что ОНО еще и работать будет :D
14. Tone2010 Tone2010 (Tone2010) 16.04.10 16:37
>>А никто не говорил, что ОНО еще и работать будет smile:D
Если бы было так, то деньгу бы выложить пришлось, принимается любые сквернословия и недовольства, только обоснованные, учтем в дальнейшем. Под восьмерку не планировалось, но можете попробовать авось проканает. Лично у меня всё работает, делалось для использования Веб-сервисов.
15. Tone2010 Tone2010 (Tone2010) 16.04.10 16:40
Портал глючный не работает
16. Tone2010 Tone2010 (Tone2010) 16.04.10 16:41
Не работает редактирование коменнтов
17. Епрст (Ёпрст) 16.04.10 16:52
(14) закладка не появляется, фреймворк стоит... ошибок при создании объекта нет.
конфа девственно чистая, без единого объекта
18. Епрст (Ёпрст) 16.04.10 16:53
+17 и еще, желательно примерчик хоть какой нить кинуть, хоть в стиле "хеллоу-ворд"
19. Tone2010 Tone2010 (Tone2010) 16.04.10 17:52
>>+17 и еще, желательно примерчик хоть какой нить кинуть, хоть в стиле "хеллоу-ворд"
Процедура ПриОткрытии()


ок=ПодключитьВнешнююКомпоненту("AddIn.LanguageCSharp");
Если ок=0 Тогда
Сообщить("Не удалось подключить компоненту ");
КонецЕсли;

CSharp =СоздатьОбъект("AddIn.LanguageCSharp");

CSharp.ДобавитьСборкуВФайлКонфигурации(КаталогИБ()+"myconfig.xml",КаталогИБ()+"PluginsC#\mytestclass.dll");
CSharp.ЗагрузитьСборкиИзФайла(КаталогИБ()+"myconfig.xml");
Сообщить(CSharp.Справка()); //Получим информацию по загруженным сборкам
//CSharp.Test("Проверка"); //Проверка метода сборки



КонецПроцедуры

>>закладка не появляется, фреймворк стоит... ошибок при создании объекта нет.
>>конфа девственно чистая, без единого объекта
Закладка появится после, CSharp =СоздатьОбъект("AddIn.LanguageCSharp");
Закладка может гнать (в чем причина так и не нашел, стандартная реализация IPageблабла), поэтому файл конфигурации лучше править в блокноте.
20. Tone2010 Tone2010 (Tone2010) 16.04.10 18:09
Формат файла конфигурации (кодировка UTF-8)
<Plugins>
<Assembly>
<File>E:\Test\PluginsC#\Price.cs</File>
<References>
<Identity>System.dll</Identity>
<Identity>System.Data.dll</Identity>
<Identity>System.Drawing.dll</Identity>
<Identity>System.Web.dll</Identity>
<Identity>System.Web.Services.dll</Identity>
<Identity>System.Windows.Forms.dll</Identity>
<Identity>System.Xml.dll</Identity>
<Identity>E:\Тест\PluginsC#\TestPrice.dll</Identity>
</References>
</Assembly>
<Assembly>
Код
using System; using PluginsCSharp; /* //Класс для доступа к контексту 1С public class Context1C { public object Функция(string ИмяФункции,object [] ПараметрыФункции); public object Функция(string ИмяФункции); public void Процедура(string ИмяПроцедуры); public void Процедура(string ИмяПроцедуры,object [] ПараметрыПроцедуры); public object Свойство(string ИмяСвойства,object УстанавливаемоеЗначение); public void ОбработкаВнешнегоСобытия(string bstrSource, string bstrMessage, string bstrData); public void УстановкаРазмераБуфераОчередиСообщений(int размер); public int ПолучитьРазмерБуфераОчередиСообщений(); public void ОчиститьБуферОчередиСообщений(); public void УстановитьСтрокуСостояния(string ТекстСтрокиСостояния); public void СброситьСтрокуСостояния(); } */ //ВАЖНО!!! //Имена Методов и Свойств не должны повторяться в рамках коллекции всех загружаемых сборок namespace MyPlugin //Имя окружения может быть любым { //Все методы и свойства класса должны быть public, для доступа из 1С public class LanguageExtender //Имя класса любое { //Необходимо объявить поле типа контекст 1С в публичном доступе (public ОБЯЗАТЕЛЕН, без него не будет работать) public Context1C context = null; //Класс для доступа к контексту 1С (объявлен в PluginsCSharp) //Конструктор класса обязан инициализировать контекст 1С public LanguageExtender() { context = new Context1C(); } //..... Далее следует ваш произвольный код public string MyFunction() { return "Hello World!!!"; } public string MyProperty { get { return "Hello World!!!"; } } public string КаталогБазыДанных { get { if(context!=null) return context.Function("КаталогИБ",null).ToString(); return null; } } public string КаталогПрограммы { get { if(context!=null) return context.Функция("КаталогПрограммы").ToString(); return null; } } } }
Показать полностью

<References>
<Identity>c:\Program Files\1Cv77_25\Bin\PluginsCSharp.exe</Identity>
</References>
</Plugins>
Прикрепленные файлы:
PluginsC#.xml
21. Епрст (Ёпрст) 19.04.10 10:27
(19) Не появляется..
ЗЫ: читать описалово, пока еще умею.
22. Епрст (Ёпрст) 19.04.10 10:30
+21

Сообщить( СоздатьОбъект("AddIn.LanguageCSharp")) = OLE._Component1C

Закладки как не было, так и нет.
23. Tone2010 Tone2010 (Tone2010) 19.04.10 11:22
Вот рабочий вариант:

Процедура ПриОткрытии()

ок = ПодключитьВнешнююКомпоненту("AddIn.LanguageCSharp");

Если ок = 0 тогда

Сообщить("Неудалось загрузить внешнюю компоненту");

КонецЕсли;

pluginsCSharp = СоздатьОбъект("AddIn.LanguageCSharp");

КонецПроцедуры
24. Епрст (Ёпрст) 20.04.10 12:42
(23) ну вот, с загрузкой вк - появилось..
25. Вячеслав Кадацкий (marsohod) 21.04.10 04:23
Кажется, намечается что-то интересное :) спасибо.
Не сочтите за дерзость ;) но еще бы *.als к нему :)
26. Сергей Карташев (Elisy) 21.04.10 08:18
27. Tone2010 Tone2010 (Tone2010) 21.04.10 08:41
(26) Ни с автором ни с самой разработкой не знаком, очень похоже по задумке кстати. Я упор делал на метод ВыгрузитьСборки(), пришлось с ним повозиться. Это надо было для автоматического обновления модулей (сборок) через инет, соответственно, чтоб обновить надо выгрузить из памяти, а это работа с доменами приложений, мне мозг напрягла очень сильно... Это пробная попытка скрестить 1С с дотнетом, поэтому если что то не работает, кидаете лог в личку с описанием. Лог находится в "Администрирование->Просмотр событий", ну и за размером лога следите.
28. Сергей Карташев (Elisy) 21.04.10 09:51
(27) Я ни в коем случае не обвиняю в чем-либо. Мне эту ссылку давали в контексте моих разработок c .Net.
Может по автоматическому обновлению из Интернет пригодится следующее:
AppDomain.CreateDomain содержит вариант с AppDomainSetup-параметром. А AppDomainSetup в свою очередь содержит свойство ShadowCopyFiles, который позволяет обновление без выгрузки домена.
29. Tone2010 Tone2010 (Tone2010) 21.04.10 10:24
(28) Вы меня не поняли, проблемы с доменами приложений НЕТ, она решена. Иначе бы метода "ВыгрузитьСборки" не было :). Привычка чистить за собой осталась даже с появление .NET, так что увольте.
30. Сергей Толмачев (sss999) 21.04.10 10:53
а можешь просто написать,конкретную любую простенькую ситуацию,где это может пригодиться,а то я как то только на 1с проглю,и совсем не понимаю для чего нужно то что ты сделал..
31. Сергей Толмачев (sss999) 21.04.10 10:57
ниче не понял для чего это)но парень старался,потому +
32. Tone2010 Tone2010 (Tone2010) 21.04.10 11:07
(31)
Я использую, для работы с Веб-сервисами. SOAP слышал? Так вот обертка на .NET для таких вещей делается за полминуты, а из 1С-ки ты продолбаешся долго, опять только COM поможет быстро решить задачу. Таки Regex вуаля пожалуйста он есть в .NET. Работа с сетью, сокеты? HttpRequest-ы, ftp, мыло и прочее - всё есть. Ты скажешь что под половину перечисленного есть решение готовое, ну и слава богу, первое правило не навреди (работает не трогай). Делалось для тех, кто уже пишет на .NET, но ещё приходится решать задачи для 1С. Т.е. прежде всего я делал для себя....
33. Евгений Стоянов (quick) 21.04.10 12:56
Штука прикольная, можно еще COM обьект на питоне или vbs юзать без фреймворков для доп функций
34. Роман (Romella) 12.05.11 13:55
Зачетная штука, респект.
35. Tone2010 Tone2010 (Tone2010) 22.09.11 07:23
В связи с жадностью и не понятным мотивам авторов сего ресурса, оставляю сию публикацию до конца 2011 года, потом удалю и участвовать в этом не собираюсь...
36. villy (vitaliy.ermolenko) 30.09.11 17:40
а жадность в чём заключается? денег за размещение вроде еще не надо платить или уже всё поменялось? и по-моему автор решает платная его разработка или нет.
37. Tone2010 Tone2010 (Tone2010) 13.10.11 07:42
Жадность заключается в том что имея чем поделится я не могу пользоваться публикациями других.... так чтобы скачать даже твою публикацию мне необходимо иметь какие-о виртуальные деньги.
39. Lena Lesnik (lelusha) 20.02.14 22:35
и мне как-то не очень понятно... но видно что сложно и многообещающе)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа