Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

classic Classic list List threaded Threaded
22 messages Options
12
sevto sevto
Reply | Threaded
Open this post in threaded view
|

Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

Здравствуйте, в 1С вообще не разбираюсь, но возникала необходимость.
1С на MS SQL, установлена на WinXp 64.
делаю запрос:

            OCQuery query = app.newQuery("SELECT * FROM Справочник.Номенклатура");
            OCQueryResult result =  query.execute();

выдает ошибку :
org.jinterop.dcom.common.JIRuntimeException: Unsupported type for VARIANT.  [0x00001030]
org.jinterop.dcom.core.VariantBody.<init>(JIVariant.java:1401)
org.jinterop.dcom.core.VariantBody.<init>(JIVariant.java:1371)
org.jinterop.dcom.core.JIVariant.init(JIVariant.java:391)
org.jinterop.dcom.core.JIVariant.<init>(JIVariant.java:368)
org.jinterop.dcom.impls.automation.JIDispatchImpl.put(JIDispatchImpl.java:377)
org.jinterop.dcom.impls.automation.JIDispatchImpl.put(JIDispatchImpl.java:662)
com.ipc.msa.ComObject.put(ComObject.java:122)
com.ipc.oce.OCObject.put(OCObject.java:226)
com.ipc.oce.query.OCQuery.setText(OCQuery.java:43)
com.ipc.oce.OCApp.newQuery(OCApp.java:439)

Хотя в примерах написано "SELECT * FROM Catalog.Номенклатура", у меня  из метаданных выводится из getFullName именно "Справочник.Номенклатура". Но пробовал так и так .
В чем может быть проблема?
sevto sevto
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

 версия 1С  8.2.13.205
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

In reply to this post by sevto
Интересно... Обламывается не execute, а именно newQuery(<String>).
Этот метод собственно делает упрощенную работу, а именно
OCQuery queryObject = new OCQuery(newObject("Query"));
queryObject.setText(query);
return queryObject;
Я сам признаться не знаю какие проверки и действия производит 1С при вызове setText.
Такой справочник есть? Кодировка исходника какая?
OCTitbit developer.
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

... еще есть вариант, что ошибка в XP64 - уж больно кривая. Поэтому имеет смыст ради интереса попробовать обратиться к другой 1С с такой же конфигурацией.
OCTitbit developer.
sevto sevto
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

Спасибо за ответ.
 Я тупанул, 1С установлен на Win2003 R2 SP2. Кодировка проекта utf-8.
С проблемой кодировки я уже столкнулся при получении менеджера документов.
поэтому сделал сразу из метаданных, например, пробую через менеджера:

          OCMetadataDocumentCollection documentMetadataCollection = app.getMetadata().getDocuments();
            System.out.println("fullName:" + documentMetadataCollection.get(121).getFullName());
            OCDocumentManager manCP = app.getDocumentManager(documentMetadataCollection.get(121).getName());
            System.out.println("number:" + "" + manCP.select(from).getNumber());

на выходе имею:

fullName:Документ.СчетФактураВыданный
Error: java.lang.IllegalStateException: org.jinterop.dcom.core.VariantBody$EMPTY cannot be cast to  org.jinterop.dcom.core.JIString, org.jinterop.dcom
.core.VariantBody$EMPTY cannot be cast to org.jinterop.dcom.core.JIString
 org.jinterop.dcom.core.VariantBody.getObjectAsString(JIVariant.java:1687)
 org.jinterop.dcom.core.JIVariant.getObjectAsString2(JIVariant.java:1102)
 com.ipc.oce.objects.OCDocumentSelection.getNumber(OCDocumentSelection.java:66)

объект manCP  не null, но он вроде как пустой. Получается, что данные я не могу получить ни через запрос, ни через менеджера.

Если бы я сделал так:

  OCDocumentManager manCP = app.getDocumentManager("Документ.СчетФактураВыданный");

 то получил бы org.jinterop.dcom.common.JIException: Unknown name. [0x80020006] для этой строки

А вообще конфигурация защищенная, но сторонние 1C-ники как-то могут оттуда данные получать.
Может в этом причина?
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

In reply to this post by IgorKonovalov
... еще вариант. API 1C могло несколько поменяться. У меня сейчас под рукой нет данной версии платформы.
Если Вы можете, то посмотрите сигнатуру в хелпе к 1С. Найти нужно объект "ЗАПРОС" (Query) и посмотреть у него свойство "Текст" (Text). Если оно еще и какого оно типа.
OCTitbit developer.
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

In reply to this post by sevto
org.jinterop.dcom.core.VariantBody$EMPTY - это что-то типа "Неопределено" в 1С. Что-то сомнительно, чтобы у документа в 1С отсутствовал номер. Номера может не быть, только у новых "незафиксированных" докуметов.
А у этого пользователя есть вообще доступ к данному документу?
OCTitbit developer.
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

а что значит "защищенная" конфигурация?
OCTitbit developer.
sevto sevto
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

In reply to this post by IgorKonovalov
Из справки:
-----------------------------
Запрос (Query)
Свойства:

МенеджерВременныхТаблиц (TempTablesManager)
Параметры (Parameters)
Текст (Text)

Методы:

Выполнить (Execute)
ВыполнитьПакет (ExecuteBatch)
НайтиПараметры (FindParameters)
УстановитьПараметр (SetParameter)

Конструкторы:

На основании текста запроса

Описание:

Предназначен для выполнения запросов к базе данных.

Доступность:

Сервер, толстый клиент, внешнее соединение. er("Документ.СчетФактураВыданный");
-->
Текст (Text)
Использование:

Чтение и запись.
Описание:

Тип: Строка. Содержит исходный текст выполняемого запроса.

Доступность:

Сервер, толстый клиент, внешнее соединение.
------------------------------
Пользователь имеет права без ограничений.


IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

ну с api все ок, это уже хорошо.
Так получается менеджера докуметов по имени не находит?
OCTitbit developer.
sevto sevto
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

Менеджера документов находит.
Например:
            OCMetadataDocumentCollection documentMetadataCollection = app.getMetadata().getDocuments();
            System.out.println("document fullName:" + documentMetadataCollection.get(121).getFullName());
            OCDocumentManager manCP = app.getDocumentManager(documentMetadataCollection.get(121).getName());
            System.out.println("manager class:" + manCP.getClass().getName());
            OCDocumentSelection selection =  manCP.select(from);
            System.out.println("selection class:" + selection.getClass().getName());
            System.out.println("number:"  + selection.getNumber());
Вывод:
document fullName:Документ.СчетФактураВыданный
manager class:com.ipc.oce.objects.OCDocumentManager
selection class:com.ipc.oce.objects.OCDocumentSelection
Error: java.lang.IllegalStateException: org.jinterop.dcom.core.VariantBody$EMPTY cannot be cast to org.jinterop.dcom.core.JIString, org.jinterop.dcom
.core.VariantBody$EMPTY cannot be cast to org.jinterop.dcom.core.JIString
 org.jinterop.dcom.core.VariantBody.getObjectAsString(JIVariant.java:1687)
 org.jinterop.dcom.core.JIVariant.getObjectAsString2(JIVariant.java:1102)
 com.ipc.oce.objects.OCDocumentSelection.getNumber(OCDocumentSelection.java:66)

 Выборка из данных получается пустая я так понял: org.jinterop.dcom.core.VariantBody$EMPTY

Или еще пример, если попытаться найти по номеру документа
 manCP.findByNumber("3-A4879");
будет выброшен exception:
Exception in thread "main" java.lang.NoSuchMethodError: org.jinterop.dcom.core.JIVariant.makeVariant(Ljava/lang/Object;)Lorg/jinterop/dcom/core/JIVar
iant;
        at com.ipc.oce.objects.OCDocumentManager.findByNumber(OCDocumentManager.java:173)
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

так, все по порядку.
1) При использовании xxxSelection нужно как в jdbc позиционироваться на 1-ый элемент посредствам next()
2) NoSuchMethodError - тут что-то не так. Вы показываете, что передаете String, а вылезает массив Object-ов. Давай посмотрим чуть больше кода
OCTitbit developer.
sevto sevto
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

ОК. Для OCDocumentManager next() помог, но вот с OCDocumentJournalManager все тот же NoSuchMethodError. Почти весь код:
 public static void test(OCApp app) throws Exception {
        
        DateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm");
        Date from = dateFormat.parse("17-05-2012 00:00");
        Date to = dateFormat.parse("18-05-2012 00:00");

        OCMetadataDocumentJournalCollection journals = app.getMetadata().getDocumentJournals();
        OCDocumentJournalMetadataObject journal = journals.get(17);
        System.out.println("journal fullName:" + journal.getFullName());
        OCDocumentJournalCollection journalCollection = app.getDocumentJournalCollection();
        OCDocumentJournalManager documentJournalManager = journalCollection.getDocumentJournal(journal.getName());
        System.out.println("documentJournalManager class:" + documentJournalManager.getClass().getName());

        OCDocumentSelection selection = documentJournalManager.select(from);
        
        System.out.println("Ok!");
    }

Вывод:
17.05.2012 14:25:38 com.ipc.oce.OCApp connect2Serverbased
INFO: OCTitbit version 0.5.3
17.05.2012 14:25:38 com.ipc.oce.OCApp connect2Serverbased
INFO: Application -1337504807 connected in 8625ms
17.05.2012 14:25:38 com.ipc.oce.v82.VariantFactoryV82 activate
INFO: Varset table preloaded in 0ms
journal fullName:ЖурналДокументов.ПродажаБилетов
documentJournalManager class:com.ipc.oce.objects.OCDocumentJournalManager
Exception in thread "main" java.lang.NoSuchMethodError: org.jinterop.dcom.core.JIVariant.makeVariant(Ljava/lang/Object;)Lorg/jinterop/dcom/core/JIVar
iant;
        at com.ipc.oce.objects.OCDocumentJournalManager.select(OCDocumentJournalManager.java:52)
        at com.test.Main.test(Main.java:64)
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

а можно полный стектрейс. Может там баг.
OCTitbit developer.
sevto sevto
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

это и есть весь стектрейс
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

надо подумать...
OCTitbit developer.
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

In reply to this post by sevto
странно откуда там взяться массиву. Просмотрел всю историю исходников, так и не нашел. Выдаю версию, которую сам просматривал.  Возможно ошибка была исправлена, трудно сказать. Попробуйте эту версию. octitbit-0.6.0-SNAPSHOT.jar
OCTitbit developer.
sevto sevto
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

Версия! Но не octitbit а jinterop в maven. Я привык брать из общедоступных репозитариев.

у меня было:
       <dependency>
            <groupId>org.jinterop</groupId>
            <artifactId>j-interop</artifactId>
            <scope>compile</scope>
            <version>2.0.4</version>
    </dependency>
- первое что нашлось.

 Потом погуглил еще и нашел:
        <dependency>
            <groupId>org.kohsuke.jinterop</groupId>
            <artifactId>j-interop</artifactId>
            <version>2.0.8-kohsuke-1</version>
        </dependency>

Ура, заработало. И запросы тоже.

IgorKonovalov, спасибо Вам за помощь!

IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

да, об использование другой версии j-interop я не подумал. Насколько я знаю команда j-interop в maven-овские repo никогда не выкладывалась. Но мир не без добрых людей. Удачи!

ps
Если не секрет, а что за проект у Вас? Просто интересно, где моя либа еще пригодилась. Моя почта есть в профайле.
OCTitbit developer.
IgorKonovalov IgorKonovalov
Reply | Threaded
Open this post in threaded view
|

Re: Ошибка при запросе Unsupported type for VARIANT. [0x00001030]

Видать секрет
OCTitbit developer.
12