|
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# Спасибо за помощь :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |