1С 8 Внешние компоненты #651732


#0 by radiks
Есть DLL, она загружается в 1С методом "Загрузить внешнюю компоненту". Вопрос: как из DLL обратиться к объектам 1С (например, выполнить запрос и вернуть результат, перебрать элементы справочника ...)?
#1 by ДенисЧ
документацию прочитать - не предлагать?
#2 by radiks
Я разобрался с COM, но не создавать же COM-подключение из Длл-ки... Как использовать существующее?
#4 by Rie
"документацию прочитать - не предлагать?"  (c) ДенисЧ
#5 by radiks
Лучше пример :)
#6 by radiks
object query = oType.InvokeMember("NewObject", BindingFlags.Public | BindingFlags.InvokeMethod, null, connection, new object[] { "Query" });                oType.InvokeMember("Текст", BindingFlags.Public | BindingFlags.SetProperty, null, query, new object[] { "ВЫБРАТЬ РеализацияТоваровУслуг.Дата, РеализацияТоваровУслуг.Номер, РеализацияТоваровУслуг.СуммаДокумента ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ГДЕ РеализацияТоваровУслуг.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ)" });                oType.InvokeMember("УстановитьПараметр", BindingFlags.Public | BindingFlags.InvokeMethod, null, query, new object[] { "Дата1", new DateTime(2013, 1, 1, 0, 0, 0) });                oType.InvokeMember("УстановитьПараметр", BindingFlags.Public | BindingFlags.InvokeMethod, null, query, new object[] { "Дата2", new DateTime(2013, 3, 31, 0, 0, 0) });                while ((bool)oType.InvokeMember("Следующий", BindingFlags.Public | BindingFlags.InvokeMethod, null, queryResultSelection, new object[] { }))
#7 by radiks
вместо connection что подставить?
#8 by Rie
Когда метод Init реализуешь - у него ж там параметр имеется. Угадай, зачем?
#9 by HeroShima
Кстати, что нужно сделать, чтобы использовать русскоязычную лексику? Ругается на not implemented
#10 by HeroShima
вижу) вопрос снят
#11 by HeroShima
ужас какой
#12 by radiks
спасибо, дошло... :) вопрос закрыт
#13 by HeroShima
Как начнет зависать, приходи)
#14 by HeroShima
#15 by HeroShima
with UseAppDispatchProxy(self.Enterprise) as ad:    with UseNewObjectsProxy(self.Enterprise, u'Справочник.МойСправочник', u'ТаблицаЗначений') as (ref, tv):        ref.ВыбратьЭлементы как вам этот poc?
#16 by radiks
Спасибо :) Сам сейчас только читаю про dynamic. Не пойму теперь, как его применить в DLL
#17 by orefkov
Сразу видно настоящего прога, а не примитивного одинэсника. Монументально все так, энтерпрайзненько!
#18 by HeroShima
честно говоря, не совсем понимаю что значит dynamic в текущем контексте разговора)
#19 by radiks
Значит то, как избавиться от полохо читаемого кода с Invoke...
#21 by Rie
dynamic - оно, конечно... Но это несколько из другой оперы. "Другой юноша нес свое: "Я нашел, как применить здесь нестирающиеся шины из полиструктурного волокна с вырожденными аминными связями и неполными кислородными группами. Но я не знаю пока, как использовать регенерирующий реактор на субтепловых нейтронах. Миша, Мишок! Как быть с реактором?" Присмотревшись к устройству, я без труда узнал велосипед"
#22 by radiks
Много слов... Спасибо, конечно, за подсказку в , может подскажешь тогда как получить существующее подключение 1С из dll с использование dynamic?
#23 by Rie
Сначала хотелось бы понять, зачем тут dynamic :-) Он ведь всего лишь переносит контроль типов со времени компиляции на время исполнения, не более того. Не лучше ли сделать обёртку над 1С-овскими данными? Читаемость будет, а извращаться с dynamic не придётся.
#24 by radiks
Да хотя бы за тем, что можно работать с разными типами в одной переменной, тип будет определяться во время выполнения и код становится более читабельным. Совсем не изврат...
#25 by radiks
Можно, конечно и по старинке писать, но, если есть net.4 почему не использовать новые возможности???
#26 by Rie
Чтобы использовать новые возможности - нужно для начала знать, что это за возможности. Погляди, например, на
#27 by Rie
+ Кроме всего прочего, с точки зрения C#, нет никаких типов СправочникОбъект.Номенклатура или ПеречислениеСсылка.ВРотМнеНоги. 1С отдаёт для всех своих объектов один-единственный интерфейс.
#28 by HeroShima
Для типов может и object хватить, а полиморфизма dynamic вряд ли добавит.
#29 by Rie
Кроме всего прочего - никто никому не гарантировал в данном случае, что какие-то _методы_ у 1С-объектов вообще существуют :-)
#30 by radiks
Глядел уже. Мне не понятно как с использованием dynamic получить текущее соединение 1с. С подключением к COM - понятно, а из dll - нет...
#31 by HeroShima
Если в C# это удастся обыграть так же красиво как в Питоне, будет очень интересно взглянуть.
#32 by Rie
Что касается красоты кода - никак не пойму, чем (безо всяких dymanic) Контрагент["Наименование"] = "Вася Пупкин";
#33 by Rie
Но если очень хочется динамических объектов - то создай свой класс - наследник DynamicObject, а в его конструктор - передай то самое соединение , которое получил от 1С при вызове. Вернее, передавай тот IDispatch, который даёт доступ к соответствующему 1Совскому объекту. И будет счастье.
#34 by HeroShima
Рабочий код - аналог кода из учебника по внешним компонентам КЗ:
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С