Получить идентификатор перечисления по OLE? Проблема такая, подключаюсь обработкой из базы 7.7 к 8.2 по OLE. Как получить идентификатор значения перечисления? Из 7-ых баз я делаю таким способом: СЗ_Субк.ДобавитьЗначение(СокрЛП(Ит.Субконто(1).ВидДвижения.Идентификатор())); Где Ит - бухитоги OLE-базы. Как это-же сделать с 8-ой - не пойму. |
Если нигде не наврал... ПеречислениеСсылка.Метаданные().ЗначенияПеречисления[ПеречислениеМенеджер.Индекс(ПеречислениеСсылка)] |
Но всё же XMLstring гораздо удобнее... |
А что дает XMLСтрока(<Значение>). например OLE.XMLСтрока(Ит.Субконто(1).Вид Движения.Идентификатор()); ? |
(1) Что-то так и не примастырил это выражение. Можно на примере моей переменной показать? Стр.Получить(1).ВидДвиженияДенежныхСредств где Стр - строка ТЗ из OLE-базы, ВидДвиженияДенежныхСредств - реквизит типа -"Перечисление.ВидДвиженияДенежныхСредств". |
(3) V8.XMLСтрока(Стр.Получить(1).ВидДвиженияДенежныхСредств.Идентификатор()) = Ошибка в выражении! |
(3) А вот так получилось: V8.XMLСтрока(Стр.Получить(1).ВидДвиженияДенежныхСредств) = "ПрочиеРасходыПоТекущейДеятельности" Спасибо за идею и участие. |
Не парься :) Больно громоздкое сооружение будет, да и не факт что написано правильно - писал по памяти. OLE_ЗначениеПеречисления = Стр.Получить(1).ВидДвиженияДенежныхСредств; OLE_ЗначениеПеречисления .Метаданные().ЗначенияПеречислен ия[OLE.Перечисления.Менеджер.ВидДвиженияДенежныхСредств(OLE_ЗначениеПеречисления )] Сильно монструозно... Гораздо приятнее так: СтроковойИдентификатор = OLE.XMLСтрока(Стр.Получить(1).ВидДвиженияДенежныхСредств) (3) Скормить системное перечисление? Выдаст идентификатор в английском представлении. |
(1,3) Еще вопрос, до кучи, можно? Как передать Булево (Ложь, Истина) в 8-ку из 7.7? |
Через преобразование к числу туда-обратно. Как вариант. |
(9) Не проходит. Передаю: V8.ЗавершитьРаботуСистемы(0) - ошибка при выполнении. V8.ЗавершитьРаботуСистемы(V8.Булево(0)) - тоже не канает. |
чо вы такие не адекватные ? |
8-US1C > Булево - в семёрке это "Да/Нет". Передаваться должно напрямую, т.к. это простой тип данных. |
(11) А что по этому поводу думают адекватные? Вопрос все еще в силе. (12) Неа. Да/Нет в семерке - это значения перечисления, которые делают глобальными переменными и используют как булево. А значения всех перечислений для другой базы - вещь непонятная. В 8-ке да, это примитивный тип данных, но по OLE все равно не передается. Только число, строка, дата. Кстати, 0 и -1 тоже не проканало передать булево. И ЗначениеИзСтрокиВнутр("**""B"",0**") - тоже не прошло. Хотелось бы услышать новые варианты/идеи передачи булево в 8-ку из 7.7. |
К (13) Извиняюсь, хотел написать: ЗначениеИзСтрокиВнутр("**""B"",0**") |
(14) так пробовал? V8.ЗавершитьРаботуСистемы(V8.ЗначениеИзСтрокиВнутр("**""B"",0**")) |
(15) Да. Именно так пробовал. |
13-US1C > "Хотелось бы услышать новые варианты/идеи передачи булево в 8-ку из 7.7" - Ну, передавай как текст, как вариант... "Истина", "Ложь" |
(17) Была и такая попытка. Эффект - 0. |
зачем булево по OLE передавать, если загружаемое значение явно зависит от базы источника? Если в источнике в OLE - истина Иначе в OLE - ложь КонецЕсли Если бы данные загружались из файла - другое дело. Там можно использовать внутреннее представление: **"B",1** и **"B",0** я загружал именно так, без всяких ** |
блин и у меня левая фигурная скобка заменилась двумя звездочками (( |
(19) Как пример. Подключился к базе 8.2, получил данные и закрываю OLE-базу - V8.ЗавершитьРаботуСистемы(). Если в параметре метода не указать "Ложь", появится окно с запросом на закрытие программы. Пока не ткнешь на Да - не будет отрабатывать дальше. А баз таких - несколько десятков и будет больше. Вот такая автоматизация получается, сиди и тыкай мышой в цикле. |
(21)Одно дело передать из 7-ки, другое дело закрыть 8-ку 1 - попробуй просто с V8.ЗавершитьРаботуСистемы(V8.Перечисления.Булево.Да). |
(22) А нет такого перечисления. По крайней мере в БП 2.0 |
(23)Да, что то я наврал, есть просто тип "Булево" со значениями ложь и истина. Но попробуй просто (1). При работе из 7-ки с вордом или опенофисом было по барабану |
ПрекратитьРаботуСистемы не пойдет? |
(24) Как уже писал ранее, 0 -1 - не передаются корректно в параметре, требующем булево. Пишет что-то вроде "несоответствие типов". (25) Так получилось закрыть 8-ку. Правда не обошлось без ошибки при выполнении этого метода: V8.ПрекратитьРаботуСистемы(); {D:\1C_BASE\РЕКВИЗИТЫ_1\EXTFORMS\СОБРАТЬОБОРОТЫ_V8.ERT(311)**: Неизвестная ошибка Но вопрос про передачу булева так и не решен. Как например, управлять настройками пользователей, где некоторые настройки принимают значение ЛОЖЬ/ИСТИНА? |
(26)Как тупой вариант, определи в 8-ой базе глобальные переменные Ложь и Истина и их используй. Может есть что-то и поумнее |
непонятно почему не проканало ЗначениеИзСтрокиВнутр, ты писал именно V8.ЗначениеИзСтрокиВнутр() ? это надо делать в 8-ой базе |
(27) Вносить изменения в конфигурацию хреновой кучи баз не хочется. (28) Да, именно с V8 выполнял код. В 7.7 это вызовет ошибку. |
странно, вот код с инфостарта, товарищ радуется что все работает: перем ИСТИНА_8 перем ЛОЖЬ_8 ИСТИНА_8=СоединениеСбАЗОЙ8.ЗначениеИзСтрокиВнутр("**""B"",1**") ЛОЖЬ_8 = СоединениеСбАЗОЙ8.ЗначениеИзСтрокиВнутр("**""B"",0**") |
(30) Товарищу повезло. У меня не отрабатывает ни: V8.ЗавершитьРаботуСистемы(V8.ЗначениеИзСтрокиВнутр("**""B"",0**")); ни: Перем Ложь; Ложь = V8.ЗначениеИзСтрокиВнутр("**""B"",0**"); V8.ЗавершитьРаботуСистемы(Ложь); |
(31): пробелы потерял?.. |
(32) ? |
Текущее время: 01:00. Часовой пояс GMT +3. |