Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Получить идентификатор перечисления по OLE? (http://forums.kuban.ru/f1040/poluchit-_identifikator_perechisleniya_po_ole-3170045.html)

US1C 12.10.2012 11:54

Получить идентификатор перечисления по OLE?
 
Проблема такая, подключаюсь обработкой из базы 7.7 к 8.2 по OLE. Как получить идентификатор значения перечисления? Из 7-ых баз я делаю таким способом:
СЗ_Субк.ДобавитьЗначение(СокрЛП(Ит.Субконто(1).ВидДвижения.Идентификатор())); Где Ит - бухитоги OLE-базы. Как это-же сделать с 8-ой - не пойму.

roma n 12.10.2012 13:40

Если нигде не наврал...

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

roma n 12.10.2012 13:50

Но всё же XMLstring гораздо удобнее...

Северянин 12.10.2012 13:54

А что дает XMLСтрока(<Значение>). например OLE.XMLСтрока(Ит.Субконто(1).Вид Движения.Идентификатор()); ?

US1C 12.10.2012 14:03

(1) Что-то так и не примастырил это выражение.
Можно на примере моей переменной показать?
Стр.Получить(1).ВидДвиженияДенежныхСредств
где Стр - строка ТЗ из OLE-базы, ВидДвиженияДенежныхСредств - реквизит типа -"Перечисление.ВидДвиженияДенежныхСредств".

US1C 12.10.2012 14:05

(3) V8.XMLСтрока(Стр.Получить(1).ВидДвиженияДенежныхСредств.Идентификатор()) = Ошибка в выражении!

US1C 12.10.2012 14:07

(3) А вот так получилось:
V8.XMLСтрока(Стр.Получить(1).ВидДвиженияДенежныхСредств) = "ПрочиеРасходыПоТекущейДеятельности"
Спасибо за идею и участие.

roma n 12.10.2012 14:12

Не парься :) Больно громоздкое сооружение будет, да и не факт что написано правильно - писал по памяти.
OLE_ЗначениеПеречисления = Стр.Получить(1).ВидДвиженияДенежныхСредств;
OLE_ЗначениеПеречисления .Метаданные().ЗначенияПеречислен ия[OLE.Перечисления.Менеджер.ВидДвиженияДенежныхСредств(OLE_ЗначениеПеречисления )]

Сильно монструозно...
Гораздо приятнее так:
СтроковойИдентификатор = OLE.XMLСтрока(Стр.Получить(1).ВидДвиженияДенежныхСредств)

(3) Скормить системное перечисление? Выдаст идентификатор в английском представлении.

US1C 12.10.2012 14:40

(1,3) Еще вопрос, до кучи, можно?
Как передать Булево (Ложь, Истина) в 8-ку из 7.7?

roma n 12.10.2012 14:57

Через преобразование к числу туда-обратно. Как вариант.

US1C 12.10.2012 15:04

(9) Не проходит. Передаю:
V8.ЗавершитьРаботуСистемы(0) - ошибка при выполнении.
V8.ЗавершитьРаботуСистемы(V8.Булево(0)) - тоже не канает.

smaharbA 12.10.2012 17:19

чо вы такие не адекватные ?

DeiMos 12.10.2012 17:57

8-US1C > Булево - в семёрке это "Да/Нет".
Передаваться должно напрямую, т.к. это простой тип данных.

US1C 15.10.2012 13:24

(11) А что по этому поводу думают адекватные? Вопрос все еще в силе.
(12) Неа. Да/Нет в семерке - это значения перечисления, которые делают глобальными переменными и используют как булево. А значения всех перечислений для другой базы - вещь непонятная. В 8-ке да, это примитивный тип данных, но по OLE все равно не передается. Только число, строка, дата.
Кстати, 0 и -1 тоже не проканало передать булево. И ЗначениеИзСтрокиВнутр("**""B"",0**") - тоже не прошло. Хотелось бы услышать новые варианты/идеи передачи булево в 8-ку из 7.7.

US1C 15.10.2012 13:26

К (13) Извиняюсь, хотел написать: ЗначениеИзСтрокиВнутр("**""B"",0**")

user1C 15.10.2012 14:02

(14)
так пробовал?
V8.ЗавершитьРаботуСистемы(V8.ЗначениеИзСтрокиВнутр("**""B"",0**"))

US1C 15.10.2012 14:36

(15) Да. Именно так пробовал.

DeiMos 15.10.2012 18:08

13-US1C > "Хотелось бы услышать новые варианты/идеи передачи булево в 8-ку из 7.7"

- Ну, передавай как текст, как вариант...
"Истина", "Ложь"

US1C 16.10.2012 10:29

(17) Была и такая попытка. Эффект - 0.

USSR 17.10.2012 03:43

зачем булево по OLE передавать, если загружаемое значение явно зависит от базы источника?
Если в источнике
в OLE - истина
Иначе
в OLE - ложь
КонецЕсли
Если бы данные загружались из файла - другое дело.
Там можно использовать внутреннее представление:
**"B",1** и **"B",0**
я загружал именно так, без всяких **

USSR 17.10.2012 03:45

блин и у меня левая фигурная скобка заменилась двумя звездочками ((

US1C 17.10.2012 15:56

(19) Как пример. Подключился к базе 8.2, получил данные и закрываю OLE-базу - V8.ЗавершитьРаботуСистемы(). Если в параметре метода не указать "Ложь", появится окно с запросом на закрытие программы. Пока не ткнешь на Да - не будет отрабатывать дальше. А баз таких - несколько десятков и будет больше. Вот такая автоматизация получается, сиди и тыкай мышой в цикле.

USSR 18.10.2012 01:39

(21)Одно дело передать из 7-ки, другое дело закрыть 8-ку
1 - попробуй просто с V8.ЗавершитьРаботуСистемы(V8.Перечисления.Булево.Да).

US1C 18.10.2012 09:38

(22) А нет такого перечисления. По крайней мере в БП 2.0

USSR 18.10.2012 09:54

(23)Да, что то я наврал, есть просто тип "Булево" со значениями ложь и истина. Но попробуй просто (1). При работе из 7-ки с вордом или опенофисом было по барабану

user1C 18.10.2012 10:00

ПрекратитьРаботуСистемы не пойдет?

US1C 18.10.2012 11:31

(24) Как уже писал ранее, 0 -1 - не передаются корректно в параметре, требующем булево. Пишет что-то вроде "несоответствие типов".
(25) Так получилось закрыть 8-ку. Правда не обошлось без ошибки при выполнении этого метода:
V8.ПрекратитьРаботуСистемы();
{D:\1C_BASE\РЕКВИЗИТЫ_1\EXTFORMS\СОБРАТЬОБОРОТЫ_V8.ERT(311)**: Неизвестная ошибка
Но вопрос про передачу булева так и не решен. Как например, управлять настройками пользователей, где некоторые настройки принимают значение ЛОЖЬ/ИСТИНА?

USSR 18.10.2012 15:20

(26)Как тупой вариант, определи в 8-ой базе глобальные переменные Ложь и Истина и их используй. Может есть что-то и поумнее

USSR 18.10.2012 15:24

непонятно почему не проканало ЗначениеИзСтрокиВнутр, ты писал именно V8.ЗначениеИзСтрокиВнутр() ? это надо делать в 8-ой базе

US1C 18.10.2012 15:32

(27) Вносить изменения в конфигурацию хреновой кучи баз не хочется.
(28) Да, именно с V8 выполнял код. В 7.7 это вызовет ошибку.

USSR 18.10.2012 16:23

странно, вот код с инфостарта, товарищ радуется что все работает:
перем ИСТИНА_8

перем ЛОЖЬ_8

ИСТИНА_8=СоединениеСбАЗОЙ8.ЗначениеИзСтрокиВнутр("**""B"",1**")

ЛОЖЬ_8 = СоединениеСбАЗОЙ8.ЗначениеИзСтрокиВнутр("**""B"",0**")

US1C 19.10.2012 13:26

(30) Товарищу повезло.
У меня не отрабатывает ни:
V8.ЗавершитьРаботуСистемы(V8.ЗначениеИзСтрокиВнутр("**""B"",0**"));
ни:
Перем Ложь;
Ложь = V8.ЗначениеИзСтрокиВнутр("**""B"",0**");
V8.ЗавершитьРаботуСистемы(Ложь);

СthuIhu 19.10.2012 13:35

(31): пробелы потерял?..

US1C 19.10.2012 13:41

(32) ?


Текущее время: 01:00. Часовой пояс GMT +3.