Имя: Пароль:
1C
 
Запуск процедур по динамическому имени?
0 aspirator23
 
10.08.15
15:57
Есть справочник внешних обработок. Открывая программно разные обработки, можно ли запускать их процедуры обращаясь по имени?
Мы обращаемся так Справочники["Номенклатура"]. Можно ли
подобное применить для запуска процедур?
Например, что-то подобное этому:
Процедура ЗапускВнешнейОбработки(КодОбрабоки,ИмяПроцедуры) Экспорт
ОбъектОбработка=Справочники.ВнешниеОбработки.НайтПоКоду(КодОбработки).ПолучитьОбъект();
ОбъектОбработка[ИмяПроцедры];
КонецПроцедуры

Команда Выполнить здесь похоже не подходит?
Понятно, что можно решить эту задачу традиционными способами.
1 ДенисЧ
 
10.08.15
16:05
F xtv Dsgjkybnm() yt gjl[jlbn&
2 ДенисЧ
 
10.08.15
16:05
Блин...
Чем Выполнить() не подходит?
3 aspirator23
 
10.08.15
16:06
Выполнить("Справочник.ВнешниеОбработки.НайтиПоКоду(""01"").МояПроцедура");

Так?
4 ДенисЧ
 
10.08.15
16:07
То есть за попробовать у тебя руки оторвут?
5 aspirator23
 
10.08.15
16:08
Проверяю, проверяю..
6 aspirator23
 
10.08.15
16:12
Не.. Не срабатывает
Так
Выполнить("Справочники.ВнешниеОбработки.НайтиПоНаименованию(""Проба"").МояПроцедура");
Ошибка компиляции

Так
Выполнить("Справочники.ВнешниеОбработки.НайтиПоНаименованию(""Проба"").МояПроцедура()");
Встроенный язык: Строка 1: Метод объекта не обнаружен (МояПроцедура)
7 vde69
 
10.08.15
16:17
Справочник[имяспр].мояпроцедура()
8 aspirator23
 
10.08.15
16:20
(7) Тут главная идея обратится по динамическому имени.
Т.е. МояПроцедура - это в этом примере так, а завтра хочу вызвать ТвояПроцедура, или "СоседскаяПроцедура".
9 vde69
 
10.08.15
16:22
Ааааа=справочник[имч]
выполнить("ааааа."+имяпроцедуры+"()")
10 Nuobu
 
10.08.15
16:22
(8) Если Твоей, моей или соседской процедуры там не будет, то не обратишься.
Оберни в попытку и вызывай по очереди.
11 aspirator23
 
10.08.15
16:24
(9) Это падает в (6) описано - второй случай
(10) Конечно, все процедуры в обработке есть. И Моя и твоя и соседская. Все они экспортные.
12 vde69
 
10.08.15
16:27
В 6 написан бред...
ты пытанся найти ссылку, у ссылки нет процедур

обращайся или к объекту или к менеджеру
13 sash-ml
 
10.08.15
16:28
так вызывай из внешней обработки а не из справочника, сохрани ее куда-нибудь из хранилища значений что ли
14 Nuobu
 
10.08.15
16:28
(11) ВнешОтчет = Справочники.ВнешниеОбработки.НайтиПоНаименованию("Рабочий стол (отчет)");
    Если ВнешОтчет <> Справочники.ВнешниеОбработки.ПустаяСсылка() Тогда
        ДвоичныеДанные = ВнешОтчет.ХранилищеВнешнейОбработки.Получить();
        ИмяФайла = ПолучитьИмяВременногоФайла();
        ДвоичныеДанные.Записать(ИмяФайла);
        
        Обработка = ВнешниеОтчеты.Создать(ИмяФайла);
        ВЫполнить("Обработка.ТвояПроцедура()");
    КонецЕсли;
15 Nuobu
 
10.08.15
16:29
16 aspirator23
 
10.08.15
16:32
(12) Ты прав. Тоже увидел. Изменил
Выполнить("Справочники.ВнешниеОбработки.НайтиПоНаименованию(""Проба"").ПолучитьОбъект().МояПроцедура");
Ошибки теже

(15) Спасибо, понял в чем ошибка.
17 vde69
 
10.08.15
16:42
(16)скобок нет, нельзя выполнить переменную
18 aspirator23
 
10.08.15
16:43
(17) Да, верно, (13) и (14) ткнули носом в нужном  направлении.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший