|
1CV83 COM Connector + C# Работа с табличной частью | ☑ | ||
---|---|---|---|---|
0
AntonKemov
04.06.24
✎
13:21
|
Доброго времени суток, есть вопрос по Com Connector, я получаю табличную часть с 1С:ДО, вот пример кода:
...Инициализация Com Connector var query = comConnector.НовыйОбъект("Запрос"); query.Текст = "ВЫБРАТЬ * ИЗ Справочник.ВходящиеДокументы"; var queryResult = query.Выполнить().Выбрать(); while(queryResult.Следующий()) { var date = queryResult.ДатаСоздания; // Тут будет дата var comment = queryResult.Комментарий; //Тут будет строка с комментарием var questions = queryResult.ВопросыОбращения; //Тут будет табличная часть в виде Com Object, с которой я не знаю как работать, перебор - не работает, и разные методы получения данных тоже } Вопросы обращения - это табличная часть, например вот как она у меня отображается в коде, С# после конвертации xsd схемы в класс: [System.Xml.Serialization.XmlElementAttribute("ВопросыОбращения")] public CatalogTabularSectionRowВходящиеДокументыВопросыОбращения[] ВопросыОбращения { get { return this.вопросыОбращенияField; } set { this.вопросыОбращенияField = value; } } По итогу вопрос следующий, как мне работать с табличной частью? Я получаю Com Object и ничего дальше с ним не могу сделать. |
|||
1
Галахад
04.06.24
✎
13:24
|
Как-то так:
query.Текст = "ВЫБРАТЬ * ИЗ Справочник.ВходящиеДокументы.ВопросыОбращения"; |
|||
2
AntonKemov
04.06.24
✎
13:42
|
Мне нужен перебор входящих документов и всех его ссылок и табличных частей, то есть правильно ли я понимаю, что мне нужно делать подзапрос?
Не могу ли я как-то из того, что я получаю, из всей выборки документов, от туда нормально достать табличную часть, во время перебора, которая пренадлежит объекту без под запроса? |
|||
3
Мультук
04.06.24
✎
13:47
|
while(queryResult.Следующий())
{ var date = queryResult.ДатаСоздания; // Тут будет дата var comment = queryResult.Комментарий; //Тут будет строка с комментарием var questions = queryResult.ВопросыОбращения; //Тут будет табличная qq = questions.Выбрать(); while(qq.Следующий()) { //имхо так } } |
|||
4
Ёпрст
04.06.24
✎
13:49
|
(2) можешь, или как (1).. или как в (0), только как
var questions = queryResult.ВопросыОбращения.Выбрать(); while(questions.Следующий()) { бла бла бла |
|||
5
Garykom
04.06.24
✎
13:52
|
(0) В ДО есть встроенный веб и http-сервис
Используй из C#/.Net его, вместо устаревшего COM/OLE |
|||
6
AntonKemov
04.06.24
✎
13:54
|
не содержит определения для "Выбрать"
в CallSite.Target(Closure , CallSite , Object ) в System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0) При попытке вызвать у табличной части метод выбрать, выдает ошибку выше. И при попытке ее перебрать тоже возникает ошибка, но формата "IEnumerable не реализован" |
|||
7
Ненавижу 1С
04.06.24
✎
13:55
|
Вообще-то в (0) у вас там таблица значений. И ее перебирать надо иначе. Методов Выбрать/Следующий нет
|
|||
8
AntonKemov
04.06.24
✎
13:56
|
Garykom это безумно хороший вариант, но есть одна проблема, то что COM/OLE используется для интеграции не только с 1С:ДО, но и с 1С:УПП.
Скорее всего я перейду к варианту с веб сервисом, если не найду решения. |
|||
9
AntonKemov
04.06.24
✎
14:00
|
Ненавижу 1С, а как необходимо перебирать иначе?
Я пытался вызвать в C# .NET циклы например foreach или for по индексу через индекастор объекта с табличной частью, но выдавало ошибки. |
|||
10
Ненавижу 1С
04.06.24
✎
14:01
|
(8) либо foreach (если оно совместимо), либо
for(int i=0; i<questions.Количество();i++) { var item = questions.Получить(i); ... } |
|||
11
Garykom
04.06.24
✎
14:01
|
(8) 1С:УПП еще проще - тупо переход на ERP
Фактически это был намек то ты чем то не тем занимаешься Требуй для решения задачи программиста 1С и интерфейс к ней, с мануалом |
|||
12
AntonKemov
04.06.24
✎
14:08
|
Ненавижу 1С, при попытке реализовать твой вариант возникает такая ошибка, при вызове метода Количество():
не содержит определения для "Количество" в CallSite.Target(Closure , CallSite , Object ) в System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0) |
|||
13
AntonKemov
04.06.24
✎
14:10
|
(11) Окей, но с переходом на ERP есть проблемы уже на стороне бизнеса, поэтому буду отталкиваться от того что имею, веб сервис на стороне ДО и на стороне УПП, который необходимо настроить будет.
|
|||
14
Garykom
04.06.24
✎
14:10
|
(12) Как попугаев?
Просто готовить не умеешь... |
|||
15
Garykom
04.06.24
✎
14:13
|
||||
16
Ненавижу 1С
04.06.24
✎
14:24
|
(12) код покажи, где падает
|
|||
17
Ёпрст
04.06.24
✎
14:27
|
(6) покажи дерево метаданных, где видно, что есть ВопросыОбращения
|
|||
18
AntonKemov
04.06.24
✎
14:45
|
<xs:complexType name="CatalogObject.ВходящиеДокументы">
<xs:sequence> <xs:element name="Ref" type="tns:CatalogRef.ВходящиеДокументы"/> <xs:element name="DeletionMark" type="xs:boolean"/> <xs:element name="Code" type="xs:string"/> <xs:element name="Description" type="xs:string"/> <xs:element name="PredefinedDataName" type="xs:string" minOccurs="0"/> <xs:element name="Адресат" type="tns:CatalogRef.Пользователи"/> <xs:element name="Валюта" type="tns:CatalogRef.Валюты"/> <xs:element name="ВидДокумента" type="tns:CatalogRef.ВидыВходящихДокументов"/> <xs:element name="ВидОбращения" type="tns:EnumRef.ВидыОбращенийГраждан"/> <xs:element name="ВопросДеятельности" type="tns:CatalogRef.ВопросыДеятельности"/> <xs:element name="ГрифДоступа" type="tns:CatalogRef.ГрифыДоступа"/> <xs:element name="ДатаРегистрации" type="xs:dateTime"/> <xs:element name="ДатаСоздания" type="xs:dateTime"/> <xs:element name="Дело" type="tns:CatalogRef.ДелаХраненияДокументов"/> <xs:element name="Дубликат" type="xs:boolean"/> <xs:element name="Заголовок" type="xs:string"/> <xs:element name="ЗапретитьАвтоматическоеДобавлениеУчастниковРабочейГруппы" type="xs:boolean"/> <xs:element name="Зарегистрировал" type="tns:CatalogRef.Пользователи"/> <xs:element name="Источник" type="tns:CatalogRef.ИсточникиДанных"/> <xs:element name="ИсходящаяДата" type="xs:dateTime"/> <xs:element name="ИсходящийНомер" type="xs:string"/> <xs:element name="КоличествоЛистов" type="xs:decimal"/> <xs:element name="КоличествоПриложений" type="xs:decimal"/> <xs:element name="КоличествоЭкземпляров" type="xs:decimal"/> <xs:element name="Комментарий" type="xs:string"/> <xs:element name="КонтактноеЛицоПереадресовавшего" type="tns:CatalogRef.КонтактныеЛица"/> <xs:element name="ЛистовВПриложениях" type="xs:decimal"/> <xs:element name="НоменклатураДел" type="tns:CatalogRef.НоменклатураДел"/> <xs:element name="Организация" type="tns:CatalogRef.Организации"/> <xs:element name="Ответственный" type="tns:CatalogRef.Пользователи"/> <xs:element name="Отправитель" type="tns:CatalogRef.Контрагенты"/> <xs:element name="Переадресовавший" type="tns:CatalogRef.Контрагенты"/> <xs:element name="Повторное" type="xs:boolean"/> <xs:element name="Подписал" type="tns:CatalogRef.КонтактныеЛица"/> <xs:element name="ПодписанЭП" type="xs:boolean"/> <xs:element name="Проект" type="tns:CatalogRef.Проекты"/> <xs:element name="Подразделение" type="tns:CatalogRef.СтруктураПредприятия"/> <xs:element name="РегистрационныйНомер" type="xs:string"/> <xs:element name="Содержание" type="xs:string"/> <xs:element name="Создал" type="tns:CatalogRef.Пользователи"/> <xs:element name="СпособПолучения" type="tns:CatalogRef.СпособыДоставки"/> <xs:element name="СрокИсполнения" type="xs:dateTime"/> <xs:element name="СрокОтветаПереадресовавшему" type="xs:dateTime"/> <xs:element name="УдалитьЗапретитьАвтоматическоеДобавлениеУчастниковРабочейГруппы" type="xs:boolean"/> <xs:element name="УдалитьШаблон" type="tns:CatalogRef.ШаблоныВходящихДокументов"/> <xs:element name="Сумма" type="xs:decimal"/> <xs:element name="ТребуетсяОтветПереадресовавшему" type="xs:boolean"/> <xs:element name="ЧисловойНомер" type="xs:decimal"/> <xs:element name="Шаблон" type="tns:CatalogRef.ШаблоныВходящихДокументов"/> <xs:element name="ВопросыОбращения" type="tns:CatalogTabularSectionRow.ВходящиеДокументы.ВопросыОбращения" minOccurs="0" maxOccurs="99999"/> <xs:element name="ДополнительныеРеквизиты" type="tns:CatalogTabularSectionRow.ВходящиеДокументы.ДополнительныеРеквизиты" minOccurs="0" maxOccurs="99999"/> <xs:element name="СубъектыПерсональныхДанных" type="tns:CatalogTabularSectionRow.ВходящиеДокументы.СубъектыПерсональныхДанных" minOccurs="0" maxOccurs="99999"/> <xs:element name="УдалитьРезолюции" type="tns:CatalogTabularSectionRow.ВходящиеДокументы.УдалитьРезолюции" minOccurs="0" maxOccurs="99999"/> <xs:element name="УдалитьЭлектронныеЦифровыеПодписи" type="tns:CatalogTabularSectionRow.ВходящиеДокументы.УдалитьЭлектронныеЦифровыеПодписи" minOccurs="0" maxOccurs="99999"/> </xs:sequence> </xs:complexType> Вот XSD Схема 1С:ДО, которая отражает метаданные |
|||
19
AntonKemov
04.06.24
✎
14:47
|
(16)
while(queryResult.Следующий()) { var date = queryResult.ДатаСоздания; // Тут будет дата var comment = queryResult.Комментарий; //Тут будет строка с комментарием var questions = queryResult.ВопросыОбращения; //Тут будет табличная var count = questions.Количество() //Тут падает с ошибкой на то, что такого метода "Количество" нет. } |
|||
20
Ёпрст
04.06.24
✎
14:55
|
>>>При попытке вызвать у табличной части метод выбрать, выдает ошибку выше.
в результате запроса, в ВопросыОбращения будет результатЗапроса, у которого есть метод выбрать(). Показывай больше когда, как применил знания из (3) или (4) |
|||
21
Ёпрст
04.06.24
✎
14:56
|
(19) ясен пень. У РезультатаЗапроса нет метода Количество(),
есть только Выбрать (Select) Выгрузить (Unload) Пустой (IsEmpty) |
|||
22
lEvGl
04.06.24
✎
15:29
|
+ не забываем пробовать английское написание методов, даже из 1С в 1С по-русски не все работают
Коиличество() - Count() |
|||
23
Ненавижу 1С
04.06.24
✎
15:52
|
(22) кстати да
|
|||
24
AntonKemov
04.06.24
✎
19:02
|
(20) Все получилось, спасибо, использовал английский метод Select()
(21) Select() сработал, спасибо огромное, вы спасли огромное количество моего времени :) (22) Пробовал и сработало :) Спасибо огромное всем за помощь, что помогли .NET разработчику разобраться с 1С. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |