Осуществить это желание довольно просто.
Достаточно создать внешнюю обработку(можно даже без формы) и в модуле объекта прописать вот такую экспортную(это обязательно!) функцию:
Функция ИсполнитьКод(ТекстКода, Параметр=»»,Ответ=»ОК») Экспорт
Попытка
Выполнить(ТекстКода);
Исключение
Ответ= «!!!Ошибка выполнения внешнего кода!!!…»+ОписаниеОшибки();
КонецПопытки;
Возврат Ответ;
КонецФункции
По принимаемым параметрам:
- ТекстКода. – тут все понятно. Это произвольный текст на встроенном языке, желательно без синтаксических и логических ошибок : — ).В случае ошибки получите в возврате текст ««!!!Ошибка выполнения внешнего кода!!!…»» и т.д.
- Параметр. – сюда можете передавать всякие всякости, доступные в текущем контексте, над которыми нужно поиздеваться и менять их значения пока стоит точка останова.
- Ответ. – По умолчанию равен «ОК» и если все прошло штатно и ничего не надо было возвращать для «посмотреть» в табло, то «ОК» и вернется при вызове. В случае ошибки — см. выше.
Теперь собственно сам главный финт ушами – как этим безобразием пользоваться.
Создадим внешнюю обработку с вышеуказанной процедурой и сохраним ее скажем вот так:
«E:execute.epf»
Когда сработала точка останова, в табло пишем вызов с произвольной строкой кода.
Допустим вот такое традиционное:
ВнешниеОбработки.Создать(«E:execute.epf»).Исполнить(«Ответ=»»Hello, world!»»»)
Имеем вот такой результат:
Т.е. функция, выполняя ваш посланный код, присвоила переменной Ответ строку «Hello, world!» и отправила вам же обратно в возврате. На этом примере понятен принцип: если хотим увидеть какой-то результат в табло при вызове функции, то надо в передаваемом коде присвоить переменной Ответ его значение. Оно вернется как результат выполнения функции и отобразится в табло. Если ничего не будем присваивать переменной Ответ, то при успешном выполнении вернется «ОК»
Поле применения этого метода довольно широкое.
Допустим вас не устраивает текущее значение реквизита документа, которое приводит в последствии к ошибке.
Тогда просто передаем в параметр текущий документ объект и в обработке над ним издеваемся, как хотим.
Предположим мы хотим поменять дату объекта документ в момент отладки.
Пишем в табло:
ВнешниеОбработки.Создать(«E:execute.epf»).Исполнить(«Параметр.Дата =’20131231235959′»,ЭтотОбъект)
Видим результат ДО
и ПОСЛЕ (Для отображения нового значения даты надо «перещелкнуть» сроку с ЭтотОбъект.Дата)
Таким же способом можно менять на лету значение переменных, констант да и вообще чего угодно, до чего можно добраться кодом.
Вот такие пироги с котятами.: -)
Надеюсь кому-то это будет интересным и полезным.
Кавычки надо поменять на «
в
Ответ= «!!!Ошибка выполнения внешнего кода!!!…»+ОписаниеОшибки();
А для какой это конфигурации?
У меня в табло пишет:
{(1,1)}: Переменная не определена (ВнешниеОбработки)
(0)
Ошибся, наверное, в
ВнешниеОбработки.Создать(«E:execute.epf»).Исполнить(«Параметр.Дата =’20132131235959′»,ЭтотОбъект)
20132131235959
21-ый месяц 2013-го года.
За идею спасибо!
(1) ksvd, Для выполнения на сервере
Глобальный контекст (Global context)
ВнешниеОбработки (ExternalDataProcessors)
Использование:
Только чтение.
Описание:
Тип: ВнешниеОбработкиМенеджер.
Используется для доступа к внешним обработкам.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Понял, выполнять только под толстым клиентом. Жалко.
И название функции в обработке тогда уже не ИсполнитьКод, а Исполнить
(0) Давно известный прием.
Например, автор «Инструментов разработчика» кучу лет назад выкладывал свою статью об этом