![]() |
|
Работа с типами в 1C V83 Com Connector C# | ☑ | ||
---|---|---|---|---|
0
AntonKemov2
22.04.25
✎
17:37
|
Доброго времени суток, подскажите пожалуйста как мне получить информацию о типе данных (наименование и другие поля/методы), который получаю из реквизита.
Вот пример кода: dynamic ссылка = объектСправочника.Ссылка; dynamic метаданные = ссылка.Метаданные(); dynamic реквизиты = метаданные.Реквизиты; foreach (var реквизит in реквизиты) { dynamic тип = реквизит.Тип; dynamic типы = тип.Типы(); } А как дальше с этим работать - хз, мне хотя бы узнать что это за тип данных, ссылка или простой тип |
|||
1
Garykom
гуру
22.04.25
✎
17:45
|
Скажи тебе реально нравится делать операцию на гландах через задний проход?
Сделай уже в 1C банальный http-сервис И дергай его из своей нетленки на C#/.Net |
|||
2
Ёпрст
22.04.25
✎
17:46
|
(0) XMLТипЗнч(<твой реквизит>).TypeName
|
|||
3
Rovan
гуру
22.04.25
✎
17:49
|
||||
4
Garykom
гуру
22.04.25
✎
17:50
|
||||
5
Garykom
гуру
22.04.25
✎
17:56
|
(0)
dynamic типы = тип.Типы(); "типы" - может быть составным типом поэтому такой изврат в платформе ПодробностиОписание: Получает типы, используемые в объекте. Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер. Пример: // Заполнение списка типов документов по указанному элементу формы // Элемент - элемент формы, имеющий составной тип СписокТиповДокументов = Новый СписокЗначений; Для Каждого ТипДокумента Из Элемент.ТипЗначения.Типы() Цикл ДокументСсылка = Новый(ТипДокумента); Имя = ДокументСсылка.Метаданные().Имя; Синоним = ДокументСсылка.Метаданные().Синоним; СписокТиповДокументов.Добавить(Имя, Синоним); КонецЦикла; Использование в версии: Доступен, начиная с версии 8.0. |
|||
6
AntonKemov2
22.04.25
✎
17:58
|
(1) Garykom, Егор, я тебя не оскорблял и не просил агрессивных комментариев, а поросли помощи.
Http-сервис не могут настроить со стороны 1С, 1С разрабы, не хватает скилла или еще что-то - не знаю. Меня же свою очередь туда не пустят. Работаю с тем что есть, да костыльно, да где-то медленно, но ничего не поделать. |
|||
7
AntonKemov2
22.04.25
✎
18:00
|
(2) Спасибо, сейчас изучу материал и отпишусь от результате.
|
|||
8
Garykom
гуру
22.04.25
✎
18:02
|
(6) Расширение обычно не проблема наваять и подключить
И обычно база уже опубликована на веб-сервере, с галочкой по умолчанию для расширений Пока пишешь код для вызовов через COM/OLE тебе один хрен нужна своя доступная тестовая конфа/база и Конфигуратор 1С Чтобы во внешней обработке быстро отладку делать Когда уже код наваян на языке 1С - тогда и занимаешься его переносом на другой ЯП через COM/OLE |
|||
9
Garykom
гуру
22.04.25
✎
18:05
|
(8)+ и да лучше сразу писать код, подходящий для переноса в http-сервис
а не лапшу для COM/OLE |
|||
10
Волшебник
22.04.25
✎
18:06
|
(6) гнилые отмазки
|
|||
11
mikecool
22.04.25
✎
19:49
|
комментарий в (7) очень похож на бота
постоянно такое вижу - изучу и отпишусь |
|||
12
AntonKemov2
23.04.25
✎
14:11
|
(2) (3) - Не работает, вот что пробовал и везде одна и та же ошибка
var реквизит = detail.Instance; var тип = реквизит.Тип; var типВТипах = тип.Типы().Получить(0); // var xmlType = connection.XMLString(реквизит); System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. // var xmlType = connection.XMLString(тип); System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. // var xmlType = connection.XMLString(типВТипах); System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта. (4) - Пробовал в ком соеденение найти ТипЗнч - такой функции там нет. А то что в статье описывается, по обходу метаданным справедливо только для ссылочных типов: полныйТипОбъекта = РеквCOM.GetObject().Metadata().FullName(); |
|||
13
oleg_km
23.04.25
✎
14:19
|
А что отладчик показывает в свойствах?
|
|||
14
AntonKemov2
23.04.25
✎
14:22
|
(10) Не знаю о каких "отмазках" да и еще "гнилых" идет речь, но по моему странно, если я не разработчик 1С, и не администратор системы 1С, буду залезать в конфигуратор и настраивать HTTP API, без должных знаний и квалификации в этой системе.
|
|||
15
AntonKemov2
23.04.25
✎
14:23
|
(11) Бот получается, нейросеть.
|
|||
16
AntonKemov2
23.04.25
✎
14:23
|
(13) В отладчике инфы максимально мало, ComObject же
Вот только место где выбрасывается Exception: internal Exception GetException() { int errorCode = this.scode != 0 ? this.scode : (int) this.wCode; Exception exception = Marshal.GetExceptionForHR(errorCode); string message = ExcepInfo.ConvertAndFreeBstr(ref this.bstrDescription); if (message != null) { if (exception is COMException) { exception = (Exception) new COMException(message, errorCode); } else { ConstructorInfo constructor = exception.GetType().GetConstructor(new Type[1] { typeof (string) }); if (constructor != (ConstructorInfo) null) exception = (Exception) constructor.Invoke(new object[1] { (object) message }); } } exception.Source = ExcepInfo.ConvertAndFreeBstr(ref this.bstrSource); string str = ExcepInfo.ConvertAndFreeBstr(ref this.bstrHelpFile); if (str != null && this.dwHelpContext != 0) str = str + "#" + this.dwHelpContext.ToString(); exception.HelpLink = str; return exception; } } И откуда: var xmlType = connection.XMLString(реквизит); |
|||
17
Garykom
гуру
23.04.25
✎
14:27
|
(12)
Пробовал в ком соеденение найти ТипЗнч - такой функции там нет.
Все там есть ТипЗнч - доступно во внешнем соединенииГлобальный контекст (Global context) ТипЗнч (TypeOf) Синтаксис: ТипЗнч(<Значение>) Параметры: <Значение> (обязательный) Тип: Произвольный. Значение, тип которого необходимо получить. Возвращаемое значение: Тип: Тип. Описание: Получает тип значения. Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер. Пример: Если ТипЗнч(ТекОбъект) = Тип("СправочникСсылка.Номенклатура") Тогда ... КонецЕсли; Использование в версии: Доступен, начиная с версии 8.0. Методическая информация Если нечто у тебя не работает - или глюки Или что вероятней малый уровень знаний и ошибки банальные Встроенные функции надо вызывать у самого соединения В случае некоторых ЯП приходится извращаться Ну и могут быть проблемы с вызовом процедур/функций (неважно встроенных или общих модулей) если они не доступны для внешнего соединения Причем самая засада когда общая функция экспортная вроде и в модуле с галкой внешнее соединение Но внутри себя вызывает/использует другие процедуры/функции в серверных модулях без галки внешнее соединение Вызов функции общего модуля серверной 1С (8.3) по COM |
|||
18
Garykom
гуру
23.04.25
✎
14:25
|
(14) понимаешь что работа через COM/OLE соединение = по сути "разработчик 1С"
на языке 1С пытаешься писать, не зная его? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |