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

v8.2 УП: Перечисления в COMConnector 1C

typeharley
13.09.2011 14:31Прочитано: 15606
1) Первый вопрос (операция чтения):
Как обратиться к значению перечисления в COM-соединении.

Ну к примеру: есть Справочник "Товары", у элементов этого справочника есть реквизит "ВидТовара", который имеет тип "ПеречислениеСсылка.ВидыТоваров". Данное перечисление имеет значения "Штучный" и "Весовой". Как их сравнить (т.е. получить аналогию кода, только в COM-соединении):

Код 1C v 8.2 УП
 Спр = Справочники.Товары;
Выборка = Спр.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
Если Объект.ВидТовара = Перечисления.ВидыТоваров.Штучный Тогда
Прервать;
КонецЕсли;
КонецЦикла
;

Единственный способ, который я нашел, так это сравнение строкового выражения через функцию
Код 1C v 8.2 УП
 Connection.String(<Значение>)   
.
Но это как-то не совсем красиво и правильно!

2) И второй вопрос (операция записи):
Как в этом же примере ПРИСВОИТЬ элементу справочника значение реквизита "ВидТовара" значение Перечисления.ВидыТоваров.Штучный.
Изменено 16.09.11 18:08:24
Yandex
Возможно, вас также заинтересует
Реклама на портале
ab
13.09.2011 19:28Ответ № 1
Насколько я понимаю в COM главное работать в информационном поле одного подключения.
Т.е. можно написать:

Код 1C v 8.2 УП
 БазаПодключеннаяПоCOM.Перечисления.ВидыТоваров.Штучный = БазаПодключеннаяПоCOM.Объект.ВидТовара   

Это должно сработать.
Если сравнение не в едином пространстве, то через строку ты уже нашёл

для второго вопроса примрно такой же ответ (главное единое пространство)
P.S. Код не проверял...
Изменено 13.09.11 19:29:13
typeharley
13.09.2011 20:34Ответ № 2
Цитата: P.S. Код не проверял...
Не, так не работает, было бы слишком просто.
Сравнение естественно в едином пространстве.
Изменено 13.09.11 20:37:13
typeharley
16.09.2011 18:08Ответ № 3
Сам отвечаю на свой вопрос.
Нашелся способ обхода данной ситуации, по крайней мере в моей конкретной задаче.

Способ 1:
Срабатывает такая конструкция как передача значения в виде параметра в запрос:

Код 1C v 8.2 УП
 Conn = Новый COMObject("V82.COMConnector");
Connection = Conn.Connect("Srvr=""Server"";Ref=""БазаДанных"";Usr=""Админ"";Pwd=""Пароль"";");
Запрос = Connection.NewObject("Запрос");
Запрос.ТекстЗапроса = "
|ВЫБРАТЬ
| Номенклатура.ВидТовара
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ВидТовара = &ВидТовара
|";
Запрос.Параметры.Вставить("ВидТовара",Connection.Перечисления.ВидыТоваров.Штучный);
Запрос.Выполнить.Выгрузить();


При этом получается выбрать нужные мне данные, ну и самое главное корректно выполняется операция СРАВНЕНИЯ.

Способ 2:
Нашел еще один способ получения элемента ссылки на значение перечисления:

Код 1C v 8.2 УП
 Функция ПолучитьСсылкуНаПеречислениеВидаТоваров(Connection, Представление)
Запрос = Connection.NewObject("Запрос");
Запрос.ТекстЗапроса = "
|ВЫБРАТЬ
| ВидТовара.Ссылка КАК Ссылка,
| ПРЕДСТАВЛЕНИЕ(ВидТовара.Ссылка) КАК Представление
|ИЗ
| Перечисление.ВидТовара КАК ВидТовара
|";
Запрос.Параметры.Вставить("ВидТовара",Представление);
ТаблЗапроса = Запрос.Выполнить.Выгрузить();
Для Каждого Стр Из ТаблЗапроса Цикл
Если Стр.Представление = Представление Тогда
Возврат Стр.Ссылка;
КонецЕсли;
КонецФункции;

СсылкаШтучный = ПолучитьСсылкуНаПеречислениеВидаТоваров(Connection, "Штучный");



Вопрос по поводу записи элементов можно выполнить аналогичным образом:

Код 1C v 8.2 УП
 Conn = Новый COMObject("V82.COMConnector");
Connection = Conn.Connect("Srvr=""Server"";Ref=""БазаДанных"";Usr=""Админ"";Pwd=""Пароль"";");
Спр = Connection.Справочники.Товары;
Выборка = Спр.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
СсылкаШтучный = ПолучитьСсылкуНаПеречислениеВидаТоваров(Connection, "Штучный");
Если Объект.ВидТовара <> СсылкаШтучный Тогда
Объект.ВидТовара = СсылкаШтучный;
Объект.Записать();
КонецЕсли;
КонецЦикла


На вопрос все-таки не нашел полного ответа, но все же вопрос закрыт!
Изменено 16.09.11 20:09:13
Mankubus
26.09.2011 11:25Ответ № 4
Вопрос закрыт!
Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.