Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 сен 2024, 04:25

Получить значение константы 1С8.2 через OLE

Автор NikOzn, 17 мар 2012, 12:19

0 Пользователей и 1 гость просматривают эту тему.

Dethmontt

Попробуй через набор:
ArrayConst_OLE := OLE1C.Константы.СоздатьНабор("Руководитель");
Val_Cons_OLE := ArrayConst_OLE.Руководитель;

И немного уточним ----
OLE1C.Константы - И ЕСТЬ МЕНЕДЖЕР КОНСТАНТ

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

NikOzn

Блин! Коряво написал.

Короче, заработало при такой функции:

Функция ПолучитьЗначениеКонстанты_OLE(ИмяМоейКонстанты) Экспорт
   Возврат Константы[ИмяМоейКонстанты].Получить();
КонецФункции

Спасибо, Dethmontt, за очень полезную наводку!!!

NikOzn

Что-то у меня хвосты сообщений стали обрезаться!
Вообщем, подсказки помогли!!! Спасибо!

Dethmontt

И что то не понятно почему ты можешь обратиться вот так OLE1C.Константы (Причем константы у тебя не строка)
А вот OLE1C.Константы.Руководитель.Получить() (Руководитель уже строка)


КонстантыМенеджер (ConstantsManager)
<Имя константы> (<Constant name>)
Использование:

Только чтение.
Описание:

Тип: КонстантаМенеджер.
Набор свойств содержит константы конфигурации. Доступ к значению осуществляется по имени. Имена свойств совпадают с именами констант, как они заданы в конфигураторе.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

NikOzn

Цитата: Dethmontt от 17 мар 2012, 18:13
Попробуй через набор:
ArrayConst_OLE := OLE1C.Константы.СоздатьНабор("Руководитель");
Val_Cons_OLE := ArrayConst_OLE.Руководитель;

И немного уточним ----
OLE1C.Константы - И ЕСТЬ МЕНЕДЖЕР КОНСТАНТ
Строчка ArrayConst_OLE := OLE1C.Константы.СоздатьНабор("Руководитель"); нормально проглатывается компилятором Delphi и дает реальную ссылку (но только вместо "Руквоводитель" используется переменная Delphi, содержащая идентификатор константы). А вот следующая строчка уже непригодна для языка Delphi. Если это набор, то надо тогда попробовать его прошерстить в цикле. Вообщем, задачка для домашнего задания. Повожусь.

Dethmontt

Если же переменная "ConstName" определяется где то до выполнения функции как string то юзай "СоздатьНабор()"
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

NikOzn

Цитата: Dethmontt от 17 мар 2012, 18:18
И что то не понятно почему ты можешь обратиться вот так OLE1C.Константы (Причем константы у тебя не строка)
А вот OLE1C.Константы.Руководитель.Получить() (Руководитель уже строка)


КонстантыМенеджер (ConstantsManager)
<Имя константы> (<Constant name>)
Использование:

Только чтение.
Описание:

Тип: КонстантаМенеджер.
Набор свойств содержит константы конфигурации. Доступ к значению осуществляется по имени. Имена свойств совпадают с именами констант, как они заданы в конфигураторе.

Доступность:

Сервер, толстый клиент, внешнее соединение.

Тут все просто! Константа - это штука, которая в объекте OLE1C воспринимается как объект 1С, что реально так и есть. Он понятен на уровне программной среды. А поле "Руководитель" - это уже прикладной парметр, который в OLE не реализован, и он в прикладных языках - просто строка. Если бы в языке 1С был объект Руководитель (такой же, как Константы, Документы и т.д.), то его можно было бы использовать в командах.

NikOzn

Да!!! К слову, до меня дошло еще вот что. Если бы я писал программу для каждой отдельной константы, и заранее знал бы все их идентификаторы, то вполне мог бы применять конструкцию типа OLE1C.Константы.Руководитель.Получить()! Тут ты абсолютно прав в своем недоумении. Но такие программы никто никогда писать не станет!
Поэтому я имею переменную АляКтоУгодно, которой я присваиваю конкретное имя константы, например Руководитель, когда об этом узнаю из структуры метаданных. А вот уже это конкретное имя получается в виде строки. Я доходчиво объяснил?

Dethmontt

Ну еще как вариант через запрос, хотя я не разу не пробовал из внешнего соединения создавать Объект.
query_OLE := OLE1C.NewObject("Query");
query_OLE.Text = "Select Con.Значение AS Val FROM Константы."+ConstName+" AS Con";
va := query_OLE.Execute().Choose();
va.Next();
Value_OLE = va.Val;
//Value_OLE = значение твоей константы
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск