Получить GUID через COM

1. yaroslav.artem 18.01.18 11:11 Сейчас в теме
Ну, собственно вопрос в теме..
Как получить УникальныйИдентификатор документа через COM соединение?
По теме из базы знаний
Найденные решения
2. ediks 335 18.01.18 11:20 Сейчас в теме
(1) Так подойдет?

// Возвращает ГУИД документа
//
// Параметры
//  <пСсылка>  - <ДокументСсылка> - ссылка на документ Ком соединения
//  <пВнешняяБаза>  - <COM-соединение> - внешнее соединение
//
// Возвращаемое значение:
//   <Строка>   - строковое представление ГУИД
//
Функция ПолучитьГУИДОбъектаВнешнегоСоединения(пВнешняяБаза, пСсылка)

	УИД = пВнешняяБаза.String(пСсылка.UUID()); 
	Возврат пВнешняяБаза.String(УИД); 

КонецФункции // ПолучитьГУИД()
Показать
mi13; ST01; mikl79; olexi2012; user1252779; BAMPER; It-developer; cargobird; awp234; selmorn; lemilk; Slypower; user1188623; ivanek; cwant; Legavaz; improg; +17 Ответить
13. spacecraft 19.01.18 08:55 Сейчас в теме
(12) посмотреть, какой тип у ВнешнийДОк и понять, что это не ДокументОбъект.
Уи = ВНешБаза.XMLСтрока(ВНешБаза.Документы.МойДокумент.НайтиПоНомеру());
mikl79; eufes; Nicholas; Andrei_Ivanov; maxst22; SlavaKron; +6 Ответить
14. herfis 498 19.01.18 12:21 Сейчас в теме
(12) Во-первых, метод УникальныйИдентификатор() есть у типа "ДокументСсылка" и отсутствует у типа "ДокументОбъект".
Во-вторых, при работе через COM строковые представления объектов базы-корреспондента и получать нужно на стороне базы-корреспондента.
ВнешнийДОк= ВНешБаза.Документы.МойДокумент.НайтиПоНомеру();
УИ = ВНешБаза.String(ВнешнийДОк.УникальныйИдентификатор());

Но лучше, конечно же, как в (13)
mi13; wolovits; yaroslav.artem; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. ediks 335 18.01.18 11:20 Сейчас в теме
(1) Так подойдет?

// Возвращает ГУИД документа
//
// Параметры
//  <пСсылка>  - <ДокументСсылка> - ссылка на документ Ком соединения
//  <пВнешняяБаза>  - <COM-соединение> - внешнее соединение
//
// Возвращаемое значение:
//   <Строка>   - строковое представление ГУИД
//
Функция ПолучитьГУИДОбъектаВнешнегоСоединения(пВнешняяБаза, пСсылка)

	УИД = пВнешняяБаза.String(пСсылка.UUID()); 
	Возврат пВнешняяБаза.String(УИД); 

КонецФункции // ПолучитьГУИД()
Показать
mi13; ST01; mikl79; olexi2012; user1252779; BAMPER; It-developer; cargobird; awp234; selmorn; lemilk; Slypower; user1188623; ivanek; cwant; Legavaz; improg; +17 Ответить
3. DenisCh 18.01.18 11:31 Сейчас в теме
(2)
Возврат пВнешняяБаза.String(УИД);

Я бы лучше сказал XMLString()...
OAC_soft; eufes; +2 Ответить
4. ediks 335 18.01.18 12:20 Сейчас в теме
(3) В данном случае - без разницы. XMLСтрока для УникальногоИдентификатора возвращает строковое представление уникального идентификатора. То же самое, вид сбоку.
(1) посмотрите мою обработку - там все эти функции есть.
5. SlavaKron 18.01.18 15:38 Сейчас в теме
(4)XMLСтрока работает быстрее.
6. ediks 335 18.01.18 15:52 Сейчас в теме
(5) Есть какие-то подтверждения, ссылки?
9. SlavaKron 18.01.18 16:36 Сейчас в теме
(6) 27 секунд против 133.
Прикрепленные файлы:
ШаблонКом.epf
10. ediks 335 18.01.18 17:30 Сейчас в теме
(6) Давайте сравнивать одинаковые вещи, как у меня на картинке. Согласен, что сериализация XMLСтрока(КомСтр.Регистратор) происходит намного быстрее, чем XMLСтрока(КомСтр.Регистратор.УникальныйИдентификатор()) или String(КомСтр.Регистратор.УникальныйИдентификатор()). Очевидно, значительное время тратится на выполнение метода УникальныйИдентификатор().
Прикрепленные файлы:
16. improg 574 30.08.19 12:39 Сейчас в теме
(2) Спасибо, код подошел.
8. herfis 498 18.01.18 16:30 Сейчас в теме
Плюс XMLСтрока - это сериализация по установленным правилам, а Строка() - просто строковое представление. Хоть на практике этот момент и не играет роли, но завязывать алгоритмы на представления - непрофессионально. Прецеденты их изменений между версиями 1С уже были.
11. ediks 335 18.01.18 17:47 Сейчас в теме
Сейчас проверил - XMLСтрока(КомСтр.Регистратор) будет правильным ответом, ибо возвращается то же строковое представление уникального идентификатора.
12. yaroslav.artem 19.01.18 05:19 Сейчас в теме
Не работает, ничего не понимаю((
Делаю так:
ВнешнийДОк= ВНешБаза.Документы.МойДокумент.НайтиПоНомеру().ПолучитьОбъект();
УИ = Строка(ВнешнийДОк.УникальныйИдентификатор());//по итогу болт..ничего нет
13. spacecraft 19.01.18 08:55 Сейчас в теме
(12) посмотреть, какой тип у ВнешнийДОк и понять, что это не ДокументОбъект.
Уи = ВНешБаза.XMLСтрока(ВНешБаза.Документы.МойДокумент.НайтиПоНомеру());
mikl79; eufes; Nicholas; Andrei_Ivanov; maxst22; SlavaKron; +6 Ответить
17. OAC_soft 01.03.22 08:52 Сейчас в теме
(13)
Уи = ВНешБаза.XMLСтрока(ВНешБаза.Документы.МойДокумент.НайтиПоНомеру());


на некоторых версиях столкнулся с противоречием, которое разрешается чуть другой строкой, не любит русские имена

Уи = ВНешБаза.XMLString(ВНешБаза.Документы.МойДокумент.НайтиПоНомеру());
14. herfis 498 19.01.18 12:21 Сейчас в теме
(12) Во-первых, метод УникальныйИдентификатор() есть у типа "ДокументСсылка" и отсутствует у типа "ДокументОбъект".
Во-вторых, при работе через COM строковые представления объектов базы-корреспондента и получать нужно на стороне базы-корреспондента.
ВнешнийДОк= ВНешБаза.Документы.МойДокумент.НайтиПоНомеру();
УИ = ВНешБаза.String(ВнешнийДОк.УникальныйИдентификатор());

Но лучше, конечно же, как в (13)
mi13; wolovits; yaroslav.artem; +3 Ответить
15. user1255751 20.07.19 11:56 Сейчас в теме
Уважаемые программисты.
Мне нужно идентифицировать с помощью GUID три файла. Помогите, кто это может сделать. Не безвозмездно.
18. user1400997 18.05.23 18:04 Сейчас в теме
Есть различие, в случае когда Ссылка это удаленный объект во внешней базе в этом случае ВнешняяБаза.String(Ссылкаа.UUID()) отработает, а XMLСтрока вызовет ошибку.
19. SlavaKron 18.05.23 19:22 Сейчас в теме
(18) Вот это
ВнешняяБаза.String(Ссылка.UUID()) 
в разы медленнее, чем
ВнешняяБаза.XMLСтрока(Ссылка)
уже 100 раз обмусолено. Приведите доказательство, что последний вариант вызывает ошибку.
20. user1400997 19.05.23 15:27 Сейчас в теме
(19)
XMLСтрока

Могу описать ситуацию, в которой у меня вызывает ошибку метод XMLСтрока. Делаю выборку из таблицы изменений документа, подключение к внешней базе через COM. Когда ссылка удалена во внешней базе, но естественно остались записи в таблице изменений по такой ссылке. При использовании метода XMLСтрока будет ошибка, если не верите, проверьте. Версия платформы 8.3.20.2180
Мой коммент не про скорость выполнения методов, а про ошибку.
21. spacecraft 19.05.23 16:22 Сейчас в теме
(20) что-то не то делаете. Все должно отрабатывать.
Попробуйте:
Соединитель = Новый COMОбъект("V83.COMConnector");
Соединение = Соединитель.connect(СтрокаСоединения);
Ссылка = Соединение.Справочники.Номенклатура.ПолучитьСсылку(Соединение.NewObject("УникальныйИдентификатор"));
Сообщить(Соединение.XMLСтрока(Ссылка));

Пример получение XMLСтрока по битой ссылке отрабатывает.
8.3.22.1750. Режим совместимости: Версия 8.3.20
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот