|
Получение ссылки на элемент ПВХ через COM-коннектор | ☑ | ||
---|---|---|---|---|
0
SmartUseless
20.12.12
✎
16:30
|
People общеизвестен код получения ссылки на ПВХ
СвойствоКодПроизводителя=ПланыВидовХарактеристик.СвойстваОбъектов.Найт иПоНаименованию("Код производителя"); которую потом можно использовать в качестве параметра в запросе для получения значения свойства для заданной номеклатуры: ЗапросЗначСвойствПроизв.Текст = "ВЫБРАТЬ | ЗначенияСвойствОбъектов.Значение |ИЗ | РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов |ГДЕ | ЗначенияСвойствОбъектов.Объект = &Объект | И ЗначенияСвойствОбъектов.Свойство = &Свойство"; Вопрос как это сделать в БД, к которой подключен через ком-коннектор: V82=Новый COMОбъект("V82.ComConnector"); Попытка ВнешняяБД=V82.Connect(СтрокаПодключения); Исключение сообщить("База не может быть открыта"); Возврат Ложь; КонецПопытки; Будет ли работать код подобно этому: ВнешняяБД.СвойствоКодПроизводителя=ПланыВидовХарактеристик.СвойстваОбъектов.Найт иПоНаименованию("Код производителя"); |
|||
1
Kashemir
20.12.12
✎
16:32
|
Мутабельные объекты нельзя передавать. Заверни в строку любым известным тебе способом и разверни на вызывающей стороне.
|
|||
2
Kashemir
20.12.12
✎
16:33
|
ВнешняяБД.СвойствоКодПроизводителя=ВнешняяБД.ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Код производителя");
|
|||
3
SmartUseless
20.12.12
✎
16:34
|
Или надо работать через запрос
пытаться получить сслылку на элемент ПВХ: Запрос=ВнешняяБД.NewObject("Запрос");а в запросе по коду как параметру выполнять запрос к ПВХ ? |
|||
4
SmartUseless
20.12.12
✎
16:35
|
(2)Так значит через СОМ-коннектор поиск по наименованию работает?
|
|||
5
Kashemir
20.12.12
✎
16:36
|
(4) Передавать можно простые типы строка, число, дата булево.
В твоем случае наименование строка - пользуй ради бога, только не забывай на какой-то стороне ты значение получаешь и на какой применяешь. |
|||
6
vmv
20.12.12
✎
16:40
|
(0) я делал так для решения проблемы озвученной в (1), которой не избежать.
1. Созавал в базе Приемнике(Источнике) общий серверный модуль АДД_COMконнектор там методы ПолучитьСсылкуВЭтойБазеПоГУИДизВнешней(СтрокаГУИД_Источник, ИмяОбъектаМд_Приемник) вариант вызова из базы источника СомСоединениеСИб.АДД_COMконнектор("Строка(ГУИД)", "Справочник.Номенклатура") ну как-то так и там временное хранилище можно заюзать для передачи примитивных коллекций по сом-соединиею в базе приемнике, например массив гуидов, соотвестввие и пр. все работало, лень искать готовые меоды у себя в ворохе баз, ну разве что за 500К |
|||
7
SmartUseless
20.12.12
✎
16:43
|
(6) мыло напиши или аську для конекта
|
|||
8
Kashemir
20.12.12
✎
16:45
|
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку(); СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ЛюбоеЗначение); СтрокаХМЛ = ЗаписьXML.Закрыть(); ЧтениеXML = ВнешняяБД.СоздатьОбъект("ЧтениеXML"); ЧтениеXML.УстановитьСтроку(СтрокаХМЛ); ЗначениеНаСторонеВнешнейБД = ВнешняяБД.СериализаторXDTO.ПрочитатьXML(ЧтениеXML); |
|||
9
Kashemir
20.12.12
✎
16:47
|
+(8) На скорую писал, потому по мелочам мог ошибится
ВнешняяБД.NewObject("ЧтениеXML"); |
|||
10
SmartUseless
20.12.12
✎
16:50
|
Ну это решение через так называемый технологию универсального обмена данными УОД, тоже надо покрутить..
|
|||
11
Kashemir
20.12.12
✎
16:56
|
(10) Универсальные решения всяко полезнее чем функционал требующий изменений конфы.
|
|||
12
Serginio1
20.12.12
✎
16:58
|
(20) Иногда не все методы идут через внешнее соединение например из 7 ки Поэтому я сделал внешнийюОбработку, что бы не корочить конфигурацию
Добавил функции в модуль обработки Функция ВычислитьВыражение(Выражение) Экспорт возврат вычислить(Выражение); КонецФункции Функция ВычислитьСвойствоОбъекта(Объект,Свойство) Экспорт возврат Объект[Свойство]; КонецФункции и вызов ДляВнешнегоСоединения= Сервер.ВнешниеОбработки.Создать(ПутьКОбработке); Если Мета="Справочник" Тогда Объект=ДляВнешнегоСоединения.ВычислитьВыражение ИначеЕсли Мета="Документ" Тогда Объект=ДляВнешнегоСоединения.ВычислитьВыражение("Документы."+ВидПриемник+".СоздатьДокумент()"); ДляВнешнегоСоединения.ВычислитьСвойствоОбъекта(Объект,ТЧПриемника).Добавить(); Иначе Объект=ДляВнешнегоСоединения.ВычислитьВыражение("РегистрыНакопления."+ВидПриемник+".СоздатьНаборЗаписей()"); КонецЕсли; |
|||
13
SmartUseless
20.12.12
✎
16:59
|
(11) ну мне для запроса к регистру сведений нужно только два параметра ссылку на номеклатуру и ссылку на элеемент ПВХ, может удастся обойтись методом НайтиПоНаименованию через КОМ-коннектор?
|
|||
14
vmv
20.12.12
✎
16:59
|
надо забить в общий модуль сом-коннектируемых баз группу поддержки
Функция НайтиЭлементСпрПоGUID (GUID, ИмяМетаданных, ОбъектСсылка = Неопределено) Экспорт ТипМетаданных = "Справочник"; ОбъектМенеджер = Справочники[ИмяМетаданных]; Если Строка(GUID) = XMLСтрока(ОбъектМенеджер.ПустаяСсылка()) Тогда ОбъектСсылка = ОбъектМенеджер.ПустаяСсылка(); Возврат ""; КонецЕсли; ОбъектСсылка = ПолучитьСсылкуПоGUIDиИдентификациии(GUID, ТипМетаданных, ИмяМетаданных, ОбъектМенеджер); Если ОбъектСсылка.Пустая() Тогда Возврат ""; Иначе Возврат Строка(ОбъектСсылка); КонецЕсли; КонецФункции Функция НайтиДокументПоGUID (GUID, ИмяМетаданных, ОбъектСсылка = Неопределено) Экспорт ТипМетаданных = "Документ"; ОбъектМенеджер = Документы[ИмяМетаданных]; Если Строка(GUID) = XMLСтрока(ОбъектМенеджер.ПустаяСсылка()) Тогда ОбъектСсылка = ОбъектМенеджер.ПустаяСсылка(); Возврат ""; КонецЕсли; ОбъектСсылка = ПолучитьСсылкуПоGUIDиИдентификациии(GUID, ТипМетаданных, ИмяМетаданных, ОбъектМенеджер); Если ОбъектСсылка.Пустая() Тогда Возврат ""; Иначе Возврат Строка(ОбъектСсылка); КонецЕсли; КонецФункции Функция НайтиПланВидовХрПоGUID (GUID, ИмяМетаданных, ОбъектСсылка = Неопределено) Экспорт ТипМетаданных = "ПланВидовХарактеристик"; ОбъектМенеджер = ПланыВидовХарактеристик[ИмяМетаданных]; Если Строка(GUID) = XMLСтрока(ОбъектМенеджер.ПустаяСсылка()) Тогда ОбъектСсылка = ОбъектМенеджер.ПустаяСсылка(); Возврат ""; КонецЕсли; ОбъектСсылка = ПолучитьСсылкуПоGUIDиИдентификациии(GUID, ТипМетаданных, ИмяМетаданных, ОбъектМенеджер); Если ОбъектСсылка.Пустая() Тогда Возврат ""; Иначе Возврат Строка(ОбъектСсылка); КонецЕсли; КонецФункции Функция НайтиПланСчетовПоGUID (GUID, ИмяМетаданных, ОбъектСсылка = Неопределено) Экспорт ТипМетаданных = "ПланСчетов"; ОбъектМенеджер = ПланыСчетов[ИмяМетаданных]; Если Строка(GUID) = XMLСтрока(ОбъектМенеджер.ПустаяСсылка()) Тогда ОбъектСсылка = ОбъектМенеджер.ПустаяСсылка(); Возврат ""; КонецЕсли; ОбъектСсылка = ПолучитьСсылкуПоGUIDиИдентификациии(GUID, ТипМетаданных, ИмяМетаданных, ОбъектМенеджер); Если ОбъектСсылка.Пустая() Тогда Возврат ""; Иначе Возврат Строка(ОбъектСсылка); КонецЕсли; КонецФункции Функция НайтиПланВидовРсПоGUID (GUID, ИмяМетаданных, ОбъектСсылка = Неопределено) Экспорт ТипМетаданных = "ПланВидовРасчета"; ОбъектМенеджер = ПланыВидовРасчета[ИмяМетаданных]; Если Строка(GUID) = XMLСтрока(ОбъектМенеджер.ПустаяСсылка()) Тогда ОбъектСсылка = ОбъектМенеджер.ПустаяСсылка(); Возврат ""; КонецЕсли; ОбъектСсылка = ПолучитьСсылкуПоGUIDиИдентификациии(GUID, ТипМетаданных, ИмяМетаданных, ОбъектМенеджер); Если ОбъектСсылка.Пустая() Тогда Возврат ""; Иначе Возврат Строка(ОбъектСсылка); КонецЕсли; КонецФункции Функция НайтиБизнесПроцессПоGUID(GUID, ИмяМетаданных, ОбъектСсылка = Неопределено) Экспорт ТипМетаданных = "БизнесПроцесс"; ОбъектМенеджер = БизнесПроцессы[ИмяМетаданных]; Если Строка(GUID) = XMLСтрока(ОбъектМенеджер.ПустаяСсылка()) Тогда ОбъектСсылка = ОбъектМенеджер.ПустаяСсылка(); Возврат ""; КонецЕсли; ОбъектСсылка = ПолучитьСсылкуПоGUIDиИдентификациии(GUID, ТипМетаданных, ИмяМетаданных, ОбъектМенеджер); Если ОбъектСсылка.Пустая() Тогда Возврат ""; Иначе Возврат Строка(ОбъектСсылка); КонецЕсли; КонецФункции Функция НайтиЗадачуПоGUID (GUID, ИмяМетаданных, ОбъектСсылка = Неопределено) Экспорт ТипМетаданных = "Задача"; ОбъектМенеджер = Задачи[ИмяМетаданных]; Если Строка(GUID) = XMLСтрока(ОбъектМенеджер.ПустаяСсылка()) Тогда ОбъектСсылка = ОбъектМенеджер.ПустаяСсылка(); Возврат ""; КонецЕсли; ОбъектСсылка = ПолучитьСсылкуПоGUIDиИдентификациии(GUID, ТипМетаданных, ИмяМетаданных, ОбъектМенеджер); Если ОбъектСсылка.Пустая() Тогда Возврат ""; Иначе Возврат Строка(ОбъектСсылка); КонецЕсли; КонецФункции Функция НайтиПланОбменаПоGUID (GUID, ИмяМетаданных, ОбъектСсылка = Неопределено) Экспорт ТипМетаданных = "ПланОбмена"; ОбъектМенеджер = ПланыОбмена[ИмяМетаданных]; Если Строка(GUID) = XMLСтрока(ОбъектМенеджер.ПустаяСсылка()) Тогда ОбъектСсылка = ОбъектМенеджер.ПустаяСсылка(); Возврат ""; КонецЕсли; ОбъектСсылка = ПолучитьСсылкуПоGUIDиИдентификациии(GUID, ТипМетаданных, ИмяМетаданных, ОбъектМенеджер); Если ОбъектСсылка.Пустая() Тогда Возврат ""; Иначе Возврат Строка(ОбъектСсылка); КонецЕсли; КонецФункции а ваббще скачай конфу "СЭД "Документооборот Проф." но не чистый документоборот 1С а от команиии "Аналитика. Проекты и решения" там неплохой функционал по ком-коннекторах, некоторые идеи поравились, некторые допилил. Важно помнить что из внешней базы(источника) можно попасть с ее мутабельными (внешними данными) и на клиент приемника, если использовать общие модули с обеих сторон и передавать на клиенты используя внешние хранилища, но передаваемые данные(коллеекции) дожны быть приметивных типов (имена реквизитов, ГУИДы как хмл-строка и т.д.) это все |
|||
15
Kashemir
20.12.12
✎
17:00
|
(13) Тогда тебе хватит и (2)
|
|||
16
vmv
20.12.12
✎
17:02
|
последнее замечание в контексте 82 надо раз и навсегда забыть, что существует глобальная коллекция Метаданные и использовать аналогичные методы хмл для поиска классов таблиц, самих таблиц, свойств, типов и т.д.
Т.е. использовать в 8.2 констурукции вида Метаданные.Справочники.Трулаляля - расстрел на месте |
|||
17
vmv
20.12.12
✎
17:04
|
+(14) довесок к группе поддержки
// // Используется когда Ссылка получена посредством ОбъектМенеджер.ПолучитьСсылку(GUID) // // Для проверки "заполненности" ссылки можно использовать ОбъектСсылка.ПолучитьОбъект() = Неопределено, // но запросом более универсально с точки зрения контроля доступа. // Функция СуществуетОбъектПоСсылке(ОбъектСсылка, ТипМетаданных, ИмяМетаданных) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ " + ТипМетаданных + "." + ИмяМетаданных + " ГДЕ Ссылка=&ОбъектСсылка"; Запрос.Параметры.Вставить("ОбъектСсылка", ОбъектСсылка); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Истина; Иначе Возврат Ложь; КонецЕсли; КонецФункции Функция ПолучитьСсылкуПоGUIDиИдентификациии(GUID, ТипМетаданных, ИмяМетаданных, ОбъектМенеджер) Экспорт Если ТипЗнч(GUID) = Тип("Строка") Тогда _GUID = Новый УникальныйИдентификатор(GUID); Иначе _GUID = GUID; КонецЕсли; ОбъектСсылка = ОбъектМенеджер.ПолучитьСсылку(_GUID); Если Не СуществуетОбъектПоСсылке(ОбъектСсылка, ТипМетаданных, ИмяМетаданных) Тогда ОбъектСсылка = ОбъектМенеджер.ПустаяСсылка(); КонецЕсли; Возврат ОбъектСсылка; КонецФункции |
|||
18
Kashemir
20.12.12
✎
17:06
|
(6) Кстати зачем столько сложностей ради получения ссылки ?
ВнешняяБД.Справочники.Номенклатура.ПолучитьСсылку(ВнешняяБД.NewObject("УникальныйИдентификатор", "dfeaf1c7-7f8f-11df-92fe-0024e83b55b7")) |
|||
19
Serginio1
20.12.12
✎
17:08
|
Должноработать
ВнешняяБД.СвойствоКодПроизводителя=ВнешняяБД.ПланыВидовХарактеристик.СвойстваОбъектов.Найт иПоНаименованию("Код производителя"); |
|||
20
Serginio1
20.12.12
✎
17:12
|
А если у тебя известен GUID
УИД=Сервер.NewObject("УникальныйИдентификатор","22151195-0def-11e2-b65b-c86000c70663"); Регистратор=Сервер.Документы.КорректировкаЗаписейРегистров.ПолучитьСсылку(УИД); |
|||
21
SmartUseless
20.12.12
✎
17:24
|
Млин People, ну креатив-то раскорегарился, главное теперь все переварить, ни одного бита не пролить..
|
|||
22
Serginio1
25.12.12
✎
17:39
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |