Изменение данных среды выполнения «на лету» в процессе отладки с помощью внешней обработки

Иногда бывают такие моменты, что при остановке во время отладки необходимо «на лету» поменять какое-то значение реквизита или переменной. Или даже выполнить какой-то совершенно посторонний кусок кода в то время пока программа стоит на точке.

Осуществить это желание довольно просто.

Достаточно создать внешнюю обработку(можно даже без формы) и в модуле объекта прописать вот такую экспортную(это обязательно!) функцию:


Функция ИсполнитьКод(ТекстКода, Параметр=»»,Ответ=»ОК») Экспорт
    Попытка
        Выполнить(ТекстКода);
    Исключение
        Ответ= «!!!Ошибка выполнения внешнего кода!!!…»+ОписаниеОшибки();
    КонецПопытки;
    Возврат Ответ;
КонецФункции 


По принимаемым параметрам:

 

  1. ТекстКода. – тут все понятно. Это произвольный текст на встроенном языке, желательно без синтаксических и логических ошибок : — ).В случае ошибки получите в возврате текст  ««!!!Ошибка выполнения внешнего кода!!!…»» и т.д.
  1. Параметр. – сюда можете передавать всякие всякости, доступные в текущем контексте, над которыми нужно поиздеваться и менять их значения пока стоит точка останова.
  2. Ответ. – По умолчанию равен «ОК» и если все прошло штатно и ничего не надо было возвращать для «посмотреть»  в табло, то «ОК» и  вернется при вызове. В случае ошибки — см. выше.

Теперь собственно сам главный финт ушами – как этим безобразием пользоваться.

 

Создадим внешнюю обработку с вышеуказанной процедурой и сохраним ее скажем вот так:

«E:execute.epf»

Когда сработала точка останова, в табло пишем вызов с произвольной строкой кода.

Допустим вот такое традиционное:

 

ВнешниеОбработки.Создать(«E:execute.epf»).Исполнить(«Ответ=»»Hello, world!»»»)


Имеем вот такой результат:

Т.е. функция, выполняя ваш посланный код, присвоила переменной Ответ строку «Hello, world!» и отправила вам же обратно в возврате. На этом примере понятен принцип: если хотим увидеть какой-то результат в табло при вызове функции, то надо в передаваемом коде присвоить переменной Ответ его значение. Оно вернется как результат выполнения функции и отобразится в табло. Если ничего не будем присваивать переменной Ответ, то при успешном выполнении вернется «ОК»

 Поле применения этого метода довольно широкое.

Допустим вас не устраивает текущее значение реквизита документа, которое приводит в последствии к ошибке.

 Тогда просто передаем в параметр текущий документ объект и в обработке над ним издеваемся, как хотим.

 

Предположим мы хотим поменять дату объекта документ в момент отладки.

Пишем в табло:


ВнешниеОбработки.Создать(«E:execute.epf»).Исполнить(«Параметр.Дата =’20131231235959′»,ЭтотОбъект)

 

Видим результат ДО

и ПОСЛЕ (Для отображения нового значения даты надо «перещелкнуть» сроку с ЭтотОбъект.Дата)

 

Таким же способом можно менять на лету значение переменных, констант да и вообще чего угодно, до чего можно добраться кодом.

Вот такие пироги с котятами.: -)

Надеюсь кому-то это будет интересным и полезным.

6 Comments

  1. ksvd

    Кавычки надо поменять на «

    в

    Ответ= «!!!Ошибка выполнения внешнего кода!!!…»+ОписаниеОшибки();

    А для какой это конфигурации?

    У меня в табло пишет:

    {(1,1)}: Переменная не определена (ВнешниеОбработки)

    Reply
  2. Franco

    (0)

    Ошибся, наверное, в

    ВнешниеОбработки.Создать(«E:execute.epf»).Исполнить(«Параметр.Дата =’20132131235959′»,ЭтотОбъект)

    20132131235959

    21-ый месяц 2013-го года.

    За идею спасибо!

    Reply
  3. Franco

    (1) ksvd, Для выполнения на сервере

    Глобальный контекст (Global context)

    ВнешниеОбработки (ExternalDataProcessors)

    Использование:

    Только чтение.

    Описание:

    Тип: ВнешниеОбработкиМенеджер.

    Используется для доступа к внешним обработкам.

    Доступность:

    Сервер, толстый клиент, внешнее соединение.

    Reply
  4. ksvd

    Понял, выполнять только под толстым клиентом. Жалко.

    И название функции в обработке тогда уже не ИсполнитьКод, а Исполнить

    Reply
  5. artbear

    (0) Давно известный прием.

    Например, автор «Инструментов разработчика» кучу лет назад выкладывал свою статью об этом

    Reply
  6. tormozit

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *