Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: СОМ-Соедиенение и непонятный COMОбъект
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
bizisoft
Здравствуйте.
Пишу обработку для обмена между Альфа-Авто 4.1 и Бухгалтерия 1.2

Подключаться к базе научился, делаю это так:
Функция ПодключитьсяКИБ()         
    Соединение = Новый COMОбъект("V82.COMConnector");
    СтрокаСоединения = "File = ""D:\ALPHA\AA_4_1_13_1""; Usr = GAL; Pwd = gal";
    Попытка
        Подключение = Соединение.Connect(СтрокаСоединения);    
        базаОткрытаУспешно=проверкаОткрытия();          
        Возврат базаОткрытаУспешно;    
    Исключение                                            
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "Не удалось подключиться к базе" + ОписаниеОшибки();
        Сообщение.Сообщить();  
        Возврат Ложь;
    КонецПопытки;    
КонецФункции


//проверка на открытие базы Альфа-Авто
функция проверкаОткрытия()       
    Попытка
        Подключение.NewObject("Запрос");
        ЭлементыФормы.КнопкаОТКРЫТЬбазу.Доступность = ложь;
        ЭлементыФормы.Состояние.Заголовок="База открыта";
        Возврат Истина;
    Исключение
        базаОткрытаУспешно = ложь;
        ЭлементыФормы.КнопкаОТКРЫТЬбазу.Доступность = истина;
        ЭлементыФормы.Состояние.Заголовок="База закрыта";
        Возврат Ложь;
    КонецПопытки;      
КонецФункции


Теперь пробую прочитать справочник таким образом:
Процедура Кнопка1Нажатие(Элемент)
    СпрНоменклатура = Подключение.Справочники.Номенклатура;
    СпрПроизводитель = Подключение.Справочники.Производители;
    Товар = СпрНоменклатура.Выбрать();
    Пока Товар.Следующий() Цикл
        Если Товар.ПометкаУдаления = Истина Тогда
            Продолжить;
        КонецЕсли;
        Сообщить(Строка(Товар.Артикул)+Символы.Таб+
                 Строка(Товар.Наименование)+Символы.Таб+
                 Строка(Товар.НаименованиеПолное)+Символы.Таб+
                 Строка(Товар.Производитель)+Символы.Таб+
                 Строка(Товар.Модель));
        ОбработкаПрерыванияПользователя();
    КонецЦикла;
КонецПроцедуры


В окно сообщения выводятся данные нормально для
Товар.Артикул, Товар.Наименование, Товар.НаименованиеПолное, Товар.Модель
А вот для реквизита Товар.Производитель выводится непонятное значение COMОбъект.

Подскажите пожалуйста этот COMОбъект это так выводится объект ссылка или что, и как можно это обработать, чтобы можно было это записать в базу приемник?

Спасибо.
zetovich
Методанные. Перечисление?
ruslan3183
bizisoft @ Сегодня, 19:33 необходимо зарегистрироваться для просмотра ссылки,
Здравствуйте. Да будут нормально выводится в сообщении только примитивные типы данных(строка, число и т.д.). Если конфигурация на поддержке тогда поиск и создание по наименованию или коду в базе приемнике, если измененная тогда я использую регистр сведений соответствия уникальный идентификатор источника и ссылка приемника, как то так.
bizisoft
Цитата(zetovich @ 31.01.16, 21:09) необходимо зарегистрироваться для просмотра ссылки
Методанные. Перечисление?


Я пытаюсь понять как работает СОМ в данном случае на примере чтения справочника и документов, пока до перечислений не дошел.
Значение Товар.Производитель в справочнике Номенклатура является ссылкой на справочник Производители.

Цитата(ruslan3183 @ 31.01.16, 21:15) необходимо зарегистрироваться для просмотра ссылки
Здравствуйте. Да будут нормально выводится в сообщении только примитивные типы данных(строка, число и т.д.). Если конфигурация на поддержке тогда поиск и создание по наименованию или коду в базе приемнике, если измененная тогда я использую регистр сведений соответствия уникальный идентификатор источника и ссылка приемника, как то так.


Конфигурация Источник (Альфа-Авто), она измененная, а конфигурация Приемник (Бухгалтерия) находится на поддержке.
Обработка запускается в Бухгалтерии и через СОМ соединение подключается к Альфе.


Пробую получить выборку по документам:
    ДокВыб = Подключение.Документы.РеализацияТоваров.Выбрать(НачалоДня(НачПериода),КонецДня(КонПериода));        
    Пока ДокВыб.Следующий() Цикл
        Если ДокВыб.ПометкаУдаления = Истина Тогда
            Продолжить;
        КонецЕсли;
        Сообщить(Строка(ДокВыб)+Символы.Таб+Строка(ДокВыб.Номер)+Символы.Таб+Строка(ДокВыб.Дата)+Символы.Таб+Строка(ДокВыб.ХозОперация)+Символы.Таб+Строка(ДокВыб.СуммаДокумента));
        Для каждого СтрТов из ДокВыб.Товары Цикл
            Сообщить(Символы.Таб+Символы.Таб+Строка(СтрТов.Номенклатура.Артикул)+Символы.Таб+Строка(СтрТов.Количество)+Символы.Таб+Строка(СтрТов.Цена)+Символы.Таб+Строка(СтрТов.Сумма));
        КонецЦикла;
    КонецЦикла;


ДокВыб.Номер, ДокВыб.Дата, ДокВыб.СуммаДокумента - все нормально, номер, дата и сумма документа выводится как есть.
ДокВыб.ХозОперация - выводится в сообщении как СОМОбъект
ДокВыб - также выводится как СОМОбъект, видимо это типа ссылка на документ, но не пойму почему через ДокВыб можно получить Номер, Дату и другие реквизиты (не ссылочные), и даже получилось получить доступ к табличной части документа, а именно Артикул, Наименование, НаименованиеПолное, Количество, Цена, Сумма.
Единственно если попробовать вывести СтрТов.Номенклатура - выдаст СОМОбъект.

Т.е. я понял, что все поля/реквизиты являющиеся ссылочными объектами будут выводиться как СОМОбъект, но как тогда можно получить его значение?
Если я пробую прочитать реквизит табличной части документа СтрТов.СтавкаНДС - выдает СОМОбъект, а если СтрТов.СтавкаНДС.Наименование - выдает наименование ставки.
В случае со справочником Номенклатура я пробую получить Производителья Товар.Производитель - СОМОбъект, а так Товар.Производитель.Наименование выдает ошибку Значение не является значением объектного типа (Наименование).

Acid
Потому что Производитель - это справочник.
Конструкции типа
Товар.Производитель.Наименование
нежелательны даже без СОМ, потому что каждая точка это вложенный Запрос.
Petre
Цитата(bizisoft @ 31.01.16, 18:33) необходимо зарегистрироваться для просмотра ссылки
Подскажите пожалуйста этот COMОбъект это так выводится объект ссылка или что, и как можно это обработать, чтобы можно было это записать в базу приемник?

Все, что не является примитивным типом, будет COMОбъект-ом.
bizisoft
Цитата(Petre @ 01.02.16, 10:13) необходимо зарегистрироваться для просмотра ссылки
Все, что не является примитивным типом, будет COMОбъект-ом.

И что прочитать этот COMОбъект никак нельзя?
Я нашел обработку, которая подключается через СОМ из 1С8 к 1С77 и считывает данные, но там как-то по другому подключение организовано.

Процедура ЗагрузитьНажатие(Элемент) 
    v7 = Новый COMObject("V1CEnterprise.Application");
    Открыта = v7.initialize(v7.RMTrade, "/D", "NO_SPLASH_SHOW");    
    ...
    ДокИсточник                = v7.CreateObject("Документ.Счет");        
    ДокИсточник.ВыбратьДокументы(ДатаНачалаСтр,ДатаОкончанияСтр);
    ...
    РезультатСоздания    = СформироватьСчет(ДокИсточник.ТекущийДокумент());
    ...
КонецПроцедуры;

Функция СформироватьСчет(док77,СообщитьОСоздании = Ложь)         
    ИскомыйДокумент = Документы.СчетНаОплатуПокупателю.ПустаяСсылка();     
    Если Док77.Вид() <> "Счет" Тогда
        Возврат ИскомыйДокумент;
    КонецЕсли;
    ИскомыйДокумент = Документы.СчетНаОплатуПокупателю.НайтиПоНомеру(док77.НомерДок, док77.ДатаДок);    
        ...
    ДокСчет.Контрагент = НайтиСоздатьКонтрагента(Док77.Контрагент);
    Док77.ВыбратьСтроки();
    Пока Док77.ПолучитьСтроку()>0 Цикл
        Если ПустаяСтрока(Строка(Док77.Товар.Наименование)) = Ложь Тогда             
            НоваяСтрока.Номенклатура = НайтиСоздатьТМЦ(Док77.Товар);//НайденаНоменклатура.Ссылка;
            НоваяСтрока.ЕдиницаИзмерения = НоваяСтрока.Номенклатура.БазоваяЕдиницаИзмерения;
            НоваяСтрока.Количество = док77.Количество;            
                        ...
        КонецЕсли;                
    КонецЦикла;      
    ДокСчет.Записать();      
    Возврат ДокСчет.Ссылка;     
КонецФункции

Функция НайтиСоздатьТМЦ(Ссылка77)
    Найден = 0;         
    ТаблицаРодителей = Новый ТаблицаЗначений;
    ТаблицаРодителей.Колонки.Добавить("НомерПП");
    ТаблицаРодителей.Колонки.Добавить("Родитель");
    Уровень = Ссылка77.Уровень();
    ТекРодитель = Ссылка77;
    Для ии = 1 По Уровень-1 Цикл
        СтрТаблицы = ТаблицаРодителей.Добавить();
        СтрТаблицы.НомерПП = ии;
        СтрТаблицы.Родитель = ТекРодитель.Родитель;
        ТекРодитель = СтрТаблицы.Родитель;
    КонецЦикла;
    ТаблицаРодителей.Сортировать("НомерПП убыв");
    ТекРодитель = Справочники.Номенклатура.ПустаяСсылка();      
    Для Каждого Стр Из ТаблицаРодителей Цикл
         ИскомыйРодитель = Справочники.Номенклатура.НайтиПоНаименованию(Стр.Родитель.Код+";"+Стр.Родитель.Наименование);
        Если ИскомыйРодитель.Пустая() Тогда
            ИскомыйРодитель = Справочники.Номенклатура.СоздатьГруппу();        
            Дл = ИскомыйРодитель.Метаданные().ДлинаНаименования;
            Если Дл>0 Тогда
                ИскомыйРодитель.Наименование = Стр.Родитель.Код+";"+Стр.Родитель.Наименование;
            КонецЕсли;
            ИскомыйРодитель.Родитель = ТекРодитель.Ссылка;
            ИскомыйРодитель.Записать();
        КонецЕсли;
        ТекРодитель = ИскомыйРодитель;
    КонецЦикла;               
    //ищем по артикулу, чтобы спозиционироваться именно на элементе
    Если (Найден = 0) Тогда
        Товар = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(Ссылка77.КодТ));
        Если Товар.Пустая() = Ложь Тогда             
            Найден = 1;
            Сообщить("Найден " + СокрЛП(Ссылка77.КодТ));
            Если ОбновлятьСправочники = Ложь Тогда
                Возврат Товар.Ссылка;
            Иначе
                Товар = Товар.ПолучитьОбъект();    
            КонецЕсли;            
        КонецЕсли;
    КонецЕсли;      
    //создаем новый товар, т.к. запись не найдена
    Если Найден = 0 Тогда
        Сообщить("Товар добавляется " + СокрЛП(Ссылка77.КодТ));
        Товар = Справочники.Номенклатура.СоздатьЭлемент();        
    КонецЕсли;        
    //если транспортная услуга
    Если Ссылка77.Транспорт = 1 Тогда
        Товар.ТранспортнаяУслуга = Истина;
    КонецЕсли;        
    Товар.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796");    
    Попытка
        Товар.НаименованиеПолное = ?(СокрЛП(Ссылка77.НаименованиеУкр)="",СокрЛП(Ссылка77.Наименование),СокрЛП(Ссылка77.НаименованиеУкр));
    Исключение
        Товар.НаименованиеПолное = СокрЛП(Ссылка77.Наименование);
    КонецПопытки;
    Товар.Наименование = Товар.НаименованиеПолное;
    Товар.Артикул = СокрЛП(Ссылка77.КодТ);
    Товар.КодУКТВЭД   = НайтиСоздатьКТВЭД(Ссылка77);
    Товар.СтавкаНДС = ПолучитьСтавкуНДС(Ссылка77.СтавкаНДС.Получить().Идентификатор());
    Если  Ссылка77.ВидТовара.Идентификатор() = "Услуга" Тогда
        Товар.Услуга = Истина;
    КонецЕсли;    
    Товар.Родитель = ТекРодитель.Ссылка;
    Товар.Записать();         
    Возврат Товар.Ссылка;        
КонецФункции


Из этой обработки я понял, что перебираются документы по номеру производится поиск если не найден - создается, если найден и стоит флаг обновлять, то обновляется табличная часть.
При обработке табличной части производится поиск товара по артикулу в номенклатуре, если найден, то добавляется в ТЧ, иначе создается новый товар, а после добавляется в ТЧ.
Но в 7.7 например УКТВЭД являлся строковым реквизитом Номенклатуры, а в Альфе это уже ссылочный реквизит НоменклатурыГТД и далее КодУКТВЭД - как в таком случае его получить, ну и все ссылочные реквизиты справочника/документа, тогда не понятно.
Vofka
Ссылки нужно искать по соответствию каких-то простых реквизитов: по наименованию, по коду, по какому-то специальному реквизиту. Например, документы, можно искать по дате и номеру, справочники искать по коду. Я лично для установки соответствий в разных базах использую УИД.
bizisoft
Цитата(Vofka @ 01.02.16, 11:58) необходимо зарегистрироваться для просмотра ссылки
Ссылки нужно искать по соответствию каких-то простых реквизитов

Без получения хотя-бы Наименования производителя, я не могу даже к поиску приступить, т.к. СОМОбъект мне не дает даже получить этот самый простой реквизит.
Жаль.

Может быть у меня подход неверный, т.е. сейчас я подключаюсь из Бухгартерии к Альфа-Авто, а нужно наоборот из Альфа-Авто к Бухгалтерии, и уже в Бухгалтерии искать соответствующие объекты, и если их нет, то создавать?
Vofka
Цитата(bizisoft @ 01.02.16, 11:15) необходимо зарегистрироваться для просмотра ссылки
Без получения хотя-бы Наименования производителя, я не могу даже к поиску приступить, т.к. СОМОбъект мне не дает даже получить этот самый простой реквизит.

Почему не даёт?
Acid
пробуйте конструкцию
ПолучитьСсылку()
Petre
Цитата(bizisoft @ 01.02.16, 10:53) необходимо зарегистрироваться для просмотра ссылки
И что прочитать этот COMОбъект никак нельзя?

А что вы хотите прочитать? Представление? Тогда используйте string(). Вы поймите, что ссылка имеет смысл только в контексте одной конкретной ИБ.
bizisoft
Цитата(Vofka @ 01.02.16, 12:16) необходимо зарегистрироваться для просмотра ссылки
Почему не даёт?


Процедура Кнопка1Нажатие(Элемент)
    СпрНоменклатура = Подключение.Справочники.Номенклатура;
    СпрПроизводитель = Подключение.Справочники.Производители;
    Товар = СпрНоменклатура.Выбрать();
    Пока Товар.Следующий() Цикл      
        Сообщить(Товар.Артикул);
        Сообщить(Товар.Производитель);                            ///  в этом случае возвращает СОМОбъект
        Сообщить(Товар.Производитель.Наименование);      /// а так ошибку Значение не является значением объектного типа (Наименование)
    КонецЦикла;
КонецПроцедуры


Сообщить(Товар.Производитель.Наименование); выдает ошибку.
Но в случае, когда я через СОМ читаю ТЧ документа, на пример СтавкаНДС, то тут позволяет получить наименование "Основная ставка НДС" если написать СтрТов.СтавкаНДС.Наименование
Почему тут можно, а в случае со справочником нет, ведь реквизиты являются ссылками на справочники?
Petre
Цитата(bizisoft @ 01.02.16, 11:15) необходимо зарегистрироваться для просмотра ссылки
Может быть у меня подход неверный, т.е. сейчас я подключаюсь из Бухгартерии к Альфа-Авто, а нужно наоборот из Альфа-Авто к Бухгалтерии, и уже в Бухгалтерии искать соответствующие объекты, и если их нет, то создавать?

Вообще-то, соответствие необходимо где-то хранить. Типовая рарусовская обработка выгрузки из АА в БПУ так и делает - хранит в ДБФ-файле соответствия ссылок.
Acid
вот это работает?
Подключение.Справочники.Производители.Ссылка
bizisoft
Petre @ Сегодня, 12:35 необходимо зарегистрироваться для просмотра ссылки,
Да, но типовая обработка работает не через СОМ, а выгрузил в файл - загрузил из файла.


Цитата(Acid @ 01.02.16, 12:39) необходимо зарегистрироваться для просмотра ссылки
Подключение.Справочники.Производители.Ссылка


Не совсем понял в каком контексте.
Если в контексте чтения справочника Производители
Произв = СпрПроизводитель.Выбрать();
    Пока Произв.Следующий() Цикл
        Сообщить(Произв.Ссылка);                  // возвращает как СОМОбъект , т.е. не работает
           Сообщить(Произв.Наименование);        // возвращает Наименование производителя
    КонецЦикла;

Если в контексте чтения справочника Номенклатура, то мне не понятно как это применить.
Acid
СпрПроизводитель = Подключение.Справочники.Производители;
Производители = Подключение.CreateObject("Справочник.Производители");
Производители.ВыбратьЭлементы();
Пока Производители.ПолучитьЭлемент() Цикл
   Если СпрПроизводитель = Производители.ТекущийЭлемент() Тогда
        текПроизводитель = Производители.ТекущийЭлемент();
        Прервать;
   КонецЕсли;
КонецЦикла;
сообщить("Производитель = "+текПроизводитель.Наименование);
bizisoft
Acid @ Сегодня, 13:26 необходимо зарегистрироваться для просмотра ссылки,

Я изначально пробовал как при работе с 7.7 через CreateObject("Справочник.Производители"), но выдавало ошибку.

{Форма.Форма.Форма(1500)}: Метод объекта не обнаружен (CreateObject)
Производители = Подключение.CreateObject("Справочник.Производители");
Acid
учитесь работать с Синтакс-Помошником:

Внешнее соединение (External connection)
NewObject (NewObject)
Синтаксис:

NewObject(<Имя>)
Параметры:

<Имя> (обязательный)

Тип: Строка.
Имя объекта, объявленного в конфигураторе.
Возвращаемое значение:

Тип: COMОбъект.

Описание:

Создает объект, для которого предусмотрен конструктор, и возвращает ссылку на него.

Доступность:

Интеграция.
Примечание:

Последующие параметры метода те же, что у конструктора объекта, имя которого указано в качестве значения первого параметра.

вот статья необходимо зарегистрироваться для просмотра ссылки
Petre
Зачем для данной задачи "NewObject"?
Acid
Petre @ Сегодня, 14:09 необходимо зарегистрироваться для просмотра ссылки,
Это для моего варианта.
bizisoft
Acid @ Сегодня, 15:02 необходимо зарегистрироваться для просмотра ссылки,
Я не создаю в подключаемой базе никаких объектов, мне нужно просто прочитать данные.
Если я правильно понимаю, то NewObject и CreateObject используются для создания каких-либо объектов в подключаемой базе.
Petre
Все у вас должно читаться. Попробуйте в отладчике проверить. Попробуйте поставить фильтр по элементам (может вы читаете "производитель" у группы, у которой его и не может быть). Попробуйте решить задачу через запрос.
bizisoft
Цитата(Petre @ 01.02.16, 15:48) необходимо зарегистрироваться для просмотра ссылки
Попробуйте решить задачу через запрос.

Скажите пожалуйста, а при СОМ соединении запрос пишется обычным способом, или есть какие-то нюансы?
Acid
Цитата(bizisoft @ 01.02.16, 14:40) необходимо зарегистрироваться для просмотра ссылки
Если я правильно понимаю, то NewObject и CreateObject используются для создания каких-либо объектов в подключаемой базе.

Нет. Создаются экземпляры класса для работы с ними.

Запрос передается в виде текста. Пишите там чего угодно, потом получите только результат выборки.
bizisoft
Acid @ Сегодня, 16:04 необходимо зарегистрироваться для просмотра ссылки,
Я вас понял.
Спасибо.
Буду пробовать через запросы.
bizisoft
Сделал запросом, теперь можно получить через ссылочный объект его реквизиты.

        Запрос = Неопределено;
    Запрос = Подключение.NewObject("Запрос");   // А вот как раз и нюанс, который отличается от написания запроса при обычном режиме.
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Номенклатура.Артикул,
        |    Номенклатура.Производитель,
        |    Номенклатура.Производитель.Наименование,
        |    Номенклатура.ЭтоГруппа
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура";

    Результат = Запрос.Выполнить();
    Товар = Результат.Выбрать();
    Пока Товар.Следующий() Цикл
        Если Товар.ЭтоГруппа = Ложь Тогда
          Сообщить(Строка(Товар.Артикул)+Символы.Таб+
                 Строка(Товар.Производитель)+Символы.Таб+           // Вот здесь выводит СОМОбъект
                 Строка(Товар.Производитель.Наименование));          // А здесь то что надо
        КонецЕсли;
    КонецЦикла;


Спасибо большое, буду дальше разбираться.
Acid
Цитата(bizisoft @ 02.02.16, 9:38) необходимо зарегистрироваться для просмотра ссылки
| Номенклатура.Производитель,

Вот это убрать из запроса. Быстрее работать будет.
bizisoft
Acid @ Сегодня, 10:45 необходимо зарегистрироваться для просмотра ссылки,
Да это я конечно уберу - я выложил, что бы просто показать, что такая строка также выводит СОМОбъект, как и в предыдущих постах, а вторая строка выводит то что надо, когда предыдущие попытки этого не позволяли сделать.

Спасибо.
bizisoft
Нашел способ как можно работать с перечислениями через СОМ

Ном = COM_ОбъектБД.Перечисления.ВидыТМЦ.Индекс(COM_ЭлементСправочника.Перечисление);
Имя = COM_ОбъектБД.Метаданные().Перечисления.ВидПеречисления.EnumValues.Get(Ном).Name;


Получить значение перечисления
ИмяПеречисления = СсылкаНаПеречисление.Метаданные().Имя;
КоличествоЗначенийПеречисления=Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления.Количество();
КолекцияЗначенийПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления;
ИндексЗначенияПеречисления=Перечисления[ИмяПеречисления].Индекс(СсылкаНаПеречисление);
ИмяЗначенияПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[ИндексЗначенияПеречисления].Имя
//Перебор коллекции значений перечисления
Для каждого знач из КолекцияЗначенийПеречисления Цикл
    Сообщить(знач.Имя);
КонецЦикла;
ПредставлениеПеречисления=Строка(СсылкаНаПеречисление); //синоним

//полезной будет функция:
Функция ПолучитьИмяЗначенияПеречисления(Ссылка) Экспорт

ИмяПеречисления = Ссылка.Метаданные().Имя;
Индекс = Перечисления[ИмяПеречисления].Индекс(Ссылка);

Возврат Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[Индекс].Имя;

КонецФункции // ПолучитьИмяЗначенияПеречисления()

// Альтернативный способ получения имени значения перечисления:
ИмяЗначенияПеречисления = XMLстрока(СсылкаНаПеречисление);

// Полезный прием для работы с перечислениями при COM соединении с другой ИБ 8.0 (например при обмене данных):
// надо передать ссылку на перечисление:
// Здесь
// V8 - COM объект "V8.Application" - ИБ внешнего соединения
// СсылкаНаПеречислениеCOM - COM объект - ссылка на перечисление в ИБ внешнего соединения
ИмяЗначенияПеречисленияCOM= V8.XMLString(СсылкаНаПеречислениеCOM);
ПредставлениеПеречисленияCOM= V8.String(СсылкаНаПеречислениеCOM); //синоним
ИмяПеречисленияCOM= СсылкаНаПеречислениеCOM.Метаданные().Имя;
СсылкаНаПеречисление = XMLЗначение(Тип("ПеречислениеСсылка."+ИмяПеречисленияCOM), ИмяЗначенияПеречисленияCOM);

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

// Пример получения значений перечисления запросом
   Запрос=новый запрос;
   запрос.Текст="ВЫБРАТЬ
            |    ВидыОС.Ссылка,
            |    ВидыОС.Порядок КАК Индекс
            |ИЗ
            |    Перечисление.ВидыОС КАК ВидыОС";
   Выборка=Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() цикл
     Сообщить(""+Выборка.ссылка+" : "+Выборка.индекс);
   конецЦикла;  

// Пример для отбора на стороне COMсервера:
    Отбор = v8.Новый ("Структура");
    МД=v8.XMLTypeOf(v8.Перечисления[ИмяПеречисления].ПустаяСсылка());
    Отбор.Вставить("ВидДоговора", v8.XMLЗначение(v8.FromXMLType(МД),ИмяЗначенияПеречисления));
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.