Имя: Пароль:
1C
1С v8
VB.NET 1c - Внешнее соединение, Справочники - вид иерархии
,
0 IGOR_777
 
03.01.14
18:08
Добрый день,

Подскажите пожалуйста - как при внешнем соединении получить Вид справочника

Dim n_Con As New V82.COMConnector
        Dim n_Base As Object
        n_Base = n_Con.Connect("File=""C:\Users\Игорь\Documents\InfoBase"";Usr=""Админ"";Pwd="""";")


        'Работает
        Dim Name_Spr As Object
        Name_Spr = n_Base.Метаданные.Справочники.Номенклатура.Имя

        'Не работает - В переменную присваивается  {System.__ComObject}
        Dim Hierarchy_Spr As Object
        Hierarchy_Spr = n_Base.Метаданные.Справочники.Номенклатура.ВидИерархии


Причем внутри, в 1с все работает

НазваниеСправочника=   Метаданные.Справочники.Номенклатура.Имя ;
Сообщить(НазваниеСправочника);
        
ВидИерархииСправочника    =   Метаданные.Справочники.Номенклатура.ВидИерархии ;
Сообщить(ВидИерархииСправочника);


Может кто знает как вытащить ВидИерархии ?
1 Apokalipsec
 
03.01.14
18:11
а зачем к метаданным цепляться?
2 mehfk
 
03.01.14
18:12
Преобразуй в строку
3 IGOR_777
 
03.01.14
18:13
Внутри 1с все работает же :)

Во внешнем соединии нет (1)
4 mehfk
 
03.01.14
18:14
Как-то так
Hierarchy_Spr = n_Base.String(n_Base.Метаданные.Справочники.Номенклатура.ВидИерархии)
5 IGOR_777
 
03.01.14
18:14
Hierarchy_Spr = n_Base.Метаданные.Справочники.Номенклатура.ВидИерархии.ToString

Тоже не помогает (2)
6 IGOR_777
 
03.01.14
18:17
(4)

Нет не проходит
{System.__ComObject}
7 gornovrom
 
03.01.14
18:22
А что у кого-то номенклатура в базе имеет иерархию, от личную от "иерархия групп и элементов"?
8 IGOR_777
 
03.01.14
18:23
(7)
Это просто пример
В реальности задача чуть посложнее
9 IGOR_777
 
03.01.14
18:24
(7)
Но всеравно нужно узнать ВидИерархии справочника :)
10 Jaap Vduul
 
03.01.14
18:29
...
Элемент системного перечисления также является объектом и доступен через интерфейс IDispatch, однако ни свойств, ни методов он не имеет.
По этой причине анализ полученных значений системных перечислений возможен только посредством их сравнения со значениями системных перечислений, полученными через свойства глобального контекста.
...
If n_Base.Метаданные.Справочники.Номенклатура.ВидИерархии = n_Base.Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Then
11 gornovrom
 
03.01.14
18:30
(10) +1
12 IGOR_777
 
03.01.14
18:37
(10)

Спасибо, Работает :)

If n_Base.Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов.Equals(n_Base.Метаданные.Справочники.Номенклатура.ВидИерархии) Then
13 mehfk
 
03.01.14
20:08
Проверил
Set cntr = CreateObject("V82.COMConnector")
Set n_Base = cntr.Connect("File=""C:\1C8\BP2"";Usr="""";Pwd="""";")

Name_Spr = n_Base.String(n_Base.MetaData.Catalogs.[Номенклатура].[Имя])

Wscript.Echo(Name_Spr)

Hierarchy_Spr = n_Base.String(n_Base.MetaData.Catalogs.[Номенклатура].[ВидИерархии])

Wscript.Echo(Hierarchy_Spr)

C:\WORK>cscript 1.vbs
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

Номенклатура
ИерархияГруппИЭлементов
14 IGOR_777
 
03.01.14
20:29
(13)

Странно

Член группы не найден. (Исключение из HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))

Наверно это только в скриптах работает - в Visual Studio не работает

https://www.dropbox.com/s/j9rn896uoeoa608/Новый%20точечный%20рисунок.bmp?v=1rc-


Меня спас ответ (10)

Но всеравно Спасибо :)
15 mehfk
 
03.01.14
20:33
Квадратные скобки нужны были чтобы русские буквы в VBScript можно было использовать. В VS наверное можно писать так как у вас в (0)
16 mehfk
 
03.01.14
20:33
*нужно
17 IGOR_777
 
03.01.14
20:39
(15)
Пробовал
И без них и с ними не помогает сей вариант

В .Net Такое не проходит

Хотя очень жаль
18 mehfk
 
03.01.14
21:00
C# 2010
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            Type v8Type = Type.GetTypeFromProgID("V82.COMConnector", true);
            dynamic cntr = Activator.CreateInstance(v8Type);
            dynamic n_Base = cntr.Connect("File=\"C:\\1C8\\BP2\";Usr=\"\";Pwd=\"\";");

            string Name_Spr = n_Base.String(n_Base.MetaData.Catalogs.Номенклатура.Имя);

            string Hierarchy_Spr = n_Base.String(n_Base.MetaData.Catalogs.Номенклатура.ВидИерархии);

            Console.Write("Name_Spr = " + Name_Spr + "\n");
            Console.Write("Hierarchy_Spr = " + Hierarchy_Spr + "\n");
            Console.ReadKey();
        }
    }
}

C:\...ojects\ConsoleApplication1\ConsoleApplication1\bin\Debug>ConsoleApplication1.exe
Name_Spr = Номенклатура
Hierarchy_Spr = ИерархияГруппИЭлементов
19 IGOR_777
 
03.01.14
21:04
(18)
Сейчас с компилю :)
20 IGOR_777
 
03.01.14
21:50
(18)

Что то какая то магия в C#

Name_Spr = Номенклатура
Hierarchy_Spr = ИерархияГруппИЭлементов

В VB
Name_Spr = Номенклатура
Hierarchy_Spr = System.__ComObject

Спасибо :)
Интересный феномен

Буду гуглить как правильно тип Dynamic будет на Бейсике :)
21 mehfk
 
03.01.14
21:55
> Буду гуглить как правильно тип Dynamic будет на Бейсике :)
это лишнее, dynamic можно было и  на object поменять, тем более он никак не влияет на переменную Hierarchy

Может есть смысл попробовать поменять тип на string вот в этой строке ?

>Dim Hierarchy_Spr As Object
22 IGOR_777
 
03.01.14
22:07
(21)

Тоже самое
Hierarchy_Spr = System.__ComObject

Грешу именно на Dynamic

Больше разницы в коде не вижу
23 mehfk
 
03.01.14
22:16
Странно. n_Base.String(...) - это аналог Строка(...) в 1С, через COM мы передаем строку.

Почему эта конструкция не работает в вашем случае - х.з.

В качестве эксперимента - попробуйте перечисления передавать с явным преобразованием и без него.
24 IGOR_777
 
03.01.14
22:17
(23)
Спасибо :)

Попробую :)
25 IGOR_777
 
04.01.14
16:27
(21)

Да, дело оказалось в dynamic
В VB.Net  нет полного аналога dynamic

Добавлю контролы на C#

Спасибо за помощь :)