v7: как определить ТипЗначения OLE #693779


#0 by oliver
Привет всем! как определить ТипЗначения OLE-объекта? ТипЗначения(Объект) возвращает 100 ес-но.
#1 by Рэйв
оле или СОМ?
#2 by oliver
Извиняюсь. Вопрос по 7-ке
#3 by oliver
Просто порало в тему по 8-ке. Таки как?
#4 by Torquader
Можно попробовать через valueToStringInternal - какие-то объекты получится поймать, а остальное - только через функцию, которую нужно в глобальный модуль положить.
#5 by oliver
Надо определить справочник, перечисление или документ.
#6 by Torquader
Тогда ValueToStringInternal в первой букве (после скобочки и кавычки) напишет то, что вам нужно.
#7 by oliver
Спасибо. Попробую
#8 by Torquader
А кстати, База1С.ValueType не работает, что-ли ?
#9 by oliver
что-то не хочет. ValueType(Объект)=100 ввв=Объект.ValueType; {D:1.ERT}: Поле агрегатного объекта не обнаружено (ValueType)
#10 by 2S
ТипЗначенияСтр
#11 by Torquader
Неа - не ест. Не все функции по OLE доступны.
#12 by Torquader
Я ему в уже предложил - и работает. Только таблицу значений так не определишь.
#13 by 2S
чего, чего?
#14 by oliver
Для справочника ValueToStringInternal  вертает "{"X","0","0","0","0","0",""}" . Так что можно
#15 by 2S
Нда, вы методы путаете, читайте ЖКК
#16 by Torquader
Х - это неизвестный объект, если что. Нужно вызывать в контексте той базы, в которой объект создан.
#17 by Torquader
ТипЗначенияСтр чужие объекты не понимает (а если мы лезем по OLE вообще из другого приложения, то у нас нет такого метода).
#18 by Torquader
Простенький пример показывает, что Не работает, а работает. Set OneS=CreateObject("V77.Application") If OneS.Initialize(OneS.RmTrade,"/dC:WORK1С-ТИИ","")<>True Then
#21 by Torquader
Это если из восьмёрки в семёрку.
#22 by 2S
а ему что надо?
#23 by Torquader
Так он разве из восьмёрки лезет ?
#24 by oliver
Надо определить,что таеое Объект - справочник, перечисление или документ. И все. Очень просто. Из 7-ки в 7-ку.
#25 by oliver
такое
#26 by Torquader
#27 by 1Сергей
должно взлететь. Что-то делает не так
#28 by Torquader
Чужие объекты ТипЗначения не очень-то и видит, а в контексте базы - не работает см. .
#29 by Злопчинский
. не покатит?
#30 by Злопчинский
Типатип = EvalExpr("ТипЗначенияСтр(глРасшифровка)");
#31 by DJ Anthon
возьми у меня отсюда, там я это даже в отдельную функцию вынес. п.с. это, кстати, нетривиальная задача...
#32 by DJ Anthon
функция ВосстановитьАтрибут. код привести не могу, ибо он специфический, но основная идея как в и , только у меня она для расшифровки неопределенного типа, так что лучше будет объединить мое и
#33 by Torquader
Если есть возможность вносить изменения в глобальный модуль, который доступен через EvalExpr, то проблем с получением типа нету. А если в базу вносить изменения нельзя (или в данный момент нельзя), то приходится использовать танцы с бубном.
#34 by GreyK
Восьмёрошник?
#35 by Torquader
Неа. В восьмёрке всё просто и ясно - там выполнение кода можно штатно использовать, а также делать вызов с параметрами.
#36 by GreyK
И что там в восьмерке передается по Оле? Наверное справочники вы научились копипостировать :) Вот в семерке всё просто, передаются по Оле только базовые типы, в том числе и "строка" и есть в СП описание функций ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр, и этого хватает.
#37 by Torquader
Таки и там тоже передаются только простые типы - строки, числа и даты (ну ещё булево добавилось), а так, всё точно также. Просто в восьмёрке у каждого объекта можно запросить метаданные (через Метаданные), что позволяет работат с типами без проблем.
#38 by GreyK
В 7ке то-же можно. Примерно так: Всё просто.
#39 by Torquader
Если ОбъектВИ - это таблица или текст, то метод не прокатит.
#40 by GreyK
Ну я про определение объекта типа "Оле". А текст он и в Африке текст. А табличку по Оле определять незачем, если-уж сам создал, то зачем её тип определять?!
#41 by Torquader
Для хранимых объектов строка ЗначениеВСтрокуВнутр возвращает строку, по которой однозначно можно определить тип объекта. Для тех, для кого возвращается пустая ссылка с первой буквой X ничего определить нельзя.
#42 by Злопчинский
Чего-то я не втыкаю.. в чем принципиальная трудность..? поясните... Да, если в Оле-базе в ГМ нет ни одной "служебной" экспортной переменной - наверное есть трудности.. . в противном случае все решается вроде на раз...? . вот запили у себя в рабочем обмене своем: .
#43 by GreyK
Как можно получить "Х" объект в 7шной базе открытой по Оле!?
#44 by GreyK
Пить уже не хочется, всё-таки уже седьмой день "каникул" пошел :)
#45 by Torquader
Если переменная есть и её имя известно, то, конечно, можно делать всё, что душе угодно. А если нет, то получится не очень хорошо, особенно, если создать в удалённой базе таблицу и пытаться потом узнать, что в переменной живёт. Но это - гипотетическая ситуация.
#46 by Злопчинский
с трудом представляю себе ситуацию продуктивной работы по Лье в условиях незнания конфиги олешной базы...
#47 by Pahomich
Что за программист, который не знает, что передает?
#48 by Torquader
Предположим, что есть обмен по OLE, в котором пользователь указывает базу А и базу Б, между которыми будут передаваться данные. Как система узнает, что за база А и какие переменные в ней есть (не разбирая Compound и код глобального модуля). Это гипотетическая ситуация, когда в переменной хрен знает что - а в остальных случаях в переменной будут только хранимые в базе значения, которые ЗначениеВСтрокуВнутр прекрасно преобразует в строку и обратно. Просто иногда из обработки, которая что-то делает, возвращается таблица значений, заполненная чем-то априори неизвестным.
#49 by GreyK
Так пойдет? Или обязательно по Оле показать? {"Документ","Документ","1","0","0",{"U","0","0","0","0","0"},"","0", { ТаблицаЗначений
#50 by Бертыш
На всякий случай
#51 by Torquader
И что, ТаблицаЗначений как и СписокЗначений через ЗначениеВСтрокуВнутр прекрасно сохраняются и восстанавливаются, проблема бывает, если внутри ячейки лежит объект, который 1С не умеет сериализовать (то, что потом назвали "мутабельным значением"). Кстати, просто таблица так не складывается.
#52 by Torquader
Кстати, ещё спор был, что быстрее - создавать новую таблицу значений или загрузить из строки.
#53 by GreyK
"проблема бывает, если внутри ячейки лежит объект, который 1С не умеет сериализовать" !? Чем-то напоминает детскую задачку: Как вытащить яблоко из бутылки?
#54 by Torquader
У меня вообще обмен чаще через текстовые файлы, так как OLE - "очень быстрая" вещь. Поэтому, проблем бывает меньше. Просто, кто-то в 1С, кто писал OLE-сервер, посчитал, что функция ТипЗначенияСтр не должна быть доступна, тогда как ЗначениеВСтрокуВнутр - доступно. Могло бы быть иначе.
#55 by GreyK
Так функция ТипЗначенияСтр доступна, но нет способа задать её парраметр по Оле...
#56 by Torquader
Функция недоступна, так как вызвать БазаОле.ТипЗначенияСтр нельзя, а то, что её можно вызвать через EvalExpr - неудивительно, так как это просто вычисление выражения на языке 1С, где доступны вообще все функции.
#57 by dedmoroz777
через ПопыткуИсключение
#58 by Злопчинский
вот блин капец... занем что в оле базе есть справочник.клиенты и больше ничего??? в огромном количестве случаев прокатит вариант . там где это не катит - скорее всего обмен будет не по оле а всякими мудотными иксемелями и прочея тряхомудией
#59 by Torquader
глРасшифровка есть почти всех типовых, так что можно попробовать через попытку узнать, есть ли переменная. P.S. у меня есть базы на семёрке вообще с пустым глобальным модулем, так как работают как движок для выполнения кода.
#60 by KishMish
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С