Есть две базы. В первой запускаю обработку, которая соединяется по ком соединению со второй и выбирает нужные документы. Далее эти документы перебираю, делаю определенные действия (не важно какие), и в процессе перебора мне нужно получить УИД документа, который был получен по ком соединению из второй базы.
Пишу так
ВыборкаДокумент.Ссылка.UUID()
Мне возвращает естественно COMОбъект. Как мне получить значение полученного УИДа по сом соединению?
Пишу так
ВыборкаДокумент.Ссылка.UUID()
Мне возвращает естественно COMОбъект. Как мне получить значение полученного УИДа по сом соединению?
По теме из базы знаний
- Выгрузка-загрузка любых данных (и измененных) между похожими конфигурациями (ФАЙЛ, HTTP, COM) ЛЮБЫХ баз 1С 8.1-8.3 с обработкой и поиском данных по произвольным полям поиска
- Получение уникального идентификатора объекта
- Работа с Конвертацией данных 1С 2.1
- EnterpriseData – часть 3. Загрузка данных, идентификация объектов
- Поиск ссылки по ГУИДу и отображение ГУИДа выбранной ссылки
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Восьмой, Формирую так:
V82 = Новый COMObject ("V82.COMConnector");
Соединение82 = V82.Connect("Srvr="+СокрЛП(Сервер)+";Ref="+СокрЛП(ИмяБазы)+"; Usr="+СокрЛП(ИмяПользователя)+"; Pwd="+Пароль+";");
ЗапросСоединение = Соединение82 .NewObject("ПостроительЗапроса");
ЗапросСоединение.Текст = //запрос по документам
ЗапросСоединение.Выполнить();
ВыборкаДокумент = ЗапросСоединение.Результат.Выбрать(Соединение82 .ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДокумент.Следующий() Цикл
//тут мне нужно получить значение УИДа
КонецЦикла;
Нужно делать все в первой базе.
И какой смысл создавать экспортную процедуру во второй базе? Если я к ней и достучусь, то все равно на выходе получу COMОбъект. Что вы предлагаете, чтобы эта процедура делала и как она мне поможет в получении УИДа?
V82 = Новый COMObject ("V82.COMConnector");
Соединение82 = V82.Connect("Srvr="+СокрЛП(Сервер)+";Ref="+СокрЛП(ИмяБазы)+"; Usr="+СокрЛП(ИмяПользователя)+"; Pwd="+Пароль+";");
ЗапросСоединение = Соединение82 .NewObject("ПостроительЗапроса");
ЗапросСоединение.Текст = //запрос по документам
ЗапросСоединение.Выполнить();
ВыборкаДокумент = ЗапросСоединение.Результат.Выбрать(Соединение82 .ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДокумент.Следующий() Цикл
//тут мне нужно получить значение УИДа
КонецЦикла;
Нужно делать все в первой базе.
И какой смысл создавать экспортную процедуру во второй базе? Если я к ней и достучусь, то все равно на выходе получу COMОбъект. Что вы предлагаете, чтобы эта процедура делала и как она мне поможет в получении УИДа?
(3) Petrovichka, Вобщем смотри тут какая ситуация - из комОбъекта в нормальном виде возвращаются только примитивные типы, метод УникальныйИдентификатор() возвращает прикладной тип УникальныйИдентификатор поэтому в COMе он всегда интерпретируется как комОбъект. Получение объекта типа УникальныйИдентификатор из второй базы, для первой базы не имеет никакого смысла в принципе, поэтому смысл есть только в получении представлении ссылки. Поэтому если тебе нужно получить строковое представление ссылки из Второй базы то нужно в ней расширить контекст методов объекта - в твоем случае это документ в моем справочник - методом который будет тебе возвращать примитивный тип (Строка) со строковым представлением GUID. . У меня во второй базе вот такая тема в модуле объекта справочника:
и когда я из первой базы стучусь к этому методу то выглядит это так:
Но ИМХО напрямую управлять данными через COM это очень не кашерно, правильней использовать экспортные процедуры общих модулей ВнешнегоСоединения у COMОбъекта которые и манипулируют данными на основании параметров переданных в COM изВне.
Функция СообщитьСсылку() Экспорт
Возврат Строка(ЭтотОбъект.Ссылка.УникальныйИдентификатор());
КонецФункции;
Возврат Строка(ЭтотОбъект.Ссылка.УникальныйИдентификатор());
КонецФункции;
и когда я из первой базы стучусь к этому методу то выглядит это так:
V82 = Новый COMObject ("V82.COMConnector");
Соединение82 = V82.Connect("File=""\\meridian.ru\dfs\UserFolders\SSedyshev\Мои документы\InfoBase3""");
ЗапросСоединение = Соединение82.NewObject("Запрос");
ЗапросСоединение.Текст = " ВЫБРАТЬ
|Справочник1.Наименование, Справочник1.Ссылка
|ИЗ
|Справочник.Справочник1 КАК Справочник1";
Результат = ЗапросСоединение.Выполнить().Выбрать();
//ЗапросСоединение.Execute
Пока Результат.Следующий() Цикл
Сообщить(Результат.Наименование);
Сообщить(Результат.Ссылка.ПолучитьОбъект().СообщитьСсылку());
КонецЦикла;
ПоказатьСоединение82 = V82.Connect("File=""\\meridian.ru\dfs\UserFolders\SSedyshev\Мои документы\InfoBase3""");
ЗапросСоединение = Соединение82.NewObject("Запрос");
ЗапросСоединение.Текст = " ВЫБРАТЬ
|Справочник1.Наименование, Справочник1.Ссылка
|ИЗ
|Справочник.Справочник1 КАК Справочник1";
Результат = ЗапросСоединение.Выполнить().Выбрать();
//ЗапросСоединение.Execute
Пока Результат.Следующий() Цикл
Сообщить(Результат.Наименование);
Сообщить(Результат.Ссылка.ПолучитьОбъект().СообщитьСсылку());
КонецЦикла;
Но ИМХО напрямую управлять данными через COM это очень не кашерно, правильней использовать экспортные процедуры общих модулей ВнешнегоСоединения у COMОбъекта которые и манипулируют данными на основании параметров переданных в COM изВне.
(5) Восьмой, я пример Вашей функции закинул в новый общий модуль, например "Дополнительный". Поэтому через com-соединение обращаюсь к ней
В функцию передаю COMОбъект. А функцию немного изменил:
Без претензий. Просто типовой код так не меняется. Может кому-то и такой вариант подойдет
Соединение.Дополнительный.СообщитьСсылку(ComОбъект)
В функцию передаю COMОбъект. А функцию немного изменил:
Функция СообщитьСсылку(Ссылка) Экспорт
Возврат Строка(Ссылка.УникальныйИдентификатор());
КонецФункции;
Без претензий. Просто типовой код так не меняется. Может кому-то и такой вариант подойдет
УИД = Соединение82.XMLСтрока(ВыборкаДокумент.Ссылка);
KirinaAS; Yury1001; bbbsss; user1282533; Izumov; avert; romankoav; de0nis; Manticor; researcher01; AndE; maljaev; pioneeer; nikonorov_ag; Invodev; Stan; olo_lo4; Wo0dV0rd258; Derek777; simgo83; Khalimon; INTECH1; Sergafan10; Программулькин; Отованец; ilyanet; Yan_Malyakov; scarabey2006; krenchik; Puhov2112; Maruska77; vita8383; Ryukenden; e-9; rolin555; Alien_RS_Forever; gravitator; FarFar; shevelyov; Paradox197755; klmop; scherbyna; acanta; ЧерныйКот; SmArtist; fortorgpro; savauu; dr_dom; piton66; cargobird; user873205; user705522_constantin_h; andogskiy; Anchoret; sommid; mskamrakova; twin; Восьмой;
+58
–
Ответить
Запрос = Подключение.NewObject("Запрос");
...................
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Для Каждого СтрокаРезультатЗапроса Из РезультатЗапроса Цикл
СтрокаТЗ = ТЗ.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЗ, СтрокаРезультатЗапроса);
СтрокаТЗ.УИД = Подключение.String(СтрокаРезультатЗапроса.Ссылка.УникальныйИдентификатор());
КонецЦикла;
...................
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Для Каждого СтрокаРезультатЗапроса Из РезультатЗапроса Цикл
СтрокаТЗ = ТЗ.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЗ, СтрокаРезультатЗапроса);
СтрокаТЗ.УИД = Подключение.String(СтрокаРезультатЗапроса.Ссылка.УникальныйИдентификатор());
КонецЦикла;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот