|
Как по ОЛЕ в 8.3 создать новый объект? | ☑ | ||
---|---|---|---|---|
0
megalira
28.02.14
✎
18:58
|
Делаю так АБаза[типСтрокой][Сред(строкаТип, поз +1)].ПолучитьСсылку(АБаза.NewObject("УникальныйИдентиф икатор", Выборка.УИД))
не работает, смотрю в отлачике чему ранво АБаза.NewObject("УникальныйИдентификатор", Выборка.УИД) оно равно **(1)}: **(1)}: Метод объекта не обнаружен (NewObject) подскажите пожалуйста, как лечить? |
|||
1
VitShvets
28.02.14
✎
19:55
|
Проверяй чему равен "Выборка.УИД". Оно похожим образом ругается, когда не может преобразовать строку в идентификатор.
|
|||
2
Torquader
01.03.14
✎
00:47
|
Во-первых, Строка(Выборка.УИД), чтобы явно была строка, так как ГУИД для "той" базы - загадка.
Во-вторых, NewObject работает только во внешнем соединении. |
|||
3
Torquader
01.03.14
✎
00:51
|
В режиме Automation не всегда "съедается" второй параметр.
Если не получится, то можно ГуидТам=АБаза.Вычислить("Новый УникальныйИдентификатор("""+Строка(Выборка.Гуид)+""");"); |
|||
4
megalira
02.03.14
✎
22:15
|
(3) спасибо, попробую
|
|||
5
wowik
03.03.14
✎
09:14
|
||||
6
megalira
04.03.14
✎
09:20
|
(3) Теперь говорит:
"{ВнешняяОбработка.ВыгрузкаДокументов.МодульОбъекта(148)}: Метод объекта не обнаружен (Вычислить) ГуидТам=АБаза.Вычислить("Новый УникальныйИдентификатор("""+Строка(Выборка.УИД)+""");"); " (5) спасибо, почитаю |
|||
7
Wobland
04.03.14
✎
09:21
|
(6) странная АБаза, правда?
|
|||
8
Мимохожий Однако
04.03.14
✎
09:25
|
Может быть на хвостике надо
+""")"); |
|||
9
Cube
04.03.14
✎
09:27
|
(0) Как абазу-то свою получил покажи...
|
|||
10
Wobland
04.03.14
✎
09:30
|
(9) решил зарубить ветку в самом начале?
|
|||
11
Cube
04.03.14
✎
09:33
|
(10) Ты уже одного с табличным документом загнобил сегодня))) Хватит)
|
|||
12
megalira
04.03.14
✎
10:12
|
(9) Вот так АБазу получил:
"функция ПодключитьсяКИнформационнойБазе(АОрганизация) экспорт //сначала найдем базу Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | шапВнешниеБазы.Сервер, | шапВнешниеБазы.База, | шапВнешниеБазы.Пользователь, | шапВнешниеБазы.Пароль, | шапВнешниеБазы.Файл, | шапВнешниеБазы.Тип, | шапВнешниеБазы.Наименование, | шапВнешниеБазы.Ссылка |ИЗ | Справочник.шапВнешниеБазы КАК шапВнешниеБазы |ГДЕ | шапВнешниеБазы.Организация = &Организация" ; Запрос.УстановитьПараметр("Организация",АОрганизация); Выборка=Запрос.Выполнить().Выбрать(); если НЕ Выборка.Следующий() тогда Сообщить("Удаленная база не найдена для орагниазции "+Строка(АОрганизация),СтатусСообщения.ОченьВажное); возврат Неопределено; конецесли; //подключимся к базе лБаза = Новый COMОбъект("V83.Application"); Попытка если Выборка.Тип=Перечисления.шапТипБаз1С.Серверная тогда Открытие=лБаза.Connect("Srvr="""+Выборка.Сервер+""";Ref="""+Выборка.База+""";Usr="""+ Выборка.Пользователь+""";Pwd=""" +Выборка.Пароль + """;"); иначе Открытие=лБаза.Connect("file="""+Сокрлп(Выборка.Файл)+""";Usr="""+ Выборка.Пользователь+""";Pwd=""" +Выборка.Пароль + """;"); конецесли; Исключение сообщить("Ошибка открытия базы данных "+строка(Выборка.Наименование)+ " "+ОписаниеОшибки(),СтатусСообщения.ОченьВажное); Возврат Неопределено; КонецПопытки; возврат Новый Структура("База, ВнешняяБаза",лБаза,Выборка.Ссылка); конецфункции " Поле "База" возвращенной структуры |
|||
13
Wobland
04.03.14
✎
10:14
|
(12) не вижу слова "АБаза"
|
|||
14
megalira
04.03.14
✎
10:22
|
(13) Хорошо, привожу всю цепочку:
функция ВыгрузитьОбъект(АОбъект,АОрганизация) стр=мТЗ.Найти(АОрганизация,"Организация"); если стр=Неопределено тогда стр=мТЗ.Добавить(); стр.Организация=АОрганизация; лБаза=ПодключитьсяКИнформационнойБазе(АОрганизация); стр.База=лБаза.База; стр.ВнешняяБаза=лБаза.ВнешняяБаза; если стр.База=Неопределено тогда Предупреждение("Не смогли подключиться к базе организации "+строка(стр.Организация)); возврат ложь; конецесли; конецесли; если ТипЗнч(АОбъект)=Тип("ДокументСсылка.ПоступлениеТоваровУслуг") тогда ВыгрузитьПоступление(АОбъект,стр.База,стр.ВнешняяБаза); конецесли; возврат истина; конецфункции потом заходим в ВыгрузитьПоступление: Процедура ВыгрузитьПоступление(АОбъект,АБаза,АВнешняяБаза) экспорт мудВалюта=АБаза.Константы.ВалютаРегламентированногоУчета.Получить(); удДокСсылка=НайтиСсылкуПоСоответствию(АБаза,АОбъект,АВнешняяБаза); ... заходим в НайтиСсылкуПоСоответствию: функция НайтиСсылкуПоСоответствию(АБаза, АОбъект, АВнешняяБаза) Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | шапСоответствиеЗагружаемыхОбъектовИзУТ.УИД |ИЗ | РегистрСведений.шапСоответствиеЗагружаемыхОбъектов КАК шапСоответствиеЗагружаемыхОбъектовИзУТ |ГДЕ | шапСоответствиеЗагружаемыхОбъектовИзУТ.Объект = &Объект | И шапСоответствиеЗагружаемыхОбъектовИзУТ.ИБ = &ИБ" ; Запрос.УстановитьПараметр("Объект",АОбъект); Запрос.УстановитьПараметр("ИБ",АВнешняяБаза); Выборка=Запрос.Выполнить().Выбрать(); если Выборка.Следующий() тогда строкаТип = АОбъект.Метаданные().ПолноеИмя(); поз = Найти(строкаТип, "."); типСтрокой = мСоответствияЕдЧМнЧ[Лев(строкаТип, поз - 1)]; //АБаза[типСтрокой][Сред(строкаТип, поз +1)].ПолучитьСсылку(АБаза.NewObject("УникальныйИдентификатор", Строка(АОбъект.УникальныйИдентификатор()))); //лЗнач=АБаза[типСтрокой][Сред(строкаТип, поз +1)].ПолучитьСсылку(АБаза.NewObject("УникальныйИдентификатор", Выборка.УИД)); ГуидТам=АБаза.Вычислить("Новый УникальныйИдентификатор("""+Строка(Выборка.УИД)+""");"); //ГуидТам=АБаза.EvalExpr("Новый УникальныйИдентификатор("""+Строка(Выборка.УИД)+""");"); лЗнач=АБаза[типСтрокой][Сред(строкаТип, поз +1)].ПолучитьСсылку(ГуидТам); возврат лЗнач; ... |
|||
15
Wobland
04.03.14
✎
10:24
|
нет, чтобы почувствовать себя мужиком и взять отладчик. теперь придётся ещё мТЗ разъяснять
|
|||
16
Cube
04.03.14
✎
10:25
|
(14) стр=мТЗ.Добавить();
... стр.База=лБаза.База; Ты что, хранишь подключение к базе в ТЗ? Ну и как, получается? |
|||
17
megalira
04.03.14
✎
10:26
|
(16) А где его хранить, если у меня не одно, а несколько подключений, и при том заранее неизвестно, сколько?
|
|||
18
megalira
04.03.14
✎
10:27
|
(15) Дык в отладчике АБаза равно COM Объект
|
|||
19
Wobland
04.03.14
✎
10:29
|
(18) 67 минут. так себе результат
|
|||
20
megalira
04.03.14
✎
10:57
|
(19) в смысле 67 минут?
|
|||
21
Cube
04.03.14
✎
11:59
|
(17) Я бы через Соответствие делал...
А ещё не через Application, а через COMConnector (быстрее в 10 раз) Может у тебя проблема в платформе 8.3? |
|||
22
hhhh
04.03.14
✎
15:08
|
если ТипЗнч(АОбъект)=Тип("ДокументСсылка.ПоступлениеТоваровУслуг") тогда
а это что за странное сравнение? тип из этой базы, объект из той? |
|||
23
megalira
04.03.14
✎
20:09
|
(22) АОбъект - это объект из этой базу. И он выгружается в ту.
|
|||
24
megalira
04.03.14
✎
20:51
|
(21) Сделал через соответствие:
функция ВыгрузитьОбъект(АОбъект,АОрганизация) стр=мТЗ.Найти(АОрганизация,"Организация"); если стр=Неопределено тогда стр=мТЗ.Добавить(); стр.Организация=АОрганизация; лБаза=ПодключитьсяКИнформационнойБазе(АОрганизация); если лБаза.База=Неопределено тогда Предупреждение("Не смогли подключиться к базе организации "+строка(стр.Организация)); возврат ложь; конецесли; мСоответствие.Вставить(АОрганизация, лБаза.База); стр.ВнешняяБаза=лБаза.ВнешняяБаза; конецесли; если ТипЗнч(АОбъект)=Тип("ДокументСсылка.ПоступлениеТоваровУслуг") тогда ВыгрузитьПоступление(АОбъект,мСоответствие.Получить(АОрганизация),стр.ВнешняяБаза); конецесли; возврат истина; конецфункции попробую сделать через COMConnector. Платформа куда грузить: 1С:Предприятие 8.3 (8.3.4.408) откуда: 1С:Предприятие 8.2 (8.2.19.83) |
|||
25
megalira
04.03.14
✎
20:52
|
(23) ЗЫ. Через соответствии не помогло
|
|||
26
hhhh
04.03.14
✎
23:04
|
наверно так
АБаза.Вычислить("ГуидТам = Новый УникальныйИдентификатор("""+Строка(Выборка.УИД)+""");"); |
|||
27
megalira
04.03.14
✎
23:21
|
(26) Дык так он ГуидТам вычислит ТАМ, а мне то нужно ЗДЕСЬ.
|
|||
28
Torquader
04.03.14
✎
23:23
|
(27) Если нужно ГУИД здесь, то нужно ГУИД там преобразовать в строку, передать сюда и здесь уже из него сделать обратно ГУИД.
|
|||
29
megalira
04.03.14
✎
23:55
|
(28) А какая разница, если я просто передам строку ТУДА? Дело в том что ЗДЕСЬ у меня храниться строка ГУИДА, который ТАМ.
|
|||
30
Torquader
05.03.14
✎
00:45
|
(29) Строку можно передавать куда угодно, от этого она не перестанет быть строкой.
|
|||
31
megalira
05.03.14
✎
08:31
|
(30) Ну я по сути, так и делаю, беру ОТСЮДА строку ГУИДА, который ТАМ, передаю его ТУДА и получаю ТОТ ГУИД СЮДА, но почему то не работает.
|
|||
32
megalira
05.03.14
✎
09:41
|
(21) Через COMConnection это я так понимаю, то что вернуло лБаза.Connect? Я правильно понял?
Дело в том, что это не работает вообще. Когда я сделал так "... лБаза = Новый COMОбъект("V83.Application"); Попытка если Выборка.Тип=Перечисления.шапТипБаз1С.Серверная тогда Открытие=лБаза.Connect("Srvr="""+Выборка.Сервер+""";Ref="""+Выборка.База+""";Usr="""+ Выборка.Пользователь+""";Pwd=""" +Выборка.Пароль + """;"); иначе Открытие=лБаза.Connect("file="""+Сокрлп(Выборка.Файл)+""";Usr="""+ Выборка.Пользователь+""";Pwd=""" +Выборка.Пароль + """;"); конецесли; Исключение сообщить("Ошибка открытия базы данных "+строка(Выборка.Наименование)+ " "+ОписаниеОшибки(),СтатусСообщения.ОченьВажное); Возврат Неопределено; КонецПопытки; // возврат Новый Структура("База, ВнешняяБаза",лБаза,Выборка.Ссылка); возврат Новый Структура("База, ВнешняяБаза",Открытие,Выборка.Ссылка); " то теперь стало материться вот на эту строку: мудВалюта=АБаза.Константы.ВалютаРегламентированногоУчета.Получить(); типа поле агрегатного объекта не обнаружено |
|||
33
hhhh
05.03.14
✎
09:55
|
попробуйте
ГуидТам=АБаза.Вычислить("Новый УникальныйИдентификатор("""+XMLСтрока(Выборка.УИД)+""");"); потому что Строка() по-дурацки обычно работает. |
|||
34
megalira
05.03.14
✎
10:50
|
Спасибо всем.
Оказалось, что этот объект просто удален был из базы. Победили проблему вот такие строки: если Найти(АБаза.String(лЗнач),"Объект не найден")>0 тогда возврат Неопределено; конецесли; |
|||
35
Torquader
05.03.14
✎
14:31
|
(34) Ну, как видишь, собака зарыта в соседней будке, а телепаты здесь ещё не дошло до того, чтобы угадывать содержимое базы удалённо.
|
|||
36
megalira
05.03.14
✎
14:33
|
(35) Зато тема послужит другим уроком.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |