Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Как получить внутренний идентификатор через OLE

v7: Как получить внутренний идентификатор через OLE
Я
   LisaAlisa
 
05.12.17 - 16:37
Из одной базы 7.7 выполняется подключение к другой по OLE. Получаем объекты. Как получить ID объекта?
 
 
   Бертыш
 
1 - 05.12.17 - 16:40
Типа v7.EvalExpr("ЗначениеВстрокуВнутр(ТвойОбъект)");
   LisaAlisa
 
2 - 05.12.17 - 16:40
ID объекто текущй базы получаю 
_IdToStr(СтрПолучитьСтроку(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(ЗначениеВСтрокуВнутр(Обж),"{",""),"}",""),Симв(34),""),",",РазделительСтрок),7))+"   ";

Но это не работает, если Обж - объект OLE
   Бертыш
 
3 - 05.12.17 - 16:42
Через v7.EvalExpr(
   LisaAlisa
 
4 - 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
   LisaAlisa
 
8 - 06.12.17 - 10:16
(5) Обж - это объект, полученный из базы источника
примерно так:
    ДокПУБ=ПУБ.CreateObject("Документ"); 
    ДокПУБ.ВыбратьДокументы(Дата1,Дата2);
...        
Обж = ДокПУБ.Субконто1
...

Функция ПолучитьID(Обж)
    СпрИст = ПУБ.CreateObject("Справочник."+Обж.Вид()+"");
    СпрИст.НайтиЭлемент(Обж);
    Возврат _IdToStr(СтрПолучитьСтроку(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(ПУБ.EvalExpr("ЗначениеВстрокуВнутр(СпрИст)"),"{",""),"}",""),Симв(34),""),",",РазделительСтрок),7))+"   ";;
КонецФункции

выдает ошибку Возврат _IdToStr(СтрПолучитьСтроку(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(ПУБ.EvalExpr("ЗначениеВстрокуВнутр(СпрИст)"),"{",""),"}",""),Симв(34),""),",",РазделительСтрок),7))+"   ";;
{Обработка.ИмпортДокументов.Форма.Модуль(20)}: 1С:Предприятие: 1    ЗначениеВстрокуВнутр(СпрИст<<?>>)
Переменная не определена (СпрИст)
   ProxyInspector
 
9 - 06.12.17 - 10:27
Самый простой способ добавить в ОЛЕ базу процедуры

//-----------------------------------------------

Функция адЗначениеИзСтрокиВнутр(ВнутреннийИдентификатор) Экспорт
    Возврат ЗначениеИзСтрокиВнутр(ВнутреннийИдентификатор);
КонецФункции
//-----------------------------------------------

Функция адЗначениеВСтрокуВнутр(Объект) Экспорт
    Возврат ЗначениеВСтрокуВнутр(Объект);
КонецФункции
   Ёпрст
 
10 - 06.12.17 - 10:30
(8) СпрИст.ТекущийЭлемент(), это для начала
 
 Рекламное место пустует
   ProxyInspector
 
11 - 06.12.17 - 10:30
Ну и вызов соответственно
 ВнутреннийИдентификатор = БазаОЛЕ.адЗначениеВСтрокуВнутр(ОбъектОЛЕ)

Обратно 
ОбъектОЛЕ = БазаОЛе.адЗначениеИзСтрокиВнутр(ВнутреннийИдентификатор)
   Ёпрст
 
12 - 06.12.17 - 10:30
СпрИст = ПУБ.CreateObject("Справочник."+Обж.Вид()+"");
    СпрИст.НайтиЭлемент(Обж);

вот это всё выкинуть из функции, это там не нужно, от слова совсем
   ProxyInspector
 
13 - 06.12.17 - 10:36
Совсем для эстетов
ВнутреннийИдентификатор = БазаОЛЕ.ValueToString(ОбъектОЛЕ)
ОбъектОЛЕ = БазаОЛе.ValueFromStringInternal(ВнутреннийИдентификатор) 
   так я не пробовал, но должно работать
   LisaAlisa
 
14 - 06.12.17 - 10:47
(9) я не могу менять базу источника, она типовая
   LisaAlisa
 
15 - 06.12.17 - 10:48
(10) делала, пишет неопознанный оператор СпрИст.ТекущийЭлемент() <<?>>
   LisaAlisa
 
16 - 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
или что мешает выписать все возможные идентификаторы из удаленной и прописать в обработке? если конечно не ваяете универсальную нетленку )
   LisaAlisa
 
21 - 06.12.17 - 11:49
Заработало так
_IdToStr(СтрПолучитьСтроку(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(ПУБ.ЗначениеВстрокуВнутр(Обж.ТекущийЭлемент()),"{",""),"}",""),Симв(34),""),",",РазделительСтрок),7))+"   ";

Спасибо всем за помощь!


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует