|   |   | 
| 
 | Запуск процедур по динамическому имени? | ☑ | ||
|---|---|---|---|---|
| 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 | 
        (14) взял из v8: справочник внешние обработки     | |||
| 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) ткнули носом в нужном  направлении.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |