Имя: Пароль:
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) НУ, там он предлагает строить соответствия и делать поиски по порядковому номеру. Но разница в том ,что он этот порядковый номер из запроса получает, а я на свое перечисленеи выхожу через объектную модель. Не пробовал конечно, но сдается мне ,что получить индекс элемента не получится.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn