Как определить наличие в конфигурации процедуры/функции..?

Автор Злоп, 30 января 2025, 14:51

« назад - далее »

Злоп

Причем в режиме выполнения и не исполняя собственно процедуру/функцию..?

Arbuz


Arbuz

1С++  ;)
Информатор.МетодСуществует(Контекст, "ПриОткрытии")

Но работает только для процедур/функций непосредственно из контекста.
Как получить контекст глобальника, я не знаю. И как получить экспортные методы, тоже не знаю.

АЛьФ

Проверить в каком-то конкретном модуле надо?
Можно попробовать через 1С++::ВыполняемыйМодуль. Скормить текст модуля с вызовом нужной процедуры. Если не скомпилится, то нет такой.

Arbuz

Цитата: АЛьФ от 04 февраля 2025, 15:43Можно попробовать через 1С++::ВыполняемыйМодуль.
Но надо же будет соблюдать число параметров, или нет?

АЛьФ

Цитата: Arbuz от 04 февраля 2025, 16:21
Цитата: АЛьФ от 04 февраля 2025, 15:43Можно попробовать через 1С++::ВыполняемыйМодуль.
Но надо же будет соблюдать число параметров, или нет?

Надо будет. Поэтому ждем полную постановку задачи.

Arbuz

Вот:
Функция МетодСуществует(пМетод, пКонтекст = "")
	_модуль  = СоздатьОбъект("ВыполняемыйМодуль");
	_модуль.УстановитьМодуль("
	|Функция __Тест()
	|	" + пМетод + "()
	|КонецФункции"
	);
	_модуль.НазначитьКонтекст(пКонтекст);
	Попытка
		_модуль.КомпилироватьИВыполнитьМодуль();
		Возврат 1;
	Исключение
		Если Найти(ОписаниеОшибки(), "Недостаточно фактических параметров") > 0 Тогда
			Возврат 1;
		Иначе
			Возврат 0;
		КонецЕсли;
	КонецПопытки;
КонецФункции

Если не передавать контекст, то проверяет только на экспортные методы глобальника.
Как проверять глобальник на приватные — ума не приложу, т.к. контекст глобальника это что-то очень специфическое.

ЗЫ: Проверять типа так Сообщить(МетодСуществует("ПриОткрытии", Контекст));

Злоп

Через попытка исключение не пойдет ибо если процедуры нет, то обрушится на синтаксическом контроле при открытии модуля выполнения.

Злоп

Можно сузить, считая что интересуют только экспортные процедуры/функции ГМ.

Arbuz

Цитата: Злоп от 04 февраля 2025, 22:57Через попытка исключение не пойдет ибо если процедуры нет, то обрушится на синтаксическом контроле при открытии модуля выполнения.
Расшифруй задачу

Злоп

Ну, например, пишу универсальную обработку, на форме - ТЗ.
На ней кнопка "Печать". Да, можно вкорябать по быстрому простенькую печать ТЗ.
Но, обычно, во многих конфигах есть функция/процедура типа глПечатьТЗ, поэтому
хочется типа
Если ЕстьПроцедура(ИмяПроцедурыФункции)=1 Тогда
  ВыполнитьПроцедуру(ИмяПроцедуры);
.
чтобы не ругалось на синтаксис если где-то впрямую пишем имя процедуры/функции, которой сожет и не быть в ГМ - можно, наверное, через Шаблон как-то проверять.
.

Злоп


Злоп

И ну его нафиг эти клюшки.
И снеговик туда же.

Харлампий Дымба

Так никогда нельзя быть уверенным, что глПечатьТЗ конкретно в этой конфе делает именно то, что тебе нужно. Может она рисует "главную печать" фирмы на переданном в функцию "техзадании" и делает e-mail рассылку готового ТЗ по всем подрядчикам.
Так что - всё своё приходится носить с собой, раз уж обработка универсальная...

Злоп

Тогда надо делать обработку-контейнер с функциями/процедурами и макетами. Типа БСП.