Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
14 Дек 2017, 09:26
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Получить значение константы 1С8.2 через OLE  (Прочитано 13719 раз)

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

Оффлайн NikOzn

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-01-17
  • Сайт: 
  • Профессия: Ученик 1С
Извиняюсь, что много букав (достало!).

Хочу получить значение константы 1С8.2 через OLE и начинаю разбор ситуации.
Для этого создаю FOle_1C8 - объект доступа к 1С8.2 (в моем наблюдении неважно, через V82.Application или V82.COMConnector). Под объектом я пока подразумеваю что угодно.
Далее выбираю объект FMeta8_Ole := FOle_1C8.Метаданные.Константы; (код Delphi).
Но теперь я уже интересуюсь тем, к какому типу объектов (может классов объектов – не поймешь в вашей каше из 1С !!!) относится вещь FMeta8_Ole, для чего запрашиваю это у самого 1С через конструкцию
FOle_1C8.String(FMeta8_Ole), на что получаю ответ: КоллекцияОбъектовМетаданных;

Пока все логично.

Перебираю в цикле элементы этой коллекции и помещаю их в список.
Тыкнув в произвольную строку этого списка, я должен получить идентификатор элемента этой коллекции (в список помещены именно идентификаторы), и соответствующий элемент должен относиться к какому-нибудь классу или типу 1С. Так я думаю, но ситуация дальше только запутывает меня в понятиях. Чтобы не запутаться, обращаюсь к справке Синтакс-Помощника (название-то какое придумали!!!), набираю в строке Индекс слово Константы, ожидая увидеть что это за объект и что у него за возможности, а главное, как получить на него ссылку через идентификтор из моего списка.
Ничего не нахожу, кроме пустых слов о том, что эта штука в свою очередь коллекция объектов, «которые описывают все константы, определенные в конфигурации». Есть ли у него свойства или методы – полный молчок!!! Выходит эта вешь – фантом, бесполезный объект! Как она может описывать что-нибудь, если у него нет ни свойств, ни методов!

Но разработчики слукавили!
По аналогии со справочниками (а я именно с них начинал близкое знакомство с 1С), подсовываю объекту FMeta8_Ole метод Получить(), он его съедает и выдает какую-то ссылку F1C8_Obj := FMeta8_Ole.Найти(sIdRef);
Здесь я в sIdRef закладываю идентификатор элементов коллекции FOle_1C8.Метаданные.Константы из вышеуказанного списка, конкретно это был Алгоритм подписывания. Т.е. тем самым я получаю подтверждение, что у объекта Константы есть хотя бы метод Получить(). Синтакс-Помощник об этом ничего не знает! Крайне невежливо со стороны разработчиков 1С. Но я ведь должен был получить что-то относительно элемента, который называется Константа! На запрос Константа Синтакс-Помощник беспомощно отвечает, что это тип Картинка из БиблиотекаКартинок. Конгениальная подсказка!

Но мне нужно решить задачу, поэтому я интересуюсь тем, что же за объект я получил, чтобы потом уже все-же обратиться к Синтакс-Помощнику. Запрашиваю FOle_1C8.String(F1C8_Obj), и получаю конкретный ответ Алгоритм подписания. Т.е. я не получаю никакого ответа, потому что это просто синоним чего-то!!! Но чего – от меня скрывают. Это уже грубо!

Погуглив, нахожу, что значение константы можно узнать следующим образом
   Константы.НазваниеОрганизации.Получить(),
но что за объект Константы.НазваниеОрганизации – я не знаю (в моем случае это должно быть что-то типа КонстантаМенеджер.АлгоритмПодписывания). Порывшись в Синтакс-Помощнике, нахожу, что метод Получить() имеет КонстантаМенеджер.<Имя константы>, что тоже не дает ответа на вопрос, что за объект скрывается под КонстантаМенеджер!

Так вот вопрос: после какого-такого загадочнго КонстантаМенеджер я должен поставить через точку идентификатор конкретной константы, чтобы потом дать ему команду Получить()? Как мне от объекта OLE FOle_1C8 прошагать к этому загадочному КонстантаМенеджер? За эту кашу с понятиями я основательно перестаю уважать как 1С, так и их разработчиков. Но это черная лирика, которую не я спровоцировал. А мне нужен ответ на поставленный вопрос.

Могут ли его мне дать гуру по 1С?
Подчеркиваю, что мне нужно от объекта OLE, созданного через V82.Application или V82.COMConnector, добраться до объекта КонстантаМенеджер. Дальше я надеюсь самостоятельно решить задачу с дополнением его до КонстантаМенеджер.<Имя константы> и уже скомандовать Получить(). Поскольку я работаю с 1С через Delphi, то предполагаю, что мне придется еще дополнить конфигурацию соответствющей функцией, т.к. я пока не знаю, как иначе передать строку <Имя константы> в объект OLE.

Спасибо?


Оффлайн NikOzn

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-01-17
  • Сайт: 
  • Профессия: Ученик 1С
Прошу извинить, в том месте, где написано ....FMeta8_Ole метод Получить()...., надо исправить на FMeta8_Ole метод Найти(), и далее в этом абзаце речь идет именно о методе Найти().

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
А так тебя не устроит?
FVal_Const_Ole := FOle_1C8.Константы.<ИмяТвоейКонстанты>.Получить();

Через FMeta8_Ole и функции Найти() ты можешь проверить, а существует ли в колекции FMeta8_Ole искомая тобой константа
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн NikOzn

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-01-17
  • Сайт: 
  • Профессия: Ученик 1С
Я это пробовал делать, но пока безуспешно.
А именно, я запросил объекты
  v := OLE1C.Метаданные.Константы.Найти('' + ConstName); - это объект, описывающий конкретную константу
  wS := v.Имя; - это его идентификатор
  wEvalS := OLE1C.ПолучитьЗначениеКонстанты_OLE(v, wS); - эту функцию я сам дописал в конфигураторе.
Может быть, она неверная, но пока не знаю, как ее исправить.

Выглядит она очень просто:

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

В ответ на обращение к ней я получаю ошибку: Общий модуль.ozLib_Soft: Поле объекта не обнаружено (ИмяКонстанты). Может быть, подскажете, как ее исправить. Тогда я получил бы то, что хотел.
Спасибо!

Оффлайн NikOzn

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-01-17
  • Сайт: 
  • Профессия: Ученик 1С
При посте я уже увидел, что выложил не то, что было.
Функция такая:
// Получить значение константы
Функция ПолучитьЗначениеКонстанты_OLE(МояКонстанта, ИмяМоейКонстанты) Экспорт
   Возврат МояКонстанта.ИмяМоейКонстанты.Получить();
КонецФункции

Но она дает именно ту ошибку, что я описал: Поле объекта не обнаружено (ИмяМоейКонстанты)

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
Если ИмяКонстанты имеет тип string
Функция ПолучитьЗначениеКонстанты_OLE(Константа, ИмяКонстанты) Экспорт
   Возврат Константы[ИмяКонстанты].Получить();
КонецФункции
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн Dethmontt

  • Денис
  • Модератор
  • *****
  • Сообщений: 2857
  • РЕПУТАЦИЯ: 546
  • КПД: 19%
  • Адын Эс
  • Регистрация: 2010-11-01
  • Сайт: 
  • Профессия: Программист 1С
А что вот так не работает?
wEvalS := OLE1C.Константы.ИмяКонстанты.Получить();
Или
wEvalS := OLE1C.Константы[ConstName].Получить();
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Оффлайн NikOzn

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-01-17
  • Сайт: 
  • Профессия: Ученик 1С
А что вот так не работает?
wEvalS := OLE1C.Константы.ИмяКонстанты.Получить();
Или
wEvalS := OLE1C.Константы[ConstName].Получить();

Это все через OLE не работает. Реально надо писать примерно так:
OLE1C.Константы.Руководитель.Получить();

Но я же нахожусь в программе Delphi, а там Рувоводитель - это уже просто строка, которая в объекте OLE1C.Константы не может быть использована. Поэтому и приходится в конфигуратор добавлять функцию, которая это делает, и уже возвращает объект, понятный для OLE. Точно также конструкции с индексами в квадратных скобках [] компиляторы языков воспринимают как свои объекты, и они не могут использоваться для объектов OLE. Поэтому мне сейчас остается одно: докручивать функцию ПолучитьЗначениеКонстанты_OLE так, чтобы она возвращала FOle_1C8.Константы.<ИмяМоейКонстанты>.Получить(); Пока не добился результатов.

Но от гуру 1С я ожидал получить более фундаментальную подсказку, которая прямо из OLE давала бы мне возможность достучаться, скажем, до Менеджера значений или что-нибудь аналогичное.

Оффлайн NikOzn

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-01-17
  • Сайт: 
  • Профессия: Ученик 1С
[
wEvalS := OLE1C.Константы[ConstName].Получить();
[/quote]
Эта вещь уже интересная! Надо ее впихнуть в функцию ПолучитьЗначениеКонстанты_OLE. Вдруг сработает.

Оффлайн NikOzn

  • *
  • Сообщений: 17
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-01-17
  • Сайт: 
  • Профессия: Ученик 1С
Заработало вот с такой функцией в конфигураторе:
Функция ПолучитьЗначениеКонстанты_OLE(ИмяМоейКонстанты) Экспорт
   Возврат Константы[ИмяМоейКонстанты].Получить();
КонецФункции

Спасибо за наводку!!!


Теги:
 

Значение "00000000001" поля "Код" не уникально

Автор gigsonРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 6854
Последний ответ 24 Ноя 2014, 12:21
от gigson
Получить номер недели в месяце в запросе [номер недели]

Автор MuI_I_IkaРаздел Алгоритмы

Ответов: 0
Просмотров: 4139
Последний ответ 15 Июл 2015, 18:24
от MuI_I_Ika
Как объединить объект в реквизите формы с типом "ДокументОбъект" и объект формы, созданной через "ПолучитьФорму()"?

Автор acces969Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 242
Последний ответ 06 Авг 2017, 21:22
от alex0402
Значение поля "Владелец" не заполнено или заполнено неверно

Автор ReclaimРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 3226
Последний ответ 16 Ноя 2015, 09:36
от cska-fanat-kz
Как в СКД вычислить значение ресурса для группировки по значениям ресурса нижестоящей группировки

Автор ОтцовскийРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 965
Последний ответ 23 Ноя 2016, 12:53
от sertak

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
180 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
51 Сообщений
alex0402
49 Сообщений
andron81_81
40 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
34 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
29 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 701
  • Точка Скрытых: 0
  • Точка Пользователей: 18
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal