![]() |
|
v7: Как получить внутренний идентификатор через OLE | ☑ | ||
---|---|---|---|---|
0
LisaAlisa
05.12.17
✎
16:37
|
Из одной базы 7.7 выполняется подключение к другой по OLE. Получаем объекты. Как получить ID объекта?
|
|||
1
Бертыш
05.12.17
✎
16:40
|
Типа v7.EvalExpr("ЗначениеВстрокуВнутр(ТвойОбъект)");
|
|||
2
LisaAlisa
05.12.17
✎
16:40
|
ID объекто текущй базы получаю
_IdToStr(СтрПолучитьСтроку(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(ЗначениеВСтрокуВнутр(Обж),"{",""),"}",""),Симв(34),""),",",РазделительСтрок),7))+" "; Но это не работает, если Обж - объект OLE |
|||
3
Бертыш
05.12.17
✎
16:42
|
Через v7.EvalExpr(
|
|||
4
LisaAlisa
05.12.17
✎
16:51
|
Возврат _IdToStr(СтрПолучитьСтроку(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(ПУБ.EvalExpr("ЗначениеВстрокуВнутр(Обж)"),"{",""),"}",""),Симв(34),""),",",РазделительСтрок),7))+" ";;
{Обработка.ИмпортДокументов.Форма.Модуль(18)}: 1С:Предприятие: 1 ЗначениеВстрокуВнутр(Обж<<?>>) Переменная не определена (Обж) |
|||
5
Ёпрст
гуру
05.12.17
✎
16:57
|
Обж - это че у тя ?
|
|||
6
Ёпрст
гуру
05.12.17
✎
16:58
|
ну и надо ОлеБаза.ЗначениеВСтрокуВнутр..
а так, через метадатаворк всё проще делать, или через вызов глобальной функции, которая сразу вернёт id в норм виде. |
|||
7
Бертыш
05.12.17
✎
17:06
|
(6) Пытается использовать недокументированные функции 77
|
|||
8
LisaAlisa
06.12.17
✎
10:16
|
(5) Обж - это объект, полученный из базы источника
примерно так: ДокПУБ=ПУБ.CreateObject("Документ"); ДокПУБ.ВыбратьДокументы(Дата1,Дата2); ... Обж = ДокПУБ.Субконто1 ... Функция ПолучитьID(Обж) СпрИст = ПУБ.CreateObject("Справочник."+Обж.Вид()+""); СпрИст.НайтиЭлемент(Обж); Возврат _IdToStr(СтрПолучитьСтроку(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(ПУБ.EvalExpr("ЗначениеВстрокуВнутр(СпрИст)"),"{",""),"}",""),Симв(34),""),",",РазделительСтрок),7))+" ";; КонецФункции выдает ошибку Возврат _IdToStr(СтрПолучитьСтроку(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(ПУБ.EvalExpr("ЗначениеВстрокуВнутр(СпрИст)"),"{",""),"}",""),Симв(34),""),",",РазделительСтрок),7))+" ";; {Обработка.ИмпортДокументов.Форма.Модуль(20)}: 1С:Предприятие: 1 ЗначениеВстрокуВнутр(СпрИст<<?>>) Переменная не определена (СпрИст) |
|||
9
ProxyInspector
06.12.17
✎
10:27
|
Самый простой способ добавить в ОЛЕ базу процедуры
//----------------------------------------------- Функция адЗначениеИзСтрокиВнутр(ВнутреннийИдентификатор) Экспорт Возврат ЗначениеИзСтрокиВнутр(ВнутреннийИдентификатор); КонецФункции //----------------------------------------------- Функция адЗначениеВСтрокуВнутр(Объект) Экспорт Возврат ЗначениеВСтрокуВнутр(Объект); КонецФункции |
|||
10
Ёпрст
гуру
06.12.17
✎
10:30
|
(8) СпрИст.ТекущийЭлемент(), это для начала
|
|||
11
ProxyInspector
06.12.17
✎
10:30
|
Ну и вызов соответственно
ВнутреннийИдентификатор = БазаОЛЕ.адЗначениеВСтрокуВнутр(ОбъектОЛЕ) Обратно ОбъектОЛЕ = БазаОЛе.адЗначениеИзСтрокиВнутр(ВнутреннийИдентификатор) |
|||
12
Ёпрст
гуру
06.12.17
✎
10:30
|
СпрИст = ПУБ.CreateObject("Справочник."+Обж.Вид()+"");
СпрИст.НайтиЭлемент(Обж); вот это всё выкинуть из функции, это там не нужно, от слова совсем |
|||
13
ProxyInspector
06.12.17
✎
10:36
|
Совсем для эстетов
ВнутреннийИдентификатор = БазаОЛЕ.ValueToString(ОбъектОЛЕ) ОбъектОЛЕ = БазаОЛе.ValueFromStringInternal(ВнутреннийИдентификатор) так я не пробовал, но должно работать |
|||
14
LisaAlisa
06.12.17
✎
10:47
|
(9) я не могу менять базу источника, она типовая
|
|||
15
LisaAlisa
06.12.17
✎
10:48
|
(10) делала, пишет неопознанный оператор СпрИст.ТекущийЭлемент() <<?>>
|
|||
16
LisaAlisa
06.12.17
✎
10:54
|
(12) убрала. Оставила так:
Функция ПолучитьID(Обж) Возврат _IdToStr(СтрПолучитьСтроку(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(ПУБ.EvalExpr("ЗначениеВстрокуВнутр(Обж.ТекущийЭлемент())"),"{",""),"}",""),Симв(34),""),",",РазделительСтрок),7))+" "; КонецФункции {Обработка.ИмпортДокументов.Форма.Модуль(20)}: 1С:Предприятие: 1 ЗначениеВстрокуВнутр(Обж.ТекущийЭлемент()<<?>>) Неопознанный оператор |
|||
17
Табуретко
06.12.17
✎
10:58
|
(14) без этих строк, Вам идентификатор не получить.
|
|||
18
Табуретко
06.12.17
✎
11:00
|
не хотите портить типовую? сделайте во внешней обработке и запускайте по примеру Как выполнить процедуру внешней обработки через OLE
|
|||
19
Ёпрст
гуру
06.12.17
✎
11:04
|
(16)
ПУБ.ЗначениеВстрокуВнутр(Обж), что возвращает ? Дальше думай :) |
|||
20
Табуретко
06.12.17
✎
11:05
|
или что мешает выписать все возможные идентификаторы из удаленной и прописать в обработке? если конечно не ваяете универсальную нетленку )
|
|||
21
LisaAlisa
06.12.17
✎
11:49
|
Заработало так
_IdToStr(СтрПолучитьСтроку(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(ПУБ.ЗначениеВстрокуВнутр(Обж.ТекущийЭлемент()),"{",""),"}",""),Симв(34),""),",",РазделительСтрок),7))+" "; Спасибо всем за помощь! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |