Какие библиотеки нужны для работы с 1С из C#? #540717


#0 by Alexey_Morov
Господа, какие библиотеки нужно установить и зарегистрировать через regsvr32, чтобы можно было вызывать методы, получать список документов, справочников, табличных частей документов через COMConnector? Версии платформы 1С - 8.2 и 8.1. Версия .Net - 4.0. Язык программирования - C#. Дальше подключения к 1С дело не пошло: Как же так???
#1 by el-gamberro
Эмулятор ХАСП поставил?
#2 by Alexey_Morov
Так точно. Ставил. Непонятно, какой метод или свойство нужно дёрнуть, чтобы достучаться до справочников, документов.. Читал , .
#3 by el-gamberro
А вы раньше с 1С работали?
#4 by el-gamberro
Препологаю что достучатся до спр и доков также как и в обычном коде. )
#5 by el-gamberro
#6 by Alexey_Morov
Пробую получить список всех не удалённых справочников: public static object GetCountOfTypes(string TypeName) { Как тут проверять каждый тип на ПометкаУдаления == NULL? Как же так???
#7 by el-gamberro
ПометкаУдаления никогда не бывает нулл.
#8 by Alexey_Morov
Эммм.. А как сделать так: Для Каждого спр из Метаданные.Справочники И вернуть значение переменной в C#?
#9 by Alexey_Morov
Пытался сделать так: InvokeMember("Выполнить", InvokeMethod, null, COMObject, "код на 1С") Но тут ( доложили, что метод "Выполнить" недоступен через COM-соединение.
#10 by hhhh
в метаданных не бывает пометки удаления.
#11 by Ненавижу 1С
такого и в 1С не сделать
#12 by Alexey_Morov
Хм. А как тогда быть? Существует ли способ набросать код 1С в строковую переменную у C# и потом выполнить этот код на стороне 1С, а в C# вернуть результат выполнения набора операторов?
#13 by Ненавижу 1С
что еще за "хм"? код в полный бред с точки зрения 1С
#14 by Alexey_Morov
В таком случае команда Метаданные.Справочники.Количество вернём нам все справочники (и даже с пометкой на удаление), так-так?
#15 by Ненавижу 1С
какая еще пометка на удаление у метаданных? ))
#16 by Alexey_Morov
Ну ладно, согласен. Пометки на удаление у метаданных нет. Возвращаю количество справочников так: Можно ли всё это каким-то макаром преобразовать в Запрос? Чтобы скалярно обратиться к 1С, выполнить запрос и вернуть результат?
#17 by Ненавижу 1С
#18 by Alexey_Morov
Во! Получилось! Как же так???
#19 by Ненавижу 1С
молча, юзай тип страшный тип dynamic
#20 by Alexey_Morov
Слушаюсь.
#21 by Alexey_Morov
Как можно получить в виде строки название типа на стороне C#? Сейчас имею: Как же так???
#22 by hhhh
может?
#23 by Ненавижу 1С
dynamic StringType = Connect.String(Connect.Метаданные.Документы.АктСверкиВзаиморасчетов.ТабличныеЧасти.ПоДаннымОрганизации.Реквизиты.Дата.Тип.Типы[0]);
#24 by Alexey_Morov
Нет, не прокатывает. В случае, если это ссылочный тип, то у нас получается такая балалайка: Connect.Метаданные.Документы.АктСверкиВзаиморасчетов.ТабличныеЧасти.ПоДаннымОрганизации.Реквизиты.Дата.Тип.Типы.Получить.ОписаниеТипов.Получить(i) И организовать итерацию в цикле по количеству типов-ссылок: Connect.Метаданные.Документы.АктСверкиВзаиморасчетов.ТабличныеЧасти.ПоДаннымОрганизации.Реквизиты.Дата.Тип.Типы.Количество Непонятно, как можно определить, что реквизит является ссылкой. В ОписанииТипов есть свойства КвалификаторыСтроки, КвалификаторыНомера и т.д., но нет квалификатора ссылки. Т.е. нужно определить: а) что реквизит является ссылкой. б) куда ссылается реквизит (хотя бы в виде строки).
#25 by Alexey_Morov
Также не удаётся получить ссылку даже в виде:
#26 by Alexey_Morov
Не нашёл способа получать уникальные идентификаторы объектов метаданных. То есть нужно получить что-то вроде этого: Метаданные.Документы.ВозвратМатериаловИзЭксплуатации.Идентификатор и т.д. В 1С есть способ получать уникальные идентификаторы самих документов, справочников и т.д., созданных на основе соответствующих типов метаданных. Как же так???
#27 by Alexey_Morov
Кое-как нашёл такой способ получения идентификаторов: Полное имя и будет в строковом выражении означать УИД.
#28 by iamnub
А не проще насоздавать функций в 1С, и они тебе вернут все, что нужно?
#29 by Alexey_Morov
В таком случае (если насоздавать функций, которые будут возвращать всё, что нужно), придётся бегать туда-сюда (между 1С и C# для получения детализации каждого реквизита. А если реквизит будет являться ссылочным типом (например будет ссылаться на справочник), то придётся бежать снова в 1С, чтобы запросить перечень реквизитов того справочника, на который ссылается данный реквизит. Хочется сделать что-то вроде запроса, который рекурсивно пробежится по метаданным и вернёт тип, название реквизита, куда он ссылается и потом сгруппировать результаты выборки. Например так: Запрос Зпр = Новый Запрос; Как же так???
#30 by Ненавижу 1С
что конкретно не вышло то?
#31 by Alexey_Morov
Не получается определить тип ссылки на основе полного имени типа реквизита. Т.е. я имею: ТипНичегоНепонятно = "Справочник.Организации";
#32 by Ненавижу 1С
а для чего? ты так много написал, сложно конкретно в чем общая задача
#33 by Alexey_Morov
Нужно из C# получить полностью все объекты конфигурации 1С. И пробежаться даже по ссылочным полям и получить что там есть по этим ссылкам (получить реквизиты, определить их тип и в случае если реквизит окажется снова ссылочным типом, то снова бежать и искать куда он ссылается и т.д.). Нужно: 1. получать все реквизиты справочников, документов, перечислений. 2. получать табличные части (у документов и справочников) 3. получать уникальные идентификаторы объектов метаданных. 4. получать врсию сборки конфигурации (не версию конфигурации, а именно что-то наподобие GUID, так как номер версии конфигурации не изменяется, если я добавляю/удаляю объекты конфигурации). 5. получать системные поля метаданных ("проведен" у документа, "помечен на удаление", идентификатор, синоним.
#34 by hhhh
ты постоянно путаешь данные в базе с метаданными. Это, наверно, погубит твой мегапроект.
#35 by Ненавижу 1С
так тебе структуру метаданных или сами данные нужны?
#36 by Alexey_Morov
Мне нужны метаданные.
#37 by hhhh
тогда чего пургу постоянно гонишь насчет "Проведен" и "Пометка удаления"?
#38 by Ненавижу 1С
метаданные ты уже получал тут
#39 by Alexey_Morov
А как тогда скалярно на основании строки "СправочникСсылка.Организации" получить тип и пробежаться по реквизитам и табличным частям этого объекта? object obj = V8Connector.InvokeMethod(v8, "Type", new object[] {"СправочникСсылка.Организации"}); вызывает ошибку. Как ещё можно получить Тип на основе строки?
#40 by Ненавижу 1С
ты неправильно пошел, тебе эта строка совсем не нужна
#41 by Alexey_Morov
Но ведь свойства "Проведён" и "Пометка удаления" тоже являются метаданными или как?
#42 by Ненавижу 1С
нет, не являются разве есть у вида документа свойство "Проведен"? нет, он есть у экземпляра объекта или ссылки
#43 by Alexey_Morov
Я определяю тип так: dynamic type = field.Тип; string o = V82Connector.InvokeMethod(V82Connector.Connection, "String", new object[] { type }).ToString;   case "Дата":   ...   case "Строка":   ...   case "Число":   default:   ... тут парсим, куда же ведёт данное поле - в справочники, документы или ещё куда...   break; }
#44 by Ненавижу 1С
не забудь, что тип может быть вполне составным
#45 by Alexey_Morov
Согласен. Поэтому я хочу замутить составление запроса к метаданным (Запрос зпр = Новый Запрос....) Так можно сделать? Чтобы сразу одним запросом получить все-все типы, их названия и т.д.
#46 by Alexey_Morov
Почему-то невозможно создать запрос к метаданным. В конструкторе запроса видны только объекты конфигурации...
#47 by Ненавижу 1С
потому что запрос к метаданным составить нельзя, ну нет такого надо самому писать
#48 by Alexey_Morov
Ясно. Буду писать. Если что получится - доложу тут. Чтобы потом можно было внести в книгу базы знаний. Так-так?
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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