|   |   | 
| 
 | Работа с типами в 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С пытаешься писать, не зная его? | |||
| 19
    
        AntonKemov2 23.04.25✎ 14:29 | 
        (18) Ну значит изучу в процессе, ничего не мешает мне его параллельно изучать, я предлагаю закрыть эту не нужную тут тему и сконцентрироваться на решении проблемы изначальной, по которой я задал вопрос.
 Наши рассуждения по поводу целесообразности COM/OLE и т.п. - не к чему не приведут. | |||
| 20
    
        Garykom гуру 23.04.25✎ 14:33 | 
        (19) Еще раз повторю:
 1. Возьми конфигуратор 2. Напиши нужный код на ЯП 1С во внешней обработке (используй только методы и объекты доступные через внешнее соединение, смотри описание в СП) 3. Убедись что он работает 4. Вот теперь переноси его на C#/.Net для работы через COM/OLE | |||
| 21
    
        AntonKemov2 23.04.25✎ 14:32 | 
        (17) Сейчас проверю и отпишусь     | |||
| 22
    
        AntonKemov2 23.04.25✎ 14:42 | 
        (20) Ок, буду тогда так пробовать.     | |||
| 23
    
        Волшебник модератор 23.04.25✎ 15:26 | 
        (19) Ваше предложение отклоняется.     | |||
| 24
    
        shuhard 23.04.25✎ 15:39 | 
        (19)[и сконцентрироваться на решении проблемы изначальной, по которой я задал вопрос]
 а нам это зачем ? | |||
| 25
    
        AntonKemov2 23.04.25✎ 19:13 | 
        (20) У меня появился определенный прогресс.
 1) У меня почему-то не работают частично русские функции, приходится часть на английском писать. Теперь я могу получать наименование и в целом инфу о простых типах (Строка, число и т.п.) Вот так: соединение.XMLTypeOf(значениеОбъекта); Но это справедливо, только для простых типов, если тип ссылочный, то возвращается null, я попробовал на прямую тип передать вот так: var типРеквизита = реквизит.Тип; var xmlТип = соединение.XMLType(типРеквизита) И тут я получаю ошибку: Код ошибки: 1001 Несоответствие типов (параметр номер '1') | |||
| 26
    
        Garykom гуру 23.04.25✎ 19:38 | 
        (25) Эндоскопом конечно можно гвозди забивать
 Но лучше взять более подходящий инструмент И самое главное научиться им пользоваться Имхо ты дурью маешься Если у тебя задача связана с 1С, которую ты сам не знаешь Есть варианты: 1. Самому сначала изучить 1С 2. Нанять спеца-прога по 1С В итоге выяснится что делал (пытался) не то и не так А все намного проще и быстрей с точки зрения программиста 1С | |||
| 27
    
        Pprog151713 24.04.25✎ 07:23 | 
        (25) Так это не профессионально, так эту проблему решать. Пацаны верно говорят. Эндоскопом.     | |||
| 28
    
        Мультук гуру 24.04.25✎ 08:03 | 
        Я вот одно не понимаю.
 Если автор пишет некую мега-супер-универсальную приблуду это одно. Но скорее всего, он пишет какую-то локальную утилиту импорта ИЗ 1С. В этом случае все объекты и все поля уже описаны в тех.задании вместе с их типами. А еще информацию из базы-1С можно/нужно получать 1С-запросами. А в 1С запросе можно написать всё что угодно, определение типа в том числе. P.S. Смешно будет, если для его целей будет достаточно некой доп.обработки, которая по расписанию будет собирать нужно информацию в XML/JSON/CSV и плевать этот пакет в SMB/FTP/Почта/HTTP | |||
| 29
    
        AntonKemov2 24.04.25✎ 20:44 | 
        (2) (26) В любом случае спасибо за помощь и советы, некоторые оказались очень полезными.     | |||
| 30
    
        AntonKemov2 24.04.25✎ 20:45 | 
        (28) Ты почти угадал, эх.     | |||
| 31
    
        lEvGl гуру 24.04.25✎ 20:51 | 
        (30) вы занимаетесь ерундой
 чтобы через ком что то сделать в базе 1с надо будет изучить язык 1с, ком это просто обертка, дающая возможность вызывать методы, использовать свойства объектов в 1с. Ком это клиент 1с, не тонкий не толстый, а внешнее соединение, его отличает от остальных отсутствие интерфейса | |||
| 32
    
        strange2007 25.04.25✎ 13:55 | 
        (0) 1. Рекомендую использовать только англоязычные аналоги всех ключевых слов. Например, не "тип.Типы()", а "тип.Types()". Для всяких комов это прям важно. Во всяком случае раньше было важным
 2. Как посоветовали выше, надо сначала весь код написать и отладить в обработке в конфигураторе той базы, к которой цепляешься. Это прям очень сильно сокращает время 3. Ну его нафиг эти COM-ы. Знаю, что ограничения и прочее, но вот прям рекомендую задуматься про отказ от такого обмена данными | |||
| 33
    
        Garykom гуру 25.04.25✎ 14:15 | 
        (32) эмм
 есть же Выполнить() и Вычислить() :) короче берем кусок кода 1С (можно и русский), выполняем его результат забираем если стандартизировать и параметры и результат, можно обернуть и удобно использовать | |||
| 34
    
        strange2007 25.04.25✎ 15:05 | 
        (33) Это уже высший пилотаж. Тут надо много лет изучать кунг-фу 1С, чтобы приёмы "Выполнить()" познать. Автор же наоборот новичок в таких вещах и ему бы что-то базовое надо     | |||
| 35
    
        AntonKemov2 25.04.25✎ 20:02 | 
        (33) Что-то вроде хранимых процедур в разных базах, вроде звучит даже как решение, спасибо, попробую этот вариант тоже.     | |||
| 36
    
        AntonKemov2 25.04.25✎ 20:07 | 
        (33) Сейчас пробую вместо COM настроить HTTP сервис, мб даже лучше будет, если самому получится сделать, то буду проталкивать его уже в основную базу.     | |||
| 37
    
        Волшебник 25.04.25✎ 20:08 | 
        (36) Можно даже расширением. Тут я даю добро     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |