Получить уникальный идентификатор 1с через com
При использовании для доступа к данным 1С:Предприятия 8.0 COM -соединения имеются следующие преимущества по сравнению с использованием Automation сервера:
- Более быстрая установка соединения, так как не требуется создания отдельного процесса операционной системы, а все действия производятся в рамках вызывающего процесса;
- Более быстрое обращение к свойствам и методам объектов 1C:Предприятия, так как для организации обращения не требуется организации межпроцессной коммуникации;
- Меньший расход ресурсов операционной системы.
В общем и целом работа с 1С:Предприятием 8.0 через COM -соединение подобна работе с 1С:Предприятием в режиме Automation сервера. Основные отличия заключаются в следующем:
- В случае Automation сервера запускается полноценное приложение 1С:Предпприятия 8.0, а в случае COM -соединения запускается относительно небольшой внутрипроцессный COM -сервер.
- При работе через COM -соединение недоступны функциональные возможности так или иначе связанные с организацией пользовательского интерфейса 1С:Предприятия 8.0;
- При работе COM -соединения не используется модуль приложения конфигурации 1С:Предприятия 8.0. Его роль при работе с COM -соединением играет модуль внешнего соединения.
1.1 Порядок установки COM-соединения
Для организации доступа к данным 1С:Предприятия 8.0 через COM -соединение, выполняется следующая последовательность действий:
Важно! В связи с отсутствием пользовательского интерфейса в COM-соеденении не все объекты, а также свойства и методы можно использовать в COM -соединении.
Объекты 1С:Предприятия, доступные извне через COM -соединение:
- Экспортируемые переменные и процедуры/функции модуля внешнего соединения
- Экспортируемые переменные и процедуры/функции общих модулей
- Включение и исключение модулей целиком с помощью установки свойств общих модулей
- Включение и исключение фрагментов общих модулей с помощью препроцессора
- Глобальный контекст 1С:Предприятия 8.0, за исключением объектов, жестко связанных с клиентским приложением (ТекстовыйДокумент, ТабличныйДокумент, . )
1.2 Модуль внешнего соединения
Как уже отмечалось обязанности модуля приложения при работе через COM -соединение, выполняет модуль внешнего соединения. Данный модуль может иметь процедуры-обработчики событий ПриНачалеРаботыСистемы() и ПриЗавершенииРаботыСистемы(), в которых могут быть размещены действия, выполняемые при инициализации и завершении соединения, соответственно.
Процедуры, функции и глобальные переменные, определенные в модуле внешнего соединения с ключевым словом Экспорт становятся, как и в случае модуля приложения, частью глобального контекста.
1.3 Общие модули
Для общих модулей введены свойства "Клиент", "Сервер" и "ВнешнееСоединение". Они предназначены для определения в конфигурации использования модулей в клиент - серверном варианте и в режиме COM -соединения.
1.4 Объект "V8.COMConnector"
Строка соединения с ИБ представляет собой цепочку фрагментов вида Параметр=Значение. Фрагменты отделяются друг от друга символами ';'. Если значение содержит пробельные символы, то оно должно быть заключено в двойные кавычки (").
Usr - имя пользователя;
Pwd - пароль.
Для файлового варианта определен параметр:
File - каталог информационной базы.
Для клиент-серверного варианта определены параметры:
Srvr - имя сервера 1С:Предприятия;
Ref - имя информационной базы на сервере.
Метод Connect возвращает ссылку на созданный объект COM -соединения.
Метод Connect устанавливает COM -соединение с информационной базой 1С:Предприятия 8.0 и возвращает ссылку на объект COM -соединение.
// Создается объект-коннектор
V8 = Новый COMObject ("V8.COMConnector");
// создается объект COM -соединение
Соединение = V8.Connect ("File=""c:\InfoBases\Trade""; Usr =""Director"";")
Авторизация доступа через COM -соединение возможна как с помощью параметров строки соединения «Usr» и «Pwd», так и через пользователя Windows, в любом случае должно быть право на «Внешнее соединение».
1.5 Объект "COM-соединение"
COM -соединение с информационной базой 1С:Предприятия предоставляет полный доступ к своему глобальному контексту (см. «Контекст выполнения программного модуля»). Поэтому COM -соединение в качестве своих методов может иметь: системные константы, значения заданных в конфигураторе объектов, доступ к которым осуществляется с помощью менеджеров (например, константы, перечисления, справочники, документы, журналы документов, отчеты, обработки, планы видов характеристик, планы счетов, планы видов расчета, регистры), а также переменные, объявленные в модуле внешнего соединения с ключевым словом Экспорт.
Кроме того, COM -соединение имеет дополнительный метод NewObject, с помощью которого можно создавать значения определенных типов.
тз = Соединение. NewObject ("ТаблицаЗначений");
Метод String Позволяет получать строковые представления значений 1С:Предприятия.
1.6. Особенности работы с COM -соединением
В Automation и в COM -соединении TRUE и FALSE имеют соответственно значения: -1 (минус единица) и 0.
Имеется возможность организации пула COM-соединений. При этом на принимающей на сервере 1С:Предприятия ЗАРАНЕЕ создаются несколько объектов COM-соединения и на установку соединения требуется еще меньше времени, поскольку не нужно создавать новый объект.
Реализован новый объект ПостроительЗапроса, предназначенный для генерации текстов запросов на основании указанных настроек. Данный объект поддерживает функциональность построителя отчета, не относящуюся к выводу отчета в табличный документ и другим задачам, связанным с пользовательским интерфейсом. Данный объект может использоваться на сервере 1С:Предприятия и в COM -соединении.
Доступно использование COM -объектов при работе встроенного языка на сервере 1С:Предприятия.
Есть две базы. В первой запускаю обработку, которая соединяется по ком соединению со второй и выбирает нужные документы. Далее эти документы перебираю, делаю определенные действия (не важно какие), и в процессе перебора мне нужно получить УИД документа, который был получен по ком соединению из второй базы.
Пишу так
ВыборкаДокумент.Ссылка.UUID()
Мне возвращает естественно COMОбъект. Как мне получить значение полученного УИДа по сом соединению?
(1) Petrovichka, как выборку формируешь? через таблицу значений или через методы комОбъекта?
в принципе как вариант в модуле документа второй базы забить экспортную функцию для этих целей и вызывать ее как метод объекта, вобщем что-то вроде этого на вскидку.
(2) Восьмой, Формирую так:
V82 = Новый COMObject ("V82.COMConnector");
Соединение82 = V82.Connect("Srvr="+СокрЛП(Сервер)+";Ref="+СокрЛП(ИмяБазы)+"; Usr="+СокрЛП(ИмяПользователя)+"; Pwd="+Пароль+";");
ЗапросСоединение = Соединение82 .NewObject("ПостроительЗапроса");
ЗапросСоединение.Текст = //запрос по документам
ЗапросСоединение.Выполнить();
ВыборкаДокумент = ЗапросСоединение.Результат.Выбрать(Соединение82 .ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДокумент.Следующий() Цикл
//тут мне нужно получить значение УИДа
КонецЦикла;
Нужно делать все в первой базе.
И какой смысл создавать экспортную процедуру во второй базе? Если я к ней и достучусь, то все равно на выходе получу COMОбъект. Что вы предлагаете, чтобы эта процедура делала и как она мне поможет в получении УИДа?
(3) Petrovichka, Вобщем смотри тут какая ситуация - из комОбъекта в нормальном виде возвращаются только примитивные типы, метод УникальныйИдентификатор() возвращает прикладной тип УникальныйИдентификатор поэтому в COMе он всегда интерпретируется как комОбъект. Получение объекта типа УникальныйИдентификатор из второй базы, для первой базы не имеет никакого смысла в принципе, поэтому смысл есть только в получении представлении ссылки . Поэтому если тебе нужно получить строковое представление ссылки из Второй базы то нужно в ней расширить контекст методов объекта - в твоем случае это документ в моем справочник - методом который будет тебе возвращать примитивный тип (Строка) со строковым представлением GUID. . У меня во второй базе вот такая тема в модуле объекта справочника:
Функция СообщитьСсылку() Экспорт
Возврат Строка(ЭтотОбъект.Ссылка.УникальныйИдентификатор());
КонецФункции;
и когда я из первой базы стучусь к этому методу то выглядит это так:
V82 = Новый COMObject ("V82.COMConnector");
Соединение82 = V82.Connect("File=""\\meridian.ru\dfs\UserFolders\SSedyshev\Мои документы\InfoBase3""");
ЗапросСоединение = Соединение82.NewObject("Запрос");
ЗапросСоединение.Текст ;
Результат = ЗапросСоединение.Выполнить().Выбрать();
//ЗапросСоединение.Execute
Пока Результат.Следующий() Цикл
Сообщить(Результат.Наименование);
Сообщить(Результат.Ссылка.ПолучитьОбъект().СообщитьСсылку());
КонецЦикла;
Но ИМХО напрямую управлять данными через COM это очень не кашерно, правильней использовать экспортные процедуры общих модулей ВнешнегоСоединения у COMОбъекта которые и манипулируют данными на основании параметров переданных в COM изВне.
(12) Во-первых, метод УникальныйИдентификатор() есть у типа "ДокументСсылка" и отсутствует у типа "ДокументОбъект".
Во-вторых, при работе через COM строковые представления объектов базы-корреспондента и получать нужно на стороне базы-корреспондента.
It-developer; cargobird; awp234; selmorn; lemilk; Slypower; user1188623; ivanek; cwant; Legavaz; improg; + 11 – Ответить
(3) В данном случае - без разницы. XMLСтрока для УникальногоИдентификатора возвращает строковое представление уникального идентификатора. То же самое, вид сбоку.
(1) посмотрите мою обработку - там все эти функции есть.
(6) Давайте сравнивать одинаковые вещи, как у меня на картинке. Согласен, что сериализация XMLСтрока(КомСтр.Регистратор) происходит намного быстрее, чем XMLСтрока(КомСтр.Регистратор.УникальныйИдентификатор()) или String(КомСтр.Регистратор.УникальныйИдентификатор()) . Очевидно, значительное время тратится на выполнение метода УникальныйИдентификатор().
Плюс XMLСтрока - это сериализация по установленным правилам, а Строка() - просто строковое представление. Хоть на практике этот момент и не играет роли, но завязывать алгоритмы на представления - непрофессионально. Прецеденты их изменений между версиями 1С уже были.
Сейчас проверил - XMLСтрока(КомСтр.Регистратор) будет правильным ответом, ибо возвращается то же строковое представление уникального идентификатора.
Не работает, ничего не понимаю((
Делаю так:
ВнешнийДОк= ВНешБаза.Документы.МойДокумент.НайтиПоНомеру().ПолучитьОбъект();
УИ = Строка(ВнешнийДОк.УникальныйИдентификатор());//по итогу болт..ничего нет
на некоторых версиях столкнулся с противоречием, которое разрешается чуть другой строкой, не любит русские имена
Уи = ВНешБаза. XMLString (ВНешБаза.Документы.МойДокумент.НайтиПоНомеру());
(12) Во-первых, метод УникальныйИдентификатор() есть у типа "ДокументСсылка" и отсутствует у типа "ДокументОбъект".
Во-вторых, при работе через COM строковые представления объектов базы-корреспондента и получать нужно на стороне базы-корреспондента.
Потребовалось написать небольшую синхронизацию данных в дополнении к стандартной УТ-БП, нужно по уникальному идентификатору искать документы:
Выдает ошибку : Ошибка при вызове метода контекста (ПолучитьСсылку): Произошла исключительная ситуация: Несоответствие типов (параметр номер '1')
Нужно уникальный идентификатор создавать в com: Соединение.Справочники.Номенклатура.ПолучитьСсылку(Соединение.NewObject("УникальныйИдентификатор",Строка(УИ)));
Рабочий пример:
Похожие FAQ
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 10060 (0x0000274C): Попытка установить соединение была безуспешной 19
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает :) И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через терминал, а еще у нее свой ноутбук и 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем Посмотреть все результаты поиска похожих
Для получения уникального идентификатора объекта, используйте код вида:
Код 1C v 8.х
Как с помощью запроса получить уникальный идентификатор:
Код 1C v 8.х
В 1С 7.7 можно получить так
Через v7plus.dll
Код 1C v 7.x
Через WScript
Код 1C v 7.x
при OLE доступе:
Код 1C v 7.x
Еще посмотрите метод:
ЗначениеВСтрокуВнутр();
Синтаксис:
ЗначениеВСтрокуВнутр()
Назначение:
Преобразование значения объекта агрегатного типа в строковое системное представление.
Возвращает: представление значения объекта в строковом системном виде.
Параметры:
- значение объекта агрегатного типа данных которое нужно преобразовать.
Похожие FAQ
Еще в этой же категории
Полнотекстовый поиск в 1С (что это и пример использования) 23
Полнотекстовый поиск - позволит найти текстовую информацию, размещенную практически в любом месте используемой конфигурации. При этом искать нужные данные можно либо по всей конфигурации в целом, либо сузив область поиска до нескольких объектов Формат, функция форматирования значений 21
//Функция формирует удобное для чтения представление значений. // Примеры форматирования чисел ЗначФормат = Формат(123456.789, " ЧЦ=10; ЧДЦ=2" ); // ЗначФормат = " 123 456,79" ЗначФормат = Формат(123456.789, " ЧГ=0; ЧДЦ=2" ); // Знач Обработчики событий при записи объектов. Зачем и что за чем? 12
Программисту, имеющего немного опыта на платформе 1С 8.2, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта, а-а-а-а-аааа. Именно такое сложное чувство непонимания УстановитьСсылкуНового 11
Установить ссылку нового это специальный механизм программиста, который позволяет присваивать новому объекту нужную ссылку. В основном это задача обмена, во многих типовых обменах используется синхронизация по UID объекта. Рассмотрим этот метод на к МоментВремени, получение остатков до и после проведения 9
" Момент времени" - виртуальное поле, не хранится в базе данных. Содержит объект МоментВремени (который включает в себя дату и ССЫЛКУ НА ДОКУМЕНТ) В 7.7 было понятие ПозицияДокумента, а в 8.x Момент времени Для получения Остатков, Движений: М Посмотреть все в категории Встроенные Функции
Читайте также: