Имя: Пароль:
1C
 
Получить значение перечисления при COM соединении
0 mzelensky
 
22.05.15
12:06
Доброго всем! Не пинайте тапками - знаю, что тема стара как мир, но работающий код почему-то работать теперь отказывается - понять причину пока не получается.

Раньше делал просто вот так (то, что это работало еще месяц назад уверен на все 200%):

СоединениеV8.String(СтруктураПараметров.СтавкаНДС)

Где "СтруктураПараметров.СтавкаНДС" - комовское значение перечисления "ставки ДНС".

Сейчас почему-то система никаких ошибок не выдает, но если поместить вышеописанную строчку в отладчик, то пишет "метод объекта String не обнаружен"
1 mzelensky
 
22.05.15
12:07
(0) Платформа "8.3.5.1443"

соединяюсь через:

V8 = Новый COMОбъект("V83.ComConnector");
2 mzelensky
 
22.05.15
12:08
Пробовал уже и вот так:

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

и Запросом - не выходит каменный цветок. А главное не пойму почему и после чего перестало отрабатывать.
3 ДенисЧ
 
22.05.15
12:08
Попробуй XMLСтрока()
4 mzelensky
 
22.05.15
12:08
(3) Пробовал - не канает
5 mzelensky
 
22.05.15
12:11
Опа...продолбался порядка полу часа...сейчас все само вдруг опять заработало.

СоединениеV8.String(СтруктураПараметров.СтавкаНДС)

отрабатывает корректно и возвращает нужное значение. НИЧЕГО НЕ МЕНЯЛ!!!!
6 Бубка Гоп
 
22.05.15
12:17
(5) позовите священника, окропите серверную святой водой
7 mzelensky
 
22.05.15
12:20
(6) честно говоря не очень смешно. Из-за этой хрени номенклатура подгружается криво. Получается то работает, то нет. И причина совершенно не ясна.
8 Бубка Гоп
 
22.05.15
12:25
(7) не отрабатывает на одних и тех же позициях? может иногда что то не то в ставкеНДС передается?
9 DS
 
22.05.15
12:26
(7) Самый простой и доступный способ - перезагрузить компьютер.
10 mzelensky
 
22.05.15
12:28
(8) Конкретно один документ, конкретно одна позиция. Пол часа назад НЕ работало, сейчас значение получается. Компы НЕ перезагружали.
11 ЧеловекДуши
 
22.05.15
12:31
(0) По индексу. Я пот делал через Метаданные и индекс. Порядок перечисления не изменен.
12 Бубка Гоп
 
22.05.15
12:36
(10) блин, ну не бывает так. подключение по сети? может перебой какой был?
13 Serginio1
 
22.05.15
12:38
14 Serginio1
 
22.05.15
12:40
15 mzelensky
 
22.05.15
12:46
(11) если ты про, как в (2) то

"EnumValues.Get"

не отрабатывает. Пишет такого нет
16 mzelensky
 
22.05.15
12:47
(12) Сам прекрасно знаю ,что не бывает и в сказки не верю. Подключение по сети. Сбой не разовый...т.е. вылазиет периодически.
17 mzelensky
 
22.05.15
12:51
(13) там используется:

"Соединение.XMLString(ЭлементПеречисления)"

Пробовал - не отрабатывает

(14)

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

Пробовал. Метод "EnumValues" не определен. А если просто сделать "Get" по индексу ,то комовский объект возвращает, но свойство "Name" (и "ИМЯ") не определено
18 Serginio1
 
22.05.15
13:51
Скорее всего у тебя не перечисление.

Ну и не до конца ты прочитал.

ИмяЗначенияПеречисленияCOM= V8.XMLString(СсылкаНаПеречислениеCOM);
ПредставлениеПеречисленияCOM= V8.String(СсылкаНаПеречислениеCOM); //синоним
ИмяПеречисленияCOM= СсылкаНаПеречислениеCOM.Метаданные().Имя;
СсылкаНаПеречисление = XMLЗначение(Тип("ПеречислениеСсылка."+ИмяПеречисленияCOM), ИмяЗначенияПеречисленияCOM);

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

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

// Пример для отбора на стороне COMсервера:
    Отбор = v8.Новый ("Структура");
    МД=v8.XMLTypeOf(v8.Перечисления[ИмяПеречисления].ПустаяСсылка());
    Отбор.Вставить("ВидДоговора", v8.XMLЗначение(v8.FromXMLType(МД),ИмяЗначенияПеречисления));
19 Serginio1
 
22.05.15
13:53
Ну и всетаки проще использовать внешние отчеты.
v8: 8.2, COM-соединение, C#, dynamic строки
20 Cube
 
22.05.15
13:56
21 Serginio1
 
22.05.15
14:49
Кстати лучше пользоваться
ИмяЗначенияПеречисленияCOM= V8.XMLString(СсылкаНаПеречислениеCOM);

ибо
ПредставлениеПеречисленияCOM= V8.String(СсылкаНаПеречислениеCOM); //синоним
22 mzelensky
 
22.05.15
14:57
Чуток позже попробую все это
23 Лефмихалыч
 
22.05.15
14:59
(0) в КЗ есть статья Ежова "Охота на СОМов", там тема раскрыта до неприличия
24 mzelensky
 
22.05.15
15:06
(23) НУ, там он предлагает строить соответствия и делать поиски по порядковому номеру. Но разница в том ,что он этот порядковый номер из запроса получает, а я на свое перечисленеи выхожу через объектную модель. Не пробовал конечно, но сдается мне ,что получить индекс элемента не получится.
AdBlock убивает бесплатный контент. 1Сергей