Автор Тема: 1С 8.3+Java Узнать тип поля в результате запроса  (Прочитано 407 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн belchanin

  • Редкий гость
  • Пол: Мужской
Есть код ...

ActiveXComponent v8App;
Variant connection1C;

v8App = new ActiveXComponent("v83.Application");

String conString = "File=ХХХХХ;Usr=ХХХХ;Pwd=ХХХХ";
connection1C = Dispatch.call(v8App, "Connect", conString);

Dispatch query = (Dispatch) Dispatch.call(v8App, "NewObject", "Query").getDispatch();
Dispatch.put(query, "Text", "SELECT * FROM Справочник.Transformers AS Items");

Dispatch result = Dispatch.call(query, "Execute").toDispatch();
if(!Dispatch.call(result, "IsEmpty").getBoolean())
{
       Dispatch qcol= Dispatch.get(result, "Columns").getDispatch();

        for(int i=0; i<scol.length;i++)
        {
              int qtype=Dispatch.call(Dispatch.call(Dispatch.call(Dispatch.call(qcol, "Get", i).getDispatch(), "ValueType").getDispatch(), "Types").getDispatch(), "Count").getInt();
              for(int j=0; j<qtype; j++)
                   System.out.println(String.valueOf(System.out.println(Dispatch.call(Dispatch.call(Dispatch.call(Dispatch.call(qcol, "Get", i).getDispatch(), "ValueType").getDispatch(), "Types").getDispatch(), "Get", j).getvt()));
        }
}

Для всех колонок возвращается тип 9 (VariantDispatch = 9) ... как же узнать реальный тип колонки ... буду очень признателен за помощь ...

PS ... собака Тома Женнинга реально достала (((
No animal was hurt during the writing of this message

Оффлайн DoReMi

  • Админы
  • *****
  • Пол: Мужской
    • БЛОГОДОРЕМИЕ
Там может быть всё что угодно и не уверен, что Java поймет все возможные типы 1C, которые могут быть и составными (для колонки, но не для конкретного поля).
А что со значениями, они получаются нормально?
Вы держитесь здесь,  вам всего доброго, хорошего настроения, здоровья. ©

Оффлайн Serega

  • Волшебник
  • Пол: Мужской
Можно поиграться в запросе с функциями ТИПЗНАЧЕНИЯ и ТИП, смотря что нужно дальше с этим делать.

Пахнет квадратным велосипедом для диплома.

Оффлайн belchanin

  • Редкий гость
  • Пол: Мужской
А что со значениями, они получаются нормально?

Да, нормально ....

Dispatch.put(query, "Text", "SELECT * FROM Справочник.Transformers AS Items");

Dispatch result = Dispatch.call(query, "Execute").toDispatch();
if(!Dispatch.call(result, "IsEmpty").getBoolean())
{
     Dispatch select = Dispatch.call(result, "Choose").toDispatch();

     while (Dispatch.call(select, "Next").getBoolean())
     {
                    System.out.println(Dispatch.get(select, "Description").getString());

      }

Оффлайн belchanin

  • Редкий гость
  • Пол: Мужской
Можно поиграться в запросе с функциями ТИПЗНАЧЕНИЯ и ТИП, смотря что нужно дальше с этим делать

Зачем играться с дополнительными запросами если интересующая информация есть в результате запроса ... вопрос как ее использовать ...
А дальше заполнение ResultSet'a для интеграции с существующими в проекте классами ...

Оффлайн belchanin

  • Редкий гость
  • Пол: Мужской
Пахнет квадратным велосипедом для диплома

Посмеялся ... спасибо за комплемент ... возраст не тот для диплома )))

Оффлайн DoReMi

  • Админы
  • *****
  • Пол: Мужской
    • БЛОГОДОРЕМИЕ
Ну либо надо знать заранее (подсмотреть в конфигураторе) типы всех полей и делать сопоставление, либо по значению пытаться определить тип ;)
Я даже не представляю что там получится, для ссылочных типов видимо будут GUIDы. А если надо брать только конкретику, что мешает без звездочки взять
SELECT Наименование AS Name, Код as Code ... FROM Справочник.... и далее уже строки брать как строки, числа как числа.



Да, а ещё проще не давать код, а обрисовать задачу, которую надо решить.
Вы держитесь здесь,  вам всего доброго, хорошего настроения, здоровья. ©

Оффлайн Serega

  • Волшебник
  • Пол: Мужской
Зачем играться с дополнительными запросами если интересующая информация есть в результате запроса ... вопрос как ее использовать ...
Порою проще подготовить нужную информацию на стороне отправителя, чем делать то же самое на стороне приемника, где перевести все ссылочные типы в нормальный вид будет не так легко.

Можно сделать что-то вроде: ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(Поле1) = ТИП(Тип1) ТОГДА "Тип1" ВЫБОР КОГДА.... КОНЕЦ
« Последнее редактирование: 14 Марта 2017, 18:27:50 от Serega »