helpf.pro
Регистрация

v8.2 УП: Как получить значение перечисления при COM соединении

Farpost
09.07.2012 12:27Прочитано: 26744
Пишу обработку обмена данными между УТ11 и БП 2.0, использую COM соединение, всё замечательно, но споткнулся на том, что мне необходимо определить тип операции РКО в БП, на основе хоз. операции в УТ11, но в УТ11 в РКО реквизит хоз. операция, является перечислением, подскажите, как мне прочитать значение перечисления при таком соединении? Фактически я могу обратиться к COM объекту вида "Документы.РасходныйКассовыйОрдер", дальше вижу только Хояйственную операцию, и тоже как СОМ объект, но из этого объекта я не могу "достать" ни идентификатор, ни синоним значения перечисления.

Подскажите, кто уже наступал на эти грабли, как тут быть?
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
09.07.2012 23:06Ответ № 1
(0) Farpost,
Код 1C v 8.х
 Ном = COM_ОбъектБД.Перечисления.ВидыТМЦ.Индекс(COM_ЭлементСправочника.Перечисление);
Имя = COM_ОбъектБД.Метаданные().Перечисления.ВидПеречисления.EnumValues.Get(Ном).Name;
E_Migachev
09.07.2012 23:09Ответ № 2
+ Получить значение перечисления 1С
Код 1C v 8.х
 ИмяПеречисления = СсылкаНаПеречисление.Метаданные().Имя;
КоличествоЗначенийПеречисления=Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления.Количество();
КолекцияЗначенийПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления;
ИндексЗначенияПеречисления=Перечисления[ИмяПеречисления].Индекс(СсылкаНаПеречисление);
ИмяЗначенияПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[ИндексЗначенияПеречисления].Имя
//Перебор коллекции значений перечисления
Для каждого знач из КолекцияЗначенийПеречисления Цикл
Сообщить(знач.Имя);
КонецЦикла;
ПредставлениеПеречисления=Строка(СсылкаНаПеречисление); //синоним

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

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

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

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

// Альтернативный способ получения имени значения перечисления:
ИмяЗначенияПеречисления = 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(МД),ИмяЗначенияПеречисления));
Подсказка: Для быстрого поиска ответов - используйте 'Поиск'
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.