Имя: Пароль:
1C
1C 7.7
v7: Проблема с запросом через OLE
0 MaxStarkov
 
20.01.12
15:43
В базе источнике имеется регистр движения которого по измерениям могут содержать различные типы данных (то есть тип значения измерения задается при записи движения исходя из определенных условий). Подключаюсь к базе источнику из базы приемника через OLE. Запрос выполняется и данные в общем то я получаю, заполняю ими таблицу значений. Но вот при ее выводе на просмотр оказывается что в строках таблицы числятся значения "OLE".
Сами значения могут иметь различный тип, но как узнать - какой именно тип значения представляет собой запись "OLE"?
1 1Сергей
 
20.01.12
15:44
БазаОЛЕ.ТипЗначенияСтр(
2 ДенисЧ
 
20.01.12
15:44
Он имеет тип OLEObject :-)
Создай ещё колонку и заполняй её ОлеБаза.ТипЗначенияСтр(ТвойОбъект)
3 andrewks
 
20.01.12
15:44
по OLE можно принять для просмотра только простые типы - строка, число, и т.п.
4 MaxStarkov
 
20.01.12
15:47
Вместо переменной ОлеБаза у меня переменная V7. При попытке: V7.ТипЗначенияСтр(МойОбъектОлеБазы) получаю: Сообщить(V7.ТипЗначенияСтр(ВнешнийЗапрос.СчетУУ));
{Обработка.Подключение.Форма.Модуль(100)}: Поле агрегатного объекта не обнаружено (ТипЗначенияСтр)
5 MaxStarkov
 
20.01.12
15:48
А вот когда в движении регистра имеется запись с типом - Строка, Число и тд, то никаких проблем не возникает
6 MaxStarkov
 
20.01.12
15:56
И все же, как можно узнать тип значения объекта OLE присвоенный ему в базе источнике?
7 MaxStarkov
 
20.01.12
16:12
Придумал только через инструкцию "Попытка-Исключение-КонецПопытки". Для типа значения OLE "Справочник" при вызове МойОбъектОлеБазы.Наименование исключение вызвано не будет, а если этот объект является например перечислением, то это можно проверить через обработку исключения при вызове МойОбъектОлеБазы.Идентификатор. Извращение конечно, но как по другому сделать, ума не приложу)))
8 Ёпрст
 
20.01.12
16:20
(0)
Функция ТипЗначенияСтрОля(Оля, Объект) Экспорт
   Возврат Оля.EvalExpr("ТипЗначенияСтр(ЗначениеИзСтрокиВнутр("""+СтрЗаменить(Оля.ЗначениеВСтрокуВнутр(Объект),"""","""""")+"""))");
КонецФункции
9 MaxStarkov
 
20.01.12
16:27
Красиво решено! Спасибо!

Пробовал через V7.EvalExpr(""ТипЗначенияСтр(""+МойОбъектОлеБазы+"")"") не получалось, ошибку выдавало. Чуял, что решение где то здесь))
10 Ковычки
 
20.01.12
16:29
(8) опредил ))
11 Ковычки
 
20.01.12
16:29
(9) можно и так, если есть лишняя переменная в оле базе
12 DJ Anthon
 
20.01.12
16:32
(8) не для всех объектов так канает
13 Ковычки
 
20.01.12
16:35
(12) для каких из внутренних объектов не канает ?
14 DJ Anthon
 
20.01.12
17:05
(13) не помню уже, но когда вместо Объекта ссылку на объект передаешь, иногда платформа безбожно врала или даже падала (особенно где неопределенные реквизиты в документах). решил через анализ первой буквы строки Оля.ЗначениеВСтрокуВнутр(Объект)
15 DJ Anthon
 
20.01.12
17:06
для таких переменных ЗначениеИзСтрокиВнутр не работает ))
16 Ёпрст
 
20.01.12
17:12
(15) ошибаешься, работает для всех объектов..
Если че, у ЗначениеИзСтрокиВнутр 2 параметра.
17 DJ Anthon
 
20.01.12
17:59
(16) не ошибаюсь, я день убил на обход этого глюка.
18 MaxStarkov
 
22.01.12
15:47
(8) Предложенное решение работает у меня для всех типов, в том числе и для объектов имеющих неопределенный тип. в таком случае предложенная функция возвращает просто пустую строку
19 Torquader
 
22.01.12
17:16
ЗначениеВСтрокуВнутр умеет преобразовывать в строку все значения, которые можно сохранить в базе (то есть значения любого реквизита), а также СписокЗначений и ТаблицаЗначений. Всё остальное преобразуется в неизвестный объект (первая буква X).
При выполнении запроса очевидно, что он может возвращать только записи, которые хранятся в базе данных, а для них тип прекрасно определяется по первой букве.
Вид же может быть четвёртым параметром или частью седьмого (тогда в четвёртом будет 0).
20 Ковычки
 
22.01.12
18:44
(19) от тебя много слов (и не редко правильных) не дкмал, что много бздишь ?
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn