1С перечисление через com

Раздел содержит описание особенностей получения и использования значений перечислений 1С:Предприятия через внешнее соединение или Automation сервер 1С:Предприятия.

Системные перечисления и их элементы

Системные перечисления предназначены для определения некоторого набора предопределенных значений и используются в качестве значений параметров некоторых методов, а также в качестве значений некоторых свойств объектов 1С:Педприятия. Доступ к системным перечислениям осуществляется как к свойствам глобального контекста. Значения элементов системных перечислений указываются через точку от имени системного перечисления. Например:

В качестве значений параметров метода Записать() заданы два значения элементов системных перечислений: элемент "Проведение" системного перечисления "РежимЗаписиДокумента" и элемент "Оперативный" системного перечисления "РежимПроведенияДокумента".

И системные перечисления, и значения их элементов являются объектами, и могут быть переданы в другие приложения через COM посредством интерфейса IDispatch. При этом любое системное перечисление имеет набор свойств, каждое из которых позволяет получить соответствующее значение элемента данного системного перечисления. Элемент системного перечисления также является объектом и доступен через интерфейс IDispatch, однако ни свойств, ни методов он не имеет.

По этой причине анализ полученных значений системных перечислений возможен только посредством их сравнения со значениями системных перечислений, полученными через свойства глобального контекста. Например, на встроенном языке 1С:Предприятия проверка значений системных перечислений, полученных через внешнее соединение, может быть выполнена так:

Важно иметь в виду, что значения одних и тех же системных перечислений, полученные из разных экземпляров клиентского приложения или внешнего соединения 1С:Предприятия, являются разными объектами и между собой несравнимы.

Читайте также:  Linux для игр сборка

Перечисления, определенные в конфигурации

В отличие от системных перечислений, определенные в конфигурации перечисления являются объектами базы данных. Элемент такого перечисления является ссылкой на объект базы данных. Например, если в конфигурации определено перечисление "Перечисление1" с элементами "ЗначениеПеречисления1" и "ЗначениеПеречисления2", а реквизит "Реквизит1" справочника "Справочник1" имеет тип "ПеречислениеСсылка.Перечисление1", то следующий код на встроенном языке 1С:Предприятия:

выведет "Равно", если значением реквизита "Реквизит1" является "ЗначениеПеречисления1" и "Не равно" в противном случае.

Однако если значение элемента перечисления получить через внешнее соединение, то оно будет являться COM объектом, и подобное сравнение будет всегда приводить к отрицательному результату. Например, следующий код на встроенном языке 1С:Предприятия:

будет всегда выводить "Не равно". Это происходит потому, что значение элемента перечисления является объектом типа ссылка на объект базы данных. Для объектов ссылок определена операция сравнения значений, которая может работать только для "своих" объектов 1С:Предприятия. Объекты, полученные через внешнее соединение "своими" не являются, поэтому операция их сравнения является проверкой идентичности. Поскольку для объектов ссылок идентичность не поддерживается, их сравнение может дать отрицательный результат, даже если значения ссылок, заключенные в этих объектах, одинаковые.

Для сравнения значений элементов перечислений, определенных в конфигурации, необходимо выполнить преобразование этих элементов к одному из примитивных типов, сравнение которых не вызывает трудности. Такими типами могут быть либо числовой, либо строковый тип. Преобразовать значение элемента перечисления к числовому типу можно так:

Если тип перечисления, значение которого может содежать переменная "ЭлементПеречисления", известен заранее, то приведенный выше пример может быть записан проще:

Значение элемента перечисления может быть приведено к строковому типу, например, при помощи следующего фрагмента кода на встроенном языке 1С:Предприятия:

Как получить значение перечисления в 1С 8.2 — 8.3:

полезной будет функция:

Альтернативный способ получения имени значения перечисления:

Полезный прием для работы с перечислениями при COM соединении с другой ИБ 8.0 (например при обмене данных):

Читайте также:  Как настроить ad muncher

Надо передать ссылку на перечисление:

Разумеется имена перечислений в обоих базах должны быть идентичными.

Пример получения значений перечисления запросом

Программа помощник Администратора 1С

Скачай бесплатно YaAdmin !

Похожие записи

Скачайте бесплатно!

Видео уроки на канале!

Последние комментарии

Архивы

Статистика блога

Не запускается файловая база 1С

Установка Management Studio (SSMS 18.2) для MS SQL 2017

УСТАНОВКА MS SQL SERVER 2017 ДЛЯ 1С 8.3

Установка PostgreSQL 10.5 на Ubuntu server 18.04 LTS для 1С

Не обнаружена лицензия (ключ защиты) в 1С

Скачайте бесплатно!

7 дней обучения администрированию в 1С

37 видео уроков, 6 часов видео о том, как правильно администрировать 1С

Сделаете администрирование проще, а работу пользователей комфортней!

com соединение

Можно создать два вида COM объектов для приложения 1С. Это ole соединения V83.Application и com соединения V83.COMConnector. В случае с V83.Application запускается практически полноценный экземпляр приложения 1С. В случае использования V83.COMConnector запускается небольшая серверная часть. Скорость работы в этом случае выше, но некоторые функции могут быть недоступны. В частности работа с формами и с общими модулями для которых не установлено свойство работы с внешними соединениями. Преимущественно надо использовать V83.COMConnector и только в случае нехватки функционала V83.Application. Особенно сильно разница в скорости работы может быть заметна на базах большого объема. Для платформе 8.2 используется V82.Application или V82.COMConnector

Установить OLE соединение

Соединение = Новый COMОбъект ( “V83.Application” ) ;

Установить COM соединение

Соединение = Новый COMОбъект ( “V83.COMConnector” ) ;

Строка подключения

//Для варианта клиент- сервер
СтрокаСоединения = “Srvr = “ “ИмяСервера” “;Ref = “ “ИмяБазы” “; Usr = ИмяПользователя; Pwd = Пароль” ;
/ /Для варианта файлового режима:
СтрокаСоединения = “File = “ “ПутьКБазе” “; Usr = ИмяПользователя; Pwd = Пароль” ;
Попытка
Подключение = Соединение . Connect ( СтрокаСоединения ) ;
Исключение
Сообщение = Новый СообщениеПользователю ;
Сообщение . Текст = “Не удалось подключиться к базе” + ОписаниеОшибки ( ) ; Сообщение . Сообщить ( ) ;
КонецПопытки ;

Разрыв соединения

Соединение = Неопределено ;
Для объекта V83.Application выполнять разрыв соединения обязательно, в противном случае останется висеть незавершенный сеанс, который потом придется удалять вручную. В случае с V83.COMConnector соединение разрывается автоматически при завершении процедуры в которой выполнялось подключение.И есть еще один маленький момент. Для пользователя под которым выполняется подключение должен быть отключен флажок «Запрашивать подтверждение при закрытии программы» в его настройках.

Читайте также:  Htc one x10 характеристики

Метод NewObject()

Для создания нового объекта можно воспользоваться методом NewObject(), например:

для V83.COMConnector

ЗапросCOM = Подключение . NewObject ( “Запрос “ ) ;
ТаблицаCOM = Подключение . NewObject ( “ТаблицаЗначений” ) ;
МассивCOM = Подключение . NewObject ( “Массив” ) ;
УидCOM =Подключение.NewObject (“УникальныйИдентификатор”,СтрокаУИД);

для V83.Application

ЗапросOLE = Соединение . NewObject ( “ Запрос “ ) ;
ТаблицаOLE = Соединение . NewObject ( “ТаблицаЗначений” ) ;
МассивOLE = Соединение.NewObject ( “Массив” ) ;
УидCOM =Соединение.NewObject (“УникальныйИдентификатор”,СтрокаУИД);

После создания Com объекта можно далее работать с ним, например

ЗапросCOM . Текст = “ВЫБРАТЬ
| ДолжностиОрганизаций.Код,
| ДолжностиОрганизаций.Наименование
|ИЗ | Справочник.ДолжностиОрганизаций
КАК ДолжностиОрганизаций” ;
Результат = ЗапросCOM . Выполнить ( ) ;
Выборка = Результат . Выбрать ( ) ;
Пока Выборка . Следующий ( ) Цикл
КонецЦикла ;
Можно также использовать менеджеры объектов конфигурации:
СправочникCOM = Подключение . Справочники . ИмяСправочника ;
ДокументCOM = Подключение . Документы . ИмяДокумента ;
РегистрCOM = Подключение . РегистрыСведений . ИмяРегистра ;

Получение и сравнение перечисления через COM соединение

Для сравнения значений элементов перечислений, определенных в конфигурации, необходимо выполнить преобразование этих элементов к одному из примитивных типов, сравнение которых не вызывает трудности. Такими типами могут быть либо числовой, либо строковый тип. Преобразовать значение элемента перечисления к числовому типу можно так

Если НомерЭлементаПеречисления = 0 Тогда Сообщить( “ЗначениеПеречисления1” );

ИначеЕсли НомерЭлементаПеречисления = 1 Тогда Сообщить (“ЗначениеПеречисления2”);

Получение объекта через COM по идентификатору

Через менеджеры объектов конфигурации получаем com объект, например :
ДокументCOM = Соединение . Документы . ИмяДокумента ;

Затем получаем строку уникального идентификатора :

СтрокаУИД = Соединение.string ( ДокументCOM.УникальныйИдентификатор ())

Затем в базе данных можно найти по ссылке нужный документ, таким образом

Идентификатор = Новый У никальныйИдентификатор(СтрокаУИД) ;
С сылкаПоИдентификатору = Документы[ИмяДокумента].ПолучитьСсылку(Идентификатор);

Если нужно найти com объект по документ по идентификатору, то тогда нужно написать так:

УидCOM = Соединение.NewObject (“УникальныйИдентификатор”, СтрокаУИД );
СсылкаПоИдентификатору = Соединение.Документы[ИмяДокумента].ПолучитьСсылку(УидCOM);